2.递归神经网络(RNN)
不同于传统的机器翻译模型仅仅考虑有限的前缀词汇信息作为语义模型的条件项,递归神经网络(RNN)有能力将语料集中的 全部 前序词汇纳入模型的考虑范围。
图 2 展示了 RNN 模型的架构,其中各个垂直矩形框代表每轮迭代的隐层,每个这样的隐层都拥有若干神经元,每个神经元都对输入向量执行线性矩阵操作而通过非线性操作输出结果(例如,tanh() 函数)。在每一轮迭代中,前一步迭代的输出随着文档中下一条词汇的词向量而变化,
,是隐层的输入且隐层将产生预测输出值
和提供给下一层隐层的输出特征向量
(见公式 5 和公式 6)。单独每个神经元的输入和输出情况如图 3 所示。
图 2
网络中各个参数的设置细节及含义如下:
:表示拥有
数量词汇的语料中各个词汇对应的词向量。
:每一轮迭代
中用于计算隐层输出特征的传递边
—:在时刻
的输入词向量。
—:利用输入词向量
作为条件计算得到的权重矩阵
—:利用前一轮迭代的输出作为条件计算得到的权重矩阵
—:在前一轮迭代
中非线性函数的输出结果。并且
为当迭代轮次为
时的初始化隐层输出向量。
—:为非线性分类函数(这里使用 sigmoid 分类函数)
:每一轮迭代
针对全部词汇的输出概率分布。基本上,
就是当前迭代时,给定文档全部前序文本权值以及观测词向量
后预测得到的后续词。在这里,
和
中的变量
代表全体语料的词典规模。
在递归神经网络中,损失函数通常被设定为之前提到的交叉熵错误率。公式 7 展示了在迭代中此函数在整个词库上的求和。
在规模为的语料集上,交叉熵错误率计算如下:
图 3
公式 9 用于表示困惑度关系;它的计算基于 2 的指数,指数值为公式 8 中显示的交叉熵错误率函数负对数。困惑度用于衡量在进行序列后续词预测时考虑更多条件项对低值函数的扰乱程度(相较于真实结果来说)
执行一层 RNN 网络所需要的内存与语料中的词汇数量成正比。例如,一个拥有 k 个词的句子将在内存中占用 k 个词向量的空间。另外,RNN 网络将维护两对和
矩阵。尽管矩阵
的规模可能非常大,但其大小不会随着语料的规模而变化(不同于传统的模型)。对一个迭代
轮的 RNN 网络,
将是个
的矩阵而和语料规模无关。
图 4 是一些出版物中对 RNNs 神经网络模型的另外一种表示。它将 RNN 神经网络的每个隐层表示为一个环。
图 4
2.1 剃度弥散及梯度爆炸问题
从依次进行的步骤中得到循环神经网络中的传播权值矩阵,RNN 模型确保了实现的目标是通过多次迭代步长来传播内容信息的。通过以下的两个例句可以更深入的理解:
句 1:“简走进了房间。约翰也走近了房间。简对___说你好”
句 2:“简走进了房间。约翰也走近了房间。因为天色太晚了,人们在工作了一天后都回家了。简对___说你好”
上面的两个例子中,依据上下文,在空白处大部分都知道答案为“约翰”。第二个人在上下文中出现的相对词距对 RNN 模型中预测下一个词为“约翰”是非常重要的。通过我们对 RNNs 的了解,理论上该部分需要被给出。然而实验证明,RNNs 模型中句 1 空白部分的预测准确率要比句 2 的高。这是因为在后向传播阶段,梯度贡献值在初期的步长传播中逐步递减。因此对于长句,随着内容越长识别“约翰”为空白处词的概率越低。以后我们将讨论梯度递减问题背后的数学推理。
在某轮迭代中考虑公式 5、6,用于计算 RNN 错误率
,我们对每一步迭代计算错误率总和。那么每一步
的错误率
均可通过前面所列的计算出来。
通过对公式 5、6 的结果进行链式规则求导而得到每一个迭代步长的错误率。式 11 展示了对应的求导过程。为对之前
次迭代的偏导数。
式 12 展示了每次计算的关联关系;它是在
时间段内对所有潜在层的链式规则求导。
由于,故对于
,Jacobian 矩阵中的
为:
联立公式 10、11 和 12,得到如下所示:
公式 15 为式 13 的 Jacobian 矩阵范数。其中,和
为两个矩阵范数的上边界。依据公式 15 来计算每次迭代
中的部分梯度范数。
利用-范数来对以上两个矩阵进行范数计算。对于给定的 sigmoid 非线性函数,范数
的值只能是 1。
当足够大且
比 1 小或比 1 大时,指数
很容易为较小或较大的值。由于词距较远的交叉熵误差通过
来评估。当梯度消失时,在迭代
中词距较远的词对于预测下一个词的贡献度将会逐渐下降。
在实验过程中,一旦梯度值增长很大,就会很容易探测到其引起的溢出(如:无穷与非数值);这就是梯度爆炸问题。然而,当梯度值接近于零时。对于语料集中词距较远的词,它将大大降低模型的学习质量并且梯度还会不断衰减;这就是剃度弥散问题。
如果想要获取梯度消失问题的实际问题,你可以访问下面的 实例网站 。
2.2 解决梯度爆炸和弥散
上文介绍了解了一些在深度神经网络中的梯度弥散和梯度爆炸的情况,我们现在开始尝试用一些启发性的手段解决这些问题。
为了解决梯度爆炸问题,Thomas Mikolov 首先提出了一个简单的启发性的解决方案,就是当梯度大于一定阈值的的时候,将它截断为一个较小的数。具体如算法 1 所述:
算法 1:当梯度爆炸时截断梯度(伪代码)
if then
图 5 可视化了梯度截断的效果。它展示了一个小的 rnn(其中 W 为权值矩阵,b 为 bias 项)的决策面。这个模型是一个一小段时间的 rnn 单元组成;实心箭头表明每步梯度下降的训练过程。当梯度下降过程中,模型的目标函数取得了较高的误差时,梯度将被送到远离决策面的位置。截断模型产生了一个虚线,它将误差梯度拉回到离原始梯度接近的位置。
图 5:梯度爆炸,梯度截断可视化
为了解决梯度弥散的问题,我们介绍了两种方法。第一种方法是将随机初始化改为一个有关联的矩阵初始化。第二种方法是使用 ReLU(Rectified Linear Units)代替 sigmoid 函数。ReLU 的导数不是 0 就是 1.因此,神经元的梯度将始终为 1,而不会当梯度传播了一定时间之后变小。
2.3 深度双向 RNNs
如之前所说,在一个词序列中我们利用 RNNs 技术和过去的词来预测下一个词。其实同理我们也可以依据未来的词来做预测。Irsoy 等人设计了一个双向深度神经网络,在每一个时间节点 t,这个网络有两层神经元,一层从左向右传播,另一层从右向左传播。为了保证任何时刻 t 都有两层隐层,这个网络需要消耗两倍的存储量来存储权重和偏置等参数。最终的分类结果是由两层 RNN 隐层组合来产生最终的结果。图 6 展示了双向网络结构,公式 17 和 18 表示双向 RNN 隐层的数学含义。在这两个关系中唯一不同点是循环的方向不一样。公式 19 展示了通过总结过去和未来词的表示,使用类别的关系来预测下一个词预测。
图 6:一个双向 RNN 模型
图 7 展示了一个从较低层传播到下一层的多层双向 RNN。如图所示,在网络结构中,第 t 个时间里每一个中间神经元接受到前一个时间(同样的 RNN 层)传递过来的一组参数,以及之前 RNN 层传递过来的两组参数。这两组参数一个是从左到右的 RNN 输入,另一个是从右到左的 RNN 输入。
图 7:一个深度双向 3 层的 RNN
为了构建一个 L 层的 RNN,上述的关系将会参照公式 20 和公式 21 所修改,其中每一个中间神经元(第 i 层)的输入是 RNN 网络中同样的 t 时刻第 i-1 层的输出。其中输出,在每一个时刻值为通过所有隐层的输入参数传播的结果(如公式 22 所示)。
2.4 应用:RNN 翻译模型
传统的翻译模型十分复杂,他们由许多的应用在语言翻译流程的不同阶段的机器学习算法组成。在这一章,我们讨论 RNNs 代替传统机器翻译模块的潜在应用。考虑如图 8 所示的 RNN 例子。这里,德语 Echt dicke Kiste 被翻译为英语中的 Awesome sauce。首先 3 个时刻的隐层网络将德语编码为一些语言的特征()。最后两个时刻将
解码为英语作为输出。公式 23 展示了编码阶段,公式 24 和公式 25 展示了解码阶段。
图 8:一个 RNN 翻译模型。首先 3 个 RNN 隐层属于资源语言模型编码器,最后两个属于目标语言模型解码器。
采用交叉熵函数的 RNN 模型(如公式 26 所示)在翻译结果上有很高的精度。在实践中,利用一些扩展方法到模型上可以提高翻译的准确率。
扩展 1:编码器和解码器训练不同的 RNN 权重。这个将使得两个单元解耦,同时两个 RNN 模块都会有更高的准确率。这意味着公式 23 和公式 24 的函数有不同的
矩阵。
扩展 2:使用 3 个不同的输入来计算编码过程中每一个隐层状态:
• 之前的隐层状态(标准)
• 上一个编码器的隐层(图 9 中,)
• 之前预测的输出词,
图 9:带有 3 个解码神经元的输入的语言模型
结合上述 3 种输入将公式 24 中的解码阶段的 f 函数变为公式 27 中的 1 个。图 9 展示了这个模型。
扩展 3:如之前章节所讨论的那,使用多个 RNN 层来训练深层循环神经网络。因为深层次能学习到更多东西,因此往往能提升预测的准确率,当然,这也意味着必须使用大的语料库来训练模型。
扩展 4:如这一章之前提到的那样,训练双向编码器来提高精度。
扩展 5:给一个德语中的词序列 ABC,在英语中翻译为 XY,我们这里使用 CBA->XY 而不是 ABC->XY 来训练 RNN。这么做的目的是,因为 A 最有可能被翻译为 X,再加上考虑之前提到的梯度弥散的问题,翻转输入词的顺序能够减少输出阶段的误差比例。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论