神经网络学习(十八)循环神经网络(RNN)的正向和反向传播算法梳理

系列博客是博主学习神经网络中相关的笔记和一些个人理解,仅为作者记录笔记之用,不免有很多细节不对之处。

回顾

前面五小节,我们简单学习了卷积神经网络(CNN)反向传播算法的推导,然后我们自己实现了一个浅层卷积神经网络。卷积神经网络在本系列中先告一段落,我们开始学习循环神经网络的相关知识。本系列的主旨是基础学习,大致了解各个神经网络的基本原理。至于更深的应用,我们留待以后学习。

正向传播

网上关于RNN的介绍非常多,我们这里就不多啰嗦了(主要博主也是似懂非懂),直接进入它的公式部分。为了方便理解,咱们还是以一个直观RNN的展开图开始

这里写图片描述

就上面的网络结构而言,RNN结构的基本单元可以看作是简单的三层神经网络(也可以是多层的,为了简单起见,以三层为例),与常规的神经网络不同的地方在于,它的隐层会将上一个时刻的隐层输出纳入到当前时刻隐层的输入中,这样就携带了过往时刻的相关信息了。下面是公式的对比

BP NetRNN
input layer a=x a = x at=xt a t = x t
hidden layer zh=Va+bhh=σ(zh) z h = V a + b h h = σ ( z h ) zth=Vat+Uht1h+bhht=σ(zth)[tanh] z h t = V a t + U h h t − 1 + b h h t = σ ( z h t ) [ 一 般 选 取 t a n h 函 数 ]
output layer zy=Wh+byy=σ(zy) z y = W h + b y y = σ ( z y ) zty=Wht+byyt=σ(zty) z y t = W h t + b y y t = σ ( z y t )

结合上图,RNN的正向传播算法就很好理解了。RNN的输入是序列数据,需要训练的模型参数有 V V W U U bhby。下图为某时刻隐层单元的结构示意图

这里写图片描述

反向传播

C=f(W,U,V,bh,bh) C = f ( W , U , V , b h , b h ) 是我们的代价函数,依旧记 δ=C/z δ = ∂ C / ∂ z 为误差。那么有

δty=ytCσ(zty)(1) (1) δ y t = ∇ y t C ⊙ σ ′ ( z y t )
,由上式可推导出
δth=Czth=Cztyztyhthtzth+Czt+1yzt+1yhthtzth=(WTδty+UTδt+1h)σ(zth)(2) (2) δ h t = ∂ C ∂ z h t = ∂ C ∂ z y t ∂ z y t ∂ h t ∂ h t ∂ z h t + ∂ C ∂ z y t + 1 ∂ z y t + 1 ∂ h t ∂ h t ∂ z h t = ( W T δ y t + U T δ h t + 1 ) ⊙ σ ′ ( z h t )
上面表红的地方是因为下一个时刻的 zt+1 z t + 1 也需要当前时刻的 ht h t 。有了 δ δ 的表达式,我们就可以很容易计算出模型参数的梯度,如下:
CW=CztyztyW=(ht)Tδty(3) (3) ∂ C ∂ W = ∂ C ∂ z y t ∂ z y t ∂ W = ( h t ) T δ y t
CV=CzthzthW=aTδth(4) (4) ∂ C ∂ V = ∂ C ∂ z h t ∂ z h t ∂ W = a T δ h t
CU=CzthzthU=(ht1)Tδth(5) (5) ∂ C ∂ U = ∂ C ∂ z h t ∂ z h t ∂ U = ( h t − 1 ) T δ h t
Cbh=δth,Cby=δty(6) (6) ∂ C ∂ b h = δ h t , ∂ C ∂ b y = δ y t
通过矩阵的写法,反向传播算法的表述十分简洁清晰。利用公式(1)-(6)我们就可以实现误差的反向传播了。

小结

上面简单总结了通用的RNN模型和正向反向传播算法。当然,有些RNN模型会有些不同,自然正向反向传播的公式会有些不一样,但是原理基本类似。

RNN虽然理论上可以很漂亮的解决序列数据的训练,但是它也像DNN一样有梯度消失时的问题,当序列很长的时候问题尤其严重。因此,上面的RNN模型一般不能直接用于应用领域。

参考资料:
1、循环神经网络RNN以及LSTM的推导和实现

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值