Long Short-Term Memory (LSTM)
LSTM — это рекуррентная сеть, состояние ячеек с управляющими вентилями которой переносит информацию через длинные последовательности. Разбираем вентили, уравнения, сравнение с GRU и код.
Долгосрочная краткосрочная память (LSTM) — это архитектура рекуррентной нейронной сети (RNN), которая добавляет ячейку памяти с управляющими вентилями наряду со скрытым состоянием простой RNN. Благодаря этому сеть может переносить информацию через сотни и тысячи временных шагов. Сепп Хохрайтер и Юрген Шмидхубер представили её в 1997 году, чтобы решить проблему затухающего градиента, из-за которой простые RNN не могут обучаться на долгосрочных зависимостях. В статье авторы сообщили, что им удалось преодолеть временные интервалы длиной более 1000 шагов. В 2010-х LSTM применялись для распознавания речи, машинного перевода и распознавания рукописного текста, пока трансформеры не заняли ведущую роль в большинстве языковых задач. LSTM по-прежнему часто используют для анализа временных рядов, потоков данных с датчиков и моделей на устройстве, где важны постоянный размер состояния и неизменные затраты на каждый шаг.
Как работает ячейка LSTM#
На каждом временном шаге t LSTM получает вход xₜ и предыдущее скрытое состояние hₜ₋₁ и вычисляет три вентиля и кандидата, каждый со своими весами. Для вентилей используется функция сигмоида, поэтому каждый элемент находится между 0 и 1; для кандидата применяется tanh, поэтому его значения лежат между −1 и 1:
- Вентиль забывания: fₜ = σ(W_f xₜ + U_f hₜ₋₁ + b_f) определяет, какую часть каждого элемента старого состояния ячейки нужно сохранить.
- Входной вентиль: iₜ = σ(W_i xₜ + U_i hₜ₋₁ + b_i) определяет, какую часть кандидата нужно записать.
- Кандидат: gₜ = tanh(W_g xₜ + U_g hₜ₋₁ + b_g) предлагает новое содержимое.
- Выходной вентиль: oₜ = σ(W_o xₜ + U_o hₜ₋₁ + b_o) определяет, какую часть содержимого ячейки нужно передать на выход.
Затем оба состояния обновляются по формулам cₜ = fₜ ⊙ cₜ₋₁ + iₜ ⊙ gₜ и hₜ = oₜ ⊙ tanh(cₜ), где ⊙ — поэлементное умножение. Состояние ячейки служит долгосрочной памятью, а скрытое состояние — краткосрочным выходом, который передаётся следующему слою и следующему шагу.
Состояние ячейки обновляется аддитивно. Градиент cₜ по cₜ₋₁ равен fₜ для каждого элемента, поэтому, когда вентиль забывания близок к 1, сигнал ошибки проходит назад через множество шагов почти без изменений. Этот путь в исходной статье назвали «каруселью постоянной ошибки». В LSTM 1997 года вентиля забывания не было, поэтому ячейки могли только накапливать данные. В 2000 году Феликс Герс, Шмидхубер и Фред Каммингс добавили вентиль забывания, чтобы ячейки можно было сбрасывать; сегодня он есть в каждой стандартной LSTM. Инициализация смещения вентиля забывания единицей, рекомендованная Рафалом Юзефовичем и его коллегами в 2015 году, оставляет вентиль открытым в начале обучения, чтобы сеть изначально запоминала информацию.
LSTM в PyTorch#
Модуль nn.LSTM в PyTorch обрабатывает всю последовательность и возвращает скрытое состояние на каждом шаге, а также финальные скрытое состояние и состояние ячейки. Приведённый ниже фрагмент классифицирует короткие видеоклипы по векторам признаков для каждого кадра, например извлечённым из каждого кадра свёрточной нейронной сетью (CNN):
import torch
from torch import nn
# 8 video clips, 16 frames each, 512 features per frame: (batch, time, features)
clips = torch.randn(8, 16, 512)
# One LSTM layer with a 128-dim hidden state, and a classifier over 5 actions
lstm = nn.LSTM(input_size=512, hidden_size=128, batch_first=True)
classifier = nn.Linear(128, 5)
# output holds h at every step; h_n and c_n are the final hidden and cell states
output, (h_n, c_n) = lstm(clips)
logits = classifier(h_n[-1])
print(f"output {tuple(output.shape)}, h_n {tuple(h_n.shape)}, c_n {tuple(c_n.shape)}, logits {tuple(logits.shape)}")
# Each weight matrix stacks four blocks of 128 rows: input gate, forget gate, candidate, output gate
print(f"Input weights {tuple(lstm.weight_ih_l0.shape)}, recurrent weights {tuple(lstm.weight_hh_l0.shape)}")Вывод: output (8, 16, 128), h_n (1, 8, 128), c_n (1, 8, 128), logits (8, 5) и Input weights (512, 512), recurrent weights (512, 128). Финальное скрытое состояние обобщает каждый клип из 16 кадров для пятиклассового классификатора, а каждая матрица весов содержит 4 × 128 = 512 строк, поскольку PyTorch хранит блоки для четырёх вентилей в одной матрице.
LSTM и смежные архитектуры#
- Простая RNN: На каждом шаге полностью перезаписывает своё состояние с помощью одного слоя tanh, поэтому градиенты геометрически уменьшаются или увеличиваются с ростом длины последовательности, а обучаться на долгосрочных зависимостях трудно.
- GRU: Объединяет состояния ячейки и скрытое состояние и использует два вентиля вместо трёх. При той же ширине модель имеет три блока весов вместо четырёх и три четверти числа параметров LSTM. Ни одна из архитектур не превосходит другую во всех задачах.
- Трансформер: Обрабатывает все позиции параллельно с помощью самовнимания, поэтому на GPU обучается намного быстрее и напрямую учитывает отдалённый контекст. Именно поэтому трансформеры заменили LSTM в языковом моделировании и машинном переводе. Затраты на механизм внимания растут вместе с длиной контекста, а LSTM тратит одинаковый объём вычислений и памяти на каждый новый шаг.
- xLSTM: Модель xLSTM, представленная группой Хохрайтера в 2024 году, добавляет экспоненциальное управление вентилями и матричную память, позволяющую обучать модель параллельно. Языковую модель xLSTM 7B с 7 миллиардами параметров представили на ICML 2025; её производительность сопоставима с трансформерами похожего размера, а инференс быстрее.
Применение#
- Распознавание речи: В 2015 году Google перевела голосовой поиск на акустические модели LSTM, обученные с помощью коннекционистской временной классификации (CTC); во встроенных распознавателях речи долгое время широко применялись каскады LSTM.
- Машинный перевод: Запущенная в 2016 году Google Neural Machine Translation использовала по восемь слоёв LSTM в кодировщике и декодировщике.
- Прогнозирование паводков: Описанная в статье Nature за 2024 год система Google прогнозирования паводков использует сети LSTM, чтобы предсказывать сток рек по данным о погоде и заблаговременно, вплоть до пяти дней, прогнозировать экстремальные паводки в водосборных бассейнах без гидрологических постов.
- Распознавание действий: CNN кодирует каждый кадр видео, а LSTM обрабатывает последовательность признаков кадров, чтобы классифицировать клип; именно такая структура используется во фрагменте кода выше.
- Прогнозирование траекторий: Модель Social LSTM запускает отдельную LSTM для каждого пешехода и объединяет скрытые состояния близко расположенных людей, чтобы прогнозировать траектории в толпе. Режим track модели YOLO26 присваивает каждому человеку постоянный идентификатор в разных кадрах видео, превращая покадровые обнаружения в историю координат, которую использует такая модель прогнозирования.










