转载自:http://shiyanjun.cn/archives/1963.html

1 卷积神经网络CNN

卷积神经网络(Convolutional Neural Networks,CNN)是由纽约大学的Yann Lecun于1998年提出的,其本质是一个多层感知机,它是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(Deep Learning)的代表算法之一。卷积神经网络是一种特殊的多层神经网络,像其它的神经网络一样,卷积神经网络也使用一种反向传播算法来进行训练,不同之处在于网络的结构。

卷积神经网络(CNN)具有一些传统技术所没有的优点:

  • 良好的容错能力、并行处理能力和自学习能力,可处理环境信息复杂,背景知识不清楚,推理规则不明确情况下的问题;
  • 它允许样本有较大的缺损、畸变,运行速度快,自适应性能好,具有较高的分辨率;
  • 它是通过结构重组和减少权值将特征抽取功能融合进多层感知器,省略识别前复杂的图像特征抽取过程。

1.1 CNN的基本部件

1.感受野

CNN中某一feature对应(看)着的输入空间中的区域(即:输入图片的像素区域,这些像素参与了该feature的计算)被称为该feature的感受野。感受野的两个重要参数:中心位置和大小。

2.池化

池化是将输入图像进行缩小,减少像素信息,只保留重要信息,主要是为了减少计算量。主要包括最大池化和均值池化。

3.激活函数

常见的激活函数有sigmod, tanh, relu,前两者常用在全连接层,relu常见于卷积层。

4.全连接层

全连接层在整个卷积神经网络中起分类器的作用。在全连接层之前需要将之前的输出展平。

1.2 CNN的基本特征

下面,我们根据网上大家分享的有关卷积神经网络(CNN)的内容,梳理总结CNN所具有的一些特征,如下所示:

1.具有多层层次网络结构

卷积神经网络(CNN)被认为是第一个真正成功的、采用多层层次结构网络的、具有鲁棒性的深度学习方法,它通过挖掘数据在空间上的相关性,来减少网络中的可训练参数的数量,从而改进了前向传播网络的反向传播算法效率。

在CNN中,图像中的小块区域(也叫做“局部感知区域”)被当做层次结构中的底层的输入数据,信息通过前向传播经过网络中的各个层,在每一层中都由过滤器构成,以便能够获得观测数据的一些显著特征。因为局部感知区域能够获得一些基础的特征,比如图像中的边界和角落等,这种方法能够提供一定程度对位移、拉伸和旋转的相对不变性。

CNN中层次之间的紧密联系和空间信息,使得其特别适用于图像的处理和理解,并且能够自动的从图像抽取出丰富的相关特性。

2.不需要对样本进行复杂预处理

卷积神经网络(CNN)的分类模型,与传统模型的不同点在于其可以直接将一幅二维图像输入模型中,并在输出端给出分类结果。好处显而易见,不需复杂的预处理,将特征抽取、模式分类完全放入一个黑匣子中,通过不断的优化来获得网络所需参数,在输出层给出我们需要的分类结果。CNN的特征提取层参数是通过训练数据学习得到的,所以其避免了人工特征提取,而是从训练数据中进行学习。

3.局部连接,具有很强的泛化能力

卷积神经网络(CNN)的泛化能力要显著优于其它方法,已经被广泛应用于模式分类、物体检测、物体识别等方面。利用卷积神经网络建立模式分类器,将卷积神经网络作为通用的模式分类器,直接用于灰度图像。

卷积神经网络(CNN)通过结合局部感知区域、共享权重、空间或者时间上的降采样来充分利用数据本身包含的局部性等特征,优化网络结构,并且能够保证一定程度上的位移和变形的不变性。所以,CNN可以用来识别位移、缩放及其它形式扭曲不变性的二维或三维图像。

卷积神经网络(CNN)是一种深度的监督学习下的机器学习模型,具有极强的适应性,善于挖掘数据局部特征,提取全局训练特征和分类,它的权值共享结构网络使之更类似于生物神经网络,在模式识别各个领域都取得了很好的成果。

4.共享权值,减少了网络参数

卷积神经网络(CNN)的权值共享特性,可以减少需要求解的参数数量。在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。使用多种滤波器(卷积核)去卷积图像,就会得到多种特征映射(Feature Map),同一特征映射的神经元共享权值,减少了网络参数,这也是卷积网络相对于全连接网络的一大优势。

另一方面,权值共享同时降低了网络的复杂性,且多维输入信号(语音、图像)可以直接输入网络的特点避免了特征提取和分类过程中数据重排的过程。

隐藏层的参数个数和隐藏层的神经元个数无关,只和滤波器的大小和滤波器种类的多少有关。隐藏层的神经元个数,与原图像(也就是输入的大小,即神经元个数)、滤波器的大小和滤波器在图像中的滑动步长都有关。

1.3 CNN的网络结构

卷积神经网络(CNN)一般是由卷积层、池化层和全连接层交叉堆叠而成的 前馈神经网络。卷积神经网络有三个结构上的特性:局部连接、权重共享以及池化,这些特性使得卷积神经网络具有一定程度上的平移、缩放和旋转不变性,和前馈神经网络相比,卷积神经网络的参数更少。

1.卷积运算

卷积神经网络使用了一种高效的计算操作——卷积,在信号处理或图像处理中,经常使用一维或二维卷积卷积,因为图像为一个二维结构,所以需要将一维卷积进行扩展。

输入信息为X,滤波器为W,对应二维卷积定义为:

Y = W * X

例如,下图是一个二维卷积运算的例子:

