1. 动机
卷积神经网络(CNN)是一种生物启发的MLPs的变种,从Hubel和Wiesel早期对猫的视觉皮层的研究中,我们得知视觉皮层包含了复杂的神经元组织形式。每个神经元只对视觉区域中一个小的局部区域敏感,一个小的局部区域被称为对应神经元的感受野,它们平铺起来覆盖了整个视觉区域。这些神经元的作用如同对输入空间的局部滤波器,并很好的适用于发现自然图像中很强的空间局部相关关系。 两种基本的神经元为S细胞(Simple Cell)和C细胞(Complex Cell)。S细胞在自身的感受野内最大限度地对图像中类似边缘模式的刺激做出响应,而C细胞具有更大的感受野,它可以对图像中模式的精确空间位置具有局部不变性。
2. 三大特点
1. 稀疏连接:
CNN通过加强神经网络中相邻层之间节点的局部连接模式来挖掘自然图像的空间局部关联信息。第m层节点的输入只是第m?1层节点的一部分,这些节点具有空间相邻的视觉感受野。假设m?1层为视网膜输入层,它上面的m层每个神经元节点都具有宽度为3的感受野,即分别与m?1层的3个相邻的节点相连。m+1层与m层有着相似的连接属性,即m+1层的节点仍具有宽度为3的感受野,但是对于m?1层感受野会更大(本图中是5)。每个神经元对其感受野外的变化没有响应,这种结构保证了训练好的每个滤波器只对空间局部输入模式产生最强烈的响应。多层神经元堆积形成了非线性滤波器,并逐层递增的具有了全局性(对更大输入区域的响应)。比如,第m+1层能够对宽度为5的非线性特征进行编码。
2. 权值共享:
每一个滤波器fi在整个视觉区域都是重复的,即在一个滤波器与上一层的一张特征图进行卷积时,该滤波器的参数都是相同的,因而对于卷积的结果来说就是共享了参数(权重和偏置)。在下图中,紫色方框中的神经元在同一张特征图中,颜色相同的权重是被共享的(相同的)。
重复的滤波器能够在检测特征时可以不用考虑位置信息,并且共享权值可以极大的减少了待学习的自由参数的个数从而提高了学习效率。这种特点可以让CNN在视觉问题中具有更好的泛化能力。
权值共享可以这样解释:
1. 在图像数据中,一个值的附近的值经常是高度相关的,可以形成比较容易被探测到的有区分性的局部特征。
2. 图像的局部统计特征经常是位置不变的,在一个地方出现的某个特征,也可能出现在别的地方,所以不同位置的像素可以共享权值来探测一张图像中不同位置的相同特征。
3. 多特征图:
特征图是通过不断的对图像的子区域在一个线性滤波器上做卷积,增加一个偏置项,在此结果上再作用一个非线性函数得到的。为了更好地表示数据,隐层通常由多个特征图构成,隐层的权值W可以表示为一个4维张量(本层特征图组合个数m、上层特征图个数n、滤波器行数r、滤波器列数c),偏置b为一个1维向量(本层特征图个数m)。这表示本层一个特征图的获得,需要使用n个滤波器对上层的n个特征图对应卷积得到n个卷积图,并对这n个卷积图进行组合(通常的组合方式就是直接把n个卷积图相加),然后再对组合结果图中所有元素加上一个相同的偏置。因此当本层有m个特征图时,就需要m×n个滤波器和m个偏置。
上图显示了两个相邻的卷积层。m?1层有四个特征图(h0m?1,h1m?1,h2m?1,h3m?1),m层有两个特征图(h0m,h1m)。h0m中的任意一个像素w1的计算过程为:确定感受野为2×2,选取4个大小为2×2的滤波器w00,w01,w02,w03,分别与h0m?1,h1m?1,h2m?1,h3m?1卷积,则
w1=w00⊙h00m?1+w01⊙h01m?1+w02⊙h02m?1+w03⊙h03m?1
利用共享权值的方法重复以上操作,就得到了特征图h0m。同样,再选取另外4个大小为2×2的滤波器w10,w11,w12,w13就可以得到特征图h1m。
注意:这里共享权值的意思是h0m来自于h0m?1分量的连接权重都是w00,来自于h1m?1分量的连接权重都是w01,等等。而稀疏连接的意思是h0m中的每个像素点都只与h0m?1的2×2大小内的像素点连接,与h1m?1也是2×2大小内的像素点连接,等等。
3. 两个操作
1. 卷积
实际的一张特征图还要将卷积后的所有像素加上同一个偏置,再进行非线性变换才得到
2. 最大池化
最大池化(max-pooling)是一种非线性的下采样的方法。最大池化把输入图像分割成为不重叠的子区域,每一个子区域都只输出最大值。
最大池化的原因有两个:
* 降低了上层的计算复杂度。
* 提供了变换的不变性,对于位移变化有着良好的鲁棒性
作用解释
卷积层的作用是探测上一层特征的局部连接
池化层的作用是把在语义上相似的特征合并起来
4. 例子LeNet
模型的低层由卷积层和最大池化层交替排列组成,高层是一个全连接层,就是MLP神经网络(隐层+逻辑回归),全连接层的输入是它之前一层的所有特征图展开成一维构成的向量。因此在低层的四维张量在高层中展开成为了二维矩阵,从而能够顺利应用MLP。
注意:这里实现的LeNet与原始的不一样,即在两层相邻的多特征图的组合中,这里使用了全连接(把n个卷积图全部相加),而不用部分连接(在n个卷积图中按照一定的选取规则部分相加),这是由于现在计算机已经能够快速处理全连接结构,而且可以使用更好的方法来减少待学习的自由参数的数量。
5. 超参数选择技巧
1. 卷积层滤波器数量
计算一个卷积层滤波器的激活函数比计算传统的MLP的代价要高很多。假设第l?1层包含了Kl?1个特征图和M×N个像素(特征图大小乘以特征图数量),在l层有Kl个m×n的滤波器,所以计算特征图的代价为:(M?m)×(N?n)×m×n×Kl?1。而一般的MLP为Kl?1×Kl,所以CNN中的特征图数目一般比MLP中的隐层节点数目要少很多,并取决于特征图的尺寸大小。
因为特征图的大小M随着层次深度的加大而变小,为了使得每一层的计算量保持一致,特征图的大小乘以特征图的数量在各层应该大致保持一个常量,所以特征图的数量N应该随着层次深度的加大而变大。同时为了保留输入的信息,需要总的激活数量M×N(特征图大小乘以特征图数量)逐层非递减,但是在做监督学习时可能并非严格如此。特征图的数量控制着网络的容量,它应该取决于样本的数量和任务的复杂度。
2. 滤波器形状
形状应该视数据集图片的大小而定。为了得到良好的特征提取效果,应该在给定数据集的情况下寻找相同粒度的滤波器形状。
3. 最大池化形状
典型的取值是2×2或者不用最大池化,比较大的图像可以在低层用4×4的池化。但是要需要注意的是,这样的池化在降维的同时也有可能导致信息严重损失。