上篇学习的自编码器方式对前馈神经网络进行预训练,虽然解决了BP算法求解的缺陷,但是也产生了一个明显的缺点:训练时间长,因为要逐层学习特征抽取。

在图像识别领域诞生了一个经典模型——CNN(卷积神经网络),它也用BP算法求解,但是没有Pre-train,却非常有效,属于带有前向反馈的网络。

CNN优势:网络结构对平移、比例缩放、倾斜或其他形式的变形具有高度不变性。

1. 神经认知科学的发现

CNN 是从视觉皮层的生物学上获得启发的。1958年,大卫·休伯尔(David Hunter Hubel)和托斯坦·维厄瑟尔(Torsten Wiesel)在约翰·霍普金斯大学(The JohnHopkins University)通过对小猫脑袋通电实验提出了感受区域(receptive field)的概念。他们验证出大脑中的一些个体神经细胞只有在特定方向的边缘存在时才能做出反应(即放电)。例如,一些神经元只对垂直边缘兴奋,另一些对水平或对角边缘兴奋。Hubel 和 Wisesl 发现所有这些神经元都以柱状结构的形式进行排列,而且一起工作才能产生视觉感知。

1984年,日本学者福岛(Fukushima)基于感受区域概念提出了神经认知机(Neocognitron),这是卷积神经网络的第一个实现网络。神经认知机包含两类神经元,即承担特征抽取的S-元和抗变形的C-元。其中,S-元中涉及两个重要参数:感受区域和阈值参数,感受区域确定输入连接的数目,阈值控制对特征子模式的反应程度。每个S-元的感光区中由C-元带来的视觉模糊量呈正态分布。如果眼睛感受到的物体是移动的,即已经感受到模糊和残影,S-元感光区会调整识别模式,它不会完整地提取所有的特征给大脑,而会只获取一部分关键特征传给大脑,而屏蔽其他的视觉干扰。也就是说,眼睛在看到移动物体时,先由C-元决定整体的特征感受控制度,再由S-元感光区提取响应特征。

2. 卷积神经网络结构

一个典型的 CNN 结构是这样的:

输入→卷积→ReLU→卷积→ReLU→池化→ReLU→卷积→ReLU→池化→全连接

2.1 输入

对于一张32 x 32 x 3(32宽32高3颜色通道)的图片来说,如果用上篇学习的常规神经网络来表示,那么第一个隐层的神经元数量将会有32 x 32 x 3 = 3072个,当图片更大一点为200 x 200 x 3时,第一隐层的神经元数量将多达120000个,这个数量级参数的模型显然不会很好,因为不仅训练慢,而且容易过拟合。

2.2 卷积层(Convolutional Layer)

CNN优点 cnn优点与缺点_卷积

卷积神经网络的每一层都在干什么?官方的说法是:对输入数据应用若干过滤器,一个输入参数被用来做了很多类型的特征提取。每一个过滤器用来抽取一种特征。上图是一个卷积层的输入和输出,可以看出,一层的神经元只能连接到它之前的层的小区域内,这代替了前面完全连接的那种方式。

在上图中,有一个大小为5 x 5 x 3的过滤器(filter,有时候也被称为神经元neuron或核kernel),被过滤器覆盖的区域被称为感受野(receptive field)。输入内容为一个32 x 32 x 3像素值的数组,将过滤器中的值与图像中的原始像素值相乘(又称为计算点积),这些乘积加在一起会得到一个数字,该数字表示过滤器位于图片左上角的情况。滑动过滤器,每移动1个像素会得到一个数字,这个过程叫卷积运算,最终这些数字会生成一个新矩阵。经过卷积过程一个32 x 32 x 3的矩阵映射成了一个28 x 28 x 1的矩阵,我们称一个应用过滤器之后得到的结果为activation map(激活映射)或feature map(特征映射、特征图谱)。

一个卷积层可以同时使用多个过滤器,例如,当使用两个5 x 5 x 3的过滤器时,输出总量将会变成28 x 28 x 2。采用的过滤器越多,空间维度( spatial dimensions)保留得也就越好。数学上而言,这就是卷积层上发生的事情。下面这个例子很形象地解释了一个曲线过滤器的工作原理:

CNN优点 cnn优点与缺点_卷积_02

左图:感受野的可视化;右图:感受野的像素表示 * 过滤器的像素表示

如果输入图像上某个形状看起来很像过滤器表示的曲线,那么所有点积加在一起将会得出一个很大的值,上图是6600。

以此类推,前面的卷积层识别的是低级特征,e.g.边缘和曲线一类,输出表示的是低级特征在原始图片中的位置。靠后的卷积层输出的是更高级的特征,e.g.半圆和四边形。越深入网络,过滤器的感受野越大。

2.3 步幅和填充

过滤器移动的距离就是步幅(stride),上面例子中步幅被默认设置为1,步幅过大会丢失图片的原始信息。

