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

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

一、CNN公式推导

1、前向传播

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

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

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

那么隐藏层输入为:

mi=1Wihbi

则隐藏层的真实输入为:

ah=mi=1Wihbi

经过**函数后:

bh=f(ah)

再传入输出层:

ak=Kh=1Whkbh

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

yk=eakm1eai

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

2、反向梯度计算

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

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

L(w)whk=L(w)akakwhk=L(w)akbh(1)

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

L(w)ak=m1L(w)ykykak(2)

又因为:
L(w)yk=zkyk(3)(当k’不等于k时,导数为0)

k=k时:
ykak=eakm1eaiak=ykykyk(4)

kk

ykak=eakmi=1eaiak=ykyk(5)

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

L(w)ak=mk=1L(w)ykykak=zkyk(ykykyk)+k!=kzkyk(ykyk)=ykzk

其中zi=1

带入(1):
L(w)whk=(ykzk)bh

对于隐藏层:

L(w)ah=bnahKk=1L(w)akakbh=f(ah)K1δkwhk

L(w)wih=L(w)ahahwih=L(w)ahbi

二、RNN公式推导

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

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

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

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

m1Wihbti

在前一时刻的状态则为:

n1Whhbt1h

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

ath=m1Wihxti+n1Whhbt1h

经过**函数后:

bth=f(ath)

再传入输出层:

atk=K1Whkbth

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

ytk=eatkm1eati

L(w)=m1ztklog(yk)

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

L(w)ath=L(w)bthbthath=btnath(Kk=1L(w)atkatkbth+Hh=1L(w)bt+1hbt+1hat+1hat+1hbth)

L(w)ath=f(ath)(Kk=1δkwhk+Hh=1δt+1hwhh)

L(w)wih=T1L(w)athathwih=T1L(w)athbti

3、LSTM

LSTM和RNN不同的只是结构:

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

1、正向传输

inputGate:

输入由三部分组成,第一个是正常的输入xti,第二个则是上一时刻的隐藏层输入bt1h,第三个则细胞中存储的上一状态st1c

atl=Ll=1wilxti+Lh=1whlbt1h+Cc=1wclst1c

之后经过**函数:

btl=f(atl)

遗忘门:

atϕ=Ll=1wiϕxti+Lh=1whϕbt1h+Cc=1wcϕst1c

btϕ=f(atϕ)

Cell状态的变化:

atc=Ll=1wicxti+Lh=1whcbt1h

stc=btϕst1c+btlg(atc)

输出门:

atw=Ll=1wiwxti+Lh=1whwbt1h+Cc=1wcwst1c

btw=f(atw)

最终的输出为:

btc=btwh(stc)

2、反向传播

未完待续