其他分享
首页 > 其他分享> > 推导RNN反向传播

推导RNN反向传播

作者:互联网

先考虑一个样本(输入和激活都是向量而不是矩阵)

正向传播:

a^{<t>}=g(W_a[a^{<t-1>}, x^{<t>}]+b_a)                       g是激活函数,例如tanh

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

\widehat{y}^{<t>}=softmax(z^{<t>})=\frac{e^{z^{<t>}}}{\sum_{j}^{}e^{z^{<t>}_j}}

\mathcal{L}^{<t>}(\hat{y}^{<t>}, y^{<t>})=-\sum_{j=1}^{n_y}y^{<t>}_jlog(\hat{y}^{<t>}_j)         输出的激活函数是softmax,损失函数是交叉熵

L=\sum_{t=1}^{T_x}\mathcal{L}^{<t>}(\hat{y}^{<t>}, y^{<t>})                                  损失函数对所有时间步求和

以上五个式子就是正向传播中计算输出和损失用到的所有公式,通过对他们链式法则求导,我们也可以推出反向传播的所有公式

反向传播:

当输出的激活函数是softmax,损失函数是交叉熵时,损失函数\mathcal{L}^{<t>}对线性输出z^{<t>}的偏导数可以简单的写成:

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

式(1)左边实际上表示一个向量,其第i个元素对应\frac{\partial \mathcal{L}^{<t>}}{\partial z^{<t>}_i}

下面证明公式(1)

由于

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

可见损失函数\mathcal{L}^{<t>}是向量\hat{y}^{<t>}的函数, \mathcal{L}^{<t>}\hat{y}^{<t>}的“导数”实际上是一个向量(一阶张量),为了方便表述,我们只计算这个向量的第j个元素,即对第j个元素\hat{y}^{<t>}_j求偏导得到 

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

由于

\widehat{y}^{<t>}=softmax(z^{<t>})=\frac{e^{z^{<t>}}}{\sum_{j}^{}e^{z^{<t>}_j}}

 \hat{y}^{<t>}e^{z^{<t>}}的导数是向量对向量的导数,实际上是一个矩阵(二阶张量),为了方便表述,我们只写出\hat{y}^{<t>}_jz^{<t>}_i求偏导的结果。

 \frac{\partial \hat{y}_j^{<t>}}{\partial z^{<t>}_i}\\ = \frac{\partial }{\partial z^{<t>}_{i}}(\frac{e^{z^{<t>}_j}}{\sum_{k}e^{z^{<t>}_k}})\\ = \frac{(\sum_{k}e^{z^{<t>}_k})e^{z^{<t>}_j}\delta_{ij}-e^{z^{<t>}_i}e^{z^{<t>}_j}}{(\sum_{k}e^{z^{<t>}_k)^2}}\\ =\frac{e^{z^{<t>}_j}}{\sum_{k}e^{z^{<t>}_k}}\delta_{ij}-\frac{e^{z^{<t>}_i}}{\sum_{k}e^{z^{<t>}_k}}\frac{e^{z^{<t>}_j}}{\sum_{k}e^{z^{<t>}_k}}

 

式中的\delta_{ij}是Kronecker delta符号,在i=j时为1,否则为0. 我们用\hat{y}^{<t>}_j\hat{y}^{<t>}_i替换上式中的对应项,得到

\frac{\partial \hat{y}_j^{<t>}}{\partial z^{<t>}_i}=\hat{y}_j^{<t>}\delta_{ij}-\hat{y}_i^{<t>}\hat{y}_j^{<t>}=-\hat{y}_j^{<t>}(\hat{y}_i^{<t>}-\delta_{ij})                   (3)

 

现在考虑式(1)中\mathcal{L}^{<t>}z^{<t>}的导数,也只考虑第i项即对z^{<t>}_i的偏导数。由于我们在式(2)中已经得到了\mathcal{L}^{<t>}\hat{y}^{<t>}_j的偏导数,而在(3)中得到了\hat{y}^{<t>}_jz^{<t>}_i的偏导数,根据偏导数的链式法则

 \frac{\partial \mathcal{L}^{<t>}}{\partial z^{<t>}_i}\\ =\sum_j\frac{\partial \mathcal{L}^{<t>}}{\partial \hat{y}^{<t>}_j}\frac{\partial \hat{y}^{<t>}_j}{\partial z^{<t>}_i}\\ =\sum_j(-\frac{y^{<t>}_j}{\hat{y}^{<t>}_j})(-\hat{y}_j^{<t>}(\hat{y}_i^{<t>}-\delta_{ij}))\\ =\sum_jy^{<t>}_j(\hat{y}_i^{<t>}-\delta_{ij})\\ =(\sum_jy^{<t>}_j)\hat{y}_i^{<t>}-y_i^{<t>}\\ =\hat{y}_i^{<t>}-y_i^{<t>} 

即证明了式(1). 上式的推到中用到了\delta_{ij}的性质,以及(\sum_jy^{<t>}_j)=1这一特点(y^{<t>}作为表示分类的one-hot 0-1向量,只有一个元素为1,所以这里的求和为1)。

下面我们继续推导反向传播中的其他公式。

根据公式z^{<t>}=W_ya^{<t>}+b_y,我们可以由\frac{\partial \mathcal{L}^{<t>}}{\partial z^{<t>}}得到参数W_yb_y的导数

 

 吃完饭回来继续写。。。

 

 

标签:7D,RNN,推导,5E%,3Ct%,3E%,7B%,反向,7D%
来源: https://blog.csdn.net/weixin_52100611/article/details/119275912