🔴 Сложный ⏱️ 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(Wh · 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 для предсказания следующего символа: ```python

Дополни код

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 при работе с длинными текстами?

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

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

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

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