手把手教你训练 RNN | Part II - 大数据技术参考_大数据技术文献_大数据趋势分析 -
当前位置:技术分享 > 技术参考 > 正文

手把手教你训练 RNN | Part II2018-06-05 14:12:44 | 编辑:hely | 查看: | 评论:0

RNN 中反向传播的目的是计算出最终的损失值 L 分别对权值矩阵(W_xh,W_ah,W_ao)和偏置向量(b_h,b_o)的偏导数值。

RNN 的反向传播是为了计算出关于损失函数的梯度值

读者可以在这里看到本文的 Part I(http://www.raincent.com/content-85-11648-1.html)。

单个 RNN 单元的反向传播

RNN 中反向传播的目的是计算出最终的损失值 L 分别对权值矩阵(W_xh,W_ah,W_ao)和偏置向量(b_h,b_o)的偏导数值。

 

 

推导出所需的导数值非常简单,我们只需要利用链式法则就能计算出它们。

第一步:为了计算代价,需要先定义损失函数。一般根据具体手中的任务来选择该损失函数。在这个例子里,对于多分类输出问题,我们采用交叉熵损失函数 L⟨t⟩,其具体计算过程如下:

 

 

第二步:接下来我们开始往后计算损失函数 L⟨t⟩ 对预测输出值的激活值 ŷ⟨t⟩ 的偏导数值。因为在前向传播过程中 softmax 函数以多分类的输出值作为输入,因此下面的偏导数值手把手教你训练 RNN  的计算分为两种情况:分类 i 时和分类 k 时:

 

 

 

第三步:接着利用分类 i 时和分类 k 时的偏导数值,可以计算出损失函数 L⟨t⟩ 对预测输出值 o⟨t⟩ 的偏导数值:

 

 

 

第四步:利用偏导数值及链式法则,计算出损失函数 L⟨t⟩ 对输出过程中的偏置向量 b_o 的偏导数值:

 

 

 

第五步:利用偏导数值及链式法则,计算出损失函数 L⟨t⟩ 对隐层至输出层中的权值矩阵 W_ao 的偏导数值:

 

 

 

第六步: 利用偏导数值及链式法则,计算出损失函数 L⟨t⟩ 对隐状态的激活值 a⟨t⟩ 的偏导数值:

 

 

 

第七步: 利用偏导数值及链式法则,计算出损失函数 L⟨t⟩ 对隐状态 h⟨t⟩ 的偏导数值:

 

 

 

第八步: 利用偏导数值及链式法则,计算出损失函数 L⟨t⟩ 对隐状态的偏置向量 b_h 的偏导数值:

 

 

 

第九步:利用偏导数值及链式法则,计算出损失函数 L⟨t⟩ 对输入层至隐层中的偏置矩阵 W_xh 的偏导数值:

 

 

 

第十步:利用偏导数值及链式法则,计算出损失函数 L⟨t⟩ 对输入层至隐层中的偏置矩阵 W_ah 的偏导数值:

 

 

 

随时间反向传播(BPTT)

就像前文中提到的前向传播过程一样,将循环网络展开,BPTT 将沿此一直运行着上述步骤。

 

 

 

 

主要的区别在于我们必须将每个时间步 t 的偏导数值累加起来,从而更新权值和偏置,这是因为这些参数在前向传播的过程中是被各个时间步所共享的。

 

总结

在本文的第一部分和第二部分中,我们了解了循环神经网络训练过程中所涉及到的前向传播和反向传播。接下来,我们将着眼于 RNN 中所存在的梯度消失问题,并讨论 LSTM 和 GRU 网络的进展。

博客原址:https://medium.com/learn-love-ai/step-by-step-walkthrough-of-rnn-training-part-ii-7141084d274b




上一篇:手把手教你训练 RNN | Part I Python数据预处理:使用Dask和Numba并行化加速下一篇:

公众平台

搜索"raincent"或扫描下面的二维码