ICode9

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

RNN前向传播、反向传播与并行计算(非常详细)

2019-09-13 16:02:03  阅读:1340  来源: 互联网

标签:frac RNN 传播 并行计算 反向 CNN partial


1. RNN前向传播

在介绍RNN之前,首先比较一下RNN与CNN的区别:

  • RNN是一类用于处理序列数据的神经网络,CNN是一类用于处理网格化数据(如一幅图像)的神经网络。
  • RNN可以扩展到更长的序列,大多数RNN也能处理可变长度的序列。CNN可以很容易地扩展到具有很大宽度和高度的图像,并且可以处理可变大小的图像。

[外链图片转存失败(img-sEvsXPZN-1568360613787)(./images/RNN-前向.jpg)]
RNN的前向传播如图所示,其中f(x)f(x)f(x)代表激活函数,输出的label可以使用one-hot形式。图中所有的UWVb1b2U、W、V、b_1、b_2U、W、V、b1​、b2​全部相同,类似于CNN中的权值共享。CNN通过权值共享可以处理任意大小的图片,RNN通过权值共享,可以处理任意序列长度的语音、句子。

损失函数:
J=i=1toio^i2=J1+J2+...+JtJiMSECE J=\sum_{i=1}^{t}||o_i-\hat{o}_i||^2=J_1+J_2+...+J_t(J_i为MSE损失或CE损失) J=i=1∑t​∣∣oi​−o^i​∣∣2=J1​+J2​+...+Jt​(Ji​为MSE损失或CE损失)

2.RNN反向传播

在介绍RNN反向传播之前,先回顾一下基本神经元的反向传播算法:
[外链图片转存失败(img-ZWqPXKqE-1568360613788)(./images/base.png)]
{h=WX+bS=f(h) \begin{array}{l}\left\{ \begin{matrix} h=&WX+b\\ S=&f(h) \end{matrix}\right. \end{array}{h=S=​WX+bf(h)​​
假设已知损失对SSS的梯度JS\frac{\partial J}{\partial S}∂S∂J​:
{Jh=JSdSdhJX=JhWTJW=XTJhJb=SumCol(Jh) \begin{array}{l}\left\{ \begin{matrix} \frac{\partial J}{\partial h}=\frac{\partial J}{\partial S}\frac{d S}{d h}\\\\ \frac{\partial J}{\partial X}=\frac{\partial J}{\partial h}W^T\\ \\ \frac{\partial J}{\partial W}=X^T\frac{\partial J}{\partial h}\\ \\ \frac{\partial J}{\partial b}=SumCol(\frac{\partial J}{\partial h}) \end{matrix}\right. \end{array} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧​∂h∂J​=∂S∂J​dhdS​∂X∂J​=∂h∂J​WT∂W∂J​=XT∂h∂J​∂b∂J​=SumCol(∂h∂J​)​​
具体推导过程请参考:https://zhuanlan.zhihu.com/p/79657669

下面介绍RNN的反向传播,如图所示:
[外链图片转存失败(img-M9I1CVlS-1568360613789)(./images/RNN_bp1.png)]
[外链图片转存失败(img-5dJgmaAG-1568360613789)(./images/RNN_bp2.png)][外链图片转存失败(img-Y14YeoM7-1568360613790)(./images/RNN_bp3.jpg)]
因为共享权重,所以整个RNN网络对VWUV、W、UV、W、U的梯度为:
JV=i=1tsiTJoi;JW=i=1t1siTJhi+1;JU=i=1txiTJhi \frac{\partial J}{\partial V}=\sum_{i=1}^{t} s_{i}^{T} \frac{\partial J}{\partial o_{i}}; \quad \frac{\partial J}{\partial W}=\sum_{i=1}^{t-1} s_{i}^{T} \frac{\partial J}{\partial h_{i+1}}; \quad \frac{\partial J}{\partial U}=\sum_{i=1}^{t} x_{i}^{T} \frac{\partial J}{\partial h_{i}} ∂V∂J​=i=1∑t​siT​∂oi​∂J​;∂W∂J​=i=1∑t−1​siT​∂hi+1​∂J​;∂U∂J​=i=1∑t​xiT​∂hi​∂J​

3. RNN并行加速计算

3.1 前向并行运算

因为RNN为延时网络,网络的每个输入都与前一个时刻的输出有关系,因此,当输入只有一句话时,无法并行计算。当有输入为一个batch时,如何并行计算呢?
[外链图片转存失败(img-3fvXtcb8-1568360613790)(./images/RNN-并行1.png)]

[外链图片转存失败(img-o6IYluN2-1568360613790)(./images/RNN-并行2.jpg)]

也就是说,可以将一个batch的样本在某一个时刻的输入输出并行,加速计算,而不是将一个样本的整个过程并行(因为依赖性无法并行)。

3.2 反向并行计算

反向并行运算方式如下图所示:
[外链图片转存失败(img-crDD94KP-1568360613791)(./images/RNN-并行3.jpg)]

4. 双向RNN

[外链图片转存失败(img-2LMHU1e8-1568360613791)(./images/RNN-双向.jpg)]
注:图中的WW^W与\hat{W}W与W^、UU^U与\hat{U}U与U^、VV^V与\hat{V}V与V^不同。

5. DeepRNN

[外链图片转存失败(img-3XRkJ1F5-1568360613791)(./images/RNN-DeepRnn.png)]

参考资料:深度之眼

标签:frac,RNN,传播,并行计算,反向,CNN,partial
来源: https://blog.csdn.net/BieberChen/article/details/100804580

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

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

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

ICode9版权所有