卷积神经网络CNN

一、CNN的基本概念

卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。它包括卷积层(convolutional layer)和池化层(pooling layer)。

一般地,CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。
CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。


二、CNN的原理

1、神经网络

       首先介绍神经网络,这一步的详细可以参考资源1。简要介绍下。神经网络的每个单元如下:

logistic

       其对应的公式如下:

equal

扫描二维码关注公众号,回复: 1651823 查看本文章

       其中,该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型。下图展示了一个具有一个隐含层的神经网络。

equal

        其对应的公式如下:

equal

       比较类似的,可以拓展到有2,3,4,5,…个隐含层。

       神经网络的训练方法也同Logistic类似,不过由于其多层性,还需要利用链式求导法则对隐含层的节点进行求导,即梯度下降+链式求导法则,专业名称为反向传播。(来自百度百科)

2、神经网络与卷积神经网络的区别

卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。卷积神经网络的基本结构如图所示:



       卷积神经网络由三部分构成。第一部分是输入层。第二部分由n个卷积层和池化层的组合组成。第三部分由一个全连结的多层感知机分类器构成。

3、卷积

让卷积和在图像上逐步滑动,对整个图像进行卷积计算得到一幅4*4的图像。
这里写图片描述

通过一个3*3的过滤器来对6*6的图像进行卷积,得到了一幅4*4的图像,假设输出图像大小为n*n与过滤器大小为f*f,输出图像大小则为(nf+1)(nf+1)。 这样做卷积运算的缺点是,卷积图像的大小会不断缩小,另外图像的左上角的元素只被一个输出所使用,所以在图像边缘的像素在输出中采用较少,也就意味着你丢掉了很多图像边缘的信息,为了解决这两个问题,就引入了padding操作,也就是在图像卷积操作之前,沿着图像边缘用0进行图像填充。对于3*3的过滤器,我们填充宽度为1时,就可以保证输出图像和输入图像一样大。
这里写图片描述
padding的两种模式:
Valid:no padding
输入图像n*n,过滤器f*f,输出图像大小为:(nf+1)(nf+1)

Same:输出图像和输入图像一样大

卷积步长是指过滤器在图像上滑动的距离,前两部分步长都默认为1,如果卷积步长为2,卷积运算过程为:
这里写图片描述
这里写图片描述
这里写图片描述
加入stride后卷积图像大小的通用计算公式为:
输入图像:n*n,过滤器:f*f步长:s,padding:p
输出图像大小为:(n+2pfs+1))(n+2pfs+1)

表示向下取整

以输入图像6*6,过滤器3*3,步长为2,padding模式为valid为例输出图像大小为:(6+2032+1)6+2032+1)=33

以上讲述的卷积都是灰度图像的,如果想要在RGB图像上进行卷积,过滤器的大小不在是3*3而是有3*3*3,最后的3对应为通道数(channels),卷积生成图像中每个像素值为3*3*3过滤器对应位置和图像对应位置相乘累加,过滤器依次在RGB图像上滑动,最终生成图像大小为4*4。
这里写图片描述
另外一个问题是,如果我们在不仅仅在图像总检测一种类型的特征,而是要同时检测垂直边缘、水平边缘、45度边缘等等,也就是多个过滤器的问题。如果有两个过滤器,最终生成图像为4*4*2的立方体,这里的2来源于我们采用了两个过滤器。如果有10个过滤器那么输出图像就是4*4*10的立方体。

这里写图片描述

图像通过两个过滤器得到了两个4*4的矩阵,在两个矩阵上分别加入偏差b1b2

,然后对加入偏差的矩阵做非线性的Relu变换,得到一个新的4*4矩阵,这就是单层卷积网络的完整计算过程。用公式表示:

z[1]=w[1]a[0]+b[1]
a[1]=g(z[1])

其中输入图像为 a[0],过滤器用 w[1]表示,对图像进行线性变化并加入偏差得到矩阵 z[1]a[1]是应用Relu激活后的结果。
这里写图片描述

简单卷积网络示例

  • 输入图像:39*39*3,符号表示:n[0]H=n[0]W=39
;n[0]c=3

第1层超参数: f[l]=3(过滤器大小); s[l]=1(步长); p[l]=0(padding大小); n[l]C=10(过滤器个数)第1层输出图像:37*37*10,符号表示: n[1]H=n[1]W=37 ;n[1]c=10
第2层超参数: f[2]=5s[2]=2p[2]=0n[2]C=20
第2层输出图像:17*17*20,符号表示: n[2]H=n[2]W=17 ;n[2]c=20
第3层超参数: f[3]=5s[3]=2p[2]=0n[3]C=40
第3层输出图像:7*7*40,符号表示: n[3]H=n[3]W=17 ;n[3]c=40

  • 将第三层的输出展开成1960个元素
  • 然后将其输出到logistic或softmax来决定是判断图片中有没有猫,还是想识别图像中K中不同的对象
    这里写图片描述
    卷积神经网络层的类型:
  • 卷积层(convolution,conv)
  • 池化层(pooling,pool)
  • 全连接层(Fully connected,FC

卷积层

下面的动态图形象地展示了卷积层(单层)的计算过程:

 

若是有多个卷积核只需多次进行这样的操作即可,在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。神经元就是图像处理中的滤波器,比如边缘检测专用的Sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等等,这些所有神经元加起来就好比就是整张图像的特征提取器集合。

池化层

最大池化(Max pooling)
最大池化思想很简单,以下图为例,把4*4的图像分割成4个不同的区域,然后输出每个区域的最大值,这就是最大池化所做的事情。其实这里我们选择了2*2的过滤器,步长为2。在一幅真正的图像中提取最大值可能意味着提取了某些特定特征,比如垂直边缘、一只眼睛等等。
这里写图片描述
以下是一个过滤器大小为3*3,步长为1的池化过程,具体计算和上面相同,最大池化中输出图像的大小计算方式和卷积网络中计算方法一致,如果有多个通道需要做池化操作,那么就分通道计算池化操作。
这里写图片描述
平均池化和最大池化唯一的不同是,它计算的是区域内的平均值而最大池化计算的是最大值。在日常应用使用最多的还是最大池化。
这里写图片描述
池化的超参数:步长、过滤器大小、池化类型最大池化or平均池化

卷积神经网络示例

以下是一个完整的卷积神经网络,用于手写字识别,这并不是一个LeNet-5网络,但是设计令该来自于LeNet-5。
这里写图片描述
网络各层参数个数表:
这里写图片描述


猜你喜欢

转载自blog.csdn.net/sweetseven_/article/details/80731661