整个推导过程首先一定对网络的结构有清醒的认知,所有变量的下角标都能一一对应到网络结构上;然后就是链式求导了。
一、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′=−zky