第 8 篇:循环神经网络 RNN、LSTM 与 GRU:如何处理序列数据
深度学习入门专栏 · 第 8 篇
适合读者:已经阅读前两篇内容,希望继续系统学习深度学习核心方法与实践流程的初学者
摘要
本文介绍循环神经网络 RNN、LSTM 与 GRU 的基本思想,重点解释它们为什么适合处理文本、语音和时间序列等有顺序的数据。文章从"理解一句话不能只看一个词"的例子出发,说明隐藏状态如何保存历史信息,并进一步解释 LSTM 和 GRU 的门控机制如何缓解长期依赖问题。文中给出简单代码演示序列状态更新和文本编码过程。
关键词: RNN;LSTM;GRU;序列数据;时间依赖;梯度消失
1. 序列数据的特殊性
图像强调空间结构,序列数据强调先后顺序。文本、语音、心电信号、股票价格、设备传感器读数都属于序列数据。判断一句话的情感时,不能只看单个词,还要看前后文;预测设备状态时,也不能只看某一时刻读数,还要看近期变化趋势。

RNN 的基本思想是让模型在每个时间步接收当前输入,同时保留上一个时间步的隐藏状态。
ht=f(Wxxt+Whht−1+b) h_t=f(W_xx_t+W_hh_{t-1}+b) ht=f(Wxxt+Whht−1+b)
其中,x_t 是当前输入,h_{t-1} 是历史状态,h_t 是当前状态。
2. 为什么需要 LSTM 和 GRU
普通 RNN 在长序列中容易遇到梯度消失,导致很早之前的信息难以影响当前输出。LSTM 和 GRU 通过门控机制决定哪些信息保留、哪些信息遗忘,从而缓解长期依赖问题。

3. 代码示例:隐藏状态逐步更新
python
sequence = [1, 2, 3, 4]
hidden = 0
for x in sequence:
hidden = hidden + x
print("当前输入:", x, "隐藏状态:", hidden)
运行结果:
text
当前输入: 1 隐藏状态: 1
当前输入: 2 隐藏状态: 3
当前输入: 3 隐藏状态: 6
当前输入: 4 隐藏状态: 10
4. 常见序列任务

多对一任务如文本情感分类,一整句话输出一个类别;多对多任务如词性标注,每个词都有一个标签;序列到序列任务如机器翻译,输入一句话并输出另一种语言。
5. 代码示例:文本编码
python
vocab = {"我": 1, "喜欢": 2, "深度学习": 3}
sentence = ["我", "喜欢", "深度学习"]
encoded = [vocab[word] for word in sentence]
print(encoded)
运行结果:
text
[1, 2, 3]
常见误区
误区一:只记概念名称,不理解适用场景。
深度学习概念必须放回任务中理解。CNN 适合图像,是因为它利用了空间局部性;RNN 适合序列,是因为它显式处理时间顺序;Transformer 强大,是因为它能直接建模全局依赖。
误区二:训练集结果好就认为模型好。
训练集表现只能说明模型对已见样本拟合得好。真正重要的是验证集和测试集表现,尤其是测试集是否独立、是否没有参与调参。
误区三:忽略数据质量。
标注错误、样本偏差、类别不平衡和数据泄漏会直接破坏实验结论。很多项目失败不是模型不够先进,而是数据基础不可靠。
误区四:把代码跑通等同于掌握原理。
会调用框架只是第一步。能解释模型为什么有效、为什么失败、如何设计对照实验和如何分析错误样本,才是真正形成能力。
实践建议
学习本篇内容时,可以按"三步法"推进。第一步,先用纸笔画出数据从输入到输出的流程,确认自己知道每一步在做什么。第二步,运行文中的代码,并至少修改一个参数观察结果变化。第三步,尝试用自己的话解释三张配图,尤其要说清楚每个模块解决了什么问题。
对初学者来说,小实验比大工程更重要。一个能完全解释清楚的小例子,往往比一个复制粘贴的大模型更能建立长期能力。
本篇小结
本篇围绕"循环神经网络 RNN、LSTM 与 GRU:如何处理序列数据"展开,重点解释了相关概念为什么出现、解决什么问题,以及它在深度学习完整流程中的位置。需要记住的是:深度学习不是模型名称、公式和代码片段的堆叠,而是数据、结构、损失、优化、评估和应用场景共同构成的系统方法。理解核心机制,再通过小代码和小实验验证,是最稳妥的学习方式。
参考文献与推荐阅读
1\] LeCun, Y.; Bengio, Y.; Hinton, G. Deep learning. *Nature* **2015** , *521* , 436--444. https://doi.org/10.1038/nature14539 \[2\] Goodfellow, I.; Bengio, Y.; Courville, A. *Deep Learning* . MIT Press, 2016. https://www.deeplearningbook.org/ \[3\] Nielsen, M. A. *Neural Networks and Deep Learning* . Determination Press, 2015. http://neuralnetworksanddeeplearning.com/ \[4\] Géron, A. *Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow* , 3rd ed.; O'Reilly Media, 2022. \[5\] PyTorch Documentation. https://pytorch.org/docs/stable/index.html \[6\] Hochreiter, S.; Schmidhuber, J. Long Short-Term Memory. *Neural Computation* **1997** , *9* , 1735--1780. \[7\] Cho, K.; van Merriënboer, B.; Gulcehre, C.; et al. Learning Phrase Representations using RNN Encoder--Decoder for Statistical Machine Translation. arXiv:1406.1078, 2014.