前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >斯坦福深度学习课程第七弹:RNN,GRU与LSTM

斯坦福深度学习课程第七弹:RNN,GRU与LSTM

作者头像
大数据文摘
发布2018-05-24 15:30:24
3390
发布2018-05-24 15:30:24
举报
文章被收录于专栏:大数据文摘大数据文摘

◆ ◆ ◆

1.语言模型

语言模型用于对特定序列的一系列词汇的出现概率进行计算。一个长度为m的词汇序列

的联合概率被表示为

由于在得到具体的词汇之前我们会先知道词汇的数量,词汇

的属性变化会根据其在输入文档中的位置而定,而联合概率

的计算通常只考虑包含个前缀词的词窗口而非考虑全部的前缀词:

公式1在语音识别和机器翻译系统中对判定一组词序列是否为相应输入序列的正确生成结果有着极为重要的作用。在一个给定的机器翻译系统中,针对各个短语或句子的翻译任务,软件通常被要求生成一组替代词序列(例如:“我已经”;“我曾有”;“我有”;“被我已经”;“被我占有”)以及它们的得分以判定它们是否能组成最优的翻译序列。

在机器翻译任务中,模型通过计量和比较各个替换输出词序列之间的得分优劣,从它们中为输入短语寻找最佳的答案词序列。为了完成这项工作,模型需要经常在词排序和词选择两个任务模型之间切换。而上面提到的目标将通过为所有的候选词序列设置概率计算函数而达成,这个函数将比较这些候选词序列各自的得分。获得最高得分的候选词序列就是机器翻译任务的输出。

例如:相比例句“小的这只猫真是”,机器会给例句“这只猫真小”更高的评分,相比“放学后步行去房子”,“放学后步行回家”会得到更高的得分。为了计算这些概率,将比较统计n元语言模型和词频模型的效果。比如,如果选择2元语言模型,语义2元组的词频通过统计当前词和其前面一个词,这就需要与1元语法模型的词频计算方法区分开来。公式2和3分别展示了2元语义模型和3元语义模型在处理这种关系时的做法。

公式3中表现出来的关系集中于基于上下文中固定窗口内容(例如:n个前缀词范围)对后续词的预测。在某些情况下,仅仅抽取n个前缀词作为窗口范围可能不足以很好地捕捉上下文信息。例如,当一篇文章在后段着重描写西班牙与法国的历史,而在前文中,当你读到“这两个国家走向了战争”这句话时,仅有此句的前文显然不能够让我们识别出这两个国家的命名实体。Bengio等人提出了第一个大规模的深度学习自然语言处理框架,此框架能够通过学习得到词汇的分布化表征捕捉上面提到的这种上下文关系;

图1展示了这种神经网络的框架。在这个模型中,输入词向量在隐层和输出层均得到使用。公式4展示了引入标准tanh()函数的softmax()分类函数中的各个参数,这个函数起到线性分类器的作用,

这一组短式代表全体前缀词的输入词向量。

然而,在所有传统的语言模型中,由于包含n长窗口的语言记忆信息规模会随着系统的运行呈指数式的增长,所以面对较大型的词窗口,如果不将记忆信息单独抽离处理,上面的任务几乎是不可能完成的。

◆ ◆ ◆

2.递归神经网络(RNN)

不同于传统的机器翻译模型仅仅考虑有限的前缀词汇信息作为语义模型的条件项,递归神经网络(RNN)有能力将语料集中的全部前序词汇纳入模型的考虑范围。

图2展示了RNN模型的架构,其中各个垂直矩形框代表每轮迭代的隐层,t.每个这样的隐层都拥有若干神经元,每个神经元都对输入向量执行线性矩阵操作而通过非线性操作输出结果(例如,tanh()函数)。在每一轮迭代中,前一步迭代的输出随着文档中下一条词汇的词向量而变化,

,是隐层的输入且隐层将产生预测输出值

和提供给下一层隐层的输出特征向量

(见公式5和公式6)。单独每个神经元的输入和输出情况如图3所示。

网络中各个参数的设置细节及含义如下:

在递归神经网络中,损失函数通常被设定为之前提到的交叉熵错误率。公式7展示了在迭代t中此函数在整个词库上的求和。

在规模为T的语料集上,交叉熵错误率计算如下:

公式9用于表示困惑度关系;它的计算基于2的指数,指数值为公式8中显示的交叉熵错误率函数负对数。困惑度用于衡量在进行序列后续词预测时考虑更多条件项对低值函数的扰乱程度(相较于真实结果来说)

执行一层RNN网络所需要的内存与语料中的词汇数量成正比。例如,一个拥有k个词的句子将在内存中占用k个词向量的空间。另外,RNN网络将维护两对W和b矩阵。尽管矩阵W的规模可能非常大,但其大小不会随着语料的规模而变化(不同于传统的模型)。对一个迭代1000轮的RNN网络,W将是个1000X1000的矩阵而和语料规模无关。

图4是一些出版物中对RNNs神经网络模型的另外一种表示。它将RNN神经网络的每个隐层表示为一个环。

2.1 剃度弥散及梯度爆炸问题

从依次进行的步骤中得到循环神经网络中的传播权值矩阵,RNN模型确保了实现的目标是通过多次迭代步长来传播内容信息的。通过以下的两个例句可以更深入的理解:

句1:“简走进了房间。约翰也走近了房间。简对___说你好”

