雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 Step-by-step walkthrough of RNN Training - Part II,作者为 Eniola Alese。
翻译 | 陈涛 整理 | 凡江
RNN 的反向传播是为了计算出关于损失函数的梯度值
读者可以在这里看到本文的 Part I(https://www.leiphone.com/news/201805/ZMeniGUPBZ50lyvk.html)。
单个 RNN 单元的反向传播
RNN 中反向传播的目的是计算出最终的损失值 L 分别对权值矩阵(W_xh,W_ah,W_ao)和偏置向量(b_h,b_o)的偏导数值。
推导出所需的导数值非常简单,我们只需要利用链式法则就能计算出它们。
第一步:为了计算代价,需要先定义损失函数。一般根据具体手中的任务来选择该损失函数。在这个例子里,对于多分类输出问题,我们采用交叉熵损失函数 L⟨t⟩,其具体计算过程如下:
第二步:接下来我们开始往后计算损失函数 L⟨t⟩ 对预测输出值的激活值 ŷ⟨t⟩ 的偏导数值。因为在前向传播过程中 softmax 函数以多分类的输出值作为输入,因此下面的偏导数值的计算分为两种情况:分类 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
雷锋网雷锋网