深度学习算法之CNN、RNN、LSTM公式推导
2017-05-05 17:27
363 查看
整个推导过程首先一定对网络的结构有清醒的认知,所有变量的下角标都能一一对应到网络结构上;然后就是链式求导了。
一、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、反向传播
未完待续
一、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、反向传播
未完待续
相关文章推荐
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深度学习算法之CNN、RNN、LSTM公式推导
- 深入浅出|深度学习算法之BP神经网络 详细公式推导
- 七月算法深度学习笔记4 -- CNN与常用框架
- 深度学习算法实践10---卷积神经网络(CNN)原理
- 深度学习BP算法的推导附加RNN-LSTM的推导
- 深度学习BP算法的推导(附加RNN,LSTM的推导说明)
- 深度学习算法实践12---卷积神经网络(CNN)实现
- 深度学习算法实践12---卷积神经网络(CNN)实现
- 深度学习算法实践11---卷积神经网络(CNN)之卷积操作
- 深度学习BP算法的推导(附加RNN,LSTM的推导说明)