Press "Enter" to skip to content

揭开LSTM结构的神秘面纱,让RNN变得完美

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

图片来源:pexels.com/@chivozol-43727

 

循环神经网络并不是完美的,其原因在于两大问题:梯度爆炸和梯度消失。发现梯度爆炸还比较简单,解决梯度消失就比较困难了。长短期记忆 (Long ShortTerm Memory, LSTM) 网络及门控循环单元 (GatedRecurrent Unit, GRU) 不仅能有效解决梯度消失问题,也使得神经网络能解决长距离依赖问题。

 

梯度爆炸

 

在随时间反向传播 (BackPropagationThrough Time, BPTT) 算法中,如果初始赋予权重的值很大,前面层会比后面层变化得更快,权值就会越来越大,导致权值溢出,出现NaN值,网络也变得不稳定。

 

在神经网络的训练中,通过观察以下信号可以检测梯度爆炸是否存在:

 

· 训练中,模型的权值快速增加,变得非常大。

 

· 训练中,模型的权值出现NaN值。

 

· 训练中,每个节点和网络层的误差梯度值都保持在1.0以上。

 

解决梯度爆炸有几种方法,下文列举了几种常用技术:

 

· 很简单,如果梯度向量高于某个阈值,就重新调整梯度向量以免它变得太大,这个方法叫做梯度截断。

 

· 使用权重正则化。检查网络权重,并惩罚产生较大权重值的网络损失函数。

 

· 用长短期记忆网络或门控循环单元代替循环神经网络。

 

· 对权重进行Xavier初始化或者He初始化。

 

梯度消失

 

梯度消失一般在激活函数的梯度非常小时出现。在反向传播算法中,由于与非常小的梯度相乘,权重会逐渐变小,直至在深层神经网络中消失,导致神经网络的长期记忆失效。

 

长距离依赖对于循环神经网络的正常运行是非常重要的。为了理解长距离依赖的重要性,我们把下面两个句子逐词输入神经网络,以预测下文的词:

 

The cat hadenjoyed eating fish, the fish was delicious and was eager to have more.

 

The cats hadenjoyed eating fish, the fish was delicious and were eager to have more.

 

· 在这两个句子中,神经网络必须记住第2时间步输入的句子的主语 (cat)的单复数来预测第12时间步的单词。

 

· 在训练中,错误是反向传播的。对于更靠近当前时间步的“层”,其权重收到的影响会大于之前的“层”。

 

· 正常情况下,循环层的权重在每一时间步依照偏导数修正。如果没有被拨回正确的方向,神经网络将继续学习。

 

· 最后,模型无法更新权重,也无法记起之前时间步的信息,无法解决长距离语法依赖的问题。

 

解决梯度消失有几种方法,下文列举了几种常用技术:

 

· 初始化单位矩阵的网络权值,这样就能把出现梯度消失的几率降到最低。

 

· 用流性整流函数 (RectifiedLinear Unit, ReLU) 替代sigmoid函数或tanh函数。

 

· 用长短期记忆或者门控循环单元替代循环神经网络,这两项技术就是为了抓取序列数据中的长距离依赖信息而开发的。

 

长短期记忆结构

 

长短期记忆网络是循环神经网络的一个变体,能够解决长距离依赖的问题。

 

 

长短期记忆网络结构

 

· 长短期记忆网络的核心就是用于储存信息的单元状态,即cell state,用字母C表示。

 

· 长短期记忆网络能够在cell state中添加或者删除信息。

 

· 对cell state添加及删除信息的操作是通过一个叫“门控单元”的结构实现的。

 

· 门控单元由一个sigmoid神经网络层和一个成对乘法操作组成。

 

 

门控单元

 

· Sigmoid层输出的值在0到1之间。

 

· 1表示“允许完全通过”,0表示“完全不允许通过”。

 

· 长短期记忆网络单元包括三个重要的组成部分,分别是遗忘门、更新门和输出门。

 

遗忘门结构

 

 

遗忘门结构

 

遗忘门是长短期记忆网络中储存信息的cell state。sigmoid层决定了什幺信息需要保留,什幺信息需要从cell state中删除,我们称这样一个sigmoid层为“forget gate”层。

 

· Sigmoid层根据上一隐藏层的输出h<t−1>和当前的输入x<t>产生一个0到1之间的张量。

 

· 将这个张量与之前的cell state C<t−1>,以此决定什幺信息是有用的、需要保留的,什幺信息是无用的、需要删除的。

 

让我们看回之前的例子:

 

The cat hadenjoyed eating fish, the fish was delicious and was eager to have more.

 

The cats hadenjoyed eating fish, the fish was delicious and were eager to have more.

 

为了预测这两个句子中位于第12时间步的单词,神经网络必须记住位于第2时间步的句子主语,即cats的单复数。

 

模型会基于之前输入的所有信息来预测这两个句子第12时间步的单词。Cell state必须包含在第2时间步输入的句子主语的单复数。

 

当cell state看到句子的主语,即cats,它会记录这个主语是单数还是复数。

 

更新门结构

 

 

更新门结构

 

更新门决定了什幺样的新信息需要储存在cell state中。

 

· “输入门”是决定什幺值需要更新的sigmoid函数,它输出一个在0和1之间的张量。

 

· Tanh函数会生成一个新的候选值C~<t>,这个张量也可能会添加到cell state中。

 

· 把这两个张量相乘之后会得到一个更新值。

 

· 这个更新值就会被添加到cell state中。

 

在之前语言模型的例子中,句子的主语就会被添加到cell state中。

 

输出门结构

 

 

输出门结构

 

输出门决定了输出的内容,输出的结果由cell state经过滤后得到。

 

· 由sigmoid层决定输出cell state的哪一部分内容。

 

· Cell state输出的值在通过tanh层时将被压缩到-1到1之间。

 

· 将tanh层与sigmoid层的输出值相乘,这样输出结果就是由Sigmoid层决定的了。

 

在之前语言模型的例子中,因为模型只看到了主语,它可能会想输出与动词相关的信息,比如说,它会输出主语的单复数,以便预测接下来会出现的动词形式。

 

 

沿时间轴展开的长短期记忆单元图解

 

jupyter notebook传送门:https://github.com/nitwmanish/Demystifying-Architecture-Of-Long-Short-Term-Memory-LSTM

 

结论

 

循环神经网络用于处理连续数据,其最大的问题在于梯度爆炸和梯度消失,而且它会遗忘长距离依赖信息。长短期记忆网络是循环神经网络的一个变体,它能够学习长距离依赖信息。

 

这篇文章旨在帮助读者理解长短期记忆网络及其学习长距离依赖信息的能力,并详细地解释了长短期记忆网络的关键组成部分,以及为什幺长短期记忆网络能够解决梯度爆炸和梯度消失的问题。

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注