LSTM反向传播公式推导

目录

1、正向传播

2、反向传播

3、总结


1、正向传播

LSTM的正向传播公式:

\Gamma_f^{<t>}= \sigma(W_f[a^{<t-1>},x^{<t>}]+b_f)

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

\Gamma_o^{<t>}= \sigma(W_o[a^{<t-1>},x^{<t>}]+b_o)

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

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

a^{<t>}=\Gamma_o^{<t>}.*tanh(c^{<t>})

z^{<t>}= W_ya^{<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>})  

由于传播过程比较复杂,我们画一个计算草图来反映时间步t的正向传播中,各个量的关系:

LSTM反向传播公式推导_第1张图片

计算图中红色部分不属于时间步t,而是属于时间步t+1,把这几个红色的计算加入以后,可以更清晰的看到,c^{<t>}的值会传播到两个位置(即在时间步t的正向传播中,传递到a^{<t>},在时间步t+1的正向传播中,传递到c^{<t+1>};而a^{<t>}的值会传播到5个位置(即时间步t的正向传播中,传递到z^{<t>},在时间步t+1的正向传播中,传递到\Gamma_u^{<t+1>}\Gamma_f^{<t+1>}\Gamma_o^{<t+1>}\widetilde{c}^{<t+1>})。这对于理解反向传播中a^{<t>}c^{<t>}的导数从何而来非常重要,在反向传播中,我们会看到,c^{<t>}的误差从相应的2个位置反向传播得到,a^{<t>}的误差从相应的5个位置反向传播得到。

2、反向传播

把正向传播的计算图反过来就是时间步t的反向传播的计算图: 

LSTM反向传播公式推导_第2张图片

 红色的部分是时间步t+1的量对于 a^{<t>}c^{<t>} 导数的贡献。我们根据这张图,从上往下推导。

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

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

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

根据

z^{<t>}= W_ya^{<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>})(a^{<t>})^T\Rightarrow\frac{\partial L}{\partial W_y}=\sum_t(\hat{y}^{<t>}-y^{<t>})(a^{<t>})^T                 (3)

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

 以上公式和RNN的情况是一模一样的,也不多解释了。

正如反向传播的计算图所示的那样,a^{<t>}的导数除了包含式(4)中的那一项,还包括来自 \Gamma_u^{<t+1>}\Gamma_f^{<t+1>}\Gamma_o^{<t+1>}\widetilde{c}^{<t+1>} 的四项,即:

\frac{\partial L}{\partial a^{<t>}}\\ =\frac{\partial \mathcal{L}^{<t>}}{\partial a^{<t>}}+\frac{\partial L}{\partial \Gamma_o^{<t+1>}}\frac{\partial \Gamma_o^{<t+1>}}{\partial a^{<t>}}+\frac{\partial L}{\partial \Gamma_u^{<t+1>}}\frac{\partial \Gamma_u^{<t+1>}}{\partial a^{<t>}}+\frac{\partial L}{\partial \Gamma_f^{<t+1>}}\frac{\partial \Gamma_f^{<t+1>}}{\partial a^{<t>}}+\frac{\partial L}{\partial \widetilde{c}^{<t+1>}}\frac{\partial \widetilde{c}^{<t+1>}}{\partial a^{<t>}}                                                                                                                                               (5.a)

 类似的,c^{<t>}的导数也可以表示为两项,一项来自a^{<t>},另一项来自c^{<t+1>}

\frac{\partial L}{\partial c^{<t>}}=\frac{\partial L}{\partial a^{<t>}}\frac{\partial a^{<t>}}{\partial c^{<t>}}+\frac{\partial L}{\partial c^{<t+1>}}\frac{\partial c^{<t+1>}}{\partial c^{<t>}}                                                                         (6.a)

 公式(5)(6)实际上给出了a^{<t>}c^{<t>}导数的递推关系式。

对于最后一个时间步,t=Tx,没有来自下一个时间步的导数传入,公式(5)(6)变为:

(5):        \frac{\partial L}{\partial a^{<T_x>}}=\frac{\partial \mathcal{L}^{<T_x>}}{\partial a^{<T_x>}}=W_y^T(\hat{y}^{<T_x>}-y^{<T_x>})                                                                (7)

(6):        \frac{\partial L}{\partial c^{<T_x>}}=\frac{\partial L}{\partial a^{<T_x>}}\frac{\partial a^{<T_x>}}{\partial c^{<T_x>}}                                                                                         (8.a)

