前言

卷积神经网络(Convolutional Neural Network,CNN) 是多层感知机(MLP)的变种,是一类包含卷积计算且具有深度结构的前馈神经网络(FNN),是深度学习的代表算法之一。常被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以CNN为基础。

CNN本质上是一个多层感知机,xx其成功的原因关键在于它所采用的局部连接和共享权值的方式xx,一方面减少了的权值的数量使得网络易于优化,另一方面降低了过拟合的风险。

整体结构

一般情况下,CNN的结构形式是:输入层–> Conv层 –> Pooling层 –> (重复Conv、Pooling层) … –> FC(Full-connected)层 –> 输出结果
通常输入层大小一般为2的整数倍,通常卷积层使用较小的filter,如3x3,最大也就5x5。Pooling层用于对卷积结果进行降低维度,例如选择2x2的区域对卷积层进行降低维度,则选择2x2区域的最大值作为输出,这样卷积层的维度就降为之前一半。

卷积神经网络整体架构: 卷积神经网络是一种多层的监督学习神经网络,隐含层的xx卷积层xx和xx池化层xx是实现卷积神经网络特征提取功能的核心模块。
该网络模型通过采用梯度下降法最小化损失函数对网络中的权重参数逐层反向调节,通过频繁的迭代训练提高网络的精度。
卷积神经网络的低隐层是由卷积层和最大池采样层交替组成,高层是全连接层对应传统多层感知器的隐含层和逻辑回归分类器。第一个全连接层的输入是由卷积层和子采样层进行特征提取得到的特征图像。最后一层输出层是一个分类器,可以采用逻辑回归,Softmax回归甚至是支持向量机对输入图像进行分类。

xx卷积神经网络结构包括:xx卷积层,降采样层,全链接层。每一层有多个特征图(feature map),每个特征图通过一种卷积滤波器(filter)提取输入的一种特征,每个特征图有多个神经元。

输入图像统计和滤波器进行卷积之后,提取该局部特征,一旦该局部特征被提取出来之后,它与其他特征的位置关系也随之确定下来了,每个神经元的输入和前一层的局部感受野相连,每个特征提取层都紧跟一个用来求局部平均与二次提取的计算层,也叫特征映射层,网络的每个计算层由多个特征映射平面组成,平面上所有的神经元的权重相等。

通常将输入层到隐藏层的映射称为一个特征映射,也就是通过卷积层得到特征提取层,经过pooling之后得到特征映射层。

比如之前用Affine层实现了全连接层,一个5层的全连接的神经网络如下图的网络结构来实现:

而CNN 中新增了Convolution层和Pooling层。CNN的层的连接顺序是Convolution - ReLU -(Pooling)(Pooling层有时会被省
略)。这可以理解为之前的Affine - ReLU连接被替换成了Convolution - ReLU -(Pooling)连接。

xx卷积神经网络相比一般神经网络在图像中的优点:xx

  • 网络结构能够较好的适应图像的结构
  • 同时进行特征提取和分类,使得特征提取有助于特征分类
  • 权值共享可以减少网络的训练参数,使得神经网络结构变得简单,适应性更强

xx在CNN中,权值更新是基于反向传播算法。xx

xx训练算法主要包括四步,这四步被分为两个阶段:xx

  • 第一阶段,向前传播阶段:
    • (1). 从样本集中取一个样本,输入网络;
    • (2). 计算相应的实际输出;在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常执行时执行的过程。
  • 第二阶段,向后传播阶段:
    • (1). 计算实际输出与相应的理想输出的差;
    • (2). 按极小化误差的方法调整权矩阵。
      这两个阶段的工作一般应受到精度要求的控制。

局部感受(稀疏连接) & 权值共享

