# От RNN к LSTM: как ИИ научился не забывать прошлое

Источник: https://www.youtube.com/watch?v=Ba6Fn1-Jsfw
Канал: Stanford Online
Опубликовано: 04.03.2025

---

В рамках курса Стэнфордского университета CS224N «Обработка естественного языка с глубоким обучением» (весна 2024 года) прошла шестая лекция, посвященная эволюции рекуррентных нейронных сетей (RNN). В центре внимания оказались архитектуры Long Short-Term Memory (LSTM) и их революционное применение в задачах машинного перевода (Neural Machine Translation, NMT).

## 📊 Оценка языковых моделей: от интуиции к перплексии
[[JUMP:02:18]]

Помимо субъективной оценки качества генерируемых текстов, в NLP существует строгий математический стандарт — перплексия (perplexity) [02:32]. Этот показатель определяет, насколько эффективно модель предсказывает слова в реальных человеческих текстах, на которых она не обучалась.

Основные факты о перплексии:

*   **Математическая суть:** Перплексия является экспонентой от кросс-энтропии (средней негативной логарифмической вероятности на слово) [04:12]. 
*   **Интерпретация:** Значение перплексии можно представить как размер кубика, который модель «бросает» при выборе следующего слова. Если перплексия равна 64, это эквивалентно равновероятному выбору из 64 вариантов [06:21].
*   **Прогресс:** В эпоху n-граммных моделей хорошим показателем считалась перплексия около 67 [07:33]. С появлением LSTM этот показатель упал до 30, а современные большие языковые модели достигают однозначных чисел [08:57].

По словам лектора, термин «перплексия» закрепился благодаря Фреду Джелинеку из IBM, который в 70-х годах искал простой способ объяснить информационную теорию специалистам по символьному ИИ, не владевшим глубокой математикой [05:40].

## 📉 Проблема исчезающего градиента: почему простые RNN «забывчивы»
[[JUMP:09:22]]

Главный недостаток базовых рекуррентных сетей заключается в затухании (vanishing) или взрывном росте (exploding) градиентов при обратном распространении ошибки через длинные последовательности [09:22]. 

Проблема затухания градиента:

1.  При вычислении градиента веса цепочки слов перемножаются по правилу цепной производной [10:30].
2.  Математически это сводится к возведению матрицы весов в степень, соответствующую длине последовательности [13:04].
3.  Если собственные значения матрицы меньше 1, сигнал быстро исчезает. В результате модель обновляет веса только на основе ближайших слов и «не видит» долгосрочных зависимостей [14:59].

Лектор приводит пример с текстом о билетах (tickets) на принтер [15:13]: чтобы предсказать слово «ticket» в конце абзаца, модели нужно помнить о нем на протяжении 20+ слов. Обычные RNN эффективно учитывают контекст лишь на глубину около 7 токенов [17:13].

## 🛠️ Решение проблемы взрывного градиента: Gradient Clipping
[[JUMP:18:59]]

Если затухающий градиент — это фундаментальная архитектурная проблема, то взрывной градиент (когда значения становятся слишком большими) решается с помощью «грубого хака» — клиппинга (отсечения) [19:03].

*   **Инструмент:** Gradient Clipping.
*   **Метод:** Вычисляется норма градиента. Если она превышает порог (обычно от 5 до 20), градиент масштабируется вниз перед обновлением параметров [19:30]. 
*   **Зачем это нужно:** Без клиппинга один неудачный шаг обучения с гигантским градиентом может «выбросить» веса модели в случайную область пространства, полностью разрушив обучение [18:33].

## 🧠 Анатомия LSTM: память с избирательным доступом
[[JUMP:22:50]]

Архитектура Long Short-Term Memory (LSTM) была предложена Зеппом Хохрайтером и Юргеном Шмидхубером в 1997 году для расширения «краткосрочной памяти» нейросетей [25:01]. Ключевое отличие LSTM от простой RNN — наличие специального «состояния ячейки» (cell state) и механизмов управления потоком информации через гейты (ворота) [28:45].

Основные компоненты LSTM:

1.  **Forget Gate (Гейт забывания):** Определяет, какую часть старой информации из памяти нужно стереть. Лектор замечает, что логичнее было бы назвать его «гейтом сохранения» [30:12].
2.  **Input Gate (Входной гейт):** Выбирает, какие части нового входа достойны записи в память [30:37].
3.  **Output Gate (Выходной гейт):** Контролирует, какая часть накопленной памяти будет использована для текущего скрытого состояния и предсказания слова [30:44].

Лектор подчеркивает, что «секретным ингредиентом» LSTM является знак **плюс** в формуле обновления состояния ячейки [41:48]. В отличие от умножения в обычных RNN, сложение позволяет градиентам течь через цепочку времени практически без затухания, что позволяет модели сохранять информацию на сотни шагов [43:22].

## 🏗️ Варианты и расширения: Bidirectional и Stacked RNN
[[JUMP:48:27]]

Для более сложных задач анализа текста используются модификации рекуррентных сетей:

*   **Bidirectional RNN (Двунаправленные сети):** Обучаются две независимые сети — одна читает текст слева направо, другая — справа налево. Их скрытые состояния конкатенируются [52:17]. Это позволяет каждому слову «знать» и о прошлом, и о будущем контексте, что критично для классификации, но неприменимо для генерации текста в реальном времени [52:48].
*   **Stacked RNN (Многослойные сети):** Вместо одной цепочки выстраивается иерархия из нескольких слоев. Каждый следующий слой извлекает более абстрактные признаки [53:34]. В практике LSTM обычно использовали 2–4 слоя, так как дальнейшее углубление не давало значительного прироста [54:56].

## 🌍 Прорыв в машинном переводе: Sequence-to-Sequence
[[JUMP:1:05:15]]

До 2014 года доминировал статистический машинный перевод (SMT), основанный на огромных таблицах соответствий фраз. По мнению лектора, эти системы были перегружены сложным кодом и «костылями» для конкретных языковых пар [1:15:34].

Революция Neural Machine Translation (NMT) произошла с внедрением архитектуры **Encoder-Decoder** [1:06:10]:

1.  **Encoder (Кодировщик):** RNN (обычно многослойная LSTM) считывает предложение на исходном языке и упаковывает весь смысл в финальный вектор скрытого состояния [1:06:36].
2.  **Decoder (Декодировщик):** Другая RNN принимает этот вектор и начинает генерировать предложение на целевом языке слово за словом [1:07:01].

Этот подход сделал перевод «сквозным» (end-to-end), позволяя всей системе оптимизироваться под одну цель [1:05:43]. В 2016 году Google полностью перевела свой сервис Google Translate на нейросетевую архитектуру, что привело к мгновенному и заметному скачку качества, который отметили даже обычные пользователи и издания уровня New York Times [1:16:17].