ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

推导RNN反向传播

2021-07-31 16:57:36  阅读:226  来源: 互联网

标签:7D RNN 推导 5E% 3Ct% 3E% 7B% 反向 7D%


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

正向传播:

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有