卷积神经网络的核心思想就是局部感受野、是权值共享和pooling层,以此来达到简化网络参数并使得网络具有一定程度的位移、尺度、缩放、非线性形变稳定性。

  • 局部感受野:由于图像的空间联系是局部的,每个神经元不需要对全部的图像做感受,只需要感受局部特征即可,然后在更高层将这些感受得到的不同的局部神经元综合起来就可以得到全局的信息了,这样可以减少连接的数目
  • 权值共享:不同神经元之间的参数共享可以减少需要求解的参数,使用多种滤波器去卷积图像就会得到多种特征映射。权值共享其实就是对图像用同样的卷积核进行卷积操作,也就意味着第一个隐藏层的所有神经元所能检测到处于图像不同位置的完全相同的特征。其主要的能力就能检测到不同位置的同一类型特征,也就是卷积网络能很好的适应图像的小范围的平移性,即有较好的平移不变性(比如将输入图像的猫的位置移动之后,同样能够检测到猫的图像

卷积层、下采样层(池化层)、全连接层概览

  • xx卷积层:xx通过卷积运算我们可以提取出图像的特征,通过卷积运算可以使得原始信号的某些特征增强,并且降低噪声。
  • xx下采样层(池化层):xx因为对图像进行下采样,可以减少数据处理量同时保留有用信息,采样可以混淆特征的具体位置,因为某个特征找出来之后,它的位置已经不重要了,我们只需要这个特征和其他特征的相对位置,可以应对形变和扭曲带来的同类物体的变化。
    全连接层:采用softmax全连接,得到的激活值即卷积神经网络提取到的图片特征。
  • xx全连接层xx:采用softmax全连接,得到的激活值即卷积神经网络提取到的图片特征。

卷积层

相当于特征提取
卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。

CNN中每一层的由多个map组成,每个map由多个神经单元组成,同一个map的所有神经单元共用一个卷积核(即权重),卷积核往往代表一个特征

全连接层存在的问题

在全连接层中,相邻层的神经元全部连接在一起,输出的数量可以任意决定。
xx全连接层存在什么问题呢?xx那就是数据的形状被“忽视”了。
比如,输入数据是图像时,图像通常是高、长、通道方向上的3维形状。但是,向全连接层输入时,需要将3维数据拉平为1维数据。
图像是3维形状,这个形状中应该含有重要的空间信息。比如,空间上邻近的像素为相似的值、RBG的各个通道之间分别有密切的关联性、相距较远的像素之间没有什么关联等,3维形状中可能隐藏有值得提取的本质模式。但是,因为全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息。
xx而卷积层可以保持形状不变。xx当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此,在CNN中,可以(有可能)正确理解图像等具有形状的数据。
CNN中,有时将卷积层的输入输出数据称为特征图(feature map)

卷积运算

卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的“滤波器运算”

边缘检测包括垂直检测和水平检测:

以垂直边缘检测为例:
对一个6x6的灰度图像做卷积运算(卷积符号是x),即6x6x1

在神经网络卷积过程中,可以建立一个3x3的矩阵(即filter或者kernel),如下图,那么就可以用这个filter去求它的卷积,最终输出会是一个右边4x4的图像。
把3x3的filter贴到第一张图像矩阵上,对应位置数字相乘,最后求和(xx乘积累加运算xx,如在第一位置上的值为-5),把求和值写到输出图像对应第一个位置上

然后依次移动计算第二个元素,进行相同的运算,求出对应第2个第三个位置的值:

继续移动到下一行进行计算:

直到计算出所有结果:

上述垂直检测的步骤在课后习题中,使用的是conv_forward函数来实现,在tensflow使用的是tf.conv2d,……

当然检测水平边缘也是类似的:

xx3x3的filter中填充的数字的值到底为多少仍有争议xx:

有不同的filter

用fxf的filter来卷积nxn的的图像,得到的新图像的维度是(n-f+1)x(n-f+1)

维度公式:

xx偏置:xx
不仅在FCN中,在CNN中除了权重参数(filter中的参数就对应之前的权重),也存在偏置项
如下图,向应用了滤波器的数据加上了偏置。偏置通常只有1个(1x1),这个值
会被加到应用了滤波器的所有元素上(广播机制)。

Padding(填充)

使用填充主要是为了调整输出的大小
xx前面卷积操作的缺点:xx
● 每次卷积操作,图像都会变小
● 图片边缘的像素只会在输出时使用一次,丢失许多图片边界上的信息
xx解决办法:xx
卷积操作前,填充(pad)图片,比如用1个像素添加额外边缘,这样图片就变成了8x8,这样output的图片就是6x6(保持了原始尺寸),同时也减轻图片边缘被忽略的程度

添加pandding后,尺寸 用fxf的filter来卷积nxn的的图像,填充宽度为p,得到的新图像的维度是(n+2p-f+1)x(n+2p-f+1)

xx到底需要填充多少宽度呢?xx
有两种卷积:

  • valid卷积–>填充p宽度为0(即不填充,输出尺寸同前面)
  • same卷积–>有足够的填充

filter的尺寸f取值通常是奇数(如果是偶数可能会不对称)

Stride(卷积步长)


综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。

xx最终维度总结:xx
fxf的filter对nxn图像进行卷积,步长设为s,padding值设置为p,最终得到的维度为: x

我们尝试用上述维度公式做几个计算:
1.输入大小:(28, 31);填充:2;步幅:3;滤波器大小:(5, 5)

当除不尽的时候,一般使用floor向下取整

补充:交叉相关(cross correlation)

我们前面的操作没有对filter进行翻转,实际上只能称为交叉相关,并不能称为数学意义上卷积(进行翻转的才叫卷积),但由于深度学习的约定,所以我们都称之为卷积。

三维卷积

和二维的卷积是类似的,通道方向上有多个特征图时,会按通道
进行输入数据和滤波器的卷积运算,并将结果相加,从而得到输出。

对于多通道的RGB图像如图(6x6x3),使用3x3的filter(3x3x3),注意filter的通道数量必须和前面图片中的通道数相匹配。

设置为filter为3维是为了简化3x3x3的filter的运算,而不能理解为矩阵的叠加。
filter分别与图像的RGB通道对应的数字相乘,最后得到的也是二维的输出,如下图:

然后移动到下一个位置,继续做27个(3x3x3)次相乘并求和

Note:根据想在哪个颜色上检测边缘,来决定在第几层通道设置上值,而另外的通道设置为0

xx维度公式总结:xx