李宏毅深度学习笔记(CNN)

卷积神经网络(CNN)

为什么使用CNN?

CNN可以很好用于图像的处理,这主要基于两个假设:

  1. 图像中同样的特征片段可能出现在不同的位置。图像上不同小片段,以及不同图像上的小片段的特征是类似的,也就是说,我们能用同样的一组分类器来描述各种各样不同的图像 。
  2. 最底层特征都是局部性的,局部特征远小于图像本身。也就是说,我们用10x10这样大小的过滤器就能表示边缘等底层特征
  3. 对像素进行子采样不会改变图像

CNN架构

李宏毅深度学习笔记(CNN)_第1张图片

最典型的卷积网络,由卷积层、池化层、全连接层组成。其中卷积层与池化层配合,组成多个卷积组,逐层提取特征,最终通过若干个全连接层完成分类。卷积层完成局部特征的过滤,而池化层,主要是为了降低数据维度。综合起来说,CNN通过卷积来模拟特征区分,并且通过卷积的权值共享及池化,来降低网络参数的数量级,最后通过传统神经网络完成分类等任务。

一、Convolutional Layer卷积层(转载)

1、原理和参数

可以模拟局部感受野的性质,同上一层不是全连接,而是一小块区域连接,这一小块就是局部感受野(receptive field)。并且通过构造特定的卷积神经元,可以模拟不同神经元对不同形状刺激不同反应的性质。如下图所示,一个神经元处理一层会形成一个feature map,多层叠加,层数逐渐加深。

李宏毅深度学习笔记(CNN)_第2张图片

感受野(kernel或filter)的尺寸可以看做fh*fw,由于感受野本身具有尺寸,feature map会不断缩小,为了处理方便,使得每层大小不变,于是我们每层加值为0的边(zero padding),保证经过处理以后的feature map同前一层尺寸一样。多层之间的卷积运算操作,相当于和原来像素对应位置做乘法。如下左图所示,加了边后可以保证上下层大小一致,右图表示每层之间convolve的操作(如果不加zero padding)。

李宏毅深度学习笔记(CNN)_第3张图片李宏毅深度学习笔记(CNN)_第4张图片

  但上图所示只是简单例子,一般扫描的是三维图像(RGB),就不是一个矩阵,而是一个立方体,我们用一个三维块去扫描它,原理同上图相同。

有时扫描时不是顺序去扫,而是跳跃着扫描,每次移动2-3个像素值(stride),但并非完全分离不会造成信息丢失,这样形成的feature map相较于原始图片缩小,实现信息聚集的效果。

李宏毅深度学习笔记(CNN)_第5张图片

李宏毅深度学习笔记(CNN)_第6张图片

李宏毅深度学习笔记(CNN)_第7张图片

就像如下灰度图(2d)中所示,左边只提取竖线(vertical filter),右边只提取横线(horizontal filter)可看出横梁部分变亮,大量不同的这样的filter(比如可以识别边角、折线的filter)的叠加,可形成多张feature maps

李宏毅深度学习笔记(CNN)_第8张图片

下图是一个3d的RGB效果,每个kernel(filter)可以扫描出一张feature map,多个filter可以叠加出很厚的feature maps,前一层filter做卷积可以形成后一层的一个像素点

李宏毅深度学习笔记(CNN)_第9张图片

 二、Pooling Layer池化层

1、原理和参数

当图片大小很大时内存消耗巨大,而Pooling Layer所起的作用是浓缩效果,缓解内存压力。

即选取一定大小区域,将该区域用一个代表元素表示。具体的Pooling有两种,取平均值(mean)和取最大值(max)。如下图所示是一个取最大值的pooling layer,kernel大小为2*2,stride大小取决于kernel大小,这里是2,即刚好使得所有kernel都不重叠的值,因而实现高效的信息压缩,将原始图像横纵压缩一半,如右图所示,特征基本都完全保留了下来。

李宏毅深度学习笔记(CNN)_第10张图片

pooling这个操作不影响channel数,在feature map上也一般不做操作(即z轴一般不变),只改变横纵大小。

李宏毅深度学习笔记(CNN)_第11张图片

李宏毅深度学习笔记(CNN)_第12张图片

部分内容转载自:【机器学习】彻底搞懂CNN

https://www.cnblogs.com/rucwxb/p/7975504.html

你可能感兴趣的:(cnn,深度学习,神经网络)