深度学习 – 卷积神经网络CNN简介-StubbornHuang Blog

左侧矩阵可以是一个输入图片,二维卷积运算符*右侧的是一个卷积核,等号右侧的是经过卷积计算后得到的结果,被称为特征映射(Feature Map),它表示使用卷积运算为输入图片提取特征。上图结果特征映射矩阵右上角的-1,是通过如下计算得到的:

1\times (-1)+1\times 0+1\times 0+(-3)\times 0+0\times 0+1\times 0+1\times 0+(-1)\times 0+0\times 1 = -1

其他特征映射矩阵元素,类似地,根据输入矩阵中与卷积核窗口大小3 x 3相同的输入子矩阵,基于滑动步长1进行滑动,然后与卷积核做卷及运算便可以得到。

下面,再给出一个多通道的卷积运算的例子,下图中有2个输入通道,如下图所示:

深度学习 – 卷积神经网络CNN简介-StubbornHuang Blog

上面进行卷积运算时,2个输入通道对应2个卷积核,不同输入通道的矩阵需要与它对应的卷积核做卷积运算,最后输出的结果需要把2个通道卷积计算结果进行加和,得到输出特征映射矩阵的一个元素。例如,上面结果元素56的计算过程为:

(1\times1+2\times2+4\times3+5\times4)+(0\times0+1\times1+3\times2+4\times3) = 56

其它结果矩阵元素的计算方式也类似。

2.特征映射

特征映射(Feature Map)为一幅图像(或其他特征映射)在经过卷积提取后得到的特征,每个特征映射可以作为一类抽取的图像特征。为了提高卷积网络的表示能力,可以在每一层使用多个不同的特征映射,以更好地表示图像的特征。

在输入层,特征映射(Feature Map)就是图像本身。如果是灰度图像,就是有一个特征映射, 输入层的深度D=1;如果是彩色图像,分别有RGB三个颜色通道的特征映射,输入层的深度D=3。

3.卷积层

卷积层有两个很重要的性质:

  • 第一个性质是,局部连接。在卷积层(假设是第L层)中的每一个神经元都只和下一层(第L−1层)中某个局部窗口内的神经元相连,构成一个局部连接网络。作为参数的卷积核对于第L层的所有的神经元都是相同的。
  • 第二个性质是,权值共享。权值共享可以理解为一个卷积核只捕捉输入数据中的一种特定的局部特征,所以如果要提取多种特征就需要使用多个不同的卷积核。

如下图所示,(a)是全连接神经网络中的全连接层,全连接层权重矩阵的参数非常多,训练效率会比较低。而(b)是卷积神经网络中的卷积层,卷积层中相同颜色的连接上,权重是相同的,这样得到的权重矩阵的参数数量大大减少。

深度学习 – 卷积神经网络CNN简介-StubbornHuang Blog

4.池化层

池化层的作用是进行特征选择,降低特征数量,从而减少参数数量。

卷积层虽然可以显著减少网络中连接的数量,但特征映射组中的神经元个数并没有显著减少。如果后面接一个分类器,分类器的输入维数依然很高,很容易出现过拟合。为了解决这个问题,可以在卷积层之后加上一个池化层,从而降低特征维数,避免过拟合。

池化(Pooling)是指对每个区域进行下采样(Down Sampling)得到一个值,作为这个区域的概括。常用的池化函数有:
(1)最大池化函数(Max Pooling):选择一个区域内所有神经元的最大活性值作为这个区域的表示;
(2)平均池化函数(Mean Pooling):一般是取区域内所有神经元活性值的平均值。

下面是一个池化层中最大池化过程的示例,如图所示:

深度学习 – 卷积神经网络CNN简介-StubbornHuang Blog

通过上图示例可以看出,池化层不但可以有效地减少神经元的数量,还可以使得网络对一些小的局部形态改变保持不变性,并拥有更大的感受野。

典型的池化层是将每个特征映射划分为2 x 2大小的不重叠区域,然后使用最大池化的方式进行下采样。池化层也可以看作一个特殊的卷积层,卷积核大小为K x K,步长为S x S,卷积核为max函数或mean函数。过大的采样区域会急剧减少神经元的数量,也会造成过多的信息损失。

5.CNN网络结构

一个典型的卷积网络是由卷积层、池化层(Pooling Layer,又称为汇聚层,或者子采样层)、全连接层交叉堆叠而成,目前常用的卷积网络结构如下图所示:

深度学习 – 卷积神经网络CNN简介-StubbornHuang Blog

一个卷积块为连续M个卷积层和b个池化层(M通常设置为2-5,b为0或1)。一个卷积网络中可以堆叠N个连续的卷积块,然后在后面接着K个全连接层(N的取值区间比较大,比如1∼100或者更大,K一般为0~2)。

下面看一个典型的卷积神经网络模型LeNet-5,它是第一个最基础的CNN神经网络,是一个主要用来识别手写字体的网络模型,我们经常能看到很多DL框架以MNIST数据集来进行训练和测试。

LeNet-5的模型架构如下图所示:

深度学习 – 卷积神经网络CNN简介-StubbornHuang Blog

如果包含输入层,LeNet-5网络一共有8层,其中INPUT是输入层,C1、C3、C5为卷积层,S2、S4为池化层,F6位全连接层,OUTPUT是输出层。

参考文献

  • Gradient-Based Learning Applied To Document Recognition
  • Imagenet Classification With Deep Convolutional Neural Networks
  • Very Deep Convolutional Neural Networks For Large-scale Image Recognition
  • Visualizing and Understanding Convolutional Neural Networks