一、LSTM的背景与动机
1.1 为什么需要LSTM?
在深度学习中,普通的神经网络(如全连接网络或卷积神经网络)在处理序列数据时表现不佳,因为它们无法捕捉数据中的时间依赖关系。循环神经网络(RNN)被设计来处理序列数据,通过隐藏状态在时间步之间传递信息。然而,传统RNN存在两个主要问题:
- 梯度消失/爆炸:在反向传播时,梯度可能随着时间步的增加变得极小(消失)或极大(爆炸),导致模型难以学习长期依赖关系。
- 长期依赖问题:RNN在理论上可以记住长时间步的信息,但实际上由于梯度问题,很难捕捉长序列中的远距离依赖。
LSTM由Hochreiter和Schmidhuber在1997年提出,旨在解决这些问题。它通过引入门控机制(Gates)和记忆单元(Cell State),能够选择性地记住或遗忘信息,从而有效建模长期和短期依赖。
1.2 LSTM的核心思想
LSTM的核心是通过一个记忆单元(Cell State)来保存长期信息,并通过门控机制(输入门、遗忘门、输出门)控制信息的流动。这些门决定:
- 哪些信息需要被保留(长期记忆)。
- 哪些信息需要被遗忘。
- 当前时间步应该输出什么。
这使得LSTM在处理长序列时表现优异,适合任务如机器翻译、文本生成和时间序列预测。
二、LSTM的架构与工作原理
LSTM的基本单元由以下几个部分组成:
- 记忆单元(Cell State):负责存储长期信息,贯穿整个序列。
- 隐藏状态(Hidden State):负责输出当前时间步的信息,包含短期记忆。
- 门控机制:包括遗忘门(Forget Gate)、输入门(Input Gate)和输出门(Output Gate),控制信息的流动。
下面我们详细解析每个部分。
2.1 记忆单元(Cell State)
记忆单元是LSTM的核心,它像一条“传送带”,贯穿所有时间步,负责存储和传递长期信息。Cell State通过门控机制进行更新,确保模型能够记住关键信息(如句子的主语)并遗忘无关信息。
数学上,Cell State在时间步 t t t 的更新公式为:
C t = f t ⊙ C t − 1 + i t ⊙ C ~ t C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t Ct=ft⊙Ct−1+it⊙C~t
其中:
- C t C_t Ct:当前时间步的Cell State。
- C t − 1 C_{t-1} Ct−1:上一时间步的Cell State。
- f t f_t ft:遗忘门输出,决定保留多少上一时间步的信息。
- i t i_t it:输入门输出,决定当前输入有多少信息被加入。
- C ~ t \tilde{C}_t C~t:候选Cell State,表示当前时间步的候选记忆。
- ⊙ \odot ⊙:逐元素相乘(Hadamard乘积)。
2.2 隐藏状态(Hidden State)
隐藏状态 h t h_t ht 是LSTM的输出,包含当前时间步的短期信息。它由Cell State通过输出门进行调节:
h t = o t ⊙ tanh ( C t ) h_t = o_t \odot \tanh(C_t) ht=ot⊙tanh(Ct)
其中:
- o t o_t ot:输出门输出,控制Cell State的信息流向隐藏状态。
- tanh \tanh tanh:激活函数,将Cell State的值压缩到 [ − 1 , 1 ] [-1, 1] [−1,1].
隐藏状态 h t h_t ht 通常被用作模型的输出,或传递到下一层网络。
2.3 门控机制
LSTM通过三个门控机制控制信息的流动,每个门都使用sigmoid激活函数(输出范围为 [ 0 , 1 ] [0, 1] [0,1]),决定信息保留的比例。
2.3.1 遗忘门(Forget Gate)
遗忘门决定上一时间步的Cell State中有多少信息需要被遗忘。它的计算公式为:
f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ft=σ(Wf⋅[ht−1,xt]+bf)
其中:
- h t − 1 h_