🔴 Сложный ⏱️ 25 минут

LSTM и GRU: рекуррентные сети с памятью

LSTM и GRU: рекуррентные сети с памятью

🎯 Зачем это нужно?

🎬 YouTube рекомендации: “Раз ты смотрел про нейросети, вот ещё видео по ML!” 💬 ChatGPT: Помнит контекст всего разговора и отвечает связно 📱 Переводчик Google: Учитывает предыдущие слова для точного перевода 📈 Прогноз акций: Анализирует временные ряды цен за месяцы

Обычные нейросети “забывчивые” - обрабатывают каждый пример отдельно. А что если нужно помнить, что было раньше? Тут нам нужны сети с ПАМЯТЬЮ! 🧠

📚 История вопроса

В 1990-х учёные столкнулись с проблемой: обычные RNN не могли запомнить информацию надолго. Представь, что читаешь книгу, но к середине предложения забываешь его начало! 😅

В 1997 году Йозеф Шмидхубер и Сепп Хохрайтер изобрели LSTM (Long Short-Term Memory) - “длинную краткосрочную память”. Звучит как оксюморон, но работает!

А в 2014 году Кён Чо предложил GRU (Gated Recurrent Unit) - упрощённую версию LSTM. “Зачем сложно, если можно проще?” 🎯

💡 Интуиция

Представь свой мозг во время просмотра сериала:

🧠 Обычная RNN = кратковременная память “Кто этот персонаж? Я его 5 минут назад видел, но уже забыл…”

🎭 LSTM = записная книжка с тремя помощниками:

  • Привратник “Забыть”: “Эта информация устарела, удаляю”
  • Привратник “Запомнить”: “Это важно, записываю в память”
  • Привратник “Выдать”: “Сейчас нужна вот эта информация из памяти”

🎪 GRU = упрощённая версия с двумя помощниками:

  • “Обновить”: Что забыть и что запомнить одновременно
  • “Сброс”: Сколько старой информации использовать

[МЕДИА: image_01] Описание: Схема сравнения RNN, LSTM и GRU в виде мозга с разными отделами памяти Промпт: “educational illustration comparing RNN, LSTM and GRU as brain sections, memory compartments with gates, colorful diagram showing information flow, modern clean style suitable for ML students”

📐 Формальное определение

LSTM архитектура

LSTM имеет состояние ячейки C_t (долговременная память) и скрытое состояние h_t (краткосрочная память).

Три ворота (gates):

Ворота забывания: f_t = σ(W_f · [h_{t-1}, x_t] + b_f) Входные ворота: i_t = σ(W_i · [h_{t-1}, x_t] + b_i)
Выходные ворота: o_t = σ(W_o · [h_{t-1}, x_t] + b_o)

Обновление памяти: C̃_t = tanh(W_C · [h_{t-1}, x_t] + b_C) C_t = f_t ∗ C_{t-1} + i_t ∗ C̃_t h_t = o_t ∗ tanh(C_t)

GRU архитектура

Два ворота: Ворота сброса: r_t = σ(W_r · [h_{t-1}, x_t] + b_r) Ворота обновления: z_t = σ(W_z · [h_{t-1}, x_t] + b_z)

Обновление состояния: h̃_t = tanh(W_h · [r_t ∗ h_{t-1}, x_t] + b_h) h_t = (1 - z_t) ∗ h_{t-1} + z_t ∗ h̃_t

🔍 Примеры с разбором

Пример 1: Анализ настроения отзыва

Текст: “Фильм начался скучно, но концовка просто потрясающая!”

Как работает LSTM:

  1. “Фильм начался скучно” → Ворота запоминания сохраняют негативную оценку
  2. “но” → Сигнал смены контекста, готовность к обновлению
  3. “концовка просто потрясающая” → Ворота забывания частично стирают негатив, записывают позитив
  4. Итог: Общая оценка положительная (учтён весь контекст!)

[МЕДИА: image_02] Описание: Пошаговая визуализация обработки текста через LSTM с состояниями ворот Промпт: “step-by-step LSTM processing visualization, text sentiment analysis example, gates activation states, memory cells updating, educational diagram with arrows showing information flow”

Пример 2: Прогноз цены биткоина

Последовательность: [45000, 47000, 44000, 48000, ?]

LSTM анализ:

  • Замечает общий тренд роста
  • Помнит волатильность (резкие скачки)
  • Учитывает недавний рост после падения
  • Предсказание: ~49000-50000

GRU vs LSTM:

  • GRU быстрее обучается (меньше параметров)
  • LSTM точнее на длинных последовательностях
  • На коротких рядах разница минимальна

🎮 Практика

Базовый уровень 🟢

Задание 1: У LSTM 3 ворота, у GRU - 2. Какое преимущество даёт третье ворото LSTM?

Задание 2: Почему LSTM решает проблему gradient vanishing, а обычная RNN - нет?

Задание 3: В каких задачах GRU может быть лучше LSTM?

Задание 4: Что происходит, если все ворота LSTM выдают значение 1?

Продвинутый уровень 🟡

Задание 5: Реализуй упрощённые ворота забывания:

import torch.nn as nn

class SimpleLSTMGate(nn.Module):
    def __init__(self, input_size, hidden_size):
        # твой код здесь
        pass

Задание 6: Сравни количество параметров LSTM и GRU для hidden_size=128, input_size=100

Задание 7: Объясни, почему σ (сигмоида) используется в воротах, а tanh - в кандидатах памяти

Задание 8: Как изменится поведение GRU, если ворота сброса всегда равны 0?

Челлендж 🔴

Задание 9: Спроектируй свой вариант рекуррентной ячейки с одним воротом, которая решает проблему gradient vanishing

Задание 10: Почему двунаправленные LSTM показывают лучшие результаты в NLP задачах?

Задание 11: Реализуй пeephole connections для LSTM - когда состояние ячейки влияет на ворота напрямую

⚠️ Частые ошибки

Ошибка: “GRU хуже LSTM, потому что проще” ✅ Правильно: GRU часто показывает сопоставимое качество при меньших вычислительных затратах 💡 Почему: Простота ≠ хуже. Иногда меньше параметров = меньше переобучения

Ошибка: “LSTM запоминает информацию навсегда”
Правильно: LSTM может забывать через ворота забывания, память не бесконечна 💡 Почему: “Long” в названии означает “дольше чем RNN”, не “вечно”

Ошибка: Использовать LSTM для коротких последовательностей (2-3 элемента) ✅ Правильно: Для коротких последовательностей достаточно обычной нейросети 💡 Почему: Преимущество LSTM проявляется на длинных зависимостях

Ошибка: Не нормализовать входные последовательности ✅ Правильно: Всегда применять нормализацию (LayerNorm, BatchNorm) 💡 Почему: Большие значения могут привести к взрыву градиентов

Ошибка: Одинаковый learning rate для всех слоёв LSTM ✅ Правильно: Использовать разные learning rates или gradient clipping 💡 Почему: Разные слои обучаются с разной скоростью

🎓 Главное запомнить

LSTM и GRU решают проблему “забывчивости” обычных RNN через механизм воротLSTM = 3 ворота + состояние ячейки, GRU = 2 ворота + упрощённая архитектура
Применение: обработка текста, временные ряды, любые последовательные данные

🔗 Связь с другими темами

Назад: RNN и проблема gradient vanishing (урок 339) Вперёд: Attention механизмы и Transformer (урок 341) Связано: Backpropagation through time, регуляризация в RNN, Word2Vec embeddings

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!