训练步骤
循环神经网络的训练步骤与普通的全连接神经网络一样:
- 前向计算神经网络输出值
- 计算损失函数值
- 反向传播算法计算权重梯度
- 根据梯度,改变权重值,迭代计算求取损失函数最小值,同时获得对应的权重值。
步骤中与普通全连接神经网络不一样的地方是使用的反向传播算法不同,循环神经网络使用的反向传播算法是随时间反向传播(BPTT)算法。
BPTT
由于循环神经网络的输入包含了2部分:当前输入、上一次的输出,BPTT算法计算权重梯度时会沿两个方向传播:
- 与普通的反向传播算法相同,传递到上一层网络,这个方向只和权重矩阵 U 有关
- 另一个方向普通的反向传播算法不包括,沿时间线传递到初始时刻,这部分只和权重矩阵 W 有关
梯度爆炸与梯度消失
使用反向传播算法求取权重梯度是逐层对函数偏导相乘。神经网络中函数主要是加权和与激活函数,加权和是线性函数,加权和的导数就是权重值,所以梯度计算可以看成是权重值与激活函数的乘积的连乘。
如果激活函数的导数与权重值的乘积小于1,当网络层次很多时,乘积连乘会导致梯度迅速变小,直至消失,引起梯度消失。
同样地,激活函数的导数与权重值的乘积大于1,乘积连乘会导致梯度迅速变大,直至无穷大,引起梯度爆炸。
梯度消失使得我们难以知道参数朝哪个方向移动能够改进代价函数,而梯度爆炸会使得学习不稳定。
前馈网络中,因为每一层的权重值都是不同的,所以不同层的激活函数的导数与权重值的乘积不一定同时大于1或小于1,所以即使使 用非常深层的前馈网络,也能很大程度上有效地避免梯度消失与爆炸问题。
与前馈网络不同,循环网络在各时间步上使用相同的权重W,就容易导致梯度消失与爆炸问题。
克服梯度爆炸与梯度消失问题
通常可以通过一些方法克服梯度爆炸与梯度消失问题:
- 重新设计网络结构,减少层次
- 梯度裁剪(gradient clipping)
- 长短期记忆网络(LSTM)
- 权重正则化
等等。