关于卷积神经网络的正向和反向传播网上已经有了大量的技术指导,但是绝大部分都止步于卷积核步长为1,且通道数为1的简单的示意性的推导,当步长为2时,大多数的教程都语焉不详,或直接跳过。我在这里就对步长为2以上的卷积操作进行详细讨论。本文假设读者已经基本掌握神经网络的链式求导法则,所以不会再讲这些细节。另外,本文只考虑卷积操作的正向和反向传播,如果想对池化层的相应过程做了解可以直接移步参考文献。
申明:本文所涉及的卷积不对卷积核做180°翻转操作。
1. 一些记号
我们以 l l 代表层数, , Wl W l 代表第 l l 层图像的长和宽, 代表第 l l 层的通道数。 代表第 l l 层的卷积核,它的形状为 ,而 bl b l 是偏置项,形状为 (1,1,nl) ( 1 , 1 , n l ) 。步长用 sl s l 表示,由于我们只看其中一层的传播的,所以下文忽略这个步长的上标 l l ,用 表示。 Zl Z l 是激活前的线性组合, Al A l 代表激活后的输出,有 Al=g(Zl) A l = g ( Z l ) ,而 g(·) g ( · ) 则是激活函数。其中, Zl Z l 和 Al A l 是相同形状的三维张量,形状为 (Hl,Wl,nl) ( H l , W l , n l ) 。
另外总的代价函数为 J J , 代表代价函数对卷积核参数的梯度,我们简写用 dw d w 表示, 同样还有误差敏感项 ∂J∂Z ∂ J ∂ Z ,简写作 dZ d Z 。
另外,关于坐标的记号:
上文中所述的 Al,Zl,wl A l , Z l , w l 都是三维矩阵(张量),前两个维度表示平面2D坐标(第一个维度指示行,第二个维度指示列),最后一个维度代表通道。在具体表示某一个元素时,我会用脚标的形式给出,例如 Zli,j,k(i=0,1,…,Hl−1;j=0,1,…,Wl−1;k=0,1,…,nl−1) Z i , j , k l ( i = 0 , 1 , … , H l − 1 ; j = 0 , 1 , … , W l − 1 ; k = 0 , 1 , … , n l − 1 ) 代表第k号通道下第i行第j列的元素(注意i,j,k都是从0开始计数的)。而有时候,我们会想表示某个通道的全部元素,例如 wl·,·,k′ w · , · , k ′ l 代表第 l l 层第
个卷积核的全部元素,这时它是一个二维的矩阵(相当于对原来的三维张量 wl w l 做了切片操作)。
2. 前向传播
我们先看卷积核的滑动过程,假设我们有一张7×7的图片(这里只画出来了一个通道),卷积核大小为3×3,步长为2,那么卷积过后可以得到3×3的图片。
彩色画笔标出来的框框代表了卷积核滑动后产生结果。相信聪明的你一定看的明白。
现在我们讨论一下卷积前后坐标的变化情况:
我们看卷积后的小图片(等号右边3×3的图片),它的左上角 (0,0) ( 0