根据a^{<t>}=\Gamma_o^{<t>}.*tanh(c^{<t>})的下标表示:

a_i^{<T_x>}=\Gamma_{oi}^{<T_x>}tanh(c_i^{<T_x>})

并把公式(8.a)也用下标表示,可得:

\frac{\partial L}{\partial c^{<T_x>}_i}=\frac{\partial L}{\partial a^{<T_x>}_i}\frac{\partial a^{<T_x>}_i}{\partial c^{<T_x>}_i}=\frac{\partial L}{\partial a^{<T_x>}_i}\Gamma_{oi}^{<T_x>}[1-tanh^2(c_i^{<T_x>})]\\ \Rightarrow \frac{\partial L}{\partial c^{<T_x>}}=\frac{\partial L}{\partial a^{<T_x>}}.*\Gamma_{o}^{<T_x>}.*[1-tanh^2(c^{<T_x>})]                                   (8.b)

上式的推导用到了tanh^{'}(x)=1-tanh^2(x)

 式(7)和(8.b)给出了最后一个时间步a^{<T_x>}c^{<T_x>}的导数,我们下面只需要假设已知a^{<t+1>}c^{<t+1>}的导数,并求出a^{<t>}c^{<t>}导数的表达式(递推关系式),就能够利用递推关系一步步反向传播求出所有时间步下 a^{<t>}c^{<t>}的导数。

先根据a^{<t+1>}c^{<t+1>}的导数,得到  \Gamma_u^{<t+1>}\Gamma_f^{<t+1>}\Gamma_o^{<t+1>}\widetilde{c}^{<t+1>} 的导数:

根据这两个正向传播的式子:

c^{<t+1>}=\Gamma_u^{<t+1>}.*\widetilde{c}^{<t+1>}+\Gamma_f^{<t+1>}.*c^{<t>}

a^{<t+1>}=\Gamma_o^{<t+1>}.*tanh(c^{<t+1>})

写成下标表示:

c^{<t+1>}_i=\Gamma_{ui}^{<t+1>}\widetilde{c}^{<t+1>}_i+\Gamma_{fi}^{<t+1>}c^{<t>}_i

a^{<t+1>}_i=\Gamma_{oi}^{<t+1>}tanh(c^{<t+1>}_i)

应用链式法则,得到:

\frac{\partial L}{\partial \Gamma_{oi}^{<t+1>}}=\frac{\partial L}{\partial a_{i}^{<t+1>}}\frac{\partial a_{i}^{<t+1>}}{\partial \Gamma_{oi}^{<t+1>}}=\frac{\partial L}{\partial a_{i}^{<t+1>}}tanh(c^{<t+1>}_i)                                                    (9)

\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                                                               (10)

\frac{\partial L}{\partial \Gamma_{fi}^{<t+1>}}=\frac{\partial L}{\partial c_{i}^{<t+1>}}\frac{\partial c_{i}^{<t+1>}}{\partial \Gamma_{fi}^{<t+1>}}=\frac{\partial L}{\partial c_{i}^{<t+1>}}c^{<t>}_i                                                                   (11)

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

于是如公式(5.a)所示,\frac{\partial L}{\partial a^{<t>}_j}可以表示为如下5项:

\frac{\partial L}{\partial a^{<t>}_j}\\ =\frac{\partial \mathcal{L}^{<t>}}{\partial a^{<t>}_j}+\sum_i\frac{\partial L}{\partial \Gamma_{oi}^{<t+1>}}\frac{\partial \Gamma_{oi}^{<t+1>}}{\partial a^{<t>}_j}+\sum_i\frac{\partial L}{\partial \Gamma_{ui}^{<t+1>}}\frac{\partial \Gamma_{ui}^{<t+1>}}{\partial a^{<t>}_j}+\sum_i\frac{\partial L}{\partial \Gamma_{fi}^{<t+1>}}\frac{\partial \Gamma_{fi}^{<t+1>}}{\partial a^{<t>}_j}+\sum_i\frac{\partial L}{\partial \widetilde{c}^{<t+1>}_i}\frac{\partial \widetilde{c}^{<t+1>}_i}{\partial a^{<t>}_j}    (5.b)

根据正向传播的公式:

 \Gamma_f^{<t>}= \sigma(W_f[a^{<t-1>},x^{<t>}]+b_f)

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

\Gamma_o^{<t>}= \sigma(W_o[a^{<t-1>},x^{<t>}]+b_o)

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

 写为下标形式:

\Gamma_{i}^{<t+1>}= \sigma(W_{ij}[a^{<t>},x^{<t+1>}]_j+b_i)

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

式中的\Gamma代表三个门中的任意一个

于是,我们可以给出偏导数:

\frac{\partial \Gamma_{i}^{<t+1>}}{\partial a^{<t>}_j}=\Gamma_{i}^{<t+1>}(1-\Gamma_{i}^{<t+1>})W_{ij}

\frac{\partial \widetilde{c}^{<t+1>}_i}{\partial a^{<t>}_j}=(1-(\widetilde{c}^{<t+1>}_i)^2)W_{cij}

以上的推导用到了sigmoid函数的导数\sigma^{'}(x)=\sigma(x)(1-\sigma(x))

带入(5.b),可以得到

\frac{\partial L}{\partial a^{<t>}_j}\\ =\frac{\partial \mathcal{L}^{<t>}}{\partial a^{<t>}_j}\\ +\sum_i\frac{\partial L}{\partial a_{i}^{<t+1>}}tanh(c^{<t+1>}_i)\Gamma_{oi}^{<t+1>}(1-\Gamma_{oi}^{<t+1>})W_{oij}\\ +\sum_i\frac{\partial L}{\partial c_{i}^{<t+1>}}\widetilde{c}^{<t+1>}_i\Gamma_{ui}^{<t+1>}(1-\Gamma_{ui}^{<t+1>})W_{uij}\\ +\sum_i\frac{\partial L}{\partial c_{i}^{<t+1>}}c^{<t>}_i\Gamma_{fi}^{<t+1>}(1-\Gamma_{fi}^{<t+1>})W_{fij}\ \\ +\sum_i\frac{\partial L}{\partial c_{i}^{<t+1>}}\Gamma_{ui}^{<t+1>}(1-(\widetilde{c}^{<t+1>}_i)^2)W_{cij}\\ \Rightarrow

\frac{\partial L}{\partial a^{<t>}}\\ =\frac{\partial \mathcal{L}^{<t>}}{\partial a^{<t>}}\\ +W_{oa}^T[\frac{\partial L}{\partial a^{<t+1>}}.*tanh(c^{<t+1>}).*\Gamma_{o}^{<t+1>}.*(1-\Gamma_{o}^{<t+1>})]\\ +W_{ua}^T[\frac{\partial L}{\partial c^{<t+1>}}.*\widetilde{c}^{<t+1>}.*\Gamma_{u}^{<t+1>}.*(1-\Gamma_{u}^{<t+1>})]\\ +W_{fa}^T[\frac{\partial L}{\partial c^{<t+1>}}.*c^{<t>}.*\Gamma_{f}^{<t+1>}.*(1-\Gamma_{f}^{<t+1>})] \\ +W_{ca}^T[\frac{\partial L}{\partial c^{<t+1>}}.*\Gamma_{u}^{<t+1>}.*(1-(\widetilde{c}^{<t+1>})^2)]                                        (5.c)

(5.c)中W下标的a表示只考虑W中与a有关的部分,即W[:,1:n_a]

再考虑(6.a):

\frac{\partial L}{\partial c^{<t>}}=\frac{\partial L}{\partial a^{<t>}}\frac{\partial a^{<t>}}{\partial c^{<t>}}+\frac{\partial L}{\partial c^{<t+1>}}\frac{\partial c^{<t+1>}}{\partial c^{<t>}}                                                                   (6.a)

(6.a)右边第一项等于:

 \frac{\partial L}{\partial a^{<t>}}\frac{\partial a^{<t>}}{\partial c^{<t>}}=\frac{\partial L}{\partial a^{<t>}}.*\Gamma_{o}^{<t>}.*[1-tanh^2(c^{<t>})]

这里的推导和(8.b)是一模一样的,就不再证明了。

考虑(6.a)右边第二项

利用正向传播的公式:c^{<t+1>}_i=\Gamma_{ui}^{<t+1>}\widetilde{c}^{<t+1>}_i+\Gamma_{fi}^{<t+1>}c^{<t>}_i

第二项  \frac{\partial L}{\partial c^{<t+1>}_i}\frac{\partial c^{<t+1>}_i}{\partial c^{<t>}_i}=\frac{\partial L}{\partial c^{<t+1>}_i}\Gamma_{fi}^{<t+1>}

故(6.a)可以写为:

\frac{\partial L}{\partial c^{<t>}}\\ =\frac{\partial L}{\partial a^{<t>}}\frac{\partial a^{<t>}}{\partial c^{<t>}}+\frac{\partial L}{\partial c^{<t+1>}}\frac{\partial c^{<t+1>}}{\partial c^{<t>}}\\ =\frac{\partial L}{\partial a^{<t>}}.*\Gamma_{o}^{<t>}.*[1-tanh^2(c^{<t>})]+\frac{\partial L}{\partial c^{<t+1>}}.*\Gamma_{f}^{<t+1>}                                        (6.b)

至此,我们给出了a^{<t>}c^{<t>}的导数的递推关系式(5.c)、(6.b)。接下来的部分就比较简单了,只需要根据a^{<t>}c^{<t>}的导数计算W_ob_oW_uB_u等参数的梯度。以下式子和公式(9)(10)(11)(12)是一样的,只是把时间步t+1改为了t:

\frac{\partial L}{\partial \Gamma_{oi}^{<t>}}=\frac{\partial L}{\partial a_{i}^{<t>}}\frac{\partial a_{i}^{<t>}}{\partial \Gamma_{oi}^{<t>}}=\frac{\partial L}{\partial a_{i}^{<t>}}tanh(c^{<t>}_i)

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

\frac{\partial L}{\partial \Gamma_{fi}^{<t>}}=\frac{\partial L}{\partial c_{i}^{<t>}}\frac{\partial c_{i}^{<t>}}{\partial \Gamma_{fi}^{<t>}}=\frac{\partial L}{\partial c_{i}^{<t>}}c^{<t-1>}_i

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

结合正向传播的公式:

\Gamma_{i}^{<t>}= \sigma(W_{ij}[a^{<t-1>},x^{<t>}]_j+b_i)

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

(公式中下标不指示那个门的\Gamma,代表三个门中的任意一个)

得到:

\frac{\partial L}{\partial W_{ij}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma_{i}^{<t>}}\frac{\partial \Gamma_{i}^{<t>}}{\partial W_{ij}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma_{i}^{<t>}}\Gamma_{i}^{<t>}(1-\Gamma_{i}^{<t>})[a^{<t-1>},x^{<t>}]_j

\frac{\partial L}{\partial b_{i}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma_{i}^{<t>}}\frac{\partial \Gamma_{i}^{<t>}}{\partial b_{i}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma_{i}^{<t>}}\Gamma_{i}^{<t>}(1-\Gamma_{i}^{<t>})

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

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

\Rightarrow

\frac{\partial L}{\partial W}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma^{<t>}}.*\Gamma^{<t>}.*(1-\Gamma^{<t>})[a^{<t-1>},x^{<t>}]^T

\frac{\partial L}{\partial b}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial \Gamma^{<t>}}.*\Gamma^{<t>}.*(1-\Gamma^{<t>})

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

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

