GRU反向传播公式推导

目录

1、正向传播

2、反向传播

3、总结


1、正向传播

由于网络比较复杂,一个节点可能连接了很多个其他节点,推导反向传播的时候很容易搞不清楚一个节点的导数是从哪些节点“传播”过来的。所以我建议可以给正向、反向传播都画一个下面这种计算图,方便看出节点之间的关系。

计算图(红色部分不属于时间步t):

公式:

\Gamma_u^{<t>}= \sigma(W_u[c^{<t-1>},x^{<t>}]+b_u)

\Gamma_r^{<t>}= \sigma(W_r[c^{<t-1>},x^{<t>}]+b_r)

\widetilde{c}^{<t>}=tanh(W_c[\Gamma_r^{<t>}.*c^{<t-1>},x^{<t>}]+bc)

c^{<t>}=\Gamma_u^{<t>}.*\widetilde{c}^{<t>}+(1-\Gamma_u^{<t>}).*c^{<t-1>}

z^{<t>}=W_yc^{<t>}+b_y

\hat{y}^{<t>}=softmax(z^{<t>})

\mathcal{L}^{<t>}(\hat{y}^{<t>}, y^{<t>})=-\sum_{j=1}^{n_y}y^{<t>}_jlog(\hat{y}^{<t>}_j)

L=\sum_{t=1}^{T_x}\mathcal{L}^{<t>}(\hat{y}^{<t>}, y^{<t>})  

2、反向传播

GRU反向传播的计算图(红色部分不属于时间步t):

根据计算图,从上往下推导反向传播的公式。

对于输出激活函数是softmax,损失函数是交叉熵的情况,常用的公式是:

\frac{\partial \mathcal{L}^{<t>}}{\partial z^{<t>}}=\hat{y}^{<t>}-y^{<t>}                                                                                                (1)

我在RNN反向传播的推导中证明了这个公式,这里就不证明了。

根据

z^{<t>}=W_yc^{<t>}+b_y

我们可以进而得到:

\frac{\partial \mathcal{L}^{<t>}}{\partial b_y}=\hat{y}^{<t>}-y^{<t>}\Rightarrow\frac{\partial L}{\partial b_y}=\sum_t\hat{y}^{<t>}-y^{<t>}                                                    (2)

\frac{\partial \mathcal{L}^{<t>}}{\partial W_y}=(\hat{y}^{<t>}-y^{<t>})(c^{<t>})^T\Rightarrow \frac{\partial L}{\partial W_y}=\sum_{t=1}^{T_x}(\hat{y}^{<t>}-y^{<t>})(c^{<t>})^T                   (3)

\frac{\partial \mathcal{L}^{<t>}}{\partial c^{<t>}}=W_y^T(\hat{y}^{<t>}-y^{<t>})                                                                                         (4)

 只需要利用a^{<t>}=c^{<t>},以上公式和RNN的情况是一模一样的,也不多解释了。

 正如计算图所显示的那样,c^{<t>}的导数总共和5项相关,即:

\frac{\partial L}{\partial c^{<t>}}\\ =\frac{\partial \mathcal{L}^{<t>}}{\partial c^{<t>}}\\ +\frac{\partial L}{\partial c^{<t+1>}}\frac{\partial c^{<t+1>}}{\partial c^{<t>}}\\ +\frac{\partial L}{\partial \Gamma_{u}^{<t+1>}}\frac{\partial \Gamma_{u}^{<t+1>}}{\partial c^{<t>}}\\ +\frac{\partial L}{\partial \Gamma_{r}^{<t+1>}}\frac{\partial \Gamma_{r}^{<t+1>}}{\partial c^{<t>}}\\ +\frac{\partial L}{\partial \widetilde{c}^{<t+1>}}\frac{\partial \widetilde{c}^{<t+1>}}{\partial c^{<t>}}                                                                                                        (5.a)

考虑正向传播的以下公式:

c^{<t+1>}_i=\Gamma_{ui}^{<t+1>}.*\widetilde{c}_i^{<t+1>}+(1-\Gamma_{ui}^{<t+1>}).*c^{<t>}_i

 \widetilde{c}^{<t+1>}_i=tanh(W_{cij}[\Gamma_r^{<t+1>}.*c^{<t>},x^{<t+1>}]_j+b_{ci})

\Gamma_{ui}^{<t+1>}= \sigma(W_{uij}[c^{<t>},x^{<t+1>}]_j+b_{ui})

\Gamma_{rk}^{<t+1>}= \sigma(W_{rkj}[c^{<t>},x^{<t+1>}]_j+b_{rk})

得到:

\frac{\partial c^{<t+1>}_i}{\partial c^{<t>}_i}=1-\Gamma_{ui}^{<t+1>}

\frac{\partial L}{\partial \Gamma_{ui}^{<t+1>}}=\frac{\partial L}{\partial c_{i}^{<t+1>}}\frac{\partial c_i^{<t+1>}}{\partial \Gamma_{ui}^{<t+1>}}=\frac{\partial L}{\partial c_{i}^{<t+1>}}(\widetilde{c}^{<t+1>}_i-c_i^{<t>})

\frac{\partial \Gamma_{ui}^{<t+1>}}{\partial c^{<t>}_j}=\Gamma_{ui}^{<t+1>}(1-\Gamma_{ui}^{<t+1>})W_{uc ,ij}        (其中W_{uc}=W_u[:,1:n_c]

 \frac{\partial L}{\partial \widetilde{c}^{<t+1>}_i}=\frac{\partial L}{\partial c^{<t+1>}_i}\frac{\partial c^{<t+1>}_i}{\partial \widetilde{c}^{<t+1>}_i}=\frac{\partial L}{\partial c^{<t+1>}_i}\Gamma_{ui}^{<t+1>}

\frac{\partial \widetilde{c}_i^{<t+1>}}{\partial c^{<t>}_j}=[1-(\widetilde{c}_i^{<t+1>})^2]W_{cc,ij}\Gamma^{<t+1>}_{rj}        (其中W_{cc}=W_c[:,1:n_c]

 \frac{\partial \widetilde{c}_i^{<t+1>}}{\partial \Gamma^{<t+1>}_{rk}}=[1-(\widetilde{c}_i^{<t+1>})^2]W_{cc,ik}c^{<t>}_k

\frac{\partial L}{\partial \Gamma_{rk}^{<t+1>}}=\sum_i\frac{\partial L}{\partial \widetilde{c}^{<t+1>}_i}\frac{\partial \widetilde{c}_i^{<t+1>}}{\partial \Gamma^{<t+1>}_{rk}}=\sum_i\frac{\partial L}{\partial c^{<t+1>}_i}\Gamma_{ui}^{<t+1>}[1-(\widetilde{c}_i^{<t+1>})^2]W_{cc,ik}c^{<t>}_k

\frac{\partial \Gamma_{rk}^{<t+1>}}{\partial c^{<t>}_j}=\Gamma_{rk}^{<t+1>}(1-\Gamma_{rk}^{<t+1>})W_{rc,kj}        (其中W_{rc}=W_r[:,1:n_c]

(5.a)中的后四项为:

\frac{\partial L}{\partial c^{<t+1>}}\frac{\partial c^{<t+1>}}{\partial c^{<t>}}=\frac{\partial L}{\partial c^{<t+1>}}.*(1-\Gamma_u^{<t+1>})

\frac{\partial L}{\partial \Gamma_{ui}^{<t+1>}}\frac{\partial \Gamma_{ui}^{<t+1>}}{\partial c^{<t>}_j}=\frac{\partial L}{\partial c^{<t+1>}_i}(\widetilde{c}^{<t+1>}_i-c^{<t>}_i)\Gamma_{ui}^{<t+1>}(1-\Gamma_{ui}^{<t+1>})W_{uc,ij}

\frac{\partial L}{\partial \widetilde{c}^{<t+1>}_i}\frac{\partial \widetilde{c}^{<t+1>}_i}{\partial c^{<t>}_j}=\frac{\partial L}{\partial c^{<t+1>}_i}\Gamma_{ui}^{<t+1>}[1-(\widetilde{c}_i^{<t+1>})^2]W_{cc,ij}\Gamma_{rj}^{<t+1>}

\frac{\partial L}{\partial \Gamma_{rk}^{<t+1>}}\frac{\partial \Gamma_{rk}^{<t+1>}}{\partial c^{<t>}_j}\\ =(\sum_i\frac{\partial L}{\partial c^{<t+1>}_i}\Gamma_{ui}^{<t+1>}[1-(\widetilde{c}_i^{<t+1>})^2]W_{cc,ik}c^{<t>}_k)\Gamma_{rk}^{<t+1>}(1-\Gamma_{rk}^{<t+1>})W_{rc,kj}

(5.a)可以写为:

\frac{\partial L}{\partial c^{<t>}}\\ =W_y^T(\hat{y}^{<t>}-y^{<t>})\\ +\frac{\partial L}{\partial c^{<t+1>}}.*(1-\Gamma_u^{<t+1>})\\ + W_{uc}^T[\frac{\partial L}{\partial c^{<t+1>}}.*(\widetilde{c}^{<t+1>}-c^{<t>}).*\Gamma_{u}^{<t+1>}.*(1-\Gamma_{u}^{<t+1>})]\\ + \Gamma_{rj}^{<t+1>}.*\left \{ W_{cc}^T[\frac{\partial L}{\partial c^{<t+1>}}.*\Gamma_{u}^{<t+1>}.*(1-(\widetilde{c}^{<t+1>})^2)] \right \}\\ +W_{rc}^T\left \{ \Gamma_{r}^{<t+1>}.*(1-\Gamma_{r}^{<t+1>}).*c^{<t>}.*\left [ W_{cc}^T[\frac{\partial L}{\partial c^{<t+1>}}.*\Gamma_{u}^{<t+1>}.*(1-(\widetilde{c}^{<t+1>})^2)] \right ] \right \}

                                                                                                                                                 (5.b)   (5.b)提供了关于\frac{\partial L}{\partial c^{<t>}}的递推关系式,最后一个时间步t=Tx时,只有第一项,所以可以准确求出来,其他时间步则通过传入\frac{\partial L}{\partial c^{<t+1>}}的值并递推得到。

得到\frac{\partial L}{\partial c^{<t>}},继续计算剩下参数的导数:

以下式子上面已经计算过(只需要把时间步t+1改为t)

\frac{\partial L}{\partial \Gamma_{ui}^{<t>}}=\frac{\partial L}{\partial c^{<t>}_i}(\widetilde{c}^{<t>}_i-c^{<t-1>}_i)

\frac{\partial L}{\partial \widetilde{c}^{<t>}_i}=\frac{\partial L}{\partial c^{<t>}_i}\Gamma_{ui}^{<t>}

\frac{\partial L}{\partial \Gamma_{rk}^{<t>}}=\sum_i\frac{\partial L}{\partial c^{<t>}_i}\Gamma_{ui}^{<t>}[1-(\widetilde{c}_i^{<t>})^2]W_{cc,ik}c^{<t-1>}_k

结合正向传播的公式:

 \widetilde{c}^{<t>}_i=tanh(W_{cij}[\Gamma_r^{<t>}.*c^{<t-1>},x^{<t>}]_j+b_{ci})

\Gamma_{ui}^{<t>}= \sigma(W_{uij}[c^{<t-1>},x^{<t>}]_j+b_{ui})

\Gamma_{rk}^{<t>}= \sigma(W_{rkj}[c^{<t-1>},x^{<t>}]_j+b_{rk})

得到:

\frac{\partial L}{\partial W_{cij}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \widetilde{c}^{<t>}_i}(1-(\widetilde{c}^{<t>}_i)^2)[\Gamma_r^{<t>}.*c^{<t-1>},x^{<t>}]_j

\frac{\partial L}{\partial b_{ci}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \widetilde{c}^{<t>}_i}(1-(\widetilde{c}^{<t>}_i)^2)

\frac{\partial L}{\partial W_{uij}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma^{<t>}_{ui}}\Gamma^{<t>}_{ui}(1-\Gamma^{<t>}_{ui})[c^{<t-1>},x^{<t>}]_j

\frac{\partial L}{\partial b_{ui}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma^{<t>}_{ui}}\Gamma^{<t>}_{ui}(1-\Gamma^{<t>}_{ui})

\frac{\partial L}{\partial W_{rkj}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma^{<t>}_{rk}}\Gamma^{<t>}_{rk}(1-\Gamma^{<t>}_{rk})[c^{<t-1>},x^{<t>}]_j

\frac{\partial L}{\partial b_{rk}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma^{<t>}_{rk}}\Gamma^{<t>}_{rk}(1-\Gamma^{<t>}_{rk})

\Rightarrow

\frac{\partial L}{\partial W_{cij}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}_i}\Gamma_{ui}^{<t>}(1-(\widetilde{c}^{<t>}_i)^2)[\Gamma_r^{<t>}.*c^{<t-1>},x^{<t>}]_j

\frac{\partial L}{\partial b_{ci}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}_i}\Gamma_{ui}^{<t>}(1-(\widetilde{c}^{<t>}_i)^2)

\frac{\partial L}{\partial W_{uij}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}_i}(\widetilde{c}^{<t>}_i-c^{<t-1>}_i)\Gamma^{<t>}_{ui}(1-\Gamma^{<t>}_{ui})[c^{<t-1>},x^{<t>}]_j

\frac{\partial L}{\partial b_{ui}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}_i}(\widetilde{c}^{<t>}_i-c^{<t-1>}_i)\Gamma^{<t>}_{ui}(1-\Gamma^{<t>}_{ui})

\frac{\partial L}{\partial W_{rkj}}=\sum_{t=1}^{T_x}(\sum_i\frac{\partial L}{\partial c^{<t>}_i}\Gamma_{ui}^{<t>}[1-(\widetilde{c}_i^{<t>})^2]W_{cc,ik}c^{<t-1>}_k)\Gamma^{<t>}_{rk}(1-\Gamma^{<t>}_{rk})[c^{<t-1>},x^{<t>}]_j

\frac{\partial L}{\partial b_{rk}}=\sum_{t=1}^{T_x}(\sum_i\frac{\partial L}{\partial c^{<t>}_i}\Gamma_{ui}^{<t>}[1-(\widetilde{c}_i^{<t>})^2]W_{cc,ik}c^{<t-1>}_k)\Gamma^{<t>}_{rk}(1-\Gamma^{<t>}_{rk})

\Rightarrow

\frac{\partial L}{\partial W_{c}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*\Gamma_{u}^{<t>}.*(1-(\widetilde{c}^{<t>})^2)[\Gamma_r^{<t>}.*c^{<t-1>},x^{<t>}]^T                                       (6)

\frac{\partial L}{\partial b_{c}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*\Gamma_{u}^{<t>}.*(1-(\widetilde{c}^{<t>})^2)                                                                                (7)

\frac{\partial L}{\partial W_{u}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*(\widetilde{c}^{<t>}-c^{<t-1>}).*\Gamma^{<t>}_{u}.*(1-\Gamma^{<t>}_{u})[c^{<t-1>},x^{<t>}]^T                        (8)

\frac{\partial L}{\partial b_{u}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*(\widetilde{c}^{<t>}-c^{<t-1>}).*\Gamma^{<t>}_{u}.*(1-\Gamma^{<t>}_{u})                                                    (9)

\frac{\partial L}{\partial W_{r}}=\sum_{t=1}^{T_x}c^{<t-1>}.*\Gamma^{<t>}_{r}.*(1-\Gamma^{<t>}_{r}).*\left \{ W_{cc}^T[\frac{\partial L}{\partial c^{<t>}}.*\Gamma_{u}^{<t>}.*(1-(\widetilde{c}^{<t>})^2)] \right \}[c^{<t-1>},x^{<t>}]^T                                                                                                                                                    (10)

\frac{\partial L}{\partial b_{r}}=\sum_{t=1}^{T_x}c^{<t-1>}.*\Gamma^{<t>}_{r}.*(1-\Gamma^{<t>}_{r}).*\left \{ W_{cc}^T[\frac{\partial L}{\partial c^{<t>}}.*\Gamma_{u}^{<t>}.*(1-(\widetilde{c}^{<t>})^2)] \right \}                   (11)

以上就是GRU反向传播的所有公式。

3、总结

GRU反向传播在时间步t的流程

①传入\frac{\partial L}{\partial c^{<t+1>}}(可能还要传入时间步t+1的cache)

②通过递推关系计算\frac{\partial L}{\partial c^{<t>}}

\frac{\partial L}{\partial c^{<t>}}\\ =W_y^T(\hat{y}^{<t>}-y^{<t>})\\ +\frac{\partial L}{\partial c^{<t+1>}}.*(1-\Gamma_u^{<t+1>})\\ + W_{uc}^T[\frac{\partial L}{\partial c^{<t+1>}}.*(\widetilde{c}^{<t+1>}-c^{<t>}).*\Gamma_{u}^{<t+1>}.*(1-\Gamma_{u}^{<t+1>})]\\ + \Gamma_{rj}^{<t+1>}.*\left \{ W_{cc}^T[\frac{\partial L}{\partial c^{<t+1>}}.*\Gamma_{u}^{<t+1>}.*(1-(\widetilde{c}^{<t+1>})^2)] \right \}\\ +W_{rc}^T\left \{ \Gamma_{r}^{<t+1>}.*(1-\Gamma_{r}^{<t+1>}).*c^{<t>}.*\left [ W_{cc}^T[\frac{\partial L}{\partial c^{<t+1>}}.*\Gamma_{u}^{<t+1>}.*(1-(\widetilde{c}^{<t+1>})^2)] \right ] \right \}

                                                                                                                                                 (5.b) 

如果是最后一个时间步,只考虑 (5.b) 的第一项

③计算其他参数的导数

 \frac{\partial \mathcal{L}^{<t>}}{\partial b_y}=\hat{y}^{<t>}-y^{<t>}\Rightarrow\frac{\partial L}{\partial b_y}=\sum_t\hat{y}^{<t>}-y^{<t>}                                                            (2)

\frac{\partial \mathcal{L}^{<t>}}{\partial W_y}=(\hat{y}^{<t>}-y^{<t>})(c^{<t>})^T\Rightarrow \frac{\partial L}{\partial W_y}=\sum_{t=1}^{T_x}(\hat{y}^{<t>}-y^{<t>})(c^{<t>})^T                           (3)

\frac{\partial L}{\partial W_{c}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*\Gamma_{u}^{<t>}.*(1-(\widetilde{c}^{<t>})^2)[\Gamma_r^{<t>}.*c^{<t-1>},x^{<t>}]^T                                       (6)

\frac{\partial L}{\partial b_{c}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*\Gamma_{u}^{<t>}.*(1-(\widetilde{c}^{<t>})^2)                                                                                (7)

\frac{\partial L}{\partial W_{u}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*(\widetilde{c}^{<t>}-c^{<t-1>}).*\Gamma^{<t>}_{u}.*(1-\Gamma^{<t>}_{u})[c^{<t-1>},x^{<t>}]^T                        (8)

\frac{\partial L}{\partial b_{u}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*(\widetilde{c}^{<t>}-c^{<t-1>}).*\Gamma^{<t>}_{u}.*(1-\Gamma^{<t>}_{u})                                                    (9)

\frac{\partial L}{\partial W_{r}}=\sum_{t=1}^{T_x}c^{<t-1>}.*\Gamma^{<t>}_{r}.*(1-\Gamma^{<t>}_{r}).*\left \{ W_{cc}^T[\frac{\partial L}{\partial c^{<t>}}.*\Gamma_{u}^{<t>}.*(1-(\widetilde{c}^{<t>})^2)] \right \}[c^{<t-1>},x^{<t>}]^T                                                                                                                                                    (10)

\frac{\partial L}{\partial b_{r}}=\sum_{t=1}^{T_x}c^{<t-1>}.*\Gamma^{<t>}_{r}.*(1-\Gamma^{<t>}_{r}).*\left \{ W_{cc}^T[\frac{\partial L}{\partial c^{<t>}}.*\Gamma_{u}^{<t>}.*(1-(\widetilde{c}^{<t>})^2)] \right \}                  (11)

(这些公式具有对时间步t的求和,但是我们在一个时间步t只需要计算一项,最后在加起来就行)

④把\frac{\partial L}{\partial c^{<t>}} 和时间步t的cache传递到下一个时间步

                                                                                                                                                         

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值