序列数据建模:处理时间与顺序
除了图片,世界上还有大量的数据是以序列的形式存在的,例如语言文字、股票价格、语音信号等。处理这类数据的关键在于理解它们的“顺序”和“上下文”。
核心挑战
传统的神经网络(如全连接网络或 CNN)在处理序列数据时面临两大挑战:
- 输入长度可变:一句话可长可短,一段音乐时长不一。标准网络要求输入大小固定。
- 顺序至关重要:“我爱她”和“她爱我”的词语相同,但顺序不同,含义也完全不同。标准网络无法捕捉这种顺序关系。
解决方案:循环神经网络 (RNN)
核心思想:为了解决上述挑战,RNN 被设计出来。它就像一个“有记忆”的人在阅读一句话:当他读到每个词时,不仅会理解当前词的含义,还会结合之前所有词的“记忆”(即隐藏状态),来形成对整句话的理解。
这种“记忆循环”机制使得 RNN 能够处理任意长度的序列,并捕捉到上下文信息。
...
→
ht-1
xt
→
RNN
单元
单元
→
ht
→
...
from tensorflow import keras
from keras import layers
# 典型的 RNN 模型结构
model = keras.Sequential([
# 输入层,例如每个词用一个128维的向量表示
layers.Embedding(input_dim=10000, output_dim=128),
# RNN 层
# 现代实践中更常用 LSTM 或 GRU
layers.SimpleRNN(64),
# 输出层
layers.Dense(1, activation='sigmoid')
])
主要应用领域
自然语言处理
🗣️
机器翻译、文本生成、情感分析、问答系统等。
时间序列预测
📈
股票价格预测、天气预报、销量预测等。
语音识别
🎤
将语音信号转换为文字。