长期依赖问题

长期依赖问题在于经过许多阶段梯度传播后,梯度倾向于消失(多数)或者爆炸(少数)。循环神经网络涉及到多次相同函数的组合,这些组合导致极短的非线性。
优化循环神经网络长期依赖问题 LSTM GRU 截断梯度 渗透单元

ESN回声状态网络:

。。。

跳跃连接:

从过去某个层输出,直接链接到未来层。引入d延时循环链接保证单元能够被前d个单元影响,减轻梯度爆炸和消失问题。导数的指数减小速度与T/d有关而不是T有关。如ResNet:
优化循环神经网络长期依赖问题 LSTM GRU 截断梯度 渗透单元

渗透单元:

设置自连接单元从而获得导数近似1。下图u(t-1)到u(t)是个自连接例子。
优化循环神经网络长期依赖问题 LSTM GRU 截断梯度 渗透单元
当alpha接近1时,模型能够记住遥远过去信息,当alpha接近0时,模型遗忘过去信息,着重当前新的信息。其实就是用alpha值大小来控制模型到底是看重当下还是过去。

删除连接:

信息在较长的时间尺度上更容易长距离移动,将一些长度为1的连接使用更长的连接替换,迫使单元在长时间上运作。

门控LSTM:

优化循环神经网络长期依赖问题 LSTM GRU 截断梯度 渗透单元
lstm在h之间加入一个cell状态单元c,控制单元的长期和短期信息的遗忘。渗透单元中通常手动设置alpha的值。但这会导致一些问题。如果某些信息在使用后,模型想要遗忘掉,但由于alpha值固定,导致旧的信息一直存在。lstm就是使用模型来控制什么时候遗忘旧时信息。其中i为输入门,f为遗忘门,o为输出门。可以看到i和f分别控制单元c过去和当前信息的占据比例。

门控GRU:

在lstm中加入一个单元c,且用i和f分别控制过去和当前信息的多少。是否有必要呢?结合渗透单元,GRU基于lstm产生另一种门控机制。
优化循环神经网络长期依赖问题 LSTM GRU 截断梯度 渗透单元
GRU中r为复位门,u为更新门。可以看到u的作用类似于f和i。而则用于控制新信息中就有信息h(t-1)的占据比例。

截断梯度:

优化循环神经网络长期依赖问题 LSTM GRU 截断梯度 渗透单元
高度非线性函数(循环神经网络)导致梯度非常大或非常小,这样导致参数更新时步伐较大,可能进入目标函数较大区域。如上左图,没有截断时,参数直接被推离到小峡谷之外。当使用梯度截断后,更新步长受到限制,对于这种大梯度的反应较为温和。
一种方法是使用衰减速度的学习率,使得学习率能与学习阶段(目标函数不同的地形)符合。
另一种是梯度截断:
1、在参数更新时,小批量截断产生的参数梯度
2、在参数更新时,选择截断梯度g的范数。v是范数上届,当g范数大于v时,就是用二者比值来缩小梯度。
优化循环神经网络长期依赖问题 LSTM GRU 截断梯度 渗透单元
梯度截断有助于处理梯度爆炸问题,但无助于梯度消失。

信息流的正则化:

解决梯度消失和捕获长期依赖问题的想法是梯度乘积尽量为1,lstm和gru门控机制是一种方式。另一种方法就是使梯度向量在反向传播过程中尽量维持幅度。如下:
优化循环神经网络长期依赖问题 LSTM GRU 截断梯度 渗透单元
如果能够使h(t)/h(t-1)的导数尽量为1,那么梯度在传播过程中就能保持一定大小。因此构建正则项。通过与截断梯度连用,可以很好增强RNN学习长期依赖。但该方法在处理冗余数据(语言模型)时效果不如LSTM。