\Rightarrow

\frac{\partial L}{\partial W_{o}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial a^{<t>}}.*tanh(c^{<t>}).*\Gamma^{<t>}_o.*(1-\Gamma^{<t>}_o)[a^{<t-1>},x^{<t>}]^T                        (13)

\frac{\partial L}{\partial b_o}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial a^{<t>}}.*tanh(c^{<t>}).*\Gamma^{<t>}_o.*(1-\Gamma^{<t>}_o)                                                    (14)

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

\frac{\partial L}{\partial b_u}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*\widetilde{c}^{<t>}.*\Gamma^{<t>}_u.*(1-\Gamma^{<t>}_u)                                                                (16)

\frac{\partial L}{\partial W_{f}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*c^{<t-1>}.*\Gamma^{<t>}_f.*(1-\Gamma^{<t>}_f)[a^{<t-1>},x^{<t>}]^T                                (17)

\frac{\partial L}{\partial b_f}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*c^{<t-1>}.*\Gamma^{<t>}_f.*(1-\Gamma^{<t>}_f)                                                             (18)

\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][a^{<t-1>},x^{<t>}]^T                                              (19)

\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]                                                                          (20)

以上就是LSTM反向传播所需要的所有公式。

3、总结

LSTM的正向传播由以下公式给出:

