VGG 16 公式推导
VGG-16共有13层卷积层,5层池化层和3层全连接层,对前两层全连接网络采用dropout和L2正则化防止过拟合,采用批量梯度下降+Momentum以交叉熵为目标损失进行训练优化。

-
nl—第l层网络节点(卷积核)数目;
-
kp,ql—第l层p通道与第l−1层q通道对应卷积核;
-
bpl—第l层p节点(通道)的偏置;
-
Wl—第l层全连接网络的权重;
-
zl—第l层未经过**函数的前向输入;
-
al—第l层经过**函数后的前向输出;
前向传递
第l层卷积操作公式:
zpl(i,j)=q=1∑nl−1u=−1∑1v=−1∑1aql−1(i−u,j−v)kp,ql(u,v)+bplapl(i,j)=ReLU(zpl(i,j))
第l层最大池化公式:
zpl(i,j)=max(apl−1(2i−u,2j−v))u,v∈{0,1}
经过前18层的卷积核池化操作后可获得7×7×512大小的特征图,需要将其转化为一个25,088维的向量以便作为全连接层的输入,该过程输出为a18:
a18=F({zp18}p=1,2,⋯,512)
全连接网络的前两层采用dropout,设为d,第l层节点的连通可用rl来表示,其服从伯努利分布:
rl∼Bernoulli(d)
前向传播为:
a~l=rl⊙alzl+1=Wl+1a~l+bl+1al+1=ReLU(zl+1)
其中,⨀为Hadmard积,即矩阵对应元素相乘。
输出层的**函数为softmax:
aiL=softmax(ziL)=k=1∑nLezkLeziL
采用交叉熵损失作为损失函数:
L=−i=1∑nLyilogaiL
反向传播
引入中间变量δl,为第l层的误差,表示损失函数对第l层前向输入zl 的梯度,即为∂zl∂L
Softmax函数偏导数计算公式为:
当i=j时,
∂zj∂(∑k=1nezkezj)=(∑k=1nezk)2ezj∑k=1nezk−(ezj)2=aj(1−aj)
当i=j时,
∂zj∂(∑k=1nezkezi)=(∑k=1nezk)2−eziezj=−aiaj
输出层第j个节点的误差为:
δjL=∂zjL∂L=i=1∑nL∂aiL∂L∂zjL∂aiL=∂ajL∂L∂zjL∂ajL+i=j∑∂aiL∂L∂zjL∂aiL=−ajLyjajL(1−ajL)+i=j∑−aiLyi(−aiLajL)=−yj(1−ajL)+ajLi=j∑yi=ajL−yj
输出层的反向传播误差为:
δL=aL−y
第l个隐藏层第j个节点的反向传播误差为:
δjl=∂zjl∂L=i=1∑nl+1∂zil+1∂L∂a~jl∂zil+1∂ajl∂a~jl∂zjl∂ajl=i=1∑nl+1δil+1Wi,jl+1rjlReLU(zjl)′=(W:,jl+1)Tδl+1rjlReLU(zjl)′
因此第l全连接层的反向传播误差为:
δl=(Wl+1)Tδl+1⊙rl⊙ReLU(zl)′
由全连接层到池化层的反向传播误差为:
δ18=F−1((W19)Tδ19)
其中δ18为7×7×512的张量。
由第l+1池化层的δl+1推导第l卷积层的反向传播误差时,对于最大池化,我们需要利用上采样将δl+1中每个通道中的元素放到之前做前向传播时最大值的位置处,其他元素为0:
δpl=∂zpl∂L=∂apl∂L∂zpl∂apl=upsample(δpl+1)⊙ReLU(zpl)′
因此,由池化层误差计算卷积层反向传播误差公式为:
δl=upsample(δl+1)⊙ReLU(zl)′
由第l+1卷积层的δl+1推导第l卷积层的反向传播误差:
zpl+1=q=1∑nlaql∗kp,ql+1+bpl+1
δql=∂zql∂L=p=1∑nl+1∂zpl+1∂L∂aql∂zpl+1∂zql∂aql
∂zpl+1∂L∂aql∂zpl+1=δpl+1∗rot180(kp,ql+1)
因此,
δql=∂zql∂L=⎣⎡p=1∑nl+1δpl+1∗rot180(kp,ql+1)⎦⎤⊙ReLU(zql)′
当第l层为池化层时,ReLU(zql)′=1。
梯度计算
已知全连接层l的反向传播误差δl,计算梯度∂Wl∂L和∂bl∂L:
∂Wl∂L=∂zl∂L∂Wl∂zl=δl(al−1)T
∂bl∂L=∂zl∂L∂bl∂zl=δl
当获得平均梯度信息后添加L2正则项,设系数为γ:
∂Wl∂L=∂Wl∂L+γ(rl(rl−1)T)Wl
已知卷积层的反向传播误差δl,计算梯度∂kp,ql∂L和∂bpl∂L:
∂kp,ql∂L=∂zpl∂L∂kp,ql∂zpl=δpl∗aql−1
∂bpl∂L=∂zpl∂L∂bpl∂zpl=i=1∑nlj=1∑nlδpl(i,j)
参数更新
当获得一个批次的平均梯度信息后利用批量梯度下降+Momentum方法进行参数更新:
vdkvdbvdW=βvdk+(1−β)∂kl∂L=βvdb+(1−β)∂bl∂L=βvdW+(1−β)∂Wl∂L
参数更新:
klblWl=kl−αvdkl=bl−αvdbl=Wl−αvdWl
[1]. Very Deep Convolutional Networks for Large-Scale Image Recognition
[2]. Dropout: A Simple Way to Prevent Neural Networks from Overfitting
[3]. 卷积神经网络(CNN)反向传播算法