RNN的前向传播和反向传播

在上一节当中,我们讲到了RNN的其中一个特点是参数共享,在这一节当中,我们用具体代码来展示RNN的前向传播。

首先是给出每一个参数具体的值:
RNN的前向传播和反向传播

W指的是相邻时刻隐藏单元间的权重矩阵,U指的是从X(t)计算得到的对应隐藏单元时用到的权重矩阵;V是由h(t)计算得到o(t)时用到的权重矩阵;b_o是由h(t)计算得到o(t)时用到的偏置值。
RNN的前向传播和反向传播

这就是一个简单循环神经网络的前向传播计算过程,输出的O(t)就是网络在时刻t的前向传播结果,这个计算过程可能会因为不同的循环体而出现差异,视实际的网络情况而定。使用t(1)时刻的状态也可以通过上述的过程去推导出t(2)的状态。优化循环神经网络时也需要对其进行损失函数的计算 。定义循环神经 网络的损失函数也可以从其他类型的神经网络中借鉴思路,但是要注意的是,由于循环神经网络的输出和时刻有关,其损失是所有时刻(或者部分时刻)上损失函数的总和,接下来就是介绍循环神经网络的反向传播知识。

有了RNN前向传播算法的基础,就容易推导出RNN反向传播算法的流程了。RNN反向传播算法的思路和DNN是一样的,即通过梯度下降法每一轮的迭代,得到合适的RNN模型参数U,W,V 由于我们是基于时间反向传播,所以RNN的反向传播有时也叫做BPTT(back-propagation throughtime)。当然这里的BPTT和DNN也有很大的不同点,即这里所有的U,W,V在序列的各个位置是共享的,反向传播时我们更新的是相同的参数。

对于RNN,由于我们在序列的每个位置都有损失函数,因此最终的损失L为:
RNN的前向传播和反向传播

因此可以得到U,V,W的偏导,其中V的偏导:
RNN的前向传播和反向传播

在反向传播时,在某一序列位置 t 的梯度损失由当前位置的输出对应的梯度损失和序列索引位置 t + 1 时的梯度损失两部分共同决定的。对于W在某一序列位置 t 的梯度损失需要反向传播一步步的计算。以t=3时刻为例求U、W的偏导:

RNN的前向传播和反向传播
由于预测时误差是沿着神经网络的每一层进行反向传播的,因此当权重值的矩阵最大特征值大于1时,随着离输出越来越远每层的梯度大小会随着指数增长,导致梯度爆炸;反之若矩阵的权重值小于1,梯度的大小会呈指数缩小,产生梯度消失;对于这种情况来说,梯度消失意味着无法通过加速加深网络层次来改善神经网络的预测效果,因为无论如何加深网络,只有靠近输出的若干层才真正起到学习的作用,这使得循环神经网络很难学习到输入序列钟的长距离依赖关系,因此上面的RNN模型一般不能直接应用。目前比较流行的解决办法有使用长短时记忆网络LSTM以及其变种门控循环单元GRU等模型来弥补梯度消失带来的损失。今天的内容就到这里了,在后面的章节中我们会提到以上讲的这些模型,敬请期待!

关注小鲸融创,一起深度学习金融科技!

RNN的前向传播和反向传播