mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
114 lines
3.9 KiB
Markdown
114 lines
3.9 KiB
Markdown
# FeedForward - Прямая полносвязная сеть трансформера
|
||
|
||
> **Документ актуален для Simple-LLM v1.0 (июль 2025)**
|
||
|
||
---
|
||
|
||
**Краткое summary:**
|
||
Документ описывает модуль двухслойной прямой полносвязной сети (Feed Forward) в трансформерах. Включает алгоритм, пример использования, параметры и типовые ошибки.
|
||
|
||
---
|
||
|
||
**Структура документа:**
|
||
- Назначение
|
||
- Алгоритм работы
|
||
- Пример использования
|
||
- Параметры
|
||
- Особенности
|
||
- Типовые ошибки и их решения
|
||
|
||
---
|
||
|
||
## Назначение
|
||
Модуль реализует двухслойную нейронную сеть, которая:
|
||
- Добавляет нелинейность в трансформер
|
||
- Расширяет и сжимает представление
|
||
- Применяет dropout для регуляризации
|
||
|
||
## Алгоритм работы
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[Вход: x] --> B[Линейный слой: emb_size → 4*emb_size]
|
||
B --> C[Активация ReLU]
|
||
C --> D[Линейный слой: 4*emb_size → emb_size]
|
||
D --> E[Dropout]
|
||
E --> F[Выход]
|
||
```
|
||
|
||
1. **Расширение признаков**:
|
||
```python
|
||
h = W1 * x + b1 # W1: [emb_size, 4*emb_size]
|
||
```
|
||
|
||
2. **Нелинейность**:
|
||
```python
|
||
h = relu(h)
|
||
```
|
||
|
||
3. **Сжатие признаков**:
|
||
```python
|
||
out = W2 * h + b2 # W2: [4*emb_size, emb_size]
|
||
```
|
||
|
||
4. **Регуляризация**:
|
||
```python
|
||
out = dropout(out)
|
||
```
|
||
|
||
## Пример использования
|
||
```python
|
||
from simple_llm.transformer import FeedForward
|
||
|
||
# Инициализация
|
||
ff = FeedForward(emb_size=512, dropout=0.1)
|
||
|
||
# Прямой проход
|
||
x = torch.randn(1, 10, 512) # [batch, seq_len, emb_size]
|
||
output = ff(x) # [1, 10, 512]
|
||
```
|
||
|
||
## Параметры
|
||
| Параметр | Тип | Описание |
|
||
|------------|--------|------------------------------|
|
||
| `emb_size` | int | Размерность входных/выходных векторов |
|
||
| `dropout` | float | Вероятность dropout (0.0-1.0)|
|
||
|
||
## Рекомендации
|
||
- Dropout обычно выбирают 0.1–0.3
|
||
- Следите, чтобы emb_size совпадал с размерностью входа/выхода
|
||
- Используйте режимы train/eval корректно
|
||
- Для визуализации используйте [пример](/example/feed_forward_example.py)
|
||
|
||
---
|
||
|
||
## Типовые ошибки и их решения
|
||
|
||
### Ошибка: Размерности не совпадают при прямом проходе
|
||
**Возможные причины:**
|
||
- emb_size не совпадает с размерностью входных данных
|
||
|
||
**Решение:**
|
||
- Проверьте, что emb_size слоя FeedForward совпадает с размерностью последнего слоя перед ним
|
||
|
||
### Ошибка: Модель не обучается (loss не уменьшается)
|
||
**Возможные причины:**
|
||
- Dropout слишком высокий
|
||
- Ошибка в подключении слоя к модели
|
||
|
||
**Решение:**
|
||
- Попробуйте уменьшить dropout
|
||
- Проверьте, что слой FeedForward включён в модель и его параметры передаются в оптимизатор
|
||
|
||
### Ошибка: CUDA out of memory
|
||
**Возможные причины:**
|
||
- Слишком большой batch_size или размерность emb_size
|
||
|
||
**Решение:**
|
||
- Уменьшите batch_size или emb_size
|
||
|
||
---
|
||
- Поддерживает режимы train/eval
|
||
|
||
[Пример визуализации](/example/feed_forward_example.py)
|