RNN,LSTM,GRU基本原理的个人理解

记录一下对RNN,LSTM,GRU基本原理(正向过程以及简单的反向过程)的个人理解


RNN

Recurrent Neural Networks,循环神经网络
(注意区别于recursive neural network,递归神经网络)

为了解决DNN存在着无法对时间序列上的变化进行建模的问题(如自然语言处理、语音识别、手写体识别),出现的另一种神经网络结构——循环神经网络RNN。

RNN结构

这里写图片描述

  • t t 层神经元的输入,除了其自身的输入 xt x t ,还包括上一层神经元的隐含层输出 st1 s t − 1
  • 每一层的参数U,W,V都是共享的
    这里写图片描述
    这里写图片描述
  • 每一层并不一定都得有输入和输出,如对句子进行情感分析是多到一,文本翻译多到多,图片描述一到多

数学描述

(以下开始符号统一)
回忆一下单隐含层的前馈神经网络
输入为 XRn×x X ∈ R n × x (n个维度为x的向量)
隐含层输出为

H=ϕ(XWxh+bh) H = ϕ ( X W x h + b h )

输出层输入 HRn×h H ∈ R n × h
输出为
Y^=softmax(HWhy+by) Y ^ = softmax ( H W h y + b y )

现在对 X X H H Y Y 都加上时序下标
同时引入一个新权重 WhhRh×h W h h ∈ R h × h
得到RNN表达式
Ht=ϕ(XtWxh+Ht1Whh+bh) H t = ϕ ( X t W x h + H t − 1 W h h + b h )
Y^t=softmax(HtWhy+by) Y ^ t = softmax ( H t W h y + b y )

H0 H 0 通常置零

深层RNN和双向RNN

这里写图片描述
这里写图片描述

通过时间反向传播和随之带来的问题

输入为 xtRx x t ∈ R x
不考虑偏置
隐含层变量为

ht=ϕ(Whxxt+Whhht1) h t = ϕ ( W h x x t + W h h h t − 1 )

输出层变量为
ot=Wyhht o t = W y h h t

则损失函数为
L=1Tt=1T(ot,yt) L = 1 T ∑ t = 1 T ℓ ( o t , y t )

以一个三层为例
这里写图片描述
三个参数更新公式为

Whx=WhxηLWhx W h x = W h x − η ∂ L ∂ W h x

Whh=WhhηLWhh W h h = W h h − η ∂ L ∂ W h h

Wyh=WyhηLWyh W y h = W y h − η ∂ L ∂ W y h

明显的
Lot=(ot,yt)Tot ∂ L ∂ o t = ∂ ℓ ( o t , y t ) T ⋅ ∂ o t

根据链式法则
LWyh=t=1Tprod(Lot,otWyh)=t=1TLotht ∂ L ∂ W y h = ∑ t = 1 T prod ( ∂ L ∂ o t , ∂ o t ∂ W y h ) = ∑ t = 1 T ∂ L ∂ o t h t ⊤

先计算目标函数有关最终时刻隐含层变量的梯度
LhT=prod(LoT,oThT)=WyhLoT ∂ L ∂ h T = prod ( ∂ L ∂ o T , ∂ o T ∂ h T ) = W y h ⊤ ∂ L ∂ o T

假设 ϕ(x)=x ϕ ( x ) = x (RNN中用激活函数relu还是tanh众说纷纭,有点玄学)

Lht=prod(Lht+1,ht+1ht)+prod(Lot,otht)=WhhLht+1+WyhLot ∂ L ∂ h t = prod ( ∂ L ∂ h t + 1 , ∂ h t + 1 ∂ h t ) + prod ( ∂ L ∂ o t , ∂ o t ∂ h t ) = W h h ⊤ ∂ L ∂ h t + 1 + W y h ⊤ ∂ L ∂ o t

通项为
Lht=i=tT(Whh)TiWyhLoT+ti ∂ L ∂ h t = ∑ i = t T ( W h h ⊤ ) T − i W y h ⊤ ∂ L ∂ o T + t − i

注意上式,当每个时序训练数据样本的时序长度T较大或者时刻t较小,目标函数有关隐含层变量梯度较容易出现衰减和爆炸

