Java教程

GRU反向传播公式推导

本文主要是介绍GRU反向传播公式推导,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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]

 

这篇关于GRU反向传播公式推导的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!