D. 深度学习 — 卷积神经网络
概述
- 描述
- 第一点,在学习Deep learning和CNN之前,总以为它们是很了不得的知识,总以为它们能解决很多问题,学习了之后,才知道它们不过与其他机器学习算法如svm等相似,仍然可以把它当做一个分类器,仍然可以像使用一个黑盒子那样使用它。
- 第二点,Deep Learning强大的地方就是可以利用网络中间某一层的输出当做是数据的另一种表达,从而可以将其认为是经过网络学习到的特征。基于该特征,可以进行进一步的相似度比较等。
- 第三点,Deep Learning算法能够有效的关键其实是大规模的数据,这一点原因在于每个DL都有众多的参数,少量数据无法将参数训练充分。
- 优缺点
- 优点
- 共享卷积核,对高维数据处理无压力
- 无需手动选取特征,训练好权重,即得特征分类效果好
- 缺点
- 需要调参,需要大样本量,训练最好要GPU
- 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)
- CNN无法处理影像放大、缩小、旋转等
- 可以通过数据增强的手段优化
- 优点
- 为什么使用CNN
- Some patterns are much smaller than the whole image
- The same patterns appear in different regions
- Subsampling the pixels will not change the object
调参
- 常见参数配置
- 图像识别
- 卷积核size
- 一般 3 * 3,极端的话是:7 * 7,9 * 9
- 卷积核移动距离(stride):2
- padding的方法
- 补0
- 整张图片的均值
- 复制把图片边缘的数字
- 卷积核size
- 图像识别
- 卷积神经网络之 fine-tuning
- 何谓fine-tuning?fine-tuning就是使用已用于其他目标、预训练好模型的权重或者部分权重,作为初始值开始训练。那为什么我们不用随机选取选几个数作为权重初始值?原因很简单,第一,自己从头训练卷积神经网络容易出现问题;第二,fine-tuning能很快收敛到一个较理想的状态,省时又省心。
- 那fine-tuning的具体做法是?
- 复用相同层的权重,新定义层取随机权重初始值
- 调大新定义层的的学习率,调小复用层学习率
网络结构
- 一般CNN结构依次为
- 1.INPUT
- 2.[[CONV -> RELU]*N -> POOL?]*M
- 3.[FC -> RELU]*K
- 4.FC
- 数据输入层/ Input layer
- 去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
- 归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
- PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化
- 卷积计算层/ CONV layer
- 操作
- 局部关联。每个神经元看做一个滤波器(filter)
- 窗口(receptive field)滑动, filter对局部数据计算
- 名词
- 深度/depth
- 步长/stride
- 填充值/zero-padding
- 参数共享机制
- 在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。神经元就是图像处理中的滤波器,比如边缘检测专用的Sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等等,这些所有神经元加起来就好比就是整张图像的特征提取器集合。
- 需要估算的权重个数减少: AlexNet 1亿 => 3.5w
- 一组固定的权重和不同窗口内数据做内积: 卷积
- 类型
- 单卷积核
- 多卷积核
- 操作
- ReLU激励层 / ReLU layer
- 把卷积层输出结果做非线性映射。CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下。
- 激励层的实践经验:
- 不要用sigmoid!不要用sigmoid!不要用sigmoid!
- 首先试RELU,因为快,但要小心点
- 如果2失效,请用Leaky ReLU或者Maxout
- 某些情况下tanh倒是有不错的结果,但是很少
- 池化层 / Pooling layer
- 池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
- 作用
- 1.特征不变性
- 2.特征降维
- 3.在一定程度上防止过拟合,更方便优化。
- 类型
- Max pooling
- average pooling
- Flatten
- 全连接层 / FC layer
- 两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:
优化手段
- Spatial Transformer Layer
- 可以通过NN的手段两个Layer之间的链接方式
- 本质上,就是通过 矩阵 的手段,对图片进行 放大、缩小、旋转、平移等
- 问题
- 无法用 Gradient Descent优化
- Interpolation(插值)
- 可以通过NN的手段两个Layer之间的链接方式
卷积神经网络之典型CNN
- LeNet,这是最早用于数字识别的CNN
- AlexNet, 2012 ILSVRC比赛远超第2名的CNN
- LeNet更深,用多层小卷积层叠加替换单大卷积层。
- ZF Net, 2013 ILSVRC比赛冠军
- GoogLeNet, 2014 ILSVRC比赛冠军
- VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好