步长大于1时卷积神经网的反向传播

关于卷积神经网络的正向和反向传播网上已经有了大量的技术指导,但是绝大部分都止步于卷积核步长为1,且通道数为1的简单的示意性的推导,当步长为2时,大多数的教程都语焉不详,或直接跳过。我在这里就对步长为2以上的卷积操作进行详细讨论。本文假设读者已经基本掌握神经网络的链式求导法则,所以不会再讲这些细节。另外,本文只考虑卷积操作的正向和反向传播,如果想对池化层的相应过程做了解可以直接移步参考文献。

申明:本文所涉及的卷积不对卷积核做180°翻转操作。


1. 一些记号

我们以l代表层数,HlWl代表第l层图像的长和宽,nl代表第l层的通道数。wl代表第l层的卷积核,它的形状为k1k2nl),而bl是偏置项,形状为11nl)。步长用sl表示,由于我们只看其中一层的传播的,所以下文忽略这个步长的上标l,用s表示。Zl是**前的线性组合,Al代表**后的输出,有Al=g(Zl),而g(·)则是**函数。其中,ZlAl是相同形状的三维张量,形状为(Hl,Wl,nl)

另外总的代价函数为JJw代表代价函数对卷积核参数的梯度,我们简写用dw表示, 同样还有误差敏感项JZ,简写作dZ

另外,关于坐标的记号:
上文中所述的AlZlwl都是三维矩阵(张量),前两个维度表示平面2D坐标(第一个维度指示行,第二个维度指示列),最后一个维度代表通道。在具体表示某一个元素时,我会用脚标的形式给出,例如Zi,j,kli=0,1,,Hl1;j=0,1,,Wl1;k=0,1,,nl1代表第k号通道下第i行第j列的元素(注意i,j,k都是从0开始计数的)。而有时候,我们会想表示某个通道的全部元素,例如w·,·,kl代表第l层第k个卷积核的全部元素,这时它是一个二维的矩阵(相当于对原来的三维张量wl做了切片操作)。

2. 前向传播

我们先看卷积核的滑动过程,假设我们有一张7×7的图片(这里只画出来了一个通道),卷积核大小为3×3,步长为2,那么卷积过后可以得到3×3的图片。
步长大于1时卷积神经网的反向传播
彩色画笔标出来的框框代表了卷积核滑动后产生结果。相信聪明的你一定看的明白。

现在我们讨论一下卷积前后坐标的变化情况:
我们看卷积后的小图片(等号右边3×3的图片),它的左上角(0,0)对应了7×7的大图片上(0,0)(2,2)的所有方格(蓝色线所覆盖的方格)。而小图片上红色点(0,1)对应了大图片(0,2)(2,4)的方格,绿色粗点(0,2)则对应了(0,4)(2,6)的方格。所以,卷积后的坐标(i,j)对应了卷积前(is,js)(is+k11,js+k21)的坐标。

综上,我们抽象出前向传播的过程,如下所示:

Zi,j,kl=k=0nl11m=0k11n=0k21Ais+m,js+n,kl1wm,n,kl+bkl

Ai,j,kl=g(Zi,j,kl)

式中:

i=0,1,,Hl1;

j=0,1,,Wl1;

k=0,1,nl1;

其中,卷积前后图片长度H和宽度W的变化情况如下:

Hl=Hl1k1s+1;

Wl=Wl1k2s+1;

公式解释:·是向下取整操作,Al1代表了卷积前的大图片, Zl就是卷积后的小图片,它们之间的坐标存在一个s的倍数关系。其中最左边的累加号代表对卷积核w·,·,klAl的所有通道做了2D的卷积操作,第二个和第三个累加就是具体某一层的二维卷积操作,稍加推导你就能明白。

3. 反向传播

3.1 dw的求法

我们知道wl是一个三维的张量,Zl也是三维的张量,而且两者的第三个维度,也就是通道维是相等。形象的说,第一个卷积核w·,·,0lAl1做卷积可以得到Zl的第一个通道,即Z·,·,0l,那么第二个卷积核w·,·,1lAl1做卷积可以得到Zl的第二个通道,即Z·,·,1l。所以w·,·,kl仅仅通过Z·,·,kl对代价函数J的误差做出贡献,那么误差反向传播回来的时候,也就是当我们求dwm,n,k时,不需要对通道维做累加,只需要对平面的两个维度做累加即可。

用公式来描述就是:

dwm,n,kl=ijJZi,j,klZi,j,klwm,n,kl

那么平面上两个的坐标i,j满足什么样的条件呢?

假设在下面这幅图中,我们要求dw1,1,kk=0,1nl1),卷积核(1,1)上的参数(红点)在大图片(Al1)上滑过的位置由红点标出,而做卷积的结果则显示在了小图片的红点上。
步长大于1时卷积神经网的反向传播

所以,卷积结果的二维坐标i,j会布满整个输出的图像,公式如下:

dwm,n,kl=K=0nl11i=0Hl1j=0Wl1Am+is,n+js,Kl1dZi,j,kl

3.2 dZ的求法

上一个求dw的式子中,我们假设dZ是已知的。现在我们来求dZ。由于我们这里只画出了一层卷积层,即第l层,所以我们就根据dZldZl1

注意在这里,求dZl1时,我们需要对通道数做累加,因为卷积核w·,·,kl(k=0,1nl1)是对Zl1的所有通道做卷积操作(其实是直接对Al1做卷积,但是Al1Zl1的元素是一一对应的,所以在计算图上两者地位是一致的),从而得到Z·,·,kl对误差做贡献的。

形象的画图表示就是这样:

步长大于1时卷积神经网的反向传播

所以对于特定的一层Z·,·,kl1,它的梯度是需要对通道做累加的。
公式如下:

dZi,j,kl1=k=0nl1ijJZi,j,klZi,j,klZi,j,kl1

同样的,下面讨论平面上两个的坐标i,j满足什么样的条件。看图说话:

步长大于1时卷积神经网的反向传播

假设我们要求的是紫色标出来的方格2,2处的dZ2,2,kl1,那么卷积核上滑过该点的位置分别是红色点2,2,绿色点2,0 ,蓝色点0,2和棕色点0,0,产生在Zl上的结果也由个颜色对应的点位所示。抽象成数学式子就是:

dZi,j,kl1=k=0nl1ijdZi,j,klwijs,jjs,klg(Zi,j,ki1)

式中:

ik1s<imin(is,Hl1),iN

jk2s<jmax(js,Wl1),jN

建议各位旁友拿起纸和笔推导一下,尤其上面两个关于i,j的限制条件。

3.3 db的求法

db最为简单,我们直接给出结果:

dbkl=i=0Hl1j=0Wl1dZi,j,kl

参考文献

http://www.jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/