001 卷积神经网络

我们知道神经网络结构是这样的:
(输入和隐含层是 全连接结构的,从计算角度,较小的图像是可以的,但是较大的图像,会非常耗时)
001 卷积神经网络_第1张图片
那么,卷积神经网络呢?

卷积神经网络

CNN依旧是层级网络,知识层的功能和形式做了变化,可以说是神经网络的一个改进。

图像数据是三维的 width, height, depth
32长 x 32宽 x 3depth(rgb颜色通道)
001 卷积神经网络_第2张图片
CNN的层级结构:

  • Input layer 数据输入层
  • CONV layer 卷积层
  • RELU layer 激励层
  • Pooling layer 池化层
  • FC layer 全连接层

1.Input layer

该层主要是对原始数据
(以图像数据为例)进行处理,其中包括:

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

PCA:主成分分析方法,或者主分量分析,是一种最广泛的数据压缩算法。

白化 Whitening:Whitening的目的是去掉数据之间的相关联度,是很多算法进行预处理的步骤。比如说当训练图片数据时,由于图片中相邻像素值有一定的关联,所以很多信息是冗余的。这时候去相关的操作就可以采用白化操作

去均值与归一化效果图:

001 卷积神经网络_第3张图片
去相关与白化效果图:
001 卷积神经网络_第4张图片

2.CONV layer 卷积层

卷积层有若干个卷及单元组成,每个卷及单元的参数都是通过反向传播算法优化得到的。

卷积的目的是提取输入的不同特征,第一层可能只是提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代器去更复杂的特征。

这一层是CNN最重要的一个层,也是CNN名字的来源,在这里,有两个关键操作:

  1. 局部关联:每个神经元看做一个滤波器 filter
  2. 窗口滑动(receptive field),filter 对局部数据计算。

先介绍几个名词:
深度(见下图):它控制 输出单元 的深度,也就是 filter的个数,连接同一块区域的神经元个数。又名:depth column
步长/ stride:窗口一次滑动的长度(它控制在同一深度的相邻两个隐含单元,与他们相连接的输入区域的距离。如果步幅很小(比如 stride = 1)的话,相邻隐含单元的输入区域的重叠部分会很多; 步幅很大则重叠区域变少。)
填充值/ zero-padding:我们可以通过在输入单元周围补零来改变输入单元整体大小,从而控制输出单元的空间大小。

001 卷积神经网络_第5张图片
填充值是什么呢?以下图为例子,比如有这么一个55的图片(一个格子一个像素),我们滑动窗口取22,步长取2,那么我们发现还剩下1个像素没法滑完,那怎么办呢?
001 卷积神经网络_第6张图片
那我们在原先的矩阵加了一层填充值,使得变成6*6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。
001 卷积神经网络_第7张图片

2.1 卷积的计算

这一部分没看懂
(下面蓝色矩阵周围有一圈灰色的框,就是上面所说的填充值)
001 卷积神经网络_第8张图片
这里蓝色矩阵就是输入的图像,粉色是卷积层的神经元,这里表示有两个神经原 w0, w1。绿色矩阵是经过卷积运算后的输出矩阵,这里步长设置为2.

下面的动态图形象地展示了卷积层的计算过程:

2.2 参数共享机制

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

3 激励层

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

axon (神经元)轴突

001 卷积神经网络_第10张图片
CNN一般餐用的激励函数为Relu,特点是收敛快,求梯度简单,但是较为脆弱。
激励层实践经验:

  1. 不要用sigmoid!不要用sigmoid!不要用sigmoid!
  2. 先尝试Relu,因为收敛快,但是要小心点
  3. 如果 ②失效,请用 leaky Relu或者maxout
  4. 某些情况下tanh效果不错,但是较少发生

4 池化层

通常,卷积之后会得到维度很大的特征,这一层将特征切成几个区域,取其最大值或者平均值,得到新的、维度较小的特征。

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

池化层的具体作用:

  • 特征不变,即图像处理中常说的 特征的尺度不变性。赤化操作就是图像的 resize:一只狗的图片缩小一倍后还能认出这是狗,说明图像保留着狗最重要的特征,我们能够根据这些特征判断他是狗。 压缩,去掉的信息只是一些无关紧要的,包留下的信息具有尺度不变性,是最能表达图像的特征
  • 特征降维,我们知道一幅图含有信息量很大,特征也很多,但是这些信息对于我们做图像任务没有太多用途,我们可以吧这类冗余信息去除,把最重要的特征抽取出来,这也是赤化操作的一大作用。
  • 在一定程度上防止过拟合,梗方便优化。
    001 卷积神经网络_第11张图片
    池化层用的方法有max poolingaverage pooling

这里介绍一些最常用的max pooling
001 卷积神经网络_第12张图片
对每个 2x2 的窗口选出最大的数,作为输出矩阵向营元素的值,比如红色窗口最大是6,那么久选6

5 全连接层

把所有的局部特征编程全局特征,用来计算最后每一类得分。

两层之间的神经元都有权重连接,通常全连接层在CNN的尾部,跟传统NN 神经元连接方式一样:
001 卷积神经网络_第13张图片
一般CNN结构依次为:

  1. Input
  2. [ (CONV+RELU)* N+POOL ]*M
  3. [ FC+RELU ] * K
  4. FC

CNN的训练算法:

1.与一般NN一样,先定义loss function,衡量预测和实际结果之间的差距。

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

CNN的优缺点

优点:
1.共享卷积核,对高维数据处理无压力。
2.无需手动选取特征,训练好权重,记得到特征分类效果好

缺点:
1.需要调参,需要大量样本,训练最好要GPU
2.物理含义不明确,也就是说,我们并不知道每个卷积层到底提取的是什么特征,而且NN本身就是“黑象模型”

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

CNN之fine-tuning

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

为什么不随机选几个数作为权重初始值?
第一:从头训练CNN容易出现问题;
第二:fine-tuning能很快收敛到一个较为理想的状态,省时又省心。

fine-tuning具体做法?
1.复用相同层的权重,新定义层去随 即权重初始值;
2.调大新定义层的学习率,调小服复用层的学习率

CNN常用框架

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

Torch
Facebook用的CNN工具包
通过时域卷积的本地接口,使用非常直观
定义新网络层简单

TensorFlow
google的深度学习框架
tensorboard可视化很方便
数据和模型并行化好,速度快

你可能感兴趣的:(CNN,CNN,文本分类)