10章
RNN为什么会有梯度消失或爆炸,分别如何解决?
循环神经网络设计的初衷是能够捕获长距离输入之间的依赖,由于预测的误差是沿着神经网络的的每一层反向传播的,因此当雅克比矩阵的最大特征值大于1时,随着离输出越来越远,每层的梯度大小会呈指数增长,导致梯度爆炸,反之,若雅克比矩阵的最大特征值小于1时,梯度的大小会呈指数缩小,产生梯度消失。
对于普通的前馈网络来说,梯度消失意味着无法通过加深网络层次来改善神经网络的预测效果,因为无论如何加深网络,只有靠近输出的若干层才真正起到学习作用,这使得循环神经网络模型很难学习到序列中的长距离依赖关系。
梯度爆炸的问题可以通过梯度裁剪来缓解,即当梯度的范式大于某个给定值时,对梯度进行等比收缩,而梯度消失问题相对比较棘手,需要对模型本身进行改进,深度残差网络是对前馈神经网络的改进,通过残差学习的方式缓解了梯度消失的现象,从而使得我们能够学习到更深层的网络表示,而对于循神经网络来说,长短时记忆模型及其变种门控循环单元等模型通过加入门控机制,很大程度上弥补了梯度消失所带来的损失。
LSTM有哪些门,作用是什么?
输入门: 控制当前计算的新状态以及多大程度更新到记忆单元中
遗忘门:控制前一步记忆单元中的信息有多大程度被遗忘掉
输出门:控制当前的输出有多大程度上取决于当前的记忆单元。
Seq2Seq模型引入注意力机制是为了解决什么问题?
在实际使用中,会发现随着输入序列的增长,模型的性能发生了显著的下降,这是因为编码时输入序列的全部信息压缩到了一个向量表示中,随着序列增长,句子越前面的信息丢失就越严重。试想翻译一个有100个词的句子,需要将整个句子全部词的语义信息编码在一个向量中,而在解码时,目标语言的第一个词大概率是和源语言的第一个词想对应的,这就意味着第一步的解码就需要考虑100步之前的信息,建模时的一个小技巧是将源语言句子逆序输入,或者重复输入两遍来训练模型,以得到一定的性能提升,使用长短时记忆模型能够一定程度上缓解这个问题,但在实际中对于过长的序列仍然难以有很好的表现。
seq2seq模型中的输出序列中,常常会损失部分输入序列的信息,这是因为在解码时,当前词及对应的源语言的上下文信息和位置信息在编解码过程中丢失了。注意力机制就是为了解决该问题。在注意力机制中,仍然可以用普通的循环神经网络对输入序列进行编码,得到隐状态,但在解码时,每一个输出词都依赖前一个隐状态以及输入序列每一个对应的隐状态。(注意力权重不是一个固定权重,而是由另一个神经网络计算得到)---------> 得出如下解释: 在生成一个输出词时,会考虑每一个输入词和当前输出词的对齐关系,对齐越好的词,会有越大的权重,对生成当前输出词的影响也就越大,