* 本文的示意图使用了 AI 辅助创作。
RNN
背景引入
在前文 MLP 与 BP 算法的数学原理 中,我们从数学上推导了普通前馈神经网络的误差反向传播算法,并最终编码实现了一个能够训练并完成分类任务的 MLP。
MLP 是最经典、最基础的一种前馈神经网络,它只接受固定维度的张量
- 输入维度固定,意味着无法处理可变长序列;
- 固定维度与无记忆性的假设,使得模型更难捕捉到序列元素间的依赖关系。
一个简单的改进就是 RNN(Recurrent Neural Network,循环神经网络)。下面介绍 RNN,并做简要的数学推导。
参考文献:
- Y. Bengio, P. Simard and P. Frasconi, "Learning long-term dependencies with gradient descent is difficult," in IEEE Transactions on Neural Networks, vol. 5, no. 2, pp. 157-166, March 1994, doi: 10.1109/72.279181.
基本结构
RNN 的核心公式是如下的递归表达式,
如果没有偏置项,
只能够做到线性变换,而不能做到仿射变换。
我们认为,
这里要注意的关键点是
从权重规模看,RNN 的权重规模是固定的,不随输入序列长度
不严谨地,我们可以把 RNN 视为在时间维度上权重共享且具有隐状态的一种 MLP 改进。换言之,RNN 是在时间维度上对同一个 MLP 进行递归展开的结构。
RNN 的最终输出是可以灵活选取的,不存在统一的「硬规定」。可以只使用最后一个隐状态
或对其做进一步的变换 ,常见场景有情感分析、垃圾邮件识别与时间序列预测任务;也可以使用隐状态序列 ,场景场景有序列标注(譬如词性标注)、语音识别与早期机器翻译的 Decoder。
计算
时,需要我们特别提供 ,最常见的做法是取 为零值。也可以将 设计为一个可学习的参数,这样可以为 RNN 提供一个默认的初始上下文信息。
BPTT
在前文中我们推导了 MLP 的 BP 算法(Backpropagation Algorithm,反向传播算法)中梯度的形式。RNN 考虑了时间维度,我们称适用这类模型的最优化算法为 BPTT 算法(Backpropagation Through Time Algorithm,沿时间的反向传播算法)。下面我们推导 RNN 的 BPTT 算法中梯度的形式。
这里花了很大的篇幅推导 BPTT 中梯度的形式,这是有必要的,因为知晓了梯度后我们就可以很容易地使用梯度下降法等最优化算法训练模型了。
为方便表示,记
则根据
通常假设
其中第
这里要明确根据式子
直接影响路径:
直接影响当前时刻的损失 ,进而影响总损失 ;间接影响路径(通过递归关系):
作为下一时刻的输入,间接影响后续时刻的所有损失 ,进而影响总损失 。这类影响路径是 RNN 所特有的,是时间依赖的体现。然而,我们不能直接计算出
,因为若将所有 直接展开到 ,我们将得到一个指数爆炸的间接路径数量;故我们应考虑藉由递归式 ,通过中间变量 表示 对总损失 造成的所有间接影响。
因此,我们根据链式法则,有
计算出
我们再分别导出回归任务场景均方误差与分类任务场景交叉熵损失下
对于均方误差损失函数
由 Softmax 与交叉熵复合函数的导数性质,不难知道
局限
RNN 的循环结构使得模型具备了跨时间维度共享状态的能力。我们可以列举出 RNN 的若干优点:
- 能够轻松地处理可变长序列;
- 参数量与序列长度无关,大幅降低了长序列数据的计算量;
- 具备一定程度的 “记忆” 能力,因为任何时刻的隐状态在理论上都蕴含了过去时间步的历史信息;
- ……
RNN 的设计的确十分优雅,然而从上述推导中,我们能够发现 RNN 依然存在着若干缺陷:
- 没有解决长期依赖的问题,因为 RNN 内部存在梯度爆炸 / 梯度消失的现象,这使得早期信息难以长期保留;
- 无法直接访问全部的历史信息:当前时间步
只利用了上一时间步输出的隐状态 ,尽管 理论上蕴含了过去的历史信息,但终归是将所有历史信息全部压缩编码到 这一个量中了,而无法直接利用过去完整的历史信息 。注意力机制解决了这个问题,使得模型在任意时间步都能够完整访问并利用过去某一时间步的信息; - 串行计算:在计算隐状态时,RNN 只能按时间步顺序串行化计算,因为
依赖于 。Transformer 在训练阶段彻底解决了这个问题,实现了所有 token 并行计算。
这里简要说明 RNN 为什么存在梯度爆炸 /
梯度消失的风险。我们讨论早期隐状态
Hochreiter 与 Schmidhuber 在 1997
年指出,保持时间依赖性的必要条件是长期保持梯度。然而,
Hochreiter 与 Schmidhuber 提出 LSTM 的动机,正是为了解决 RNN 的结构性问题所带来的梯度爆炸 / 梯度消失。LSTM 的核心创新点是通过添加精妙的输入门、遗忘门与输出门机制,使得隐状态链路径上的梯度不再是多个矩阵连乘,而只需要连乘多个遗忘门的值——而遗忘门是可学习的,这使得梯度消失的问题得到了很大的缓解。
下面我们跳过 LSTM、GRU 等若干 RNN 的改良,让我们直接关注划时代的自注意力机制。
参考文献:
- S. Hochreiter and J. Schmidhuber, "Long Short-Term Memory," in Neural Computation, vol. 9, no. 8, pp. 1735-1780, 15 Nov. 1997, doi: 10.1162/neco.1997.9.8.1735.
自注意力
背景引入
LSTM 在 1997 年被首次提出,直到 2014 年注意力机制出现以前,机器翻译领域的最佳实践是 Encoder–Decoder 架构(without Attention)。
上文提到,RNN 在时间步
Transformer
背景引入
Encoder–Decoder
待写