神经网络学习(十六)循环神经网络(RNN)的正向和反向传播算法梳理
2018-04-03 17:01
465 查看
系列博客是博主学习神经网络中相关的笔记和一些个人理解,仅为作者记录笔记之用,不免有很多细节不对之处。
就上面的网络结构而言,RNN结构的基本单元可以看作是简单的三层神经网络(也可以是多层的,为了简单起见,以三层为例),与常规的神经网络不同的地方在于,它的隐层会将上一个时刻的隐层输出纳入到当前时刻隐层的输入中,这样就携带了过往时刻的相关信息了。下面是公式的对比
结合上图,RNN的正向传播算法就很好理解了。RNN的输入是序列数据,需要训练的模型参数有 VV、WW 、UU 和 bh、bybh、by。下图为某时刻隐层单元的结构示意图
RNN虽然理论上可以很漂亮的解决序列数据的训练,但是它也像DNN一样有梯度消失时的问题,当序列很长的时候问题尤其严重。因此,上面的RNN模型一般不能直接用于应用领域。
参考资料:
1、循环神经网络RNN以及LSTM的推导和实现
回顾
前面五小节,我们简单学习了卷积神经网络(CNN)反向传播算法的推导,然后我们自己实现了一个浅层卷积神经网络。卷积神经网络在本系列中先告一段落,我们开始学习循环神经网络的相关知识。本系列的主旨是基础学习,大致了解各个神经网络的基本原理。至于更深的应用,我们留待以后学习。正向传播
网上关于RNN的介绍非常多,我们这里就不多啰嗦了(主要博主也是似懂非懂),直接进入它的公式部分。为了方便理解,咱们还是以一个直观RNN的展开图开始就上面的网络结构而言,RNN结构的基本单元可以看作是简单的三层神经网络(也可以是多层的,为了简单起见,以三层为例),与常规的神经网络不同的地方在于,它的隐层会将上一个时刻的隐层输出纳入到当前时刻隐层的输入中,这样就携带了过往时刻的相关信息了。下面是公式的对比
BP Net | RNN | |
---|---|---|
input layer | a=xa=x | at=xtat=xt |
hidden layer | zh=Va+bhh=σ(zh)zh=Va+bhh=σ(zh) | zth=Vat+Uht−1h+bhht=σ(zth)[一般选取tanh函数]zht=Vat+Uhht−1+bhht=σ(zht)[一般选取tanh函数] |
output layer | zy=Wh+byy=σ(zy)zy=Wh+byy=σ(zy) | zty=Wht+byyt=σ(zty)zyt=Wht+byyt=σ(zyt) |
反向传播
记 C=f(W,U,V,bh,bh)C=f(W,U,V,bh,bh)是我们的代价函数,依旧记 δ=∂C/∂zδ=∂C/∂z 为误差。那么有δty=∇ytC⊙σ′(zty)(1)(1)δyt=∇ytC⊙σ′(zyt),由上式可推导出δth=∂C∂zth=∂C∂zty∂zty∂ht∂ht∂zth+∂C∂zt+1y∂zt+1y∂ht∂ht∂zth=(WTδty+UTδt+1h)⊙σ′(zth)(2)(2)δht=∂C∂zht=∂C∂zyt∂zyt∂ht∂ht∂zht+∂C∂zyt+1∂zyt+1∂ht∂ht∂zht=(WTδyt+UTδht+1)⊙σ′(zht)上面表红的地方是因为下一个时刻的 zt+1zt+1 也需要当前时刻的 htht。有了 δδ的表达式,我们就可以很容易计算出模型参数的梯度,如下:∂C∂W=∂C∂zty∂zty∂W=(ht)Tδty(3)(3)∂C∂W=∂C∂zyt∂zyt∂W=(ht)Tδyt∂C∂V=∂C∂zth∂zth∂W=aTδth(4)(4)∂C∂V=∂C∂zht∂zht∂W=aTδht∂C∂U=∂C∂zth∂zth∂U=(ht−1)Tδth(5)(5)∂C∂U=∂C∂zht∂zht∂U=(ht−1)Tδht∂C∂bh=δth,∂C∂by=δty(6)(6)∂C∂bh=δht,∂C∂by=δyt通过矩阵的写法,反向传播算法的表述十分简洁清晰。利用公式(1)-(6)我们就可以实现误差的反向传播了。小结
上面简单总结了通用的RNN模型和正向反向传播算法。当然,有些RNN模型会有些不同,自然正向反向传播的公式会有些不一样,但是原理基本类似。RNN虽然理论上可以很漂亮的解决序列数据的训练,但是它也像DNN一样有梯度消失时的问题,当序列很长的时候问题尤其严重。因此,上面的RNN模型一般不能直接用于应用领域。
参考资料:
1、循环神经网络RNN以及LSTM的推导和实现
相关文章推荐
- 深度学习——循环神经网络RNN(一)_反向传播算法
- 深度学习笔记七:循环神经网络RNN(基本理论)
- 深度学习(Deep Learning)读书思考八:循环神经网络三(RNN应用)
- 深度学习:循环神经网络RNN的变体
- 深度学习笔记(七) RNN循环神经网络
- 深度学习框架TensorFlow学习与应用(七)——循环神经网络(RNN)应用于MNIST数据集分类
- 循环神经网络(RNN)模型与前向反向传播算法
- 循环神经网络RNN(二)深度学习之父的神经网络第八课(中文字幕)
- 【深度学习】RNN(循环神经网络)
- 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别
- 深度学习(08)_RNN-LSTM循环神经网络-03-Tensorflow进阶实现
- 深度学习——循环神经网络/递归神经网络(RNN)及其改进的长短时记忆网络(LSTM)
- [置顶] 【深度学习】RNN循环神经网络Python简单实现
- 循环神经网络(RNN)反向传播算法(BPTT)
- 循环神经网络(RNN)模型与前向反向传播算法
- 深度学习 - 循环神经网络RNN
- 循环神经网络(RNN)反向传播算法(BPTT)理解
- 【深度学习】RNN(循环神经网络)之LSTM(长短时记忆)
- 循环神经网络(RNN)模型与前向反向传播算法
- 深度学习(08)_RNN-LSTM循环神经网络-03-Tensorflow进阶实现