目录
1、正向传播
由于网络比较复杂,一个节点可能连接了很多个其他节点,推导反向传播的时候很容易搞不清楚一个节点的导数是从哪些节点“传播”过来的。所以我建议可以给正向、反向传播都画一个下面这种计算图,方便看出节点之间的关系。
计算图(红色部分不属于时间步t):
公式:
2、反向传播
GRU反向传播的计算图(红色部分不属于时间步t):
根据计算图,从上往下推导反向传播的公式。
对于输出激活函数是softmax,损失函数是交叉熵的情况,常用的公式是:
(1)
我在RNN反向传播的推导中证明了这个公式,这里就不证明了。
根据
我们可以进而得到:
(2)
(3)
(4)
只需要利用,以上公式和RNN的情况是一模一样的,也不多解释了。
正如计算图所显示的那样,的导数总共和5项相关,即:
(5.a)
考虑正向传播的以下公式:
得到:
(其中)
(其中)
(其中)
(5.a)中的后四项为:
(5.a)可以写为:
(5.b) (5.b)提供了关于的递推关系式,最后一个时间步t=Tx时,只有第一项,所以可以准确求出来,其他时间步则通过传入的值并递推得到。
得到,继续计算剩下参数的导数:
以下式子上面已经计算过(只需要把时间步t+1改为t)
结合正向传播的公式:
得到:
(6)
(7)
(8)
(9)
(10)
(11)
以上就是GRU反向传播的所有公式。
3、总结
GRU反向传播在时间步t的流程
①传入(可能还要传入时间步t+1的cache)
②通过递推关系计算
(5.b)
如果是最后一个时间步,只考虑 (5.b) 的第一项
③计算其他参数的导数
(2)
(3)
(6)
(7)
(8)
(9)
(10)
(11)
(这些公式具有对时间步t的求和,但是我们在一个时间步t只需要计算一项,最后在加起来就行)
④把 和时间步t的cache传递到下一个时间步