卷积神经网络

image.png

      数据输入层/ 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.     卷积计算层

这一层就是卷积神经网络最重要的一个层次,也是“卷积神经网络”的名字来源。

在这个卷积层,有两个关键操作:

局部关联:每个神经元看做一个滤波器(filter)

窗口(receptive field)滑动:filter对局部数据计算

 

先介绍卷积层遇到的几个名词:

深度/depth(解释见下图)

步长/stride (窗口一次滑动的长度)

填充值/zero-padding

       注意:卷积神经网络的主要关注点,主要是集中在深度,步长,填充值,以及当前图片对象的size,因为这决定了生成的图片大小。

       具体计算公式:

 

 

3.     激励层

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

 

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

激励层的实践经验:

①不要用sigmoid!不要用sigmoid!不要用sigmoid!

② 首先试RELU,因为快,但要小心点

③ 如果2失效,请用Leaky ReLU或者Maxout

④ 某些情况下tanh倒是有不错的结果,但是很少

4.     池化层

池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。

简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。

这里再展开叙述池化层的具体作用。

特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。

特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。

在一定程度上防止过拟合,更方便优化。

       池化层用的方法有Max pooling average pooling,而实际用的较多的是Max pooling。

 

5.     全连接层

两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:

 

 

卷积神经网络之训练算法

1.同一般机器学习算法,先定义Loss function,衡量和实际结果之间差距。

2.找到最小化损失函数的W和b, CNN中用的算法是SGD(随机梯度下降)。

卷积神经网络之优缺点

优点

  •共享卷积核,对高维数据处理无压力

  •无需手动选取特征,训练好权重,即得特征分类效果好

缺点

  •需要调参,需要大样本量,训练最好要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就是使用已用于其他目标、预训练好模型的权重或者部分权重,作为初始值开始训练。

那为什么我们不用随机选取选几个数作为权重初始值?原因很简单,第一,自己从头训练卷积神经网络容易出现问题;第二,fine-tuning能很快收敛到一个较理想的状态,省时又省心。

那fine-tuning的具体做法是?

•复用相同层的权重,新定义层取随机权重初始值

•调大新定义层的的学习率,调小复用层学习率

 

卷积神经网络的常用框架

Caffe

 •源于Berkeley的主流CV工具包,支持C++,python,matlab

 •Model Zoo中有大量预训练好的模型供使用

Torch

 •Facebook用的卷积神经网络工具包

 •通过时域卷积的本地接口,使用非常直观

 •定义新网络层简单

TensorFlow

 •Google的深度学习框架

 •TensorBoard可视化很方便

 •数据和模型并行化好,速度快

 

总结

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

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

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



            
            

本博客源码Github地址:

https://github.com/zeus-y/

请随手给个star,谢谢!

打赏

评论