卷积神经网络的训练
卷积神经网络的训练方法
- 记号
- 卷积神经网络的前向传播
- 损失函数
- 卷积神经网络的训练
记号
- 全连接层: uljujl 为第 ll 层第jj 个节点的输入加权和,xljxjl 为其的**值。
-
卷积层或池化层: uljujl 为第 ll 层第jj 个特征图的输入加权和,xljxjl 为其的**值。有:
xlj=f(ulj)xjl=f(ujl) - 若 ll 层为卷积层,则记 klijkijl第 jj 个节点到第 ll 层第 ii 个节点的卷积核。
- 第 ll 层的第 jj 个节点是由上一层某些特征图卷积组合而来的, 记其索引为 MljMjl 。
- 第 ll 层的第 jj 个节点的偏置记为bljbjl 。
- 若第 l−1l−1 层到第 ll 层为池化运算,也就是第ll层为池化层,记第jj个特征图的池化参数为 βljβjl ,偏置为 bljbjl 。
- 设神经网络的总层数为 L L 。
卷积神经网络的前向传播
卷积层的前向传播
记ulj=∑i∈Mljxl−1i∗klij+blj,则xlj=f(ulj)记ujl=∑i∈Mjlxil−1∗kijl+bjl,则xjl=f(ujl)
池化层的前向传播
记ulj=βlj⋅down(xl−1j)+blj,则xlj=f(ulj)记ujl=βjl⋅down(xjl−1)+bjl,则xjl=f(ujl)
损失函数
设有NN个带标签样本{z1,y1},⋯{zN,yN}{z1,y1},⋯{zN,yN},注:此标签为 one-of-c 标签。
注: one-of-c 标签为:对于样本znzn,其分类标签为
ynk={10(若zn属于第k类)(若zn不属于第k类)ykn={1(若zn属于第k类)0(若zn不属于第k类)
对于样本znzn,设神经网络的输出为tntn定义其误差为:
En=12∥tn−zn∥2=12∑k=1c(tnk−ynk)2En=12‖tn−zn‖2=12∑k=1c(tkn−ykn)2
整体损失函数定义为:
EN=∑n=1NEn=12∑n=1N∑k=1c(tnk−ynk)2EN=∑n=1NEn=12∑n=1N∑k=1c(tkn−ykn)2
设W=(klij,βlj,blj)W=(kijl,βjl,bjl),即WW表示所有参数组成的向量,我们希望能够找到一组参数W∗W∗ 来最小化ENEN,即
W∗=argminWENW∗=argminWEN
由于ENEN中的参数过多(Lenet中有5万个左右的参数),所以使用一般的方法(比如数学分析或微积分中,对各分量求导等于0联立解方程组)很难求得最小值。 所以我们一般使用基于梯度的训练方法,一般使用梯度下降法:
W(k)=W(k−1)−α∂EN∂W|W=W(k)W(k)=W(k−1)−α∂EN∂W|W=W(k)
用ENEN对参数直接求导是非常复杂的,所以我们先用ENEN对输入加权和求导,再让输入加权和对参数求导。
卷积神经网络的训练
由于损失函数为每个样本的误差之和,所以,为了简化问题,在求导时我们只考虑一个样本的误差函数求导。
即设样本为zz,其标签为:(y1,⋯,yc)(y1,⋯,yc),神经网络的输出为:(t1,⋯,tc)(t1,⋯,tc),误差函数为:
E=12∑k=1c(tk−yk)2E=12∑k=1c(tk−yk)2
. 记
δlj=∂E∂uljδjl=∂E∂ujl
,即δljδjl为误差函数对第 l l 层第 j j 个特征图(或节点)输入加权和的导数。
-
E E 对最后一层输入加权和求导:
∂E∂uLj=∂E∂tj⋅∂tj∂uLj=(tj−yj)⋅f′(uLj)∂E∂ujL=∂E∂tj⋅∂tj∂ujL=(tj−yj)⋅f′(ujL).
- 卷积层连池化层的求导:
以下部分公式比较多,只能上传手稿了: