赞
踩
LeNet:(最早用于数字识别的CNN
)
AlexNet:(2012年ILSVRC比赛冠军,远超第二名的CNN,比LeNet更深,用多层 小卷积叠加来替换单个的大卷积)
对比LeNet,AlexNet加入了:
(1)非线性激活函数:ReLU;
(2)防止过拟合的方法:Dropout,Data augmentation。同时,使用多个GPU,LRN归一化层。其主要的优势有:网络扩大(5个卷积层+3个全连接层+1个softmax层);解决过拟合问题(dropout,data augmentation,LRN);多GPU加速计算。
ZFnet:(2013ILSVRC冠军)
VGG-Net:(2014ILSVRC比赛中算法模型,效果率低于GoogleNet)
GoogLeNet:(2014ILSVRC冠军)
Resnet:(2015ILSVRC冠军,结构修正以适应更深层次的CNN训练 )
作用:卷积网络的原始输入,可以是原始或预处理后的像素矩
输入数据单位不一样,可能会导致神经网络收敛速度慢,训练时间长
数据范围大(方差大)的输入在模式分类中的作用可能偏大,而数据范围小的作用就有可 能偏小
由于神经网络中存在的激活函数是有值域限制的,因此需要将网络训练的目标数据映射到 激活函数的值域
S形激活函数在(-4, 4)区间以外区域很平缓,区分度太小。例如S形函数f(X),f(100)与f(5) 只相差0.0067
预处理方式:
在数据预处理的时候一般都采用去均值和者归一化比较多!!!
去均值:将输入数据的各个维度中心化到0
归一化:将输入数据的各个维度的幅度归一化到同样的范围
PCA/白化
作用:参数共享、局部连接,利用平移不变性从全局特征图提取局部特征
卷积就是通过卷积核(滤波器)来提取高阶特征!!!
对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
不同大小的滤波器提取不同的特征(颜色深浅,轮廓大小)
卷积计算层:
局部关联:每个神经元看做一个filter/kernel
窗口(receptive field)滑动,filter对局部数据进行计算
相关概念
卷积过程如图:
一 组 固 定 的 权 重 和 窗 口 内 数 据 做 矩 阵 内 积 后 求 和 的 过 程 叫 做 卷 积
局部感知: 在进行计算的时候,将图片划分为一个个的区域进行计算/考虑;
参数共享机制:假设每个神经元连接数据窗的权重是固定的
滑动窗口重叠:降低窗口与窗口之间的边缘不平滑的特性。
固定每个神经元的连接权重,可以将神经元看成一个模板;也就是每个神经元只 关注一个特性
需要计算的权重个数会大大的减少
卷积shape的计算方式:
作用:将卷积层的输出结果进行非线性映射
将卷积层的输出结果做一次非线性的映射,也就是做一次‘’激活‘’。
激活函数是将输出结果做非线性映射,为了使模型获得非线性的能力
sigmoid函数:
tanh函数:
ReLu函数:修正线性单元,有可能出现斜率为0,但概率很小,因为mini-batch是一批样本损失求导之和。
Leaky ReLU激活函数:
ELU激活函数:
激活函数建议:CNN隐藏层一般不使用sigmoid(排除做attention用),如果要使用,建议只在全连接层使用。首先使用ReLU,因为迭代速度快,但是有可能效果不佳。如果使用ReLU失效的情况下,考虑使用Leaky ReLu或者ELU,此时一般情况都可以解决。tanh激活函数在某些情况下有比较好的效果,但是应用场景比较少
作用:进一步筛选特征,可以有效减少后续网络层次所需的参数量
也叫下采样层,就算通过了卷积层,维度还是很高 ,需要进行池化层操作。
在池化层中,可以获得更大视野特征图。但又无需增加参数量(比如通过7*7获得同样特征图)
方式有:Max pooling、average pooling
最大池化Max pooling,3,4
平均池化:average pooling
作用:用于把该层之前提取到的特征综合起来。
批归一化计算方式
强制的进行归一化操作可能存在一些问题,eg: 方差为1等
若仅做归一化,而不重新缩放和位移(BN),则模型会不学习。
如Sigmoid激活函数。这个函数在-1~1之间的梯度变化不大,可以近视为线性函数,如下图:
Tanh函数在0附近也近视线性函数。 所以需要转换才能将分布从0移开, 使用缩放因子γ和移位因子β(学习的参数)来执行此操作,如下图:
批归一化BN的原理是平滑了损失函数
批归一化的作用
优点or缺点
批归一化使用的位置:CNN中在激活函数之前使用,RNN在每层输入之前,最后输出层 都不加。
Batch Normalization Layer:
Layer Normalization Layer
Instance Normalization Layer
Group Normalization Layer
Switchable Normalization Layer
在卷积神经网络中,可以看到神经元之间的连接是通过权重w以及偏置b实现的。一个好的初始化参数对模型的效果有很大的帮助。
神经网络的学习能力受神经元数目以及神经网络层次的影响,神经元数目越大,神经 网络层次越高,那么神经网络的学习能力越强,那么就有可能出现过拟合的问题;(通 俗来讲:神经网络的空间表达能力变得更紧丰富了)
正则化是通过给cost函数添加正则项的方式来解决过拟合,Dropout是通过 直接修改神经网络的结构来解决过拟合
传统的神经网络无论是隐层还是激活函数的导数都是可导,可以直接计算出导数函数,然而在CNN网络中存在一些不可导的特殊环节,比如Relu等不可导的激活函数、造成维数变化的池化采样、已经参数共享的卷积环节。NN网络的反向传播本质就是梯度(可能学术中会用残差这个词,本文的梯度可以认为就是残差)传递,所以只要我们搞懂了这些特殊环节的导数计算,那么我们也就理解CNN的反向传播。
先从最简单的开始,Relu激活在高等数学上的定义为连续(局部)不可微的函数,它的公式为
R
e
l
u
(
x
)
=
{
x
,
x
>
0
0
,
x
≤
0
Relu(x) = \left\{ x,x>00,x≤0
其在x=0处是不可微的,但是在深度学习框架的代码中为了解决这个直接将其在x=0处的导数置为1,所以它的导数也就变为了
δ
R
e
l
u
(
x
)
=
{
1
,
x
>
0
0
,
x
≤
0
\delta_{Relu(x)} = \left\{ 1,x>00,x≤0
CNN网络中另外一个不可导的环节就是Pooling池化操作,因为Pooling操作使得feature map的尺寸变化,假如做2×2的池化,假设那么第l+1层的feature map有16个梯度,那么第l层就会有64个梯度,这使得梯度无法对位的进行传播下去。其实解决这个问题的思想也很简单,就是把1个像素的梯度传递给4个像素,但是需要保证传递的loss(或者梯度)总和不变。根据这条原则,mean pooling和max pooling的反向传播也是不同的。
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下 :
mean pooling比较容易让人理解错的地方就是会简单的认为直接把梯度复制N遍之后直接反向传播回去,但是这样会造成loss之和变为原来的N倍,网络是会产生梯度爆炸的。
max pooling也要满足梯度之和不变的原则,max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。所以max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max id。
改进:引入了局不响应归一化 (加与不加相差了一个百分点)
结构优化:
修正线性函数ReLU
使用最大池化不带参数 提取丰富的特征
使用Dropout Data augmentation(数据增强)
这是第一个在超大数据集上训练的神经网络
使用了GPU训练,当时受限于GPU 所以做了分组训练
加入了LRN(局不响应归一化)参考了生物学上抑制神经元过于活跃的现象(只做了归一化没有学习参数beta game)
为什么加入辅助分类器(图中黑框):
辅助分类器(只在训练的时候使用):
前面参数少 卷积少 随着卷积后面的参数量大 卷积多提取更细致
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。