\Gamma_f^{<t>}= \sigma(W_f[a^{<t-1>},x^{<t>}]+b_f)

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

\Gamma_o^{<t>}= \sigma(W_o[a^{<t-1>},x^{<t>}]+b_o)

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

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

a^{<t>}=\Gamma_o^{<t>}.*tanh(c^{<t>})

z^{<t>}= W_ya^{<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>})  

反向传播步骤:

①在每个时间步t,接受来自上一个时间步t+1的导数\frac{\partial L}{\partial a^{<t+1>}}\frac{\partial L}{\partial c^{<t+1>}},(最后一个时间步下的值可以准确得到)

实际的程序中可能还要传入时间步t+1的cache,因为时间步t的cache中只存了时间步t的量

——计算参数Wy、by的导数

 \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>})(a^{<t>})^T\Rightarrow\frac{\partial L}{\partial W_y}=\sum_t(\hat{y}^{<t>}-y^{<t>})(a^{<t>})^T                 (3)

(虽然是对所有时间步求和,但是时间步t的时候可以计算一项,最后再加到一起就行)

——计算\frac{\partial L}{\partial a^{<t>}}

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

 \frac{\partial L}{\partial a^{<t>}}\\ =\frac{\partial \mathcal{L}^{<t>}}{\partial a^{<t>}}\\ +W_{oa}^T[\frac{\partial L}{\partial a^{<t+1>}}.*tanh(c^{<t+1>}).*\Gamma_{o}^{<t+1>}.*(1-\Gamma_{o}^{<t+1>})]\\ +W_{ua}^T[\frac{\partial L}{\partial c^{<t+1>}}.*\widetilde{c}^{<t+1>}.*\Gamma_{u}^{<t+1>}.*(1-\Gamma_{u}^{<t+1>})]\\ +W_{fa}^T[\frac{\partial L}{\partial c^{<t+1>}}.*c^{<t>}.*\Gamma_{f}^{<t+1>}.*(1-\Gamma_{f}^{<t+1>})] \\ +W_{ca}^T[\frac{\partial L}{\partial c^{<t+1>}}.*\Gamma_{u}^{<t+1>}.*(1-(\widetilde{c}^{<t+1>})^2)]                                        (5.c)

 ——计算\frac{\partial L}{\partial c^{<t>}}

 \frac{\partial L}{\partial c^{<t>}}\\ =\frac{\partial L}{\partial a^{<t>}}\frac{\partial a^{<t>}}{\partial c^{<t>}}+\frac{\partial L}{\partial c^{<t+1>}}\frac{\partial c^{<t+1>}}{\partial c^{<t>}}\\ =\frac{\partial L}{\partial a^{<t>}}.*\Gamma_{o}^{<t>}.*[1-tanh^2(c^{<t>})]+\frac{\partial L}{\partial c^{<t+1>}}.*\Gamma_{f}^{<t+1>}                                        (6.b)