LWhx=t=1Tprod(Lht,htWhx)=t=1TLhtxt ∂ L ∂ W h x = ∑ t = 1 T prod ( ∂ L ∂ h t , ∂ h t ∂ W h x ) = ∑ t = 1 T ∂ L ∂ h t x t ⊤

LWhh=t=1Tprod(Lht,htWhh)=t=1TLhtht1 ∂ L ∂ W h h = ∑ t = 1 T prod ( ∂ L ∂ h t , ∂ h t ∂ W h h ) = ∑ t = 1 T ∂ L ∂ h t h t − 1 ⊤

梯度裁剪

为了应对梯度爆炸,一个常用的做法是如果梯度特别大,那么就投影到一个比较小的尺度上。 θ θ 为设定的裁剪“阈值”,为标量,若梯度的范数大于此阈值,将梯度缩小,若梯度的范数小于此阈值,梯度不变

g=min(θg,1)g g = min ( θ ‖ g ‖ , 1 ) g


LSTM

RNN的隐含层变量梯度可能会出现衰减或爆炸。虽然梯度裁剪可以应对梯度爆炸,但无法解决梯度衰减。因此,给定一个时间序列,例如文本序列,循环神经网络在实际中其实较难捕捉两个时刻距离较大的文本元素(字或词)之间的依赖关系。
LSTM(long short-term memory)由Hochreiter和Schmidhuber在1997年被提出。

LSTM结构

这里两张图先不用细看,先着重记住公式后再回来看

这里写图片描述
这里写图片描述

数学描述

(同上,符号统一)
设隐含状态长度 h h ,t时刻输入 XtRn×x X t ∈ R n × x x x 维)及t1时刻隐含状态 Ht1Rn×h H t − 1 ∈ R n × h ,
输入门,遗忘门,输出门,候选细胞如下

It=σ(XtWxi+Ht1Whi+bi) I t = σ ( X t W x i + H t − 1 W h i + b i )

Ft=σ(XtWxf+Ht1Whf+bf) F t = σ ( X t W x f + H t − 1 W h f + b f )

Ot=σ(XtWxo+Ht1Who+bo) O t = σ ( X t W x o + H t − 1 W h o + b o )

C~t=tanh(XtWxc+Ht1Whc+bc) C ~ t = tanh ( X t W x c + H t − 1 W h c + b c )

(思考侯选细胞激活函数的不同)
记忆细胞

Ct=FtCt1+ItC~t C t = F t ⊙ C t − 1 + I t ⊙ C ~ t

想象,如果遗忘门一直近似1且输入门一直近似0,过去的细胞将一直通过时间保存并传递至当前时刻
隐含状态
Ht=Ottanh(Ct) H t = O t ⊙ tanh ( C t )

输出同RNN
Y^=softmax(HWhy+by) Y ^ = softmax ( H W h y + b y )


GRU

由Cho、van Merrienboer、 Bahdanau和Bengio在2014年提出,比LSTM少一个门控,实验结果却相当

GRU结构

这里写图片描述

数学描述

设隐含状态长度 h h ,t时刻输入 XtRn×x X t ∈ R n × x x x 维)及t1时刻隐含状态 Ht1Rn×h H t − 1 ∈ R n × h ,
重置门,更新门如下

Rt=σ(XtWxr+Ht1Whr+br) R t = σ ( X t W x r + H t − 1 W h r + b r )

Zt=σ(XtWxz+Ht1Whz+bz) Z t = σ ( X t W x z + H t − 1 W h z + b z )

候选隐含状态
H~t=tanh(XtWxh+RtHt1Whh+bh) H ~ t = tanh ( X t W x h + R t ⊙ H t − 1 W h h + b h )

隐含状态
Ht=ZtHt1+(1Zt)H~t H t = Z t ⊙ H t − 1 + ( 1 − Z t ) ⊙ H ~ t

输出
Y^=softmax(HWhy+by) Y ^ = softmax ( H W h y + b y )

(无力吐槽csdn了,预览和实际用的不一套渲染,公式丑死)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值