目录
-
深入GRU
RNN的梯度消失:损失在反向传播中必须经过所有中间节点。
GRU额外添加了一些“捷径”红线,允许梯度直接流过去,而不是连乘的方式递减过去。
Update Gate
用来自适应学习应该把多少注意力放到前一个隐藏层状态上。
Reset Gate
自适应地删除不需要的连接。
tanh-RNN与GRU的对比
朴素RNN读取所有寄存器h,运算后存入所有寄存器,没有灵活性。
GRU可以灵活地选择读取部分寄存器,执行运算,写入部分寄存器。
Reset Gate起到决定要读哪些寄存器的目的,而Update Gate决定要写的寄存器。这里的“决定”其实是“强度”的意思,不是绝对的。
GRU与LSTM的对比
GRU中的隐藏状态类似于LSTM中的cell
,而LSTM中的隐藏状态
其实相当于一个暴露给外部世界的“显状态”。LSTM通过给cell加一个tanh获得非线性的灵活性。
-
深入LSTM
LSTM将所有操作都设置为门,这样就可以忘记/忽略某些东西,而不是把它们全部塞进其他操作之上:
New Memory Cell的计算是一个非线性的过程,与朴素RNN一模一样:
最关键之处在于,Memory Cell的更新中有一个加法项直接来自上一刻的Cell,也就是说建立了ct和ct−1的直接线性连接(与ResNet类似):
类似于GRU中的加法,在反向传播的时候允许原封不动地传递残差,也允许不传递残差,总之是自适应的。
有了这些改进,LSTM的记忆可以比RNN持续更长的step(大约100)。
训练一个RNN
- 使用LSTM或GRU
- 将递归权值矩阵初始化为正交
- 将其他矩阵初始化为较小的值
- 将forget gate偏置设为1:默认为不遗忘
- 使用自适应的学习率算法:Adam、AdaDelta
- 裁剪梯度的长度为小于1-5
- 在Cell中垂直应用Dropout而不是水平Dropout
- 保持耐心,通常需要训练很长时间
Ensemble
如果想获得额外的2个百分点的效果提升,可以训练多个模型,平均它们的预测。