LSTM
Разновидность рекуррентных нейросетей, предназначенная для работы с последовательными данными
LSTM (Long Short-Term Memory) — это разновидность рекуррентных нейросетей, предназначенная для работы с последовательными данными: временем, текстом, сигналами и любыми данными, где важен порядок.
Проще говоря:
LSTM — это нейросеть, которая умеет помнить важное и забывать ненужное в длинных последовательностях.
Зачем
Обычные рекуррентные нейросети (RNN) тоже работают с последовательностями, но у них есть серьёзная проблема.
Если последовательность длинная:
- информация из начала быстро теряется;
- модель «забывает», что было несколько шагов назад;
- обучение становится нестабильным.
LSTM появились, чтобы решить именно эту проблему — проблему долгой памяти.
Ключевая идея LSTM
Внутри LSTM есть специальное состояние — память. На каждом шаге модель решает, что сохранить, что забыть, а что передать дальше. Это достигается с помощью внутренних механизмов (часто говорят «вентили»), которые управляют потоком информации.
Где используют
LSTM хорошо подходят для:
- временных рядов;
- анализа текста;
- распознавания речи;
- обработки логов и сигналов;
- предсказаний, где важен контекст.
Сегодня их часто заменяют трансформеры, но LSTM всё ещё проще и дешевле.
Минимальный пример
Пример простой модели для последовательных данных.
import torch
import torch.nn as nn
Модель
class SimpleLSTM(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super().__init__()
self.lstm = nn.LSTM(
input_size=input_size,
hidden_size=hidden_size,
batch_first=True
)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
# x: (batch, time, features)
out, _ = self.lstm(x)
# берём последний шаг
out = out[:, -1, :]
out = self.fc(out)
return out
# пример данных:
# 32 объекта, 10 временных шагов, 5 признаков
x = torch.randn(32, 10, 5)
model = SimpleLSTM(
input_size=5,
hidden_size=16,
output_size=1
)
y = model(x)
print(y.shape)
# torch.Size([32, 1])
Ограничения LSTM
- плохо масштабируются на очень длинные последовательности;
- медленнее обучаются, чем модели без рекурсии;
- уступают трансформерам на больших датасетах.