下面来看填充(padding),上图所示经过过滤器的矩阵比原始矩阵小,如果我们继续用卷积层,尺寸减小的速度就会超过我们的期望。在网络的前几层中,应该尽可能多地保留原始输入内容的信息,不想尺寸减小过快,这样我们就能提取出那些低层的特征。比如说我们想要输出量维持在32 x 32 x 3矩阵,我们可以对这个层应用大小为 2 的零填充(zero padding)。零填充在输入内容的边界周围补充零。如果我们用两个零填充,就会得到一个 36 x 36 x 3的输入卷。

通常一个3 x 3的过滤器,padding选择1;一个5 x 5的过滤器,padding选择2。

2.4 ReLU(修正线性单元)层

在每个卷积层之后,通常会立即应用一个非线性层(或激活层)。其目的是给一个在卷积层中刚经过线性计算操作(只是数组元素依次(element wise)相乘与求和)的系统引入非线性特征。过去,人们用的是像双曲正切和 S 型函数这样的非线性方程,但研究者发现 ReLU 层效果好得多,因为神经网络能够在准确度不发生明显改变的情况下把训练速度提高很多(由于计算效率增加)。它同样能帮助减轻梯度消失的问题——由于梯度以指数方式在层中消失,导致网络较底层的训练速度非常慢。ReLU 层对输入内容的所有值都应用了函数 f(x) = max(0, x)。用基本术语来说,这一层把所有的负激活(negative activation)都变为零。这一层会增加模型乃至整个神经网络的非线性特征,而且不会影响卷积层的感受野。

2.5 池化层(Pooling Layer)

又叫子采样层(subsample layer),用来缩减输入数据的规模。通常,在几个 ReLU 层之后,用一个池化层。最受欢迎的就是最大池化( max-pooling),它基本上采用了一个过滤器(通常是 2 x 2 的)和一个同样长度的步幅。然后把它应用到输入内容上,输出过滤器卷积计算的每个子区域中的最大数字。这其实类似于给一个图层打了马赛克,再对单个马赛克进行特征提取。

CNN优点 cnn优点与缺点_神经网络_03

池化层的直观解释是,一旦我们知道了原始输入中一个特定的特征,它与其它特征的相对位置就比它的绝对位置更重要。可想而知,这一层大幅减小了输入卷的空间维度(长度和宽度改变了,但深度没变)。这到达了两个主要目的。第一个是权重参数的数目减少到了75%,因此降低了计算成本。第二是它可以控制过拟合(overfitting)。池化层还有其他选择,比如平均池化(average pooling)和 L2-norm 池化 。

2.6 完全连接层

网络的最后是一个或多个全连接层,这一层处理输入内容(该输入可能是卷积层、ReLU 层或是池化层的输出),计算分类的分值。如果用softmax,最后会输出一个 1 x 1 x N 维矩阵,也就是N维向量。例如,如果你想得到一个数字分类程序,如果有 10 个数字,N 就等于 10。这个 N 维向量中的每一数字都代表某一特定类别的概率。如果某一数字分类程序的结果矢量是 [0, 0.1, 0.1, 0.75, 0, 0, 0, 0, 0, 0.05],则代表该图片有 10% 的概率是 1、10% 的概率是 2、75% 的概率是 3、还有 5% 的概率是 9(注:还有其他表现输出的方式,这里只展示了 softmax 的方法)。

完全连接层观察上一层的输出(其表示了更高级特征的激活映射)并确定这些特征与哪一分类最为吻合。例如,如果该程序预测某一图像的内容为狗,那么激活映射中的高数值便会代表一些爪子或四条腿之类的高级特征。同样地,如果程序测定某一图片的内容为鸟,激活映射中的高数值便会代表诸如翅膀或鸟喙之类的高级特征。大体上来说,完全连接层观察高级特征和哪一分类最为吻合和拥有怎样的特定权重,因此当计算出权重与先前层之间的点积后,你将得到不同分类的正确概率。

3 训练

CNN通过改进的BP算法进行训练,基于所有值来更新卷积过滤器的权重。实操中也可以设定前向反馈一些数据,以便调整。

CNN牛的地方就在于通过感受野和权值共享大大减少了神经网络需要训练的参数的个数。例如,一个1000 x 1000像素的图片,隐层有1000 x 1000 = 1,000,000一百万个神经元,但是要求解的参数可并不是一百万个。因为隐层的参数个数和隐层的神经元个数无关,只和过滤器的大小和过滤器的种类多少有关。

在实际训练中有一些超参需要调。例如,用多少卷积层、过滤器尺寸是多少、步幅和填充值是多少。

4 总结

CNN较一般神经网络在图像处理方面的优点为:

(1)输入图像和网络的拓扑结构能更好地吻合

(2)特征提取和模式分类同时进行,并同时在训练时产生。在很多情况下,图像显示的特征提取并不容易,CNN避免了显示的特征取样,隐式地从训练数据中进行学习。

(3)权重共享可以减少网络的训练参数,使神经网络结构变得更简单。由于同一特征映射面上的神经元权值相同,所以网络可以并行学习。