十、循环神经网络

循环神经网络

循环神经网络(RNN)是用来建模序列化数据的一种主流深度学习模型。RNN则通过将神经元串行起来处理序列化的数据。由于每个神经元能用它的内部变量保存之前输入的序列信息, 因此整个序列被浓缩成抽象的表示,并可以据此进行分类或生成新的序列。近年来,得益于计算能力的大幅提升和模型的改进,RNN在很多领域取得了突破性的进展——机器翻译、序列标注、图像描述、推荐系统、智能聊天机器人、自动作词作曲等。
RNN能够获取之前序列信息的关键在于它加入了隐变量ht,由图可见,对于一个长度为T的输入序列X,我们可以将其展开成T层。其中,第t层的隐含状态ht编码了序列中前t个输入的信息, ht可以通过当前的输入xt和上一层神经网络的状态ht−1计算得到,Ot通过ht得到;
在这里插入图片描述
通过这样的方法,最后一层的状态hT编码了整个序列的信息,因此可以作为整篇文档的压缩表示,以此为基础的结构可以应用于多种具体任务。例如,在hT后面直接接一个Softmax层,输出文本所属类别的预测概率y,就可以实现文本分类。

循环神经网络中的激活函数

循环神经网络中能否使用ReLU作为激活函数

答案是肯定的,但是需要对矩阵的初值做一定限制,否则十分容易引发数值问题。
当采用ReLU作为循环神经网络中隐含层的激活函数时,只有当W的取值在单位矩阵附近时才能取得比较好的效果,因此需要将W初始化为单位矩阵。实验证明,初始化W为单位矩阵并使用ReLU激活函数在一些应用中取得了与长短期记忆模型相似的结果,并且学习速度比长短期记忆模型更快,是一个值得尝试的小技巧。

循环神经网络的梯度消失问题

循环神经网络为什么会出现梯度消失或梯度爆炸?有哪些改进方案

循环神经网络模型的求解可以采用BPTT(基于时间的反向传播)算法实现,BPTT实际上是反向传播算法的简单变种。如果将循环神经网络按时间展开成T层的前馈神经网络来理解,就和普通的反向传播算法没有什么区别了。循环神经网络的设计初衷之一就是能够捕获长距离输入之间的依赖。从结构上来看,循环神经网络也理应能够做到这一点。然而实践发现,使用BPTT算法学习的循环神经网络并不能成功捕捉到长距离的依赖关系,这一现象主要源于深度神经网络中的梯度消失。
梯度爆炸的问题可以通过梯度裁剪来缓解,即当梯度的范式大于某个给定值时,对梯度进行等比收缩。而梯度消失问题相对比较棘手,需要对模型本身进行改进。深度残差网络是对前馈神经网络的改进,通过残差学习的方式缓解了梯度消失的现象,从而使得我们能够学习到更深层的网络表示;而对于循环神经网络来说,长短时记忆模型及其变种门控循环单元等模型通过加入门控机制,很大程度上弥补了梯度消失所带来的损失。

LSTM

长短期记忆网络(Long Short Term Memory,LSTM)是循环神经网络的最知名和成功的扩展。由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果往往达不到预期效果。LSTM可以对有价值的信息进行长期记忆,从而减小循环神经网络的学习难度。

LSTM是如何实现长短期记忆功能的?

在这里插入图片描述

与传统的循环神经网络相比,LSTM仍然是基于xt和ht−1来计算ht,只不过对内部的结构进行了更加精心的设计,加入了门的概念:
输入门It:输入门控制当前计算的新状态以多大程度更新到记忆单元中。
遗忘门Ft:遗忘门控制前一步记忆单元中的信息有多大程度被遗忘掉。
输出门Ot:输出门控制当前的输出有多大程度上取决于当前的记忆单元。
此外,LSTM新提出了记忆单元的概念:
1ct:候选记忆单元
ct:记忆单元

