当废人真的好快乐
不学习不去实验室的日子也太舒坦了吧!
所以小李又拖到现在才来更新了
——————————
论文名称:《Deep Residual Learning for Image Recognition》
论文地址:https://arxiv.org/pdf/1512.03385.pdf
论文翻译:https://blog.csdn.net/c_chuxin/article/details/82948733
论文代码:https://github.com/tornadomeet/ResNet
Background
按惯例先说一下背景:深度卷积网络近几年来在图像分类任务上取得了巨大突破,它是通过综合中、低、高层特征以及分类器来形成的,不少实验结果表明,网络深度对于性能来说是及其重要的,通过增加层数(即加深网络)在一定程度上可以丰富网络学习到的特征。凭着这一基本准则CNN分类网络自Alexnet发展到了VGG的16乃至19层,后来更有了Googlenet的22层。那么现在有一个问题:是不是简单地通过加深网络就可以获得更好的性能和更高的精准率?答案是否,通过后来的实验我们可以发现深度CNN网络达到一定深度后再一味地增加层数并不能带来进一步地分类性能提高,反会容易造成由梯度消失和梯度爆炸引起的网络不收敛问题。
这个问题可以通过归一初始化与中间初始化来解决。(如下图所示)
步骤解释:
1.计算样本均值。
2.计算样本方差。
3.样本数据标准化处理。
4.进行平移和缩放处理。引入了γ和β两个参数。来训练γ和β两个参数。引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。
即第一图:x先经过Wh1的线性变换后得到s1,将s1再减去batch的平均值μB,将s2乘以γ调整数值大小,再加上β增加偏移后得到s3
通过归一初始化与中间初始化解决了网络不收敛的问题,但是又有了新的问题,这个时候发现网络出现了退化问题,如下图。由图可知56层网络比20层的网络错误率更高,可猜测这种退化并不是由过拟合造成的,在一个合理的深度模型中增加更多的层却导致了更高的错误率。退化问题表明了,求解器在通过多个非线性层来估计恒等映射上可能是存在困难的。因而,论文推测是优化器出了了问题。
Idea
因而,我们假设有一个浅层网络,如果通过向上堆积新层来建立深层网络,前提是这些增加的层什么也不学习,仅仅复制浅层网络的特征,即这样新层是恒等映射(对任意集合A,如果映射f:A→A定义为f(a)=a,即规定A中每个元素a与自身对应,则称f为A上的恒等映射)。
在这种情况下,深层网络应该至少和浅层网络性能一样,也不应该出现退化现象。
因而,基于这个问题论文作者提出了残差学习框架(Resnet).
Resnet
Model
H(x)是底层映射
F(x)多层堆叠的非线性层来拟合的映射
x是原始映射
原始的网络直接拟合所需要的函数H(x),而残差块则拟合残差函数,即:F(x)=H(x)−x,F(x)它拟合的是底层映射与输入的差值,最后通过把输入与残差相加求得底层映射,间接拟合所需要的函数,即:H(x)=F(x)+x。相加操作是通过一条shortcut来实现。
这边有个问题补充说明一下:为什么要通过间接拟合学习我们所需要的函数H(x)?
网络退化问题说明了优化器在优化非线性层拟合恒等函数时会有困难,而当拟合残差函数时,如果恒等函数是最优解,那么优化器只需要将非线性层权重参数置零即可。也就是说:将残差推至零比用一堆非线性层拟合恒等映射更容易,优化器会更容易优化残差函数。除此,如下图所示,我们可以看到变化对F的影响远远大于G,说明引入残差后的映射对输出的变化更敏感,这样是有利于网络进行传播的,更快收敛Deep residual Learning
如上图,一个残差块可以如上第一个式子表示,x和y表示这些层的输入和输出,F函数表示要学习的残差映射。整体的一个网络结构大致如下:{注:上图式子中的σ代表ReLU}
ResNet通过直接将输入信息绕道传到输出,保护信息的完整性,网络只需要学习输入、输出差别的那一部分,简化学习目标和难度.shortcut
shortcut在resnet起着至关重要的作用,它执行了一个相加的操作,Shortcut的作用是简单地执行恒等映射,将恒等映射的输入添加到堆层的输出,引入shortcut既不需要额外的参数,也没有计算复杂性。
shortcu两种情况如上图所示:
1.在BB1中只有卷积层,图片大小没有改变,也就是等式中的x和F需要具有相同维度,可以直接相加:y=F(x)+x
2.在BB2中,图片尺寸缩小了一半,维度不匹配,因此不可以直接相加:y=F(x)+Wsx.
论文的作者给了两种解决方法:
1.shortcut仍然使用恒等映射,在增加的维度上使用0来填充,这样做不会增加额外的参数;
2.使用一个投影矩阵Ws来匹配维度(通过1×1卷积)
Experiments
这篇论文实验涉及较多 这边简要记录几个
*Network Architectures
实验一:
Plain Network的设计是借鉴了VGG nets的思想,并且遵循以下两种原则:
1、输出特征图大小不变时,卷积核数量不变;
2、特征图大小缩小一半时,卷积核数量就增加一倍,以保持每层的时间复杂度。除此之外,VGG通过Max Pooling下采样,而这里通过步长为2的卷积层直接下采样,同时Plain Network最后通过Average Pooling来获得最后的特征,并且通过softmax层来获得最后1000维的预测。Residual Network是在Plain Network的基础上加入shortcut connection来形成残差学习模块,为了匹配维度,这里考虑两种不同操作:
1、在增加的维度上使用0来填充,这样做不会增加额外的参数;
2、投影映射 (通过1x1卷积层来增加维度。)
对比结果:
1.plain-18 VS plain-34,展示了退化问题。说明了退化问题不是因为梯度消失,另外也不能简单地增加迭代次数来使其收敛,增加迭代次数仍然会出现退化问题。
2。ResNet-18 VS ResNet-34不会出现退化问题,ResNet-34明显表现的比ResNet-18和plain-34好,证明了残差学习解决了随网络深度增加带来的退化问题。因此可以通过增加深度来获取更高的精度 在极深网络中,residual learning 是有效的。
3.同等深度的plain-18和ResNet-18,残差网络更容易优化,收敛更快。实验二:
网络构造同上一个实验,这里是比较对于同等映射维度不匹配时,匹配维度的两种方法的优劣,其中:
A: 用 zero-padding shortcut 来增加维度,且所有的 shortcut 无需额外的参数
B:用 projection shortcut 来增加维度,一般采用1x1的卷积。其他的 shortcut 用于 identity mapping
C :所有的 shortcut 都用 projectio
实验证明,投影法会比zero padding表现稍好一些。因为zero padding的部分没有参与残差学习。将维度匹配或不匹配的同等映射全用投影法会取得更稍好的结果,但是考虑到不增加复杂度和参数free,不采用这种方法.实验三
瓶颈结构的构造
考虑到时间花费问题,这里将原来的残差学习结构改为瓶颈结构,如上图。
对于每个残差函数F,我们使用一个由3层组成的堆栈,而不是2层。
这三层分别是1×1、3×3和1×1卷积,其中1×1层负责减小然后增加(恢复)维数,使3×3层成为输入/输出维数较小的瓶颈。此时投影法映射带来的参数成为不可忽略的部分(因为输入维度的增大),所以要使用zero padding的恒等映射。
替换原本ResNet的残差学习结构,同时也可以增加结构的数量,网络深度得以增加,生成了ResNet-50,ResNet-101,ResNet-152。
通过下图结果可以看到,随着深度增加,因为解决了退化问题,性能不断提升,可以享受增加的深度中获得的显著的精确性。实验四
Exploring Over 1000 layers
在Cifar-10上尝试了1202层的网络,结果在训练误差上与一个较浅的110层的相近,但是测试误差要比110层大1.5%。作者认为是采用了太深的网络,发生了过拟合。
把resent与其他深层窄模型,如FitNet和 Highway做了对比
结果:具有更少的参数,然而却达到了最好的结果
参考:25组-Deep Residual Learning for Image Recognition
resnet论文阅读