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

Рекуррентные нейронные сети: память машин

Рекуррентные нейронные сети: память машин

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

Представь, что ты читаешь книгу 📚. Чтобы понять смысл предложения “Он взял ключи и поехал туда”, тебе нужно помнить, что в прошлых предложениях говорилось о Максиме и его доме. Обычные нейросети как человек с амнезией - они видят только одно слово и забывают всё остальное!

🎬 Netflix рекомендации: “Раз посмотрел фильмы ужасов, значит и дальше предложим похожее” 🗣️ Siri/Алиса: Понимают контекст разговора: “Включи музыку” → “Сделай потише” 📈 Торговые боты: Анализируют тренды цен Bitcoin за последние дни для прогноза

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

В 1982 году Джон Хопфилд придумал первую рекуррентную сеть, но она была очень примитивной. Настоящий прорыв случился в 1997 году, когда Зепп Хохрайтер и Юрген Шмидхубер изобрели LSTM - “долгую краткосрочную память” 🧠. Звучит как оксюморон, но это гениально!

Забавно: идею LSTM не понимали 10 лет, пока Google не начал использовать её в переводчике в 2016 году. За одну ночь качество перевода выросло на годы вперёд!

💡 Интуиция

[МЕДИА: image_01] Описание: Сравнение обычной нейросети и RNN через аналогию чтения книги Промпт: “educational illustration comparing regular neural network vs RNN, person reading book with and without memory, arrows showing information flow through time, modern clean style, suitable for technical audience”

Обычная нейросеть = фотография одного кадра RNN = видео, где каждый кадр влияет на понимание следующего

🎭 Аналогия с актёром:

  • Обычная сеть: актёр каждый раз забывает роль и играет сцену с нуля
  • RNN: актёр помнит всю пьесу и играет с учётом предыдущих сцен

Скрытое состояние h = “кратковременная память” сети

  • На входе: новая информация + то, что помнили
  • На выходе: ответ + обновлённая память

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

Базовая RNN: h_t = tanh(W_h · h_{t-1} + W_x · x_t + b) y_t = W_y · h_t + b_y code Code Где:

  • h_t - скрытое состояние в момент t (память)
  • x_t - вход в момент t
  • W_h, W_x, W_y - матрицы весов
  • tanh - функция активации (-1 до 1)

Проблема градиентов: При обучении градиенты “затухают” или “взрываются” из-за умножения на W_h много раз подряд.

LSTM решение: Добавляет “врата” (gates) для контроля информации:

  • Forget gate: что забыть из старой памяти
  • Input gate: что запомнить из нового
  • Output gate: что выдать наружу

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

Пример 1: Генерация текста

Задача: обучить сеть генерировать имена в стиле Гарри Поттера

[МЕДИА: image_02] Описание: Пошаговое объяснение работы RNN при генерации имени “Hermione” Промпт: “step-by-step RNN text generation process, showing how network generates ‘Hermione’ character by character, hidden states visualization, arrows showing information flow, educational diagram style”

Данные: “Harry”, “Hermione”, “Ron”, “Draco”…

Обучение по символам:

  1. Вход: ‘H’ → Скрытое состояние: “начало имени”
  2. Вход: ‘a’ → Состояние: “имя начинается с Ha”
  3. Вход: ‘r’ → Состояние: “видимо будет Harry”
  4. И так далее…

Генерация:

  1. Даём ‘H’ → сеть предсказывает ’e’ (как в Hermione)
  2. Даём “He” → сеть предсказывает ‘r’
  3. Получаем новое волшебное имя!

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

Задача: Определить, положительный или отрицательный отзыв о фильме

Отзыв: “Начало было скучно, но концовка просто потрясающая!”

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

  1. “Начало” → негативная память
  2. “было скучно” → усиление негатива
  3. “но” → сигнал поворота
  4. “концовка просто потрясающая” → память переходит в позитив
  5. Итог: положительный отзыв ✅

Обычная сеть увидела бы только отдельные слова и запуталась!

🎮 Практика

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

Задание 1: У тебя есть последовательность [1, 2, 3, 4, 5]. RNN должна предсказать следующее число. Какое скрытое состояние поможет?

💡 Подсказка Сеть должна запомнить паттерн "+1 на каждом шаге"

Задание 2: Почему для задачи “перевести текст” лучше подходит RNN, а не обычная нейросеть?

✅ Ответ Порядок слов важен! "Собака кусает человека" ≠ "Человека кусает собака"

Задание 3: Объясни простыми словами, что такое “скрытое состояние”

✅ Ответ Это "память" сети - информация из прошлых шагов, которая влияет на текущее решение

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

Задание 4: Реализуй простую RNN для предсказания следующего символа:

# Дополни код
def rnn_step(x_t, h_prev, W_h, W_x, b):
    h_t = np.tanh(W_h @ h_prev + W_x @ x_t + b)
    return h_t

# Как использовать для предсказания последовательности?
Задание 5: В чём проблема обычной RNN при работе с длинными текстами?
<details>
<summary>💡 Подсказка</summary>
Подумай о том, что происходит с информацией через 100+ шагов
</details>
Задание 6: Почему LSTM лучше обычной RNN для машинного перевода?
Челлендж 🔴
Задание 7: Спроектируй архитектуру RNN для задачи: "По истории покупок предсказать, купит ли пользователь премиум подписку"
Задание 8: Объясни, почему attention механизм во многих задачах вытесняет RNN (подсказка: подумай о параллельности вычислений)
⚠️ Частые ошибки
 Ошибка: "RNN можно обучать так же, как обычную сеть"
 Правильно: Нужен backpropagation through time (BPTT)
💡 Почему: Градиенты должны распространяться назад по времени
 Ошибка: "Скрытое состояние - это просто дополнительный слой"
 Правильно: Это память, которая передаётся между временными шагами
💡 Почему: Без этого нет рекуррентности!
 Ошибка: Использовать обычную RNN для очень длинных последовательностей
 Правильно: LSTM/GRU для длинных зависимостей
💡 Почему: Проблема исчезающих градиентов
🎓 Главное запомнить
 RNN = нейросеть с памятью для работы с последовательностями
 Скрытое состояние h_t = tanh(W_h·h_{t-1} + W_x·x_t + b)
 LSTM решает проблему длинных зависимостей через систему "врат"
 Используется в NLP, анализе временных рядов, генерации контента
🔗 Связь с другими темами
Назад: Обычные нейросети (урок 338) - базовые принципы обучения
Вперёд: Transformer и attention (скоро!) - более современная альтернатива RNN
Практика: Анализ временных рядов, обработка естественного языка

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

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

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