卷积神经网络CNN

参考自:https://www.jianshu.com/p/1ea2949c0056

卷积神经网络(CNN)

从神经网络到卷积神经网络

神经网络的结构是

而卷积神经网络依旧是层级网络,只是层的功能和形式做了变化。是传统神经网络的一个改进

神经网络的架构

img

卷积神经网络架构与常规人工神经网络架构非常相似,特别是在网络的最后一层,即全连接。此外,卷积神经网络还接受多个特征图作为输入而不是向量。

卷积神经网络的层级结构

  • 数据输入层
  • 卷积计算层
  • ReLU激励层
  • 池化层
  • 全连接层

数据输入层

该层要做的处理主要是对原始图像数据进行预处理,包括

  • 去均值:把输入数据各个维度都中心化为0,目的是把样本的中心拉回到坐标系原点上。
  • 归一化:幅度归一化到同样的范围,即减少各维度数据取值范围的差异而带来的干扰。比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
  • PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化

去均值与归一化效果图

去相关与白化效果图:

卷积计算层

这一层是卷积神经网络中最重要的一个层次,有两个关键操作:

  • 局部关联。每一个神经元看做一个滤波器
  • 窗口滑动,filter对局部数据计算

名词解释

  1. stride:filter在输入上每次移动的距离

  2. padding:填充值

    填充值是什么呢?如果有一个5 * 5的图片,滑动窗口取2 * 2,步长取2,那么发现还有一个像素没法滑完。

    那我们在原先的矩阵加了一层填充值,使得变成6*6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。

  3. depth:feature map的厚度,与filter的个数保持一致。

  4. 输出

    输出的特征图的大小:

    \[(N-F)/stride + 1\qquad(未加padding)\\ (N+padding * 2 - F) / stride + 1 \qquad(加入padding) \]

  5. 参数量:(filter + bias) * depth

在浅层的卷积核更加关注整体的信息,而深层的卷积核关注语义上的信息。同一层上不同的卷积核关注不同的信息。

卷积的计算:

输入图像对filter进行矩阵内积计算并将运算结果与偏执值相加,计算后就是输出图像的对应元素。

参数共享机制

  • 在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。神经元就是图像处理中的滤波器,比如边缘检测专用的Sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等等,这些所有神经元加起来就好比就是整张图像的特征提取器集合。
  • 需要估算的权重个数减少: AlexNet 1亿 => 3.5w
  • 一组固定的权重和不同窗口内数据做内积: 卷积

激励层

把卷积层输出结果做非线性映射。

CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下。

请不要使用sigmoid!

池化层

池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像

具体作用为:

  1. 特征不变性也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
  2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
  3. 在一定程度上防止过拟合,更方便优化。

池化层用的方法有Max pooling(最大值池化) 和 average pooling(平均值池化),而实际用的较多的是Max pooling。

对于每个2 * 2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2 * 2窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推。

全连接层

两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的,全连接的核心操作就是矩阵向量乘积

\[y = Wx + b \]

本质就是由一个特征空间线性变换到另一个特征空间。在 CNN 中,全连接常出现在最后几层,用于对前面设计的特征做加权和。在整个卷积神经网络中起到“分类器”的作用.

卷积神经网络的优缺点

优点

  • 共享卷积核,对高维数据处理没有压力
  • 无需手动选取特征,训练好权重即得特征分类效果好

缺点

  • 需要调参,需要大样本量,训练最好要GPU
  • 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)

典型CNN模型

  • LeNet,这是最早用于数字识别的CNN
  • AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比LeNet更深,用多层小卷积层叠加替换单大卷积层。
  • ZF Net, 2013 ILSVRC比赛冠军
  • GoogLeNet, 2014 ILSVRC比赛冠军
  • VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好

fine-tuning

fine-tuning就是使用已用于其他目标、预训练好模型的权重或者部分权重,作为初始值开始训练。

具体做法是:

  • 复用相同层的权重,新定义层取随机权重初始值
  • 调大新定义层的的学习率,调小复用层学习率

总结

卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。

CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好地避免了BP神经网络中反向传播的时候梯度损失得太快。

卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

posted @ 2020-07-31 09:26  码我疯狂的码  阅读(400)  评论(0编辑  收藏  举报