ImageNet Classification with Deep Convolutional Neural Networks
输入要求:256*256
处理:按最小边为256的比例缩放,按中心块裁剪256256,减去均值(加快收敛)https://blog.csdn.net/hai008007/article/details/79718251
https://blog.csdn.net/w113691/article/details/71742734
结构包含8层带权重的层:5层卷积层+3层全连接层
参数:batchsize= 128,momentum=0.9,weight decay=0.0005
具体贡献点:
之前:f(x) = tanh(x) or f(x) = (1 + e-x)-1,称之为 saturating nonlinearities
改为:f(x) = max(0; x) ,称之为 non-saturating nonlinearity ,called RectifiedLinear Units (ReLUs)
后者比前者在训练时的收敛速度明显加快 使用梯度下降训练,这些饱和(saturating)的非线性激活函数会造成梯度消失现象,降低训练速度。使用非饱和的非线性激活函数ReLu可以避免这个问题。
虽然表现最明显的是加快训练速度,但原先的本意是为了阻止过拟合
GPU并行训练将GPU通信限制在某些特定的层上。
这意味着,比如,第三层的内核从所有的第二层内核映射(kernel map)中获得输入,但是,第四层的内核只从和自己在同一个GPU上的第三层内核中获得输入。
用双GPU还能提高效果?
与用一个GPU训练每个卷积层只有一半的内核的网络相比,这种结构将我们的TOP-1错误和TOP-5错误分别降低了1.7%和1.2%。
局部响应归一化,模仿神经元的侧抑制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
https://blog.csdn.net/hduxiejun/article/details/70570086
此举降低了top1和top5的错误率1.4%和1.2% ,但后来VGG说这个没用
重叠池化池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。文章使用了s = 2(步长),z = 3(池化大小)top-1error和top-5error分别减少了0.4%,0.3%. 发现也能抑制过拟合现象
1)训练:从256的图像中依次裁剪出224的图像,再对裁剪后的图像水平翻转,共扩大((256-224)*(256-224)*2=2048)倍测试:对一张256的图像裁剪5次224的图像(四个角加中心),再水平翻转,softmax层对10张图的平均预测取均值做结果
2)改变训练图像的RGB通道的强度,对每张图片的RGB值进行PCA得到3*3的协方差矩阵,p为第i个特征向量,landa为特征值,a是均值为0标准差为0.1的高斯函数产生的随机变量。
这个方案改变自然图像光照的颜色和强度,而目标的特性不变。降低top1错误率1%。
模型融合:对多个模型预测可以降低测试错误率,但代价太昂贵“休学”而非“辍学”,某些节点为了避免过拟合而在本轮训练中暂时停止更新。每次选择x的节点进行连接,只有被选中参与连接的节点进行正向和反向传播,其他的值不变
因此,对于一个有N个节点的神经网络,有了dropout后就可以看作是 2的N次方 个模型的集合,但此时要训练的参数数目是不变的,就解决了费时的问题。
https://blog.csdn.net/dod_jdi/article/details/78379781
学习率初始设为0.01,当验证集的错误率不再降低的时候,将学习率除以10,在训练停止前,学习率减小了3次。
*是对预训练的模型加一个第六层卷积层再微调,可以提高效果
对多个模型结果取均值(5+1* x 2=7)
分类第二,定位第一
Very Deep Convolutional Networks for Large-Scale Image Recognition
数据处理:224,224,去均值化
https://blog.csdn.net/whz1861/article/details/78111606
1.LRN没有提高效果,反而增加了内存消耗和计算时间。
2.D>C>B,1x1卷积层有用但不如3x3效果好
3.B与5x5相比,效果更好,小滤波器效果好
4.深度增加,效果提高
5.尺寸抖动训练效果更好,尺度抖动说的是在范围内随机采样S
《Network in Network》
实现跨通道的交互和信息整合。“这种级联的跨信道参数池结构允许交叉信道信息的复杂且可学习的交互。”
一般来说卷积层要提升表达能力,主要依靠增加输出通道数,但副作用是计算量增大和过拟合。每一个输出通道对应一个滤波器,同一个滤波器共享参数,只能提取一类特征,因此一个输出通道只能做一种特征处理。1*1可以把这些相关性很高的、在同一个空间位置但是不同通道的特征连接在一起。进行卷积核通道数的降维和升维,减少参数量。
对每个特征图一整张图片进行全局均值池化,每张特征图都可以得到一个输出。优点是1在feature map 和类别之间强制映射,卷积结构more native,2减少大量的参数,有效避免过拟合 ,3对空间信息求和,more robust
Mlpconv layers model the local patches better, and global average pooling acts as a structural regularizer that prevents overfitting globally.
《Going Deeper With Convolutions 》
分类第一,贡献点:
Inception Module中包含了3种不同尺寸的卷积和1个最大池化,增加了网络对不同尺度的适应性,这一部分和Multi-Scale的思想类似。最后Inception Module通过4个分支中不同尺寸的1x1、3x3、5x5等小型卷积将相关性很高的节点连接在一起,就完成了其设计初衷,构建出了很高效的稀疏结构。
借鉴了NIN,提出Inception Module,提高了参数的利用效率,(参数量只有alexnet的1/12)
(借鉴NIN)增加了分支网络,NIN的MLPconv层拥有更强的提升表达能力,允许在输出通道之间组合信息,因此效果明显。可以说,MLPConv基本等效于普通卷积层后再连接1x1的卷积和ReLU激活函数。1x1卷积可以跨通道组织信息,提高网络的表达能力,一个1x1的卷积就可以很自然地把这些相关性很高的、在同一个空间位置但是不同通道的特征连接在一起,同时可以对输出通道降维。
由于较高层会获取较高的抽象特征,其空间集中度会减少,所以3x3和5x5的大尺寸卷积比例应该有所提升,但大尺寸滤波会带来大量参数量,所以本文采用1x1卷积来降维。
在Inception Net中,还使用到了辅助分类节点(auxiliary classifiers),即将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中。这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个Inception Net的训练很有裨益。
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
问题:深层网络训练时,由于模型参数在不断修改,所以各层的输入的概率分布在不断变化,这使得我们必须使用较小的学习率及较好的权重初值,导致训练很慢,同时也导致使用saturating nonlinearities 激活函数(如sigmoid,正负两边都会饱和)时训练很困难。
当各层输入分布的变动导致模型需要不停地去拟合新的分布。当一个学习系统的输入分布是变化的时,即训练集的样本分布和测试集的样本分布不一致,训练的模型就很难有较好的泛化能力(这也算过拟合吧?),这叫做 covariate shift (Shimodaira, 2000),解决办法是:对每层的输入进行归一化。
提出,Batch Normalization,减少协变量转移,
对每一个mini-batch数据的内部进行标准化(normalization)处理,使输出规范化到N(0,1)的正态分布https://morvanzhou.github.io/tutorials/machine-learning/torch/5-04-A-batch-normalization/
但不是直接在每层规范化,因为如果模型的优化求梯度时不考虑到归一化的话,会影响模型,就是你优化半天学到了某种分布,一规范化,就把这它破坏了。
具体操作:
设标准化值为x1,x2…它们的线性变换为y1…m。e是为了数值稳定加到小批量数据方差上的常量
但这样生成的x绝对值太小,降低了模型表达能力,引入可学习的γ和β去拟合出与原先等价的变换
Rethinking the Inception Architecture for Computer Vision
将一个较大的二维卷积拆成两个较小的一维卷积,比如将7x7卷积拆成1x7卷积和7x1卷积,或者将3x3卷积拆成1x3卷积和3x1卷积。
引入了辅助分类器的概念,以改善非常深的网络的收敛。最初的动机是将有用的梯度推向较低层,使其立即有用,并通过抵抗非常深的网络中的消失梯度问题来提高训练过程中的收敛。Lee等人[11]也认为辅助分类器促进了更稳定的学习和更好的收敛。有趣的是,我们发现辅助分类器在训练早期并没有导致改善收敛:在两个模型达到高精度之前,有无侧边网络的训练进度看起来几乎相同。接近训练结束,辅助分支网络开始超越没有任何分支的网络的准确性,达到了更高的稳定水平。
本文认为辅助分类器起着正则化项的作用
Deep Residual Learning for Image Recognition
Resnet在不断加神经网络的深度时,会出现一个Degradation的问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这并不是过拟合的问题,因为不光在测试集上误差增大,训练集本身误差也会增大。假设有一个比较浅的网络达到了饱和的准确率,那么后面再加上几个的全等映射层,起码误差不会增加,即更深的网络不应该带来训练集上误差上升。而这里提到的使用全等映射直接将前一层输出传到后面的思想,就是ResNet的灵感来源。传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。
左边:34层;右边:50/101/152层,使用1x1降低参数量
Densely Connected Convolutional Networks
所有在前图层作为输入,自身作为后续图层的输入,共有1+2+3+….+L 共L(L+1)/2个直接连接
缓解梯度消失问题,加强特征传播,鼓励特征重用,并大幅减少参数数量。
受随机深度网络启发,
1.当第i层被扔掉之后,第i+1层就直接连到了i-1层,当第2到i层都被扔掉之后,第i+1层就直接用到了第1层的特征,因此随机深度网络其实可以看出是一个具有随机密集连接的Densenet;
2.既然随机扔掉很多层也不会破坏算法的收敛性,说明resnet具有比较 明显的冗余性,网络的每一层只提取了很少的特征,既然每层学习的特征很少,那能不能降低每层的计算量来减少冗余;
–> 所以densenet设计:1.网络中的每一层都直接与前面层相连,实现特征的重复利用;2.把网络的每一层设计的特别窄,即每层学习的特征图很少,降低冗余性同时降低计算参数量。
由于密集的串联连接需要相同的feature map大小,但pooling操作后大小会变,但pooling又必不可少,所以提出dense block,在blocl之间是transition layer,包括BN+1x1 conv+2x2 AveP
另外,dense block也会减少参数量,只在block内进行密集连接,层数少了。否则到最后就会连接很多的前面的层数。
控制每层的输出feature map个数,第l层有k(l-1)+k’,k‘是输入的通道数。
虽然每层只增加k个输出,但后面层的输入依然会很多,因此引入bottlneck layer,其实是引入1*1的卷积层金少输入数量。本文将带有bottleneck layer的网络成为DenseNet-B。
除了在Denseblock内减少特征图的数量,还可以在transition layers中来进一步compression。如果一个Dense block产生m个特征图输出,则transition 产生 [θm]个输出,θ∈(0,1],这种操作成为DenseNet-C
以上两种合起来成为DenseNet-BC
本文说densenet的结构可以大大减少过拟合现象,在不做数据增强的情况下,cifar10的误差从7.33%降到5.19%,cifar100从28.2%降到19.64%,实验还发现现在的过拟合,当把k从12增加到24时,增长的4倍参数导致误差从5.77%增加到5.83%.DenseNet-BC bottleneck and compression layers 可以有效抑制。
Squeeze-and-Excitation Networks
ImageNet2017冠军,top5 2.251%,之前是2016 2.991%(中国公安部三所 Trimps-Soushen队)
不是一个完整的网络结构,是一个block,可以插入到现有的网络中,作者的动机是希望显式地建模特征通道之间的相互依赖关系,通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。
具体操作:
博文参考