句2:“简走进了房间。约翰也走近了房间。因为天色太晚了,人们在工作了一天后都回家了。简对___说你好”

上面的两个例子中,依据上下文,在空白处大部分都知道答案为“约翰”。第二个人在上下文中出现的相对词距对RNN模型中预测下一个词为“约翰”是非常重要的。通过我们对RNNs的了解,理论上该部分需要被给出。然而实验证明,RNNs模型中句1空白部分的预测准确率要比句2的高。这是因为在后向传播阶段,梯度贡献值在初期的步长传播中逐步递减。因此对于长句,随着内容越长识别“约翰”为空白处词的概率越低。以后我们将讨论梯度递减问题背后的数学推理。

在某轮迭代t中考虑公式5、6,用于计算RNN错误率

,我们对每一步迭代计算错误率总和。那么每一步t的错误率

均可通过前面所列的计算出来。

通过对公式5、6的结果进行链式规则求导而得到每一个迭代步长的错误率。式11展示了对应的求导过程。

为对之前k次迭代的偏导数。

公式15为式13的Jacobian矩阵范数。其中

为两个矩阵范数的上边界。依据公式15来计算每次迭代t中的部分梯度范数。

利用

范数来对以上两个矩阵进行范数计算。对于给定的sigmoid非线性函数,范数

的值只能是1。

在实验过程中,一旦梯度值增长很大,就会很容易探测到其引起的溢出(如:无穷与非数值);这就是梯度爆炸问题。然而,当梯度值接近于零时。对于语料集中词距较远的词,它将大大降低模型的学习质量并且梯度还会不断衰减;这就是剃度弥散问题。

如果想要获取梯度消失问题的实际问题,你可以访问下面的实例网站

2.2 解决梯度爆炸和弥散

上文介绍了解了一些在深度神经网络中的梯度弥散和梯度爆炸的情况,我们现在开始尝试用一些启发性的手段解决这些问题。

为了解决梯度爆炸问题,Thomas Mikolov首先提出了一个简单的启发性的解决方案,就是当梯度大于一定阈值的的时候,将它截断为一个较小的数。具体如算法1所述:

算法1:当梯度爆炸时截断梯度(伪代码)

图5可视化了梯度截断的效果。它展示了一个小的rnn(其中W为权值矩阵,b为bias项)的决策面。这个模型是一个一小段时间的rnn单元组成;实心箭头表明每步梯度下降的训练过程。当梯度下降过程中,模型的目标函数取得了较高的误差时,梯度将被送到远离决策面的位置。截断模型产生了一个虚线,它将误差梯度拉回到离原始梯度接近的位置。

为了解决梯度弥散的问题,我们介绍了两种方法。第一种方法是将随机初始化

改为一个有关联的矩阵初始化。第二种方法是使用ReLU(Rectified Linear Units)代替sigmoid函数。ReLU的导数不是0就是1.因此,神经元的梯度将始终为1,而不会当梯度传播了一定时间之后变小。

2.3 深度双向RNNs

如之前所说,在一个词序列中我们利用RNNs技术和过去的词来预测下一个词。其实同理我们也可以依据未来的词来做预测。Irsoy等人设计了一个双向深度神经网络,在每一个时间节点t,这个网络有两层神经元,一层从左向右传播,另一层从右向左传播。为了保证任何时刻t都有两层隐层,这个网络需要消耗两倍的存储量来存储权重和偏置等参数。最终的分类结果

是由两层RNN隐层组合来产生最终的结果。图6展示了双向网络结构,公式17和18表示双向RNN隐层的数学含义。在这两个关系中唯一不同点是循环的方向不一样。公式19展示了通过总结过去和未来词的表示,使用类别的关系来预测下一个词预测。

图7展示了一个从较低层传播到下一层的多层双向RNN。如图所示,在网络结构中,第t个时间里每一个中间神经元接受到前一个时间(同样的RNN层)传递过来的一组参数,以及之前RNN层传递过来的两组参数。这两组参数一个是从左到右的RNN输入,另一个是从右到左的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中,

)

• 之前预测的输出词,

结合上述3种输入将公式24中的解码阶段的f函数变为公式27中的1个。图9展示了这个模型。

扩展3:如之前章节所讨论的那,使用多个RNN层来训练深层循环神经网络。因为深层次能学习到更多东西,因此往往能提升预测的准确率,当然,这也意味着必须使用大的语料库来训练模型。

扩展4:如这一章之前提到的那样,训练双向编码器来提高精度。

扩展5:给一个德语中的词序列ABC,在英语中翻译为XY,我们这里使用CBA->XY而不是ABC->XY来训练RNN。这么做的目的是,因为A最有可能被翻译为X,再加上考虑之前提到的梯度弥散的问题,翻转输入词的顺序能够减少输出阶段的误差比例。

◆ ◆ ◆

3.门限循环单元

◆ ◆ ◆

3.长短期记忆神经LSTM

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ◆ ◆ ◆
  • ◆ ◆ ◆
    • 2.1 剃度弥散及梯度爆炸问题
      • 从依次进行的步骤中得到循环神经网络中的传播权值矩阵,RNN模型确保了实现的目标是通过多次迭代步长来传播内容信息的。通过以下的两个例句可以更深入的理解:
        • 2.2 解决梯度爆炸和弥散
          • 2.3 深度双向RNNs
            • 2.4 应用:RNN翻译模型
            • ◆ ◆ ◆
            • ◆ ◆ ◆
            相关产品与服务
            机器翻译
            机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档