—— 计算其他参数的导数

 \frac{\partial L}{\partial W_{o}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial a^{<t>}}.*tanh(c^{<t>}).*\Gamma^{<t>}_o.*(1-\Gamma^{<t>}_o)[a^{<t-1>},x^{<t>}]^T                        (13)

\frac{\partial L}{\partial b_o}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial a^{<t>}}.*tanh(c^{<t>}).*\Gamma^{<t>}_o.*(1-\Gamma^{<t>}_o)                                                    (14)

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

\frac{\partial L}{\partial b_u}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*\widetilde{c}^{<t>}.*\Gamma^{<t>}_u.*(1-\Gamma^{<t>}_u)                                                                (16)

\frac{\partial L}{\partial W_{f}}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*c^{<t-1>}.*\Gamma^{<t>}_f.*(1-\Gamma^{<t>}_f)[a^{<t-1>},x^{<t>}]^T                                (17)

\frac{\partial L}{\partial b_f}=\sum_{t=1}^{T_x}\frac{\partial L}{\partial c^{<t>}}.*c^{<t-1>}.*\Gamma^{<t>}_f.*(1-\Gamma^{<t>}_f)                                                             (18)

\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][a^{<t-1>},x^{<t>}]^T                                              (19)

\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]                                                                          (20)

(虽然是对所有时间步求和,但是时间步t的时候可以计算一项,最后再加到一起就行)

③把\frac{\partial L}{\partial a^{<t>}}\frac{\partial L}{\partial c^{<t>}}传递给下一个时间步t-1

你可能感兴趣的:(神经网络,lstm)