卷积神经网络的训练

卷积神经网络的训练方法

  • 记号
  • 卷积神经网络的前向传播
  • 损失函数
  • 卷积神经网络的训练

记号

  • 全连接层: 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 。
  • 若第 l1l−1 层到第 ll 层为池化运算,也就是第ll层为池化层,记第jj个特征图的池化参数为 βljβjl ,偏置为 bljbjl 。
  • 设神经网络的总层数为 L  L 

卷积神经网络的前向传播

卷积层的前向传播

ulj=iMljxl1iklij+blj,xlj=f(ulj)记ujl=∑i∈Mjlxil−1∗kijl+bjl,则xjl=f(ujl)

池化层的前向传播

ulj=βljdown(xl1j)+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(znk)(znk)ykn={1(若zn属于第k类)0(若zn不属于第k类)

对于样本znzn,设神经网络的输出为tntn定义其误差为:
En=12tnzn2=12k=1c(tnkynk)2En=12‖tn−zn‖2=12∑k=1c(tkn−ykn)2

整体损失函数定义为:
EN=n=1NEn=12n=1Nk=1c(tnkynk)2EN=∑n=1NEn=12∑n=1N∑k=1c(tkn−ykn)2

W=(klij,βlj,blj)W=(kijl,βjl,bjl),即WW表示所有参数组成的向量,我们希望能够找到一组参数WW∗ 来最小化ENEN,即

W=argminWENW∗=argminWEN
由于ENEN中的参数过多(Lenet中有5万个左右的参数),所以使用一般的方法(比如数学分析或微积分中,对各分量求导等于0联立解方程组)很难求得最小值。 
所以我们一般使用基于梯度的训练方法,一般使用梯度下降法: 
W(k)=W(k1)αENW|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=12k=1c(tkyk)2E=12∑k=1c(tk−yk)2

δlj=Euljδjl=∂E∂ujl
,即δljδjl为误差函数对第 l  l 层第 j  j 个特征图(或节点)输入加权和的导数。

  1.  E  E 对最后一层输入加权和求导:
    EuLj=EtjtjuLj=(tjyj)f(uLj)∂E∂ujL=∂E∂tj⋅∂tj∂ujL=(tj−yj)⋅f′(ujL)
    .
  2. 卷积层连池化层的求导: 
    以下部分公式比较多,只能上传手稿了: 
    卷积神经网络的训练
    卷积神经网络的训练