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

本文深入解析了RNN的前向与反向传播机制,对比了RNN与CNN在处理序列数据上的区别,详细介绍了RNN的并行加速计算方法,包括前向和反向并行运算,以及双向RNN和DeepRNN的概念。

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形式。图中所有的U、W、V、b1、b2U、W、V、b_1、b_2UWVb1b2全部相同,类似于CNN中的权值共享。CNN通过权值共享可以处理任意大小的图片,RNN通过权值共享,可以处理任意序列长度的语音、句子。

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

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的梯度∂J∂S\frac{\partial J}{\partial S}SJ:
{∂J∂h=∂J∂SdSdh∂J∂X=∂J∂hWT∂J∂W=XT∂J∂h∂J∂b=SumCol(∂J∂h) \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} hJ=SJdhdSXJ=hJWTWJ=XThJbJ=SumCol(hJ)
具体推导过程请参考: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网络对V、W、UV、W、UVWU的梯度为:
∂J∂V=∑i=1tsiT∂J∂oi;∂J∂W=∑i=1t−1siT∂J∂hi+1;∂J∂U=∑i=1txiT∂J∂hi \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}} VJ=i=1tsiToiJ;WJ=i=1t1siThi+1J;UJ=i=1txiThiJ

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)]
注:图中的W与W^W与\hat{W}WW^U与U^U与\hat{U}UU^V与V^V与\hat{V}VV^不同。

5. DeepRNN

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

参考资料:深度之眼

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值