Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#934

Как работают рекуррентные нейросети (RNN, LSTM, GRU)? Почему трансформеры их вытеснили в NLP?

Краткий тезис

Рекуррентные нейросети (RNN) и их модификации (LSTM, GRU) исторически были основным инструментом для обработки последовательностей в NLP. Их фундаментальная идея — передача скрытого состояния между шагами — позволяла моделировать временные зависимости. Однако RNN страдают от последовательной (непараллельной) обработки, проблем затухающих градиентов и слабой способности удерживать контекст на десятках шагов. Трансформеры (Transformer) с механизмом self-attention решили эти проблемы, обеспечив полную параллелизацию, прямые связи между любыми токенами и стабильное обучение. В результате трансформеры стали доминирующей архитектурой в NLP, хотя для задач с жёсткими ограничениями по ресурсам (например, on-device инференс) RNN-подходы могут сохранять актуальность.

---|---------|------------| | Forget gate (f) | ( f_t = \sigma(W_f [h_{t-1}, x_t] + b_f) ) | Определяет, какую часть старой памяти забыть (от 0 до 1). | | Input gate (i) | ( i_t = \sigma(W_i [h_{t-1}, x_t] + b_i) ) | Решает, какую новую информацию записать в память. | | Candidate memory (Ĉ) | ( \tilde{C}t = [tanh](/wiki/tanh)(W_C [h{t-1}, x_t] + b_C) ) | Кандидат на запись. | | Cell update | ( C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}t ) | Новое состояние ячейки (взвешенная сумма старой памяти и нового кандидата). | | Output gate (o) | ( o_t = \sigma(W_o [h{t-1}, x_t] + b_o) ) | Определяет, какую часть ячейки вывести в скрытое состояние. | | Hidden state | ( h_t = o_t \odot [tanh](/wiki/tanh)(C_t) ) | Итоговое скрытое состояние (только разрешённая выходным гейтом часть). |

Преимущества:

  • Линейная траектория градиента через Cₜ (забывающий гейт может быть >0), что ослабляет затухание.
  • Возможность хранить информацию на сотни шагов. Недостатки:
  • Последовательная рекурсия остаётся.
  • Большое количество параметров (4 весовых матрицы на слой) → медленное обучение.

3. GRU: упрощённая версия

GRU (Cho et al., 2014) объединяет входной и забывающий гейты в один update gate и добавляет reset gate:

  • Update gate ( z_t = \sigma(W_z [h_{t-1}, x_t]) ) – решает, насколько обновить скрытое состояние (аналог 1 – forget gate LSTM).
  • Reset gate ( r_t = \sigma(W_r [h_{t-1}, x_t]) ) – решает, какую часть предыдущего состояния сбросить перед вычислением кандидата.
  • Candidate hidden ( \tilde{h}t = [tanh](/wiki/tanh)(W_h [r_t \odot h{t-1}, x_t]) )
  • Final hidden ( h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t )

GRU имеет меньше параметров (3 матрицы), чем LSTM (4), и часто показывает сравнимую производительность. Однако принципиальный недостаток – последовательная обработка – остаётся.

4. Почему трансформеры лучше: параллелизация, long-term память

Трансформер (Vaswani et al., 2017) полностью отказался от рекурсии в пользу механизма self-attention:

  • Параллелизация: каждый токен взаимодействует со всеми токенами последовательности одновременно (нет зависимости hₜ = f(h_{t-1})).
  • Long-term память: attention может создавать прямые связи между token₁ и token₁₀₀ за один шаг – градиенты не затухают по пути, так как нет цепочки нелинейных рекуррентных слоёв. Длина контекста ограничена только длиной последовательности и памятью (O(n²) сложность).
  • Стабильное обучение: отсутствие взрывных/затухающих градиентов благодаря прямой передаче градиента через Softmax и LayerNorm.
  • Мультимодальное расширение: attention легко адаптируется к парам последовательностей (cross-attention в encoder-decoder).

Недостатки трансформеров: квадратичная сложность по длине последовательности и большее число операций (FLOPS) на токен. Для задач с низкими вычислительными ресурсами (например, мобильные устройства) продолжают исследоваться архитектуры, сочетающие рекуррентную эффективность с параллелизмом (Mamba, State Space Models).


5. Пет-проект для закрепления

Задача: Сравнить качество и скорость обучения LSTM и трансформера (BERT) на задаче классификации тональности отзывов IMDb.

Инструменты: Python, PyTorch, Hugging Face transformers, datasets (IMDb), torchmetrics, matplotlib.

Шаги:

  1. Загрузить датасет IMDb, векторизовать тексты (embedding слой для LSTM, токенизация BERT для трансформера).
  2. Реализовать LSTM-классификатор: Embedding → LSTM(256, 2 слоя, dropout=0.5) → Linear → Softmax. Обучение на GPU (если доступен) или CPU, batch 64, learning rate 0.001.
  3. Взять предобученный bert-base-uncased с головой классификации (AutoModelForSequenceClassification). Fine-tuning 2 эпохи, batch 16, learning rate 2e-5.
  4. Замерить accuracy, F1, время обучения, время инференса на одном батче.
  5. Построить графики loss. Сравнить результаты.

Ожидаемый результат: LSTM – accuracy ~0.85, обучение на GPU занимает ~30 минут. BERT – accuracy ~0.95, обучение ~5 минут (на GPU). BERT значительно точнее, но требует больше видеопамяти. LSTM может быть конкурентоспособен на CPU или при сильных ограничениях по памяти.


Связь с другими вопросами

ВопросТема
713Attention в трансформерах

Навигация

  • Предыдущий: 933
  • Следующий: 935
  • Индекс: 00. Индекс разборов