通过观察,研究者发现了以下3条性质。
① 某些模式总是存在于局部区域。例如,熊猫眼睛的特点可以作为识别熊猫的一种模式,包含熊猫眼睛的区域比整张图像小很多。要识别出这些模式,一个神经元并不需要与整张图像的所有像素相连,只需要与某些小区域相连接。连接到小的区域意味着少的网络参数。
② 相同的模式会出现在多个区域,也就是同一特征可以出现在不同图像的不同位置。例如,不同图像中熊猫的眼睛位置有所不同。图1展示了不同图像中熊猫眼睛的位置。这意味着隐含层中很多神经元做的事情几乎是一样的,都是在捕获熊猫眼睛的特点。因此,不同的神经元可以共享相同的参数,共享参数可以有效减少参数的数量。
图1不同图像中熊猫眼睛的位置
③ 对图像中的像素做下采样(subsampling)不会影响物体的识别。对一张图像进行下采样,可以得到原始图像的缩略图,而图像中要识别的模式并不会受到很大影响,可参考图2展示的对图像进行下采样之后的效果。对图像进行下采样可以减小图像的大小,进而减少神经网络的参数。
图2 图像进行下采样之后的效果
卷积神经网络就是参考了以上三条性质,对原始全连接神经网络结构进行调整与设计得到的。卷积神经网络由一个或多个卷积层(convolutional layer)与一个或多个全连接层构建,其中图像经过卷积层之后获得的表示通常会进行下采样操作,也称为池化操作。卷积神经网络进行池化操作的层称为池化层(pooling layer)。下面具体介绍卷积神经网络中的卷积层与池化层。
假设输入是M ×M ×R 的图像,其中M 表示图像的长和宽(图像的长和宽也可以不等),R 是图像的通道(channel)数。例如,对于彩色RGB图像,R=3,对于灰度图像,R=1。
卷积层与一般的全连接层不同,不再使用权重矩阵表示所有神经元节点在相邻网络层之间的一一对应关系,而是使用多组共享参数来构建两个网络层之间的联系。在卷积网络中,共享参数称为卷积核。一个卷积层可以使用K 个大小为N ×N ×R 的不同卷积核,其中N <M 。经过一层卷积操作之后,输入图像会转化成K 个大小为(M -N +1)×(M -N +1)的矩阵,通道数变为K 。图3给出了卷积操作的原理示意图。如图所示,卷积操作的具体计算如下:
(1)在所有通道的数据张量(图像)中选取与对应的卷积核W(k)尺寸相同的窗口Xi(k),并与之进行逐点乘运算W(k)⊙Xi(k),k=1,2。
(2)把对应张量W(r)⊙Xi(r)中的所有元素求和,得到每个窗口的标量表示。
(3)窗口在原数据张量中滑动,可以得到一个(M-N+1)×(M-N+1)的矩阵,矩阵的每一个元素对应每个窗口的标量表示。由于使用了个不同卷积核,将会得到个矩阵的新张量。
图3 卷积操作的原理示意图
可以发现,经过卷积操作之后,数据的长宽尺寸会变小,如果要保持卷积前后的长宽不变,需要对原数据进行填补操作,即在原数据矩阵的周围填补0。假设卷积核的尺寸为,当填补的长和宽为时,可以保证数据在经过卷积操作后长宽不变。卷积核的长和宽通常设置为奇数,因为这样填补的长和宽都是偶数,可以平均分配在数据矩阵的周围。
池化层通常接在卷积层之后。池化操作是对数据进行下采样,通常是在的连续区域上取均值池化或者取最大值池化,通常不超过5。通常在池化层之前或者之后增加一个偏置项和非线性激活函数。
卷积神经网络可以使用多个卷积层和池化层的组合,最后将所有通道的数据作为向量输入全连接层,为实现具体任务构建端到端的映射。卷积神经网络参数的求解使用反向传播算法。总的来说,卷积神经的结构设计利用了图像或其他结构化数据的多维结构,通过引入共享的卷积核以及池化等操作,捕获了数据中模式的位移不变性,减少了网络的参数。