卷积网络 (convolutional network)(LeCun, 1989),也叫做卷积神经网络 (convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。卷积神经网络主要包括:输入层(Input layer)、卷积层(convolution layer)、激活层(activation layer)、池化层(poling layer)、全连接层(full-connected layer)、输出层(output layer)。
本篇博文我们主要描述卷积神经网络中卷积层和池化层的工作原理,并解释填充、步幅、输入通道和输出通道的含义和卷积、池化过程中的计算公式。
卷积层
一个卷积层的配置通常由以下四个参数确定:
卷积具有局部连接、参数共享这两大特征。
卷积过程实质上就是卷积核中的所有权重与其在输入图像上对应元素数值之和。
图1:二维互相关运算
图2:含2个输入通道的互相关计算
对于多通道输入和经过多个卷积核操作之后,输出特征图的过程如下所示:
填充(padding):是指在输入高和宽的两侧填充元素(通常是0元素)。
图3里我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。图3中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:0×0+0×1+0×2+0×3=0 。
图3: 在输入的高和宽两侧分别填充了0元素的二维互相关计算
一般来说,如果在高的两侧一共填充 ph行,在宽的两侧一共填充 pw 列,那么输出形状将会是 (nh−kh+ph+1)×(nw−kw+pw+1).
也就是说,输出的高和宽会分别增加 ph 和 pw 。
在很多情况下,我们会设置 ph=kh−1 和 pw=kw−1 来使输入和输出具有相同的高和宽。这样会方便在构造网络时推测每个层的输出形状。假设这里 kh 是奇数,我们会在高的两侧分别填充 ph/2 行。如果 kh 是偶数,一种可能是在输入的顶端一侧填充 ⌈ph/2⌉ 行,而在底端一侧填充 ⌊ph/2⌋ 行。在宽的两侧填充同理。
卷积神经网络经常使用奇数高和宽的卷积核,如1、3、5和7,所以两端上的填充个数相等。对任意的二维数组X,设它的第i行第j列的元素为X[i,j]。当两端上的填充个数相等,并使输入和输出具有相同的高和宽时,我们就知道输出Y[i,j]是由输入以X[i,j]为中心的窗口同卷积核进行互相关计算得到的。
步幅(stride):卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。我们将每次滑动的行数和列数称为步幅(stride)。图4展示了在高上步幅为3、在宽上步幅为2的二维互相关运算。可以看到,输出第一列第二个元素时,卷积窗口向下滑动了3行,而在输出第一行第二个元素时卷积窗口向右滑动了2列。当卷积窗口在输入上再向右滑动2列时,由于输入元素无法填满窗口,无结果输出。图4中的阴影部分为输出元素及其计算所使用的输入和核数组元素:0×0+0×1+1×2+2×3=8 、 0×0+6×1+0×2+0×3=6 。
图4:高和宽上步幅分别为3和2的二维互相关运算
一般来说,当高上步幅为 sh ,宽上步幅为 sw 时,输出形状为⌊(nh−kh+ph+sh)/sh⌋×⌊(nw−kw+pw+sw)/sw⌋.
如果设置 ph=kh−1 和 pw=kw−1 ,那么输出形状将简化为 ⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋ 。更进一步,如果输入的高和宽能分别被高和宽上的步幅整除,那么输出形状将是 (nh/sh)×(nw/sw) 。
卷积过程中多通道输入与输出的大小关系: 其中W1代表输入图片宽度,H1代表输入图片高度,D1代表输入通道维数,K代表滤波器的个数,F代表感受野的大小(滤波器的大小,这里默认滤波器的高和宽都是一样的),S代表步幅,P代表填充,W2代表输出图片宽度,H2代表输出图片高度,D2代表输出通道维数。
池化层
池化层的提出主要是为了缓解卷积层对位置的过度敏感性。池化层中的池化函数通过使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。
根据特征图上的局部统计信息进行下采样,在保留有用信息的同时减少特征图的大小。和卷积层不同的是,池化层不包含需要学习的参数。即在池化层中参数不发生变化。最大池化(max pooling)函数给出相邻矩形区域内的最大值作为输出,平均池化(average pooling)函数给出相邻矩形区域内的均值作为输出。
池化层主要有以下三点作用:
池化层中的填充和步幅机制与卷积层一致,值得注意的是:在处理多通道输入数据时,池化层对每个输入通道分别池化,而不是像卷积层那样将各通道的输入按通道相加。这意味着池化层的输出通道数与输入通道数相等。
池化过程中多通道输入与输出的大小关系:
其中W1代表输入图片宽度,H1代表输入图片高度,D1代表输入通道维数,F代表感受野的大小(池化滤波器的大小,这里默认滤波器的高和宽都是一样的),S代表步幅,W2代表输出图片宽度,H2代表输出图片高度,D2代表输出通道维数·