其中it是通过输入xt和上一步的隐含层输出ht−1进行线性变换,再经过激活函数σ得到的。输入门it的结果是向量,其中每个元素是0到1之间的实数,用于控制各维度流过阀门的信息量;Wi、Ui两个矩阵和向量bi为输入门的参数,是在训练过程中需要学习得到的。遗忘门ft和输出门ot的计算方式与输入门类似,它们有各自的参数W、U和b。与传统的循环神经网络不同的是,从上一个记忆单元的状态ct−1到 当前的状态ct的转移不一定完全取决于激活函数计算得到的状态,还由输入门和遗忘门来共同控制。
在一个训练好的网络中,当输入的序列中没有重要信息时,LSTM的遗忘门的值接近于1,输入门的值接近于0,此时过去的记忆会被保存,从而实现了长期记 忆功能;当输入的序列中出现了重要的信息时,LSTM应当把其存入记忆中,此时 其输入门的值会接近于1;当输入的序列中出现了重要信息,且该信息意味着之前 的记忆不再重要时,输入门的值接近1,而遗忘门的值接近于0,这样旧的记忆被 遗忘,新的重要信息被记忆。经过这样的设计,整个网络更容易学习到序列之间的长期依赖。

LSTM里各模块分别使用什么激活函数,可以使用别的激活函数吗?

关于激活函数的选取,在LSTM中,遗忘门、输入门和输出门使用Sigmoid函数作为激活函数;在生成候选记忆时,使用双曲正切函数Tanh作为激活函数。
值得注意的是,这两个激活函数都是饱和的,也就是说在输入达到一定值的情况 下,输出就不会发生明显变化了。如果是用非饱和的激活函数,例如ReLU,那么将难以实现门控的效果。Sigmoid函数的输出在0~1之间,符合门控的物理定义。 且当输入较大或较小时,其输出会非常接近1或0,从而保证该门开或关。在生成候选记忆时,使用Tanh函数,是因为其输出在−1~1之间,这与大多数场景下特征分布是0中心的吻合。此外,Tanh函数在输入为0附近相比Sigmoid函数有更大的梯度,通常使模型收敛更快。

门控循环单元GRU

GRU是在LSTM之后提出的。GRU在结构上比LSTM更简洁,两者在效果上是差不多的。
GRU提出了两个门:
遗忘门:遗忘门控制前一步记忆单元中的信息有多大程度被遗忘掉
更新门:控制当前计算的新状态以多大程度更新到记忆单元中
在这里插入图片描述

Seq2Seq

Seq2Seq,全称Sequence to Sequence模型,目前还没有一个很好的中文翻译, 我们暂且称之为序列到序列模型。大致意思是将一个序列信号,通过编码和解码生成一个新的序列信号,通常用于机器翻译、语音识别、自动对话等任务。

什么是Seq2Seq模型?Seq2Seq模型有哪些优点?

Seq2Seq模型的核心思想是,通过深度神经网络将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入与解码输出两个环节构成。在经典的实现中,编码器和解码器各由一个循环神经网络构成,既可以选择传统循环神经网络结构,也可以使用长短期记忆模型、门控循环单元等。在Seq2Seq模型中,两个循环神经网络是共同训练的。 假想一个复习和考试的场景。我们将学到的历史信息经过了一系列加工整理,形成了所谓的知识体系,这便是编码过程。然后在考试的时候, 将高度抽象的知识应用到系列问题中进行求解,这便是解码过程。
对应于机器翻译过程。输入的序列是一个源语言的句子,有三个单词A、B、C,编码器依次读入A、B、C和结尾符。 在解码的第一步, 解码器读入编码器的最终状态,生成第一个目标语言的词W;第二步读入第一步 的输出W,生成第二个词X;如此循环,直至输出结尾符。输出的序列W、 X、Y、Z就是翻译后目标语言的句子。
在这里插入图片描述
在文本摘要任务中,输入的序列是长句子或段落,输出的序列是摘要短句。 在图像描述文本生成任务中,输入是图像经过视觉网络的特征,输出的序列是图 像的描述短句。进行语音识别时,输入的序列是音频信号,输出的序列是识别出 的文本。不同场景中,编码器和解码器有不同的设计,但对应Seq2Seq的底层结构 却如出一辙。

注意力机制

Seq2Seq模型引入注意力机制是为了解决什么问题?

详见Transformer

为什么选用了双向的循环神经网络模型?

详见BERT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值