Ответ
Да, работал с RNN, LSTM и GRU. Основное применение в моих проектах — обработка последовательностей с временной зависимостью.
1. Задача прогнозирования временных рядов (LSTM):
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
# Подготовка данных: создание окон последовательностей
# X_train shape: (samples, timesteps, features)
model = Sequential([
LSTM(units=50, return_sequences=True, input_shape=(60, 1)),
Dropout(0.2),
LSTM(units=50, return_sequences=False),
Dense(25),
Dense(1) # Прогноз одного значения
])
model.compile(optimizer='adam', loss='mse')
Почему LSTM, а не простая RNN? LSTM решает проблему исчезающего градиента за счет гейтов (забывания, входа, выхода), что позволяет обучаться на длинных последовательностях.
2. Классификация текста (GRU):
from tensorflow.keras.layers import Embedding, GRU
model = Sequential([
Embedding(input_dim=10000, output_dim=128, input_length=200),
GRU(128, dropout=0.2, recurrent_dropout=0.2),
Dense(1, activation='sigmoid') # Бинарная классификация
])
GRU vs LSTM: GRU имеет упрощенную архитектуру (2 гейта вместо 3), часто показывает сравнимую точность при меньшем времени обучения.
Ограничения и современные альтернативы:
- Проблема параллелизации: RNN обрабатывают последовательность пошагово. Для больших текстов сейчас чаще использую Transformer (например, BERT), где механизм внимания (Attention) позволяет учитывать контекст всей последовательности одновременно.
- На практике: RNN/LSTM остаются актуальными для задач реального времени на edge-устройствах (из-за меньшей вычислительной сложности по сравнению с Transformer) и для мультимодальных последовательностей (например, видео + аудио).