您的位置:首页 > 其它

深度学习算法之CNN、RNN、LSTM公式推导

2017-05-05 17:27 330 查看
整个推导过程首先一定对网络的结构有清醒的认知,所有变量的下角标都能一一对应到网络结构上;然后就是链式求导了。

一、CNN公式推导

1、前向传播

假设CNN共三层,第一层为输入层,第二层为隐藏层,第三层为输出层。

定义:第一层与第二层之间的参数为Wih,第二层到第三层的参数为Whk

t时刻的某一个神经元的输入为bi

那么隐藏层输入为:

∑mi=1Wihbi

则隐藏层的真实输入为:

ah=∑mi=1Wihbi

经过激活函数后:

bh=f(ah)

再传入输出层:

ak=∑Kh=1Whkbh

如果最后的损失函数使用softmax的负log函数:

yk=e−ak∑m1e−ai

L(w)=−∑mk=1zklog(yk)

2、反向梯度计算

先求最后的输出层的梯度:

求解参数whk关于损失函数的梯度:

∂L(w)∂whk=∂L(w)∂ak∂ak∂whk=∂L(w)∂akbh(1)

∂L(w)∂ak是输出层的输入关于损失函数的导数,因为ak与每个yk′都有关系,由链式法则得其导数需求和:

∂L(w)∂ak=∑m1∂L(w)∂yk′∂yk′∂ak(2)

又因为:

∂L(w)∂yk′=−zkyk(3)(当k’不等于k时,导数为0)

当k′=k时:

∂yk∂ak=∂e−ak∑m1e−ai∂ak=yk−yk∗yk(4)

当k′不等于k:

∂yk∂ak‘=∂e−a′k∑mi=1e−ai∂ak=−yk′∗yk(5)

将(3)(4)(5)带入(2)中:

∂L(w)∂ak=∑mk′=1∂L(w)∂yk′∂yk′∂ak=−zkyk(yk−yk∗yk)+∑k′!=kzkyk(yk′∗yk)=yk−zk

其中∑zi=1

带入(1):

∂L(w)∂whk=(yk−zk)bh

对于隐藏层:

∂L(w)∂ah=∂bn∂ah∑Kk=1∂L(w)∂ak∂ak∂bh=f′(ah)∑K1δkwhk

∂L(w)∂wih=∂L(w)∂ah∂ah∂wih=∂L(w)∂ahbi

二、RNN公式推导

假设RNN共三层,第一层为输入层,第二层为隐藏层,第三层为输出层。

定义:第一层与第二层之间的参数为Wih,第二层到第三层的参数为Whk

t时刻的某一个神经元的输入为bti

那么在该时刻的隐藏层输入为:

∑m1Wihbti

在前一时刻的状态则为:

∑n1Wh′hbt−1h′

则该时刻隐藏层的真实输入为:

ath=∑m1Wihxti+∑n1Wh′hbt−1h′

经过激活函数后:

bth=f(ath)

再传入输出层:

atk=∑K1Whkbth

如果最后的损失函数使用softmax的负log函数:

ytk=e−atk∑m1e−ati

L(w)=−∑m1ztklog(yk)

RNN的反向传播与CNN原理一样,不同的是RNN除了正常的该时刻向后传的梯度还有前一时刻的梯度,所以

∂L(w)∂ath=∂L(w)∂bth∂bth∂ath=∂btn∂ath(∑Kk=1∂L(w)∂atk∂atk∂bth+∑Hh=1∂L(w)∂bt+1h∂bt+1h∂at+1h∂at+1h∂bth)

∂L(w)∂ath=f′(ath)(∑Kk=1δkwhk+∑Hh=1δt+1h′wh′h)

∂L(w)∂wih=∑T1∂L(w)∂ath∂ath∂wih=∑T1∂L(w)∂athbti

3、LSTM

LSTM和RNN不同的只是结构:





1、正向传输

inputGate:

输入由三部分组成,第一个是正常的输入xti,第二个则是上一时刻的隐藏层输入bt−1h,第三个则细胞中存储的上一状态st−1c:

atl=∑Ll=1wilxti+∑Lh=1whlbt−1h+∑Cc=1wclst−1c

之后经过激活函数:

btl=f(atl)

遗忘门:

atϕ=∑Ll=1wiϕxti+∑Lh=1whϕbt−1h+∑Cc=1wcϕst−1c

btϕ=f(atϕ)

Cell状态的变化:

atc=∑Ll=1wicxti+∑Lh=1whcbt−1h

stc=btϕst−1c+btlg(atc)

输出门:

atw=∑Ll=1wiwxti+∑Lh=1whwbt−1h+∑Cc=1wcwst−1c

btw=f(atw)

最终的输出为:

btc=btwh(stc)

2、反向传播

未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: