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

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

损失函数:
J = ∑ i = 1 t ∣ ∣ o i − o ^ i ∣ ∣ 2 = J 1 + J 2 + . . . + J t ( J i 为 M S E 损 失 或 C E 损 失 ) 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 = W X + b S = f ( h ) \begin{array}{l}\left\{ \begin{matrix} h=&WX+b\\ S=&f(h) \end{matrix}\right. \end{array} {h=S=WX+bf(h)
假设已知损失对 S S S的梯度 ∂ J ∂ S \frac{\partial J}{\partial S} SJ:
{ ∂ J ∂ h = ∂ J ∂ S d S d h ∂ J ∂ X = ∂ J ∂ h W T ∂ J ∂ W = X T ∂ J ∂ h ∂ J ∂ b = S u m C o l ( ∂ 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 、 U V、W、U VWU的梯度为:
∂ J ∂ V = ∑ i = 1 t s i T ∂ J ∂ o i ; ∂ J ∂ W = ∑ i = 1 t − 1 s i T ∂ J ∂ h i + 1 ; ∂ J ∂ U = ∑ i = 1 t x i T ∂ J ∂ h i \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)]

参考资料:深度之眼

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CNN(卷积神经网络)和RNN(循环神经网络)是两种常见的神经网络模型,它们在反向传播算法上有一些差异。 1. CNN的反向传播算法:CNN的反向传播算法与传统的多层感知机(MLP)相似。通过计算损失函数对网络权重的偏导数,然后将偏导数沿着网络反向传播,更新网络参数。在CNN中,卷积层和池化层的反向传播是通过计算梯度和误差的卷积操作来实现的。而全连接层的反向传播则与MLP相同,使用链式法则计算梯度。 2. RNN反向传播算法:RNN反向传播算法与传统的MLP略有不同。由于RNN具有时间依赖性,反向传播需要在时间维度上展开,形成一个称为"展开图"的结构。通过展开图,可以将RNN视为多个时间步上的多个重复的MLP模型。在每个时间步上,使用链式法则计算梯度并更新权重。然后将梯度从后往前传递,沿着时间维度进行累积和更新。这种方式称为"Backpropagation Through Time"(BPTT)。 比较: - CNN和RNN反向传播算法都是基于链式法则的梯度下降算法。它们都通过计算梯度来更新网络参数,以最小化损失函数。 - CNN主要用于处理空间结构数据,如图像。它通过卷积和池化操作来提取局部特征。而RNN主要用于处理序列数据,如语言模型和机器翻译。它通过循环连接来建模时间依赖关系。 - 在训练过程中,CNN通常可以并行计算,因为卷积和池化操作是局部的。而RNN由于时间依赖性,通常需要按顺序进行计算,因此计算效率较低。 - RNN的展开图可能会导致梯度消失或梯度爆炸的问题,特别是在长时间依赖的情况下。为了解决这个问题,可以使用更复杂的RNN变体,如长短时记忆网络(LSTM)和门控循环单元(GRU)。 综上所述,CNN和RNN反向传播算法上有一些区别,适用于不同类型的数据和任务。选择合适的模型取决于具体的应用场景和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值