В предложениях, звуке, записях датчиков и ценах акций смысл создаёт порядок. Если к нейросети, которая смотрит на каждый кадр отдельно, добавить петлю, запоминающую «то, что только что было», получится RNN; если поставить на эту память двери (вентили), чтобы она не стиралась, получатся LSTM и GRU. Мы проследим по числам, действительно ли память сохраняется, и на эксперименте убедимся, что даже с вентилями обучение не происходит само собой.
В части 3-1 дрозофила определяла, «приближается» ли тень. А что, если ей дать только одну фотографию с тенью?
Нейросети из частей 3-2 и 3-3 получают один вход, выдают один выход — и всё. Они не помнят, что видели раньше. Такую нейросеть называют нейросетью прямого распространения (сигнал идёт только вперёд). Одна тень одного и того же размера может как приближаться, так и удаляться. Ответ кроется не в одной сцене, а в порядке сцен. Именно поэтому в эксперименте части 3-1 на вход подавали сразу два кадра (начальный и последующий).
Последовательности «100 → 110 → 120» (рост) и «120 → 110 → 100» (спад) состоят из тех же трёх чисел. Подать их в нейросеть прямого распространения можно двумя способами.
ht = f(xt, ht−1)Одни и те же веса используются на каждом шаге времени
Идея решения проблемы из раздела 2 проста. Обрабатывая очередной шаг, сеть получает ещё и сводку, созданную на предыдущем шаге (скрытое состояние). Если это нарисовать, стрелка, выходящая из блока, возвращается в него же и образует петлю. Если развернуть эту петлю вдоль оси времени, она выглядит как сеть прямого распространения, в которой один и тот же блок повторён столько раз, сколько шагов. Все блоки используют одни и те же веса. Как CNN из части 3-3 применяла один фильтр ко всем «позициям», так RNN применяет одни веса ко всем «моментам времени». Поэтому при любой длине число весов не меняется.
ht = tanh(wx·xt + wh·ht−1)Elman, 1990
Если выполнить обратное распространение ошибки на развёрнутой схеме, получится BPTT (обратное распространение во времени) [R8]. Чтобы ошибка последнего выхода дошла до первого шага, при каждом шаге назад она умножается на wh × градиент tanh (1 − h²). Если это значение меньше 1, оно возводится в степень, равную числу шагов, и стремится к 0 (затухание градиента); если больше 1 — градиент может взорваться. Бенджио и соавторы в 1994 году показали, что из-за этого выучить долгие временные зависимости градиентным спуском принципиально трудно [R2].
Если увеличить wh (1.5), память держится дольше, но tanh прилипает к ±1, и градиент 1 − h² становится близок к 0. Удерживать память и исправлять её обучением — задачи, которые мешают друг другу. Это проблема того же корня, что и «градиент сигмоиды не больше 0.25» из части 3-2.
ct = ft ⊙ ct−1 + it ⊙ gt · ht = ot ⊙ tanh(ct)Hochreiter & Schmidhuber, 1997 · вентиль забывания: Gers и др., 2000
| Обозначение | Название | Диапазон | Что делает (веса, заданные в этой ячейке) |
|---|---|---|---|
| ct | Состояние ячейки | Без ограничений | Конвейерная лента, несущая долгую память. До следующего шага проходит лишь через одно умножение (f) и одно сложение |
| ft | Вентиль забывания | 0~1 (σ) | Сколько прошлой памяти оставить. Задан постоянным: σ(bf) |
| it | Входной вентиль | 0~1 (σ) | Сколько нового значения записать. σ(10 × метка начала − 5): открывается только на первом шаге |
| gt | Кандидат | −1~1 (tanh) | Что записать. tanh(3 × xt) |
| ot | Выходной вентиль | 0~1 (σ) | Какую часть памяти выпустить наружу. Всегда открыт: σ(5) ≈ 0.993 |
| ht | Скрытое состояние (выход) | −1~1 | ot ⊙ tanh(ct). Идёт в следующий слой и во вентили следующего шага |
| ⊙ | Поэлементное произведение | Перемножаются элементы векторов на одинаковых позициях. Если, как здесь, число одно, это обычное умножение |
Веса этой ячейки для наглядности задал человек. Правило такое: «записать только на первом шаге, а потом почти ничего не стирать». Поэтому, если перевернуть первый сигнал, память через 20 шагов тоже точно переворачивается. У RNN из раздела 4 на том же входе последнее значение при перевороте первого сигнала совпадало до четвёртого знака после запятой. Это значит, что LSTM — структура, способная хранить долгую память. Поскольку состояние ячейки передаётся лишь через одно умножение (f ≈ 1) и сложение, градиент, идущий назад, тоже почти не уменьшается [R3].
Добавим два замечания. Во-первых, в исходной LSTM 1997 года вентиля забывания не было. Его добавили Герс и соавторы, чтобы решить проблему бесконечного роста состояния ячейки при непрерывном потоке входов [R4], и сегодня под «LSTM» обычно понимают именно эту версию. Во-вторых, то, что структура может хранить память, не гарантирует, что обучение найдёт нужные веса. Эту разницу показывает эксперимент с кодом 2 (под разделом 6).
ht = (1 − zt) ⊙ ht−1 + zt ⊙ h̃tCho и др., 2014
GRU объединила вентиль забывания и входной вентиль LSTM в один вентиль обновления z. Прошлая память сохраняется в доле (1 − z), а освободившееся место на долю z заполняется новым кандидатом h̃. Это весы: чем больше оставляешь, тем меньше пишешь, и наоборот. К этому добавлен вентиль сброса r, решающий, насколько использовать прошлую память при вычислении кандидата. Состояние ячейки и скрытое состояние не разделены, поэтому выходного вентиля тоже нет [R5].
Наборов весов становится не 4, как у LSTM, а 3, так что по учебной формуле параметров ровно 3/4. Стандартная GRU в Keras содержит ещё один набор смещений, поэтому параметров немного больше (при скрытом размере 16 и входе 1 — 912 против 1,152, примерно 0.79 раза). Какая из моделей лучше, зависит от задачи.
Последовательность, где каждый шаг равен ±1, а правильный ответ — первый шаг (все последующие шаги — одинаково выглядящие помехи). Скрытый размер 16, Adam 0.005, 30 эпох, 2,000 обучающих и 1,000 тестовых примеров. Результаты двух сидов приведены отдельно. Около 50% — уровень угадывания, то есть обучение не удалось.
Сеть учится сжимать вход до узкого среднего слоя (бутылочного горлышка) и затем восстанавливать его. Правильные ответы не нужны: сам вход и есть правильный ответ. Грибовидное тело дрозофилы, наоборот, расширяет.
Если горлышко узкое, приходится оставлять только самое важное. Последовательность на рисунке — фрагмент из 16 шагов, составленный из смеси двух синусоид. Доказано, что лучший результат, которого может достичь обучением автоэнкодер без функции активации (линейный), совпадает с методом главных компонент (PCA) [R6], поэтому рисунок показывает этот оптимальный результат, вычисленный напрямую. Многослойный нелинейный автоэнкодер может сжимать лучше, чем PCA [R7].
В последовательных моделях использовалась структура, в которой RNN-кодировщик сжимает предложение в вектор фиксированной длины, а RNN-декодер разворачивает его в другое предложение (кодировщик–декодер) [R5]. Ограничение — длинное предложение трудно уместить в одно узкое горлышко — породило внимание из следующей части, 3-8.
В разных книгах и статьях обозначения на схемах немного различаются. Здесь собраны соглашения этой серии и в хронологическом порядке показано, какие проблемы решали последовательные модели, сменяя друг друга.
| Обозначение | Значение | Прямое распространение | RNN | LSTM | GRU | Автоэнкодер |
|---|---|---|---|---|---|---|
| Блок | Один слой (умножение на веса + функция активации) | ✓ | ✓ | ✓ | ✓ | ✓ |
| → | Направление потока значений | Только вперёд | Вперёд + следующий момент | Вперёд + следующий момент | Вперёд + следующий момент | Только вперёд |
| ↺ Петля | Снова получает значение с прошлого момента | — | h | h и c | h | — (для последовательностей используют RNN) |
| σ | Дверь (вентиль), сжимающая в 0~1 | — | — | 3 (f, i, o) | 2 (z, r) | — |
| tanh | Функция активации, сжимающая в −1~1 | По выбору | ✓ | Кандидат g и выход | Кандидат h̃ | По выбору |
| ⊙ · ⊕ | Поэлементное произведение · сложение | — | — | ✓ | ✓ | — |
| Песочные часы | Размер слоёв сужается, затем расширяется | — | — | — | — | ✓ |
Ответьте на три вопроса, и помощник подберёт модель для старта. Это не правильный ответ, а первый кандидат. Окончательное решение всегда принимается сравнением на валидационных данных (3-2, раздел 9).
Оба примера используют только библиотеки, предустановленные в Colab. Нажмите «Скачать блокнот (.ipynb)» и откройте его в Colab через Файл → Загрузить блокнот или скопируйте код и вставьте в ячейку нового блокнота.
RNN из одного числа из раздела 4 и заданная вручную LSTM из раздела 5 вычисляются на одной и той же последовательности. Скрытое состояние, градиент, идущий назад, и изменение при перевороте первого сигнала получаются теми же числами, что и на странице. Чтобы подставить свои данные, измените только SEQ.
Три модели обучаются на последовательностях, где каждый шаг равен ±1, а правильный ответ — первый шаг. Длины 10 · 50 · 100, два сида. Таблица под разделом 6 построена прямо по этому выводу.
Это промпты, которые можно вставить в ИИ-помощника вроде ChatGPT, Qwen или Claude. Если нажать «Копировать», после промпта будет добавлен выбранный код. Замените текст в 〔 〕 на свою ситуацию.
Ответ ИИ — лишь отправная точка. Предложенные статьи, числа и функции библиотек обязательно проверяйте по первоисточникам и официальной документации. Если для конкурса или статьи вы пользовались помощью ИИ, укажите факт и объём использования согласно правилам организаторов и журнала.
Это тот же словарь, что и жёлтое пунктирное подчёркивание в тексте. Во всей серии используются одни и те же обозначения. Нажмите на название раздела, чтобы перейти к месту первого упоминания.
Аналогия — первый шаг к пониманию, но и семя заблуждения. Для аналогий с дрозофилой и мозгом указана сила. Прямая есть данные, что это действительно делает то же самое · Частичная похожи лишь некоторые свойства · Нет соответствие неизвестно
| Понятие | Бытовая аналогия | Аналогия с дрозофилой и мозгом | Где аналогия ошибается |
|---|---|---|---|
| Скрытое состояние | Краткое содержание сюжета, которое складывается в голове при чтении книги | Частично Устойчивая активность группы нейронов | Какими цепями поддерживается кратковременная память мозга, зависит от области и всё ещё изучается |
| Развёртка·общие веса | Один и тот же сотрудник каждый день работает по одной и той же инструкции | Нет | Мозг не создаёт одинаковые «копии» для каждого момента времени. Развёртка — это схема для вычислений |
| Затухание градиента | В игре «испорченный телефон» исходная фраза размывается | Нет Само обратное распространение ошибки в мозге не подтверждено | В «испорченном телефоне» размывается сигнал, идущий вперёд, а при затухании градиента ослабевает обучающий сигнал, идущий назад |
| Состояние ячейки | Заводская конвейерная лента | Нет | Предмет на ленте едет без изменений, а состояние ячейки на каждом шаге немного уменьшается в меру вентиля забывания |
| Вентиль | Водопроводный кран (насколько открыть, 0~1) | Частично Нейромодуляторы, регулирующие синаптическую передачу (например, дофамин в грибовидном теле дрозофилы) | Дофамин участвует в обучении (изменении силы связей). Вентиль LSTM — это вычисление, определяющее поток на каждом шаге, и сам по себе обучением не является |
| Вентиль обновления GRU | Весы: чем больше убираешь старой памяти, тем больше нового помещается | Нет | В отличие от настоящих весов, пропорция своя для каждого шага и каждого числа |
| Горлышко автоэнкодера | Сжать длинное совещание до трёх строк, а затем снова развернуть | Частично Противоположный пример: грибовидное тело не сужает, а расширяет | В отличие от конспекта, автоэнкодер решает, «что важно», не по указанию человека, а только по ошибке восстановления |
E-1 Об авторе · E-2 Научные источники · E-3 Материалы к рисункам
Практические рекомендации для преподавателей, наставников по OJT (обучению на рабочем месте) и тьюторов. Время указано ориентировочно — подстраивайте его под реальное занятие.
| Аудитория | Студенты и работающие специалисты, прошедшие часть 3-2. Практики, работающие с данными датчиков, логами, текстами и временными рядами |
|---|---|
| Предварительные знания | Обратное распространение ошибки и затухание градиента, сигмоида·tanh из части 3-2. Если знать общие веса из части 3-3, раздел 3 будет лёгким |
| Цели обучения | ① Объяснить на двух способах (усреднение, склейка), почему сети прямого распространения трудно работать с порядком ② Показать на числах скрытое состояние RNN и затухание градиента ③ Объяснить, что делают вентили LSTM·GRU, и различать «структура может хранить память» и «обучение её находит» |
| Ориентировочное время | Чтение 45~55 мин · демонстрация анимаций 25 мин · практика в Colab 30 мин (код 1 — 10 мин, код 2 — запуск 5 мин + разбор 15 мин) |
Введение 5 мин (одинаковая сцена из раздела 1) → разделы 2·3 10 мин → раздел 4, затухание градиента 10 мин → раздел 5, переворот первого сигнала 15 мин → обсуждение таблицы эксперимента под разделом 6 5 мин → проверочные вопросы 5 мин.
Классификация данных команды с помощником выбора из раздела 9 15 мин → разделы 4·5 20 мин → запуск и разбор кода 2 30 мин (как сообщать о том, что «результат зависит от сида») → идеи поиска аномалий из раздела 7 15 мин → карточки с промптами 10 мин.
Новичкам — только разделы 1·3·5·9. Слушатели среднего уровня вручную проходят вычисление c из раздела 5 на трёх шагах, затем сверяют с функцией lstm из кода 1 и самостоятельно выводят формулу числа параметров из раздела 6.
| Раздел | Вопрос, на котором стоит остановиться | Совет по управлению |
|---|---|---|
| 1 По одному кадру | «Можно ли понять, что тень приближается, глядя только на третий кадр?» | Остановиться на «Один текущий кадр», затем переключить на «порядок» |
| 2 Прямое распространение | «Что будет со склейкой, если длина предложения каждый раз разная?» | Переключать длину 3 и 5 и смотреть, как меняется число входов |
| 3 Петля и развёртка | «Сколько наборов весов у пяти развёрнутых блоков?» | Переключать свёрнутую ↔ развёрнутую схему |
| 4 RNN | «Если увеличить w_h, память держится дольше, — почему же обучение становится труднее?» | Изменить 0.9 → 1.5 и сравнить h12 и значение градиента |
| 5 LSTM | «Что станет с памятью через 20 шагов, если перевернуть первый сигнал?» | При b_f = 5 переключить +1/−1, затем поставить b_f = 1 и посмотреть разницу |
| 6 GRU | «Почему LSTM·GRU с вентилями не справились при T = 100?» | Прочитать рядом сиды 0 и 1 в таблице эксперимента |
| 7 Автоэнкодер | «Почему при горлышке 4 ошибка резко падает?» | Увеличивать горлышко с 1 до 4, следя за зелёной кривой, затем переключиться на вид грибовидного тела |
| 8 Нотация·генеалогия | «Чем LSTM 1997 года отличается от сегодняшней LSTM?» | Пролистать хронологию до вентиля забывания 2000 года |
| 9 Помощник выбора | «К какому случаю относятся данные нашей команды?» | Каждый участник выбирает ответы, затем обсуждаем, где рекомендации расходятся |
| Заблуждение | Верное объяснение | Что показать |
|---|---|---|
| LSTM решает проблему долгой памяти | LSTM — структура, способная хранить долгую память. Найдёт ли обучение нужные веса, зависит от задачи, времени обучения и инициализации | Таблица эксперимента под разделом 6 (T = 100) |
| SimpleRNN неизбежно забывает через несколько шагов | В зависимости от инициализации и задачи она может помнить довольно долго. В этом эксперименте до T = 50 оба сида были успешны | Таблица эксперимента под разделом 6 (T = 50) |
| У LSTM с самого начала был вентиль забывания | В исходной статье 1997 года его не было; его добавили Герс и соавторы в 2000 году | Хронология в разделе 8 |
| GRU всегда быстрее и лучше LSTM | У неё лишь примерно на 3/4 меньше параметров, а качество зависит от задачи. В этом эксперименте при T = 50 не справилась только GRU | Раздел 6 |
| Автоэнкодер скопирован с того, как запоминает мозг | Это вычислительный приём сжатия через сужение. Грибовидное тело дрозофилы, напротив, расширяет | Вид грибовидного тела в разделе 7 |
Теряется порядок. У 100 → 110 → 120 (рост) и 120 → 110 → 100 (спад) среднее одинаково — 110, поэтому нейросеть не может их различить.
h_1 = tanh(1) ≈ 0.762, h_2 = tanh(0.9 × 0.762) = tanh(0.686) ≈ 0.595.
Умножение происходит 19 шагов, поэтому 0.9933 в 19-й степени ≈ 0.880 раза. Фактическое значение в разделе 5 (0.988 → 0.864, примерно 0.875 раза) немного меньше, потому что входной вентиль закрыт не полностью (0.007) и помехи понемногу просачиваются. В этой последовательности помех −1 — 10, а +1 — 9.
Один набор = 16 × (16 + 1) + 16 = 288. SimpleRNN 288, LSTM 4 × 288 = 1,152, GRU 3 × 288 = 864. Стандартная GRU в Keras добавляет 48 смещений — получается 912.
Нельзя. Как в разделе 5, при подходящих весах LSTM может хранить долгую память. Неудача означает, что за 30 эпох градиентный спуск не нашёл таких весов. Чтобы сделать вывод, нужно повторить эксперимент, меняя время обучения, скорость обучения и объём данных, и прогнать его на нескольких сидах.
В функции lstm из кода 1 сделайте входной вентиль всегда открытым (i = σ(5)). Вычислите, что произойдёт с состоянием ячейки через 20 шагов при перевороте первого сигнала, и опишите роль входного вентиля в двух предложениях.
Испытайте в коде 2 хотя бы один способ превратить неудачу при T = 100 в успех (больше эпох, другая скорость обучения, больше данных и т. п.). Представьте результаты для трёх и более сидов в виде таблицы и обоснуйте, что сработало.
| Начинающим | График градиента в разделе 4 и разделы 7·8 можно пропустить без потери логики. Надёжно покажите одно — «переворот первого сигнала» из раздела 5 |
|---|---|
| Углублённо | Обобщите формулу произведения градиентов из раздела 4 на случай нескольких скрытых нейронов (матрица) и обсудите связь собственных значений с затуханием и взрывом градиента [R2] |
| Что изучить дальше | Сансон Ан, конспект лекций «Наука о данных для бизнеса» (наука о данных в целом) · STEP [K-Digital] Обработка естественного языка с помощью ИИ (связано с 3-5·3-8) · STEP [K-Digital] Основы анализа финтех-данных (связано с 3-6) |
| Материалы для преподавателя | Критерии оценки проверочных вопросов и примеры ответов к заданиям — на странице ответов для преподавателей (3-7) |
Вы дочитали часть «3-7 Последовательные модели» до конца. Обитатели лаборатории подведут итоги — каждый по фразе.