目录
LeNet又称LeNet-5:没有参与ILSVRC比赛,但它是卷积网络的鼻祖
它是一个7层的网络,它的深度为5,包含2个卷积层、2个池化层、2个全连接层和1个Guassian connection,是用于手写字体的识别的一个经典CNN
- AlexNe :2012年ILSVRC的冠军
- ZFNet :2013年ILSVRC的冠军,ZFNet的网络结构,是在AlexNet上进行了微调
- GoogLeNet :2014年ILSVRC冠军,有22层
VGGNet :2014年ILSVRC比赛中,有16和19层
(VGG代表的是Oxford 大学 Visual Geometry Group)
- ResNet :2015年ILSVRC的冠军,层数有 18,34,50,101和152
PS:ILSVRC (ImageNet Large Scale Visual Recognition Challenge)是图像分类领域的比赛
LeNet-5(1998年)
1. 输入层:32*32的图片,相当于1024个神经元,比MNIST数据集的图片要大一些,这么做的原因是希望潜在的明显特征如笔画断点能够出现在最高层特征检测子感受野(receptive field)的中心。因此在训练整个网络之前,需要对28*28的图像加上paddings。
2. C1层:卷积层,6 个特征卷积核,卷积核大小 5*5,得到 6 个feature map,大小为28*28( 32-5+1=28)
3. S2层:下采样层,使用最大池化进行下采样,池化的size (2,2),得到6 个feature map,大小为14*14(28/2=14)
4. C3层:卷积层,16 个特征卷积核,卷积核大小 5*5,得到 16个feature map,大小为 10*10( 14-5+1=10)
5. S4层:下采样层,使用最大池化进行下采样,池化的size (2,2) ,得到 16个feature map,大小为5*5(10/2=5)
6. C5层:卷积层,120 个特征卷积核,卷积核大小 5*5,得到 120 个神经元
7. F6层:与C5层全连接,有84个神经元
(为什么是84?
LeNet模型希望能够识别ASCII打印字符,而标准ASCII字符打印大小是用7*12大小的位图表示)
8. 输出层:该层与F6层全连接,输出长度为 10 的张量,表示分类结果
输出层由『 欧式径向基函数单元 』组成,每类一个单元。该单元是用于计算输入向量(84个)和参数向量之间的欧式距离。输入向量离参数向量越远,RBF 输出值越大,表示与这种类别越不相似。
RBF输出可以理解为 输入和与该类别的模型的匹配程度的惩罚项,越不相似,值越大,惩罚越大。
AlexNet(2012年)
https://blog.csdn.net/maweifei/article/details/53117830
AlexNet 在12年 ILSVRC 使用的模型结构,在错误率上有很大的降低,这也是第一次基于CNN的冠军
一、精简网络结构
5个卷积层+3个全连接层+1个softmax层
输出 1000,因为 ImageNet数据集有1000个类别
二、各层运算
三、AlexNet主要使用到的新技术点
1. ReLU
tanh(x)或者sigmoid(x)函数:由于此类函数在x非常大或者非常小时,函数输出基本不变,所以此类函数成为饱和函数
f(x)=max(0,x):是一种非线性的非饱和函数
优势:
非饱和函数比饱和函数训练更快
这种扭曲线性函数,不但保留了非线性的表达能力,而且由于其具有线性性质(正值部分),相比tanh和sigmoid函数在误差反向传递时,不会有由于非线性引起的梯度消失
2. 在多个GPU上训练
目前的GPU特别适合跨GPU并行化,因为它们能够直接从另一个GPU的内存中读出和写入,不需要通过主机内存 『采用的并行方案基本上是:在每个GPU中放置一半神经元』
还有一个额外的技巧:GPU间的通讯只在某些层进行。例如,第3层的核需要从第2层中所有核映射输入,而第4层的核只需要从第3层中位于同一GPU的那些核映射输入
3. 局部响应归一化 LRN(Local Response Normalization)
局部响应归一化原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制)
- 对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元
- 归一化有助于快速收敛
4. 重叠 Pooling
(1)重叠的理解
根据不同滑动的步长,滑动的窗口间有大量重叠区域,卷积结果有冗余,进行最大pooling或者平均pooling就是减少冗余。减少冗余的同时,pooling也丢掉了局部位置信息,所以局部有微小形变。
(PS:之前对池化一直一知半解,上面这句话真的点醒了我)
(2)最大池化
AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
5.减少过拟合
<1>数据扩充1>
(1)图像平移和翻转
(2)调整RGB像素值
<2>Dropout2>
VGG(2014年)
深度16和19层的 VGGNet 网络模型在分类和定位任务上的效果最好
- 小卷积核:卷积核全部替换为3x3(极少用了1x1)
- 小池化核:相比AlexNet的3x3的池化核,VGG全部为2x2的池化核
- 层数更深特征图更宽:基于前两点外,卷积核专注于扩大通道数、池化专注于缩小宽和高
一、小卷积核的优势
- 小卷积核,虽然需要卷积多层,但是需要的参数其实更小
- 越大的卷积核计算量越大
- 多个小卷积核的堆叠比单一大卷积核带来了精度提升
二、感受野(Receptive Field)
从CNN角度上看,输出featuremap某个节点的响应对应的输入图像的区域就是感受野
感受野的计算:(个人感觉画图吧,直观,从深层向浅层看)
stride=1,pad=0,2个3x3的卷积堆叠,获得的感受野,相当于一个5x5的卷积
stride=1,pad=0,3个3x3卷积的堆叠,获得的感受野,相当于一个7x7的卷积
GoogLeNet(Google Inception Net)
有22层,没有全连接层,但大小却比AlexNet和VGG小很多。GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数是AlexNet的3倍。
http://www.chinacion.cn/article/2774.html
一、提升网络性能的方法
通过增加网络深度和宽度提升网络性能(深度指网络层次数、宽度指神经元数量),但存在以下问题:
(1)参数太多,很容易过拟合
(2)计算复杂
(3)网络越深,容易出现梯度消失
解决上面问题的方法:
- 第一步:全连接变成稀疏连接
稀疏连接,可以减少参数,但全连接变成稀疏连接后,计算所消耗的时间却没有大幅减少
(稀疏矩阵,元素大部分为零的矩阵)
- 第二步:Inception网络结构
GoogLeNet 对网络中的传统卷积层进行了修改,提出了被称为 Inception 的结构,将稀疏矩阵聚类为较为密集的子矩阵 ,来提高计算性能,既能减少参数,但不减少特征数,又能利用密集矩阵的高计算性能
二、Inception
https://zhuanlan.zhihu.com/p/32702031
https://blog.csdn.net/dcrmg/article/details/79246654
(一)1×1卷积核和Network in Network(NIN)
MLP代替GLM:GLM是广义线性模型,MLP是指在做卷积操作的时候,把线性操作变为多层感知机
(看了很多博客都是这句话,什么玩意儿,能不能讲人话,还是知乎大神实在,不玩虚的)
左图—传统的卷积层结构(线性卷积):在一个尺度上只有一次卷积
右图——Network in Network结构(NIN):先进行一次普通的卷积(比如3x3),再进行一次1x1的卷积,1x1卷积等效于全连接,所以右侧图的1x1卷积画成了全连接层的形式,将两个卷积串联,就能组合出更多的非线性特征。
(注意:NIN结构中无论是第一个3x3卷积还是新增的1x1卷积,后面都紧跟着激活函数)
『1×1卷积:起到降维的作用(减少参数,减少计算量),但是输出特征量并没有减少』
『NIN:一个神经网络之中,其每一层中的特征提取里又加上了一个小的神经网络』
(二)多个尺寸上进行卷积再聚合
用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度
举个例子:
左图—稀疏矩阵,和一个2x2的矩阵进行卷积,需要对稀疏矩阵中的『每一个元素进行计算』
右图—把稀疏矩阵分解成2个子密集矩阵,再和2x2矩阵进行卷积,稀疏矩阵中0较多的区域不用计算
这个原理应用到Inception上就是多尺度提取特征
- 传统的卷积层的输入数据只和一种尺度的卷积核进行卷积,输出固定维度的数据
- inception模块在多个尺度上提取特征,这样特征集中相关性较强的特征聚集在了一起,不相关的非关键特征就被弱化,Inception方法输出的冗余信息较少
(三)全卷积代替全连接层
平均池化层代替了最后的全连接层
使用卷积层代替全连接层,突破了输入尺寸的限制
PS:突然明白了卷积网络和一般神经网络相比,除了可以共享参数等优点,还有很重要的一点,那就是突破了输入尺寸的限制
一神经网络的输入图像大小是固定的,但是卷积神经网络的输入图像大小其实可以不固定
下图是Inception结构
三、GoogLeNet 的 Inception 的四个版本
https://blog.csdn.net/hejin_some/article/details/78636586
ResNet
https://blog.csdn.net/u012816943/article/details/51702520
https://blog.csdn.net/lanran2/article/details/79057994
一、ResNet 解决的问题
1.深层网络存在的问题
仅仅只是向卷积网络上堆叠卷积层,得到更深的网络,会发现不论是训练集还是测试集,深层网络的效果都不如稍深的网络好,那就不是过拟合造成的,那是因为深层网络更难优化参数
2.ResNet 残差神经网络在解决的问题:对于深层神经网络的优化,浅层信息的远距离传输问题
保证了深层网络至少和浅层网络效果一样好,即网络的性能不会随着深度增加而降低。
二、ResNet结构
使用 residual mapping 而不是 direct mapping
ResNet中有两种 mapping
- identity mapping:指输入本身,就是x,这个支路叫做shortcut connection
- residual mapping:指残差,就是F(x) = y -x
residual mapping 可以看成是对 identity mapping 的修正。若网络已到达最优,继续加深网络,residual mapping 将被push为0,只剩下identity mapping,这样保证了深层网络至少和浅层网络效果一样好,即网络的性能不会随着深度增加而降低。
三、 Bottleneck Layer
两种ResNet设计
- 左图—一般的残差网络
右图—bottleneck design,用于降低参数的数目,减少计算
右图中,第一个1x1的卷积用于降维,第二个1x1的卷积用于将维度恢复到和输入时一样
四、ResNet不同结构
ResNet不同的结构,层数为 18,34,50,101和152
以 101-layer 为例
输入时卷积一次,然后经过3 + 4 + 23 + 3 = 33个building block,每个block为3层,所以有33 x 3 = 99层,最后 fc 层用于分类,总计 1 + 99 + 1 = 101层
(这里网络层数仅仅指卷积或者全连接层,而激活层、池化层没有计算在内)
五、ResNet 的特点
Batch Normalization 批标准化:因为数据分布会对训练产生影响
进入激励函数的值的分布是很重要,需要在有效范围内,『BN被添加在全连接层和激励函数之间』
Xavier初始化
SGD + Momentum
学习率使用类似时间表的可变学习率
Weight decay 权值衰减,防止过拟合
没有dropout
六、对于ResNet 的改进
- 宽网络:通过增加宽度来代替增加网络的深度,优点是可以进行并行计算,计算效率高
- Wide ResNet:通过增加卷积核,来增加宽度,以这种方式代替增加网络的深度
- ResNeXt:通过在残差模块里建立分支,增加残差模块的宽度
随机深度:训练时丢弃一些层,使用更浅的网络,防止梯度消失(像是dropout为了防止过拟合)
七、新的网络
可以媲美ResNet的网络
- FractalNet :分形网络,无残差的极深神经网络
- DenseNet:密集连接的卷积神经网络
- SqueezeNet
附录
1. feature map
在卷积层中,上层的 『每个 feature map』 跟对应的卷积核做卷积,产生下层的『一个feature map』
feature map 可以看成许多个二维图片叠在一起,如果是灰度图片,那就只有一个feature map,如果是彩色图片,一般就是3个feature map
2. 卷积后图片的尺寸计算
设步长为 s,填充长度为 p,输入图片大小为 n * n,滤波器大小为 f * f
则卷积后图片的尺寸 ⌊(n+2p-f)/s+1⌋ × ⌊(n+2p-f)/s+1⌋(向下取整)