CNN结构
神经网络
卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。多了许多传统神经网络没有的层次。
卷积神经网络的层级结构
- 数据输入层/Input Layer
- 卷积计算层/Conv Layer
- 激励层/ReLU Layer
- 池化层/Pooling Layer
- 全连接层/FC Layer
1.数据输入层
该层要做的处理主要是对原始图像数据进行预处理,其中包括:
- 去均值:把输入数据各个维度都中心化为0
- 归一化:幅度归一化到同样的范围
- PCA/白化:用PCA降维;白化是对数据哥哥特征轴上的幅度归一化
去均值归一化的效果图:
去相关与白化效果图:
2.卷积计算层
在卷积层,有两个关键操作:
- 局部关联。每个神经元看做一个滤波器(filter)
- 窗口(receptive field)滑动,filter对局部数据进行计算
卷积层遇到的几个名词:
- 深度/depth
- 步长/stride(窗口一次滑动的长度)
- 填充值/zero-padding
填充值是什么呢?比如一个5*5的图片(一个格子一个像素),我们滑动窗口取2*2,步长取2,那么我们发现还剩下1个像素无法滑完,那怎么办?
在原先的矩阵加了一层填充值,使得变成6*6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。
卷积计算过程:
参数共享机制
- 在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性
- 需要估算的权重个数减少
- 一组固定的权重和不同窗口内数据做内积:卷积
3.激励层
把卷积层输出结果做非线性映射。CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下:
激励层的实践经验:
- 不要用sigmoid
- 首先试ReLU,因为收敛速度快,但要小心
- 如果不能使用ReLU,试用Leaky ReLU或者Maxout
- 某些情况下tanh倒是不错的结果,但是很少
4.池化层
池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减少过拟合。简而言之,如果输入是图像的话,那么池化层的作用就是压缩图像。
池化层用的方法有Max pooling和average pooling,而实际用的较多的是Max pooling。
5.全连接层
跟传统的神经网络的连接方式一样。
卷积神经网络的精华:三概念两核心
两个核心:卷积和池化
- 卷积:主要起到作用的是抽取特征,是网络具有一定转移不变性,也有一定的降维作用。概述:设定一个n行m列的卷积窗口,采用的ReLU作为激励函数,对于输入X进行卷积操作。注意:1,卷积可能是单通道或者多通道卷积;2,卷积操作分为padding和非padding两种方式,padding也分为很多方式,比如zero-padding,mean-padding等。3,对同一个输入可以设置不同大小卷积和,或从不同的位置,或不同的卷积步长多次进行卷积,目的就是为了尽可能多的抽取特征。
- 池化:主要起到降维的作用。概述:设置一个n行m列的池化窗口,对输入X进行池化操作,采用Relu作为激活函数,也可以采用sigmoid或tans型激活函数,但注意函数的饱和死区特性导致的反向传播时的梯度消失问题,可以配合Batch Normalization使用。池化也有多种方式,比如max pooling,average polling
三概念:局部感受野,权值共享和下采样/降采样
- 局部感受野:卷积操作时卷积窗口与输入X重合的部分。
- 权值共享:卷积操作或池化操作时,卷积窗口或池化窗口的权值不发生变化。
- 下采样/降采样:直观感觉就是池化操作。
卷积神经网络的训练
- 同一般机器学习算法,先定义Loss function,衡量和实际结果之间的差距。
- 找到最小化损失函数的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具体做法:
- 复用相同层的权重,新定义层取随机权重初始值
- 调大新定义层的学习率,调小复用层学习率
边缘过渡不平滑
- 解决办法:采样窗口彼此重叠
总结
卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。
CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好的避免了BP神经网络中反向传播时候梯度损失得太快。
卷积神经网络CNN主要用来识别位移,缩放及其他形式扭曲不变性的二维图形,由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。