卷积神经网络
参考链接:
机器学习算法之——卷积神经网络(CNN)原理讲解 - 知乎 (zhihu.com)
一、从神经网络到卷积神经网络
卷积神经网络依旧是层级网络,只是层的功能和形式发生变化,相当于传统神经网络的改进。下图是一个CNN的示例:
1.定义
卷积神经网络(CNN)是一种深度学习模型或类似于神经网络的多层感知机,常用来分析视觉图像。
2.卷积神经网络的架构
如图,卷积神经网络与常规人工神经网络架构非常相似,特别是全连接层的结构。此外,CNN能够接受多个特征图作为输入,而不是向量。
二、卷积神经网络的层级结构
一个卷积神经网络主要包含5层:
- 数据输入层/ Input Layer
- 卷积计算层/ Conv Layer
- ReLU激励层/ ReLU Layer
- 池化层/ Pooling Layer
- 全连接层/ FC Layer
1.数据输入层
负责对原始图像数据进行预处理,包括:
- 去均值:把输入数据各个维度都中心化为0,目的是把样本中心拉回到坐标系原点上。
- 归一化:幅度归一化到同样的范围,减少各维度取值范围的差异带来的干扰。例如,有两个维度的特征A和B,A的范围是0~10,B的范围是0~10000,如果直接使用这两个特征会出现问题,好的做法的归一化,把A和B的数据都变为0~1的范围。
- PCA/白化:PCA降维(将原始数据投影到主成分上,实现去相关);白化是对数据各个特征轴上的幅度归一化。
去均值与归一化:
去相关与白化:
2.卷积计算层
CNN中最重要的层次。
该层有两个关键操作:
- 局部关联:每个神经元看做一个滤波器
- 窗口滑动:滤波器对局部数据进行计算
重要概念:
- 深度/depth:神经元个数
- 步幅/stride:窗口一次滑动的长度。输入W*W的图,卷积核大小为K*K,步幅为S,那么输出图的尺寸为 $(W-K)/S+1$。如果想让接受域重叠更少并且想要更小的空间维度,可以增加步幅。
- 填充值/zero-padding:正常情况下,卷积后空间维度变小,不利于早期原始输入内容信息的保留,不利于提取低层特征。为了解决这一问题,需要应用0填充,即在输入图的边缘补充适当层数0,保证输出图的尺寸增加。(有零填充时卷积层输出大小为$O=\frac{W-K+2P}{S}+1$,其中P是填充层数。如果步幅为1,只需要把零填充设置为$ZeroPadding=\frac{K-1}{2}$,就能使输出内容和输入内容维度一致。)
2.1卷积的计算
输入图像对神经元进行矩阵内积计算并将每层内积计算结果与偏置值b相加,就得到输出矩阵中一个对应位置的元素。具体过程见下图(假设有两个神经元):
2.2参数共享机制
卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性,也就是一个图像特征,如垂直边缘、水平边缘、颜色、纹理等,这些所有的神经元加起来就好比是整张图像的特征提取器集合。
3.激活层(非线性层)
把卷积层输出结果进行非线性映射(详见上一篇学习笔记)。
一些别人的实践经验:
①不要用sigmoid!不要用sigmoid!不要用sigmoid!
② 首先试RELU,因为快,但要小心点
③ 如果2失效,请用Leaky ReLU或者Maxout
④ 某些情况下tanh倒是有不错的结果,但是很少
参见 Geoffrey Hinton(即深度学习之父)的论文:Rectified Linear Units Improve Restricted Boltzmann Machines 墙裂推荐此论文!
4.池化层
池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减小过拟合。如果输入是图像的话,池化层的最主要作用就是压缩图像。
专业的说法是:
- 特征不变性:即图像压缩去掉的只是一些无关紧要的信息,留下的信息则具有尺度不变性的特征,是最能表达图像的特征。
- 特征降维:去除冗余信息,把最重要的特征抽取出来。
- 一定程度防止过拟合。
常用的池化方法:
- Max pooling
- average pooling
Max pooling的核心思想是选出每个窗口最大的数作为输出矩阵相应元素的值,过程如下图:
5.全连接层
两层之间所有的神经元都有权重连接,通常在CNN尾部,跟传统神经网络神经元连接方式相同:
三、几点说明
1.训练算法
- 同一般机器学习算法,先定义损失函数,衡量和实际结果之间的差距。
- 找到最小化损失函数的W和b,CNN中用的是SGD(随机梯度下降)。
2.优缺点
- 优点
- 共享卷积核,对高维数据处理无压力
- 无需手动选取特征,训练好权重就可得到较好的分类效果
- 缺点
- 需要调参,需要大量样本
- 物理含义不明确,“黑箱模型”
3.典型CNN
- LeNet,这是最早用于数字识别的CNN
- AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比LeNet更深,用多层小卷积层叠加替换单大卷积层
- ZF Net, 2013 ILSVRC比赛冠军
- GoogLeNet, 2014 ILSVRC比赛冠军
- VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好
4.fine-tuning
what?
fine-tuning就是使用已用于其他目标、预训练好模型的权重或部分权重,作为初始值开始训练。
how?
- 复用相同层的权重,新定义层取随机权重初始值
- 调大新定义层的学习率,调小复用层学习率。
5.常用框架
Caffe
- 源于Berkeley的主流CV工具包,支持C++,python,matlab
- Model Zoo中有大量预训练好的模型供使用
PyTorch
- Facebook用的卷积神经网络工具包
- 通过时域卷积的本地接口,使用非常直观
- 定义新网络层简单
TensorFlow
- Google的深度学习框架
- TensorBoard可视化很方便
- 数据和模型并行化好,速度快
四、总结
卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。
CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好地避免了BP神经网络中反向传播的时候梯度损失得太快。
卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。