循环神经网络(Recurrent Neural Networks, RNN)是一种专门用于处理序列数据的神经网络。RNN通过将前一个时间步的输出反馈到当前时间步,使得模型能够“记住”之前的输入信息,从而适合处理时间序列或文本等有序数据。
RNN 的核心特点是其循环结构。对于每个时间步 tt,隐藏状态 hth_t 由当前输入 xtx_t 和前一时刻的隐藏状态 ht−1h_{t-1} 决定:
为了克服 RNN 的局限性,长短期记忆网络(Long Short-Term Memory, LSTM)引入了一种特殊的结构,能够更好地捕捉长期依赖信息。
LSTM 的核心是引入了“记忆单元”(Cell State)和三个“门控机制”:
RNN 和 LSTM 都广泛应用于时间序列数据的建模。例如:
案例:使用 LSTM 预测股票价格
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# 示例数据
X_train = np.random.rand(100, 10, 1) # 100 个样本,序列长度 10,单特征
y_train = np.random.rand(100, 1)
# 构建模型
model = Sequential([
LSTM(50, activation='relu', input_shape=(10, 1)),
Dense(1)
])
# 编译和训练
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=10, batch_size=16)
使用 RNN 或 LSTM 构建一个简单的情感分析模型:
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
# 示例数据
texts = ["I love this product!", "This is the worst purchase I made."]
labels = [1, 0] # 1: Positive, 0: Negative
# 文本预处理
tokenizer = Tokenizer(num_words=1000)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
X = pad_sequences(sequences, maxlen=10)
# 构建模型
model = Sequential([
Embedding(input_dim=1000, output_dim=32, input_length=10),
LSTM(32),
Dense(1, activation='sigmoid')
])
# 编译和训练
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X, np.array(labels), epochs=5, batch_size=2)
特点 | RNN | LSTM |
---|---|---|
能力 | 处理短期依赖 | 处理长期依赖 |
梯度消失问题 | 严重 | 通过门控机制有效缓解 |
计算复杂度 | 较低 | 较高 |
应用场景 | 简单时间序列、短文本分析 | 长时间序列、复杂依赖关系的建模 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。