(二)RNN 的 反向传播算法详细推导

在 反向传播算法理解 一文中,大体讲了反向传播算法的大体思想和优势,这篇文章拿最简单的RNN网络推导反向传播算法。

计算图和计算公式

我们拿最具代表性的如下RNN网络图简单推导。

 上图是一张计算图。为方便公式推导,我们把公式写出来。对于每一步 t ,都是如下的计算过程。

每一步的损失函数L^{(t)},总的损失函数 L 如下:

在每一步 t 中,x^{(t)} 是向量形式变量,h^{(t)} 是向量形式变量,a^{(t)} 是向量形式变量,o^{(t)}是向量形式变量,\hat{y}^{(t)} 是向量形式变量;W 是矩阵形式变量,V 是矩阵形式变量,U 是矩阵形式变量(注意下,在每一步 t 中,W、V、U、b、c都是一样的);L^{(t)}是一个实数值变量。

每一步的L^{(t)}相加得到的最终的  L  是一个实数值变量。

其中:参数矩阵变量是 W、V、U。截距变量是 b 、c。

反向传播算法推导

有了上边的基础,我们就可以开始推导啦,在推导之前,我们先熟悉下涉及到的 tanh函数。

tanh函数:tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

tanh函数的导数:{tanh}'(x)=1-tanh^{2}(x)    (对自变量的导数是   1 - 该函数的平方

下面开始从后往前推导:

1、首先最终的loss L 对每一步 t 中的L^{(t)}求导。根据式 10.13 导出。

2、接下来求 L 对每一步 t  中o^{(t)}求梯度。由于o^{(t)}是一个向量,需求出 L 对向量里的所有实数值变量o_{i}^{(t)}的导数,根据链式法则可得\frac{\partial L}{\partial o_{i}^{(t)}} = \frac{\partial L}{\partial L^{(t)}} \frac{\partial L^{(t)}}{\partial o_{i}^{(t)}},其中第一项 \frac{\partial L}{\partial L^{(t)}} = 1,其中第二项  \frac{\partial L^{(t)}}{\partial o_{i}^{(t)}} 可根据式10.11 和 由softmax得到的交叉熵损失函数L^{(t)}   求导算出来\frac{\partial L^{(t)}}{\partial o_{i}^{(t)}}=\hat{y}_{i}^{(t)}-\boldsymbol{1}_{i=y^{(t)}},softmax函数具体可参考多分类问题的softmax函数交叉熵损失函数推导,如果只想看最后结果,直接翻到最后。最后可求得:

 3、接下来求L对h^{(T)}求梯度,这里的T为最后一步 t 。同o^{(t)}一样, h^{(T)}也是一个向量,需求出L对向量里的所有实数值变量的梯度 。我们从计算图中可以看到,h^{(T)}的导数只来源于o^{(T)},可由式10.10可比较容易求得:码公式太费劲了,手写了公式如下,我们求得了对h^{(T)}每一维的梯度,也整合到了一起算出了对h^{(T)}的梯度向量,方便后续计算其他梯度:

 在最后一步 T ,在计算出 L 对h^{(T)}的梯度时,同时还可以计算出 L 对 V 的梯度,L对c的梯度。虽然每一步中的V,c是相同的,我们仍然可以记最后那步 T 的V为V^{(T)},最后那步 T 的c为c^{(T)}

由式10.10可以推出L 对 V 的梯度:这个写的有点歪,将就着看看吧~

由式10.10可以推出L 对 c 的梯度:

4、计算出 L对h^{(T)}的梯度后,就可以计算出 L 对 U 的梯度 和  L 对 W 的梯度 和 L 对 b 的梯度, 虽然每一步中的U,W,b是相同的,我们仍然可以记最后那步 T 的U、W、b为U^{(T)}W^{(T)}b^{(T)}

由式10.8 和式10.9 和 tanh 函数导数 可以推出L 对 U 的梯度:

计算L对W 的梯度 与L对U 的梯度的计算完全是一样的,只需要把 x^{(t)}改为 h^{(t-1)} 即可。

计算L对 b 的梯度与计算 L对U 的梯度 基本一致,只是少了最后一项,如下:

 5、算完 L 对最后一步 T 中变量的梯度之后,我们就该往前走,计算 L 对中间每一步中变量的梯度。因为中间每一步的计算过程都是一样的,我们用 t 就代表中间的每一步。

我们可先计算每步 t 中 L 对  h^{(t)} 的梯度

这里的h^{(t)}的梯度包含两部分,一部分来源于h^{(t+1)} , 一部分来源于o^{(t)}

6、求完 L 对  h^{(t)} 的梯度后,就可以求 L 对V^{(t)}c^{(t)}U^{(t)}W^{(t)}b^{(t)} 的梯度。与求最后一步 T 步时完全一样。

7、由于在RNN中,每一步 t 中的V^{(t)}c^{(t)}U^{(t)}W^{(t)}b^{(t)} 都是同一个向量/矩阵,所以将每一步求出来的梯度相加即可得到最终的梯度,例如 L 对 V 的梯度就是每一步梯度之和 \sum_{t}^{} (V^{(t)}),其他参数一样。

RNN的反向传播推导就讲到这里啦,欢迎各位大佬评论区留言~

猜你喜欢

转载自blog.csdn.net/qq_32103261/article/details/120493317
今日推荐