欢迎光临 x-algo
关注算法在工业界应用
Hi, 这是一个关注大数据算法在工业界应用的网站

CNN理解

终于好好学习了一下CNN,在看完了cs231n的学习笔记,在通过各位博客大神的博客文章深入理解下,自己对CNN也有一些心得。在学习的过程中记录整理了自己对CNN的认识与理解。还有很多不足或理解有问题的地方,希望大家多多指导啦。

Convolution

只考虑单通道时,对于原始图片输入(二维数组W*W),通过一个或多个滤波器filter(二维数组F*F),设zero-panding = P,strid = S,则可以计算出原始图片经过滤波器作用过后的维度转换为(W-F+2P)/S+1,有多少个filter,则生成多少个通道。

通过每一个filter的卷积操作,我们会得到一个新的二维数组。这也可以理解为对原始图像进行过滤的结果,我们称之为feature map,它是每一个filter 从原始图像中提取出来的“特征”。其中的值,越接近为1表示对应位置和feature的匹配越完整,越是接近-1,表示对应位置和feature的反面匹配越完整,而值接近0的表示对应位置没有任何匹配或者说没有什么关联。

这样我们的原始图,经过不同filter 的卷积操作就变成了一系列的feature map。每个feature map二维数据和输入一致,feature map的深度即为filter的个数。作为下一层的输入。

  •  卷积层输出维度weight和height与输入相关,depth和filter个数有关。
  • 每个filter的权重不相同,对应着图像的不同特征。同一filter上面的神经元权值相同---权重共享。(一个filter在一个平面上,平面上的每个单元都是由同一套权重和原图像进行卷积运算得到)

Pooling

CNN中使用的另一个有效的工具被称为“池化(Pooling)”。池化可以将一幅大的图像缩小,同时又保留其中的重要信息。 它就是将输入图像进行缩小,减少像素信息,只保留重要信息。通常情况下,池化都是2*2大小,比如对于max-pooling来说,就是取输入图像中2*2大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。(注:同理,对于average-pooling来说,就是取2*2大小块的平均值作为结果的像素值。)

因为最大池化(max-pooling)保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。

  • 抽样层不会改变feature map的深度。

Relu 激活函数

这是一个很小但是很重要的操作,叫做Relu(Rectified Linear Units),或者修正线性单元。它的数学公式也很简单:

对于输入的负值,输出全为0,对于正值,原样输出。

 

CNN特点

局部感知野( Local Connectivity)

下图是 RGB CIFAR-10 image,32*32*3 (width,height,colors),作为输入层,假如CNN的滤波大小是5*5,所以对应输入层5*5*3的区域,卷积层的每个神经元需要全连接的权值参数个数为 5*5*3 = 75。注意,虽然是5*5的区域,但是必须是全深度的学习,即depth为3.图中有5个神经元,每个神经元的权值参数个数为75.

Image
关于滤波,还有两个重要的概念,一个是stride,一个是zero-padding。stride是步幅大小,即每次滤波学习区域移动的步幅,zero-padding则是用0填充,可以想象一下,对于图片边缘的部分,学习的力度肯定没有图片中间的频繁,所以我们将图片四周都用0来填充,用0来包裹。

权值共享

在全连接网络中,以图片输入为例。假设input为1000x1000,接下来的隐藏层中的神经元个数为1000,如果是全连接,那么每个神经元都要和输入相连,所以该层需要的参数就是1000x(1000x1000)个。但是使用局部感知,假设每个隐藏中的神经元与图像中的10x10的局部图像相连,那么此时的权值参数数量变为1000x(10x10)个。

权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

在上面的局部连接中,每个神经元都对应10x10=100个参数,一共1000个神经元,如果这1000个神经元的100个参数都是相等的,那么参数数目就变为100了。

怎么理解权值共享呢?我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

多核卷积

每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。为充分提取特征,可以添加多个卷积核。

全连接vs局部连接

 

对于上图中的概念需要了解清楚:
  1. Filter size,这个指的是卷积核(或者称为滤波器)的大小;
  2. 一个卷积核就是一个滤波器filter,可以提取一种特征。
  3. 每层中的参数=卷积核的个数x卷积和的大小。

总结

卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个神经元组成。

一个filter和原始图像作用生成一个feature map,一个feature map 上单元个数即为神经元个数,在同一个feature map 中共享同一套权值。所以,参数个数和神经元个数无关,只与卷积核的大小及卷积核(feature map)的个数有关,但是连接数则与神经元的个数相关

疑问FAQ

  1. 特征图大小怎么计算?----->代表神经元个数 W=32,F=5,P=0,S=1,,(32-5+2P)/S=28
  2. 在S2中计算参数的时候出现的(1+1)*6是什么情况?
  3. .对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 × 400 = 3,168,400 维的卷积特征向量。  7921-->892的下采样降维
  4. 神经元个数是自己设定?还是由filter的尺寸和输入确定呢?确定
  5. 一个神经元只负责一块区域吗?yes:即相当于filter和原始图像作用的映射

参考文献:

未经允许不得转载:大数据算法 » CNN理解

分享到:更多 ()

评论 1

*

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    "卷积层输出维度weight和height与输入相关,depth和filter个数有关。" 以上是引用博主的话...我也是在学习中...有些理解跟博主有些出入... 滤波器的深度 应该是输入的 color_channel决定的吧, 卷积层滤波器的个数是由这层输出的feature map个数决定的吧...

    shaw1年前 (2017-08-08)回复

关注大数据算法在工业界应用

本站的GitHub关于本站