# Stanford CS231N: почему рекуррентные нейросети снова становятся актуальными

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

---

В современной индустрии искусственного интеллекта доминируют трансформеры, однако основы работы с последовательностями были заложены гораздо раньше. В рамках курса **Stanford CS231N** (весна 2025) прошла лекция, посвященная рекуррентным нейронным сетям (RNN) — архитектурам, которые, несмотря на возраст, переживают своеобразный ренессанс в виде современных моделей вроде Mamba.

## 🔄 Основы рекуррентных нейронных сетей
[[JUMP:07:22]]

В отличие от стандартных нейронных сетей с фиксированным размером входа и выхода, рекуррентные нейронные сети (RNN) предназначены для обработки последовательностей переменной длины [07:36]. Ключевая особенность RNN — наличие внутреннего (скрытого) состояния ($h$), которое обновляется на каждом временном шаге по мере обработки данных.

Спикер выделяет несколько типов задач моделирования последовательностей:

*   **Один ко многим:** Вход фиксированного размера (например, изображение), выход — последовательность (описание изображения словами) [06:04].
*   **Многие к одному:** Вход — последовательность (кадры видео), выход — фиксированный вектор (класс действия в видео) [06:30].
*   **Многие ко многим:** Последовательность на входе и на выходе (задачи машинного перевода или пофреймовая классификация видео) [06:56].

Математически простейшая (Vanilla) RNN описывается формулой, где новое скрытое состояние $h_t$ зависит от предыдущего состояния $h_{t-1}$ и текущего входа $x_t$, пропущенных через функцию активации (обычно $tanh$) [09:06]. Принципиально важно, что на каждом шаге используются одни и те же веса ($W$), что обеспечивает симметрию и позволяет модели обрабатывать последовательности любой длины [09:39].

## 🏗️ Анатомия forward-прохода: ручная сборка RNN
[[JUMP:14:00]]

Для демонстрации работы алгоритма лектор приводит пример «игрушечной» задачи: детектирование двух идущих подряд единиц в потоке битов. Если на вход поступает последовательность `0, 1, 1, 0`, модель должна вывести `1` на третьем шаге [14:41].

В этом примере скрытое состояние должно хранить информацию о предыдущем и текущем битах. Спикер показывает, как сконструировать весовые матрицы вручную, не прибегая к обучению [15:47]:

1.  Матрица $W_{xh}$ преобразует вход и записывает его в скрытое состояние.
2.  Матрица $W_{hh}$ переносит значение текущего входа в ячейку «предыдущего» для следующего шага [19:05].
3.  Выход вычисляется как линейная комбинация значений скрытого состояния с последующей активацией ReLU [21:06].

Хотя в реальности веса ищутся градиентным спуском, этот пример наглядно иллюстрирует, как RNN «запоминает» контекст через передачу вектора состояния от шага к шагу [23:55].

## 📉 Обучение и проблема обратного распространения во времени
[[JUMP:24:11]]

Обучение RNN осложняется тем, что один и тот же набор весов используется многократно. Ведущий объясняет механизм **Backpropagation Through Time (BPTT)**: градиенты вычисляются для каждого временного шага, а затем суммируются для обновления общей матрицы весов [25:34].

Основная практическая проблема — нехватка памяти GPU при работе с очень длинными последовательностями. Для решения этой задачи используется «усеченное» обратное распространение (**Truncated BPTT**) [28:21]:

*   Вся последовательность разбивается на блоки (например, по 100 шагов).
*   Для текущего блока вычисляется forward-проход, начиная со скрытого состояния, оставшегося от предыдущего блока [29:03].
*   Градиенты вычисляются и применяются только внутри этого окна, не распространяясь до самого начала всей цепочки [29:16].

## 🔠 Символьные языковые модели и их «необъяснимая эффективность»
[[JUMP:36:39]]

В 2015 году Андрей Карпати (Andrej Karpathy), бывший инструктор этого курса, опубликовал статью о «необъяснимой эффективности» RNN. Он показал, что простая рекуррентная сеть, предсказывающая следующий символ в тексте, может научиться писать стихи «под Шекспира» или генерировать синтетический код на C [40:03].

В ходе обучения такая модель проходит несколько стадий:

1.  **Начальная:** полная бессмыслица, случайный набор букв [41:09].
2.  **Средняя:** появление пробелов, слов, похожих на английские, пунктуации.
3.  **Продвинутая:** соблюдение структуры (имена персонажей в пьесах, открывающиеся и закрывающиеся скобки в коде) [42:03].

Анализ активаций нейронов в таких сетях выявил удивительную интерпретируемость. Спикер демонстрирует «нейроны-детекторы», которые активируются только внутри кавычек, при увеличении глубины вложенности кода (отступы) или при приближении конца строки [46:42]. Это доказывает, что RNN внутренне формируют сложные абстракции для отслеживания контекста [48:19].

## 🧱 От Vanilla RNN к LSTM и современным State Space Models
[[JUMP:58:27]]

Классические RNN страдают от проблемы **затухающих градиентов** (vanishing gradients). При перемножении малых значений в длинной цепочке $tanh$-активаций сигнал о классификации на конце последовательности просто не доходит до первых слоев [1:03:09].

Для борьбы с этим в 1990-х была создана архитектура **LSTM (Long Short-Term Memory)**. Вместо одного скрытого состояния она использует сложную систему «ворот» (gates) [1:05:40]:

1.  **Forget gate:** решает, какую часть информации из прошлого стоит забыть.
2.  **Input gate:** определяет, что из текущего входа записать в память.
3.  **Output gate:** контролирует, что выдать наружу.

В LSTM создается своеобразная «информационная магистраль», по которой данные могут течь через сотни шагов без применения нелинейных функций активации, что резко снижает риск затухания градиента [1:06:24]. Спикер проводит параллель между этой структурой и skip-connections в архитектуре ResNet [1:08:41].

В завершение лекции ведущий отмечает, что идеи RNN возвращаются в виде **State Space Models (SSM)** и моделей вроде **Mamba** [1:10:28]. Они решают главную проблему трансформеров — квадратичную сложность вычислений при росте длины контекста. RNN и SSM имеют линейную сложность и теоретически неограниченное окно контекста, что делает их крайне перспективными для задач будущего, требующих обработки гигантских объемов данных [1:10:41].