热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CVPR2016(classification):论文解读《DeepResidualLearningforImageRecognition》

文章目录原文地址论文阅读方法初识(Abstract&Introduction&Conclusion)相知(Body)2.RelatedWork3.DeepResidualLearn


文章目录




    • 原文地址

    • 论文阅读方法

    • 初识(Abstract & Introduction & Conclusion)

    • 相知(Body)


      • 2. Related Work

      • 3. Deep Residual Learning


        • 3.1 Residual Learning

        • 3.2 Identity Mapping by Shortcut

        • 3.3 Network Architecture

        • 3.4 Implementation


      • 4. Experiments


        • 4.1 ImageNet Classification![在这里插入图片描述](https://img-blog.csdnimg.cn/20200701214121314.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NTYwODk0,size_16,color_FFFFFF,t_70)

        • 4.2 CIFAR-10 and Analysis



    • 回顾(Review)

    • 代码




原文地址

https://arxiv.org/abs/1512.03385



论文阅读方法

三遍论文法



初识(Abstract & Introduction & Conclusion)

这篇文章就是大名鼎鼎的ResNet,属于CV领域必看经典,目前也是很多任务常用的backbone。获得了CVPR2016的Best Paper Award,这也是Kai Ming He大佬的第二篇Best Paper。

这篇文章主要解决的问题在于:当神经网络的层数加深时,模型效果出现了退化的问题(能力反而变差),如上图所示,将20层神经网络加深到56层之后,模型的training error和test error反而更高了。

首先一个阻碍层数增加的原因是:当层数变多时,会出现梯度消失的现象,这个可以通过Batch Normalization来解决,使得模型能够正常收敛。即使模型通过批次标准化可以正常收敛,但是另一个问题也随之暴露:模型能力退化,并且这个退化不是由过拟合导致的,因为从上图可以看到,56-layer的深层模型在训练集的error rate也增加了,证明模型的拟合能力确实出现了问题。

深层模型出现的退化问题表明了一个现象:并不是所有的模型都同样容易优化的。比如,我们现在要加深一个网络,先将原来的网络完全复制过来,再让新增的层作为恒等映射(恒等映射的简单理解:就是输入X,经过这些层最后还是输出X),按理说,这样构成的模型不可能比原先的网络效果差。但事实证明,在有限的时间内,优化器的无法训练到这种效果(模型反而出现退化)。这也就意味着,深层模型的优化是很困难的。

为了解决深层模型的优化问题,本文提出了一个残差结构:让新增的层不再去拟合基础映射(underlying mapping),而是拟合残差映射(residual mapping)。什么意思呢?例如,我们要学习H(x),让新增的非线性层去拟合映射F(x)=H(x)-x,H(x)就变成了F(x)+x。为什么这么设计呢,因为作者认为这样会使得模型的优化变得更容易,极端地说,假设新增的层为恒等映射才使得模型最优(即原始的网络就已经为最优模型,无论再怎么新增层数也不无法提升性能),那么,新增的非线性层在残差结构下学习如何变为0要比在非残差结构下学习恒等映射容易的多。

F(x)+x的实现如上图所示,使用了"shortcut connections",将恒等映射(identity mapping)与新增层的输出相加,这样既不增加参数量,也不增加计算复杂度。作者利用该网络在ImageNet上进行了实验,证明了自己的残差结构能够很容易优化深层模型,并且随着深度的增加,准确率也逐渐提升。利用该结构,在各个赛道上取得了很牛逼的结果,有多牛逼呢?贴段原文感受下:Our ensemble has 3.57% top-5 error on the ImageNet test set, and won the 1st place in the ILSVRC 2015 classification competition. The extremely deep representations also have excellent generalization performance on other recognition tasks, and lead us to further win the 1st places on: ImageNet detection, ImageNet localization, COCO detection, and COCO segmentation in ILSVRC & COCO 2015 competitions。



相知(Body)



2. Related Work

Residual Representation:首先介绍之前应用残差结构的工作,并且指出本文与他们的不同,说明良好的重构确实对模型的优化是有利的。

Shortcut Connection:与“highway”网络做了对比:本文的残差结构无需额外的参数,且无门控机制,网络永远在学习残差表示。



3. Deep Residual Learning



3.1 Residual Learning

这一部分简单地介绍了残差学习:理论上,多个非线性层能够拟合任意的复杂函数。假设,我需要让新增的非线性层去近似一个函数H(x)(原来的网络输出x),那么可以在残差结构下,让它去近似函数F(x)=H(x)-x。虽然最后的期望映射都为H(x),但是它们学习的难易程度不一样。

之前提到过,如果原来的模型已经是最优,那么新增的非线性层就要学会恒等映射,相比之下,在残差结构下让新增非线性层的权重变为零显然比学习恒等映射更容易。但是在现实情况中,往往已得到的模型不是最优的,这时期望通过增加层数来优化模型。如果最优模型需要新增的非线性模块接近恒等映射(但不是恒定映射,即非线性层学习的不是零映射),那么在残差结构下去学习与恒等映射之间的扰动比重新学习一个新函数要简单的多。



3.2 Identity Mapping by Shortcut

如图2所示,作者定义了一个残差模块,其公式如下:

x,y分别代表了对应层的输入输出向量,其中F(x,{wi})代表所学习的残差映射。

但在式子(1)中,x和F最后为直接的相加,所以它们的空间维度大小必须一致。对于不一致的情况,作者额外定义了一个残差公式:

使用一个线性映射Ws来调整x的维度大小。当然,矩阵Ws也可以用于x和F空间大小一致的情况,但从实验结果(下文)来看,恒等映射就已经可以很好地解决模型退化问题,并且不耗费算力。所以,Ws只用于匹配维度。

关于残差函数F的形式其实是很灵活的,本文的实验包含了2层或者3层,当然更多层也是可以的。如果只包含一层,其实残差模块就会退化成线性映射:W1 x + b,从实验现象来看,这种构造并没有任何优势。



3.3 Network Architecture

Plain Network: 中间为本文实验中的Plain Network(图中),它借鉴了VGG16的网络结构(图左)。主要由多个3x3卷积构成,主要有两点设计原则:1)对于输出同等特征图尺寸的层,它们的卷积核数量一致(输出通道数量相同)。2)特征图尺寸减半,对应的卷积核数量翻倍,保持每层的计算复杂度。下采样用的并不是max poolling,而是直接用步幅长度为2的卷积层替代。网络最后用了一个全局平均池化层+具有softmax的1000维的全连接层。值得注意的是,构造的Plain Network相比于VGG16, 卷积核数量更少,时间复杂度也更少。

Residual Network: 在Plain网络中插入Shortcut Connection,就能转换成与之对应的残差版本(图右)。式(1)可以直接在输入输出维度相等的层中(图中的实线);当维度增加时(图中虚线),作者考虑了两种方案:**A)shortcut仍让执行恒等映射,对于额外的维度用0填充,这种方法不需要增加参数量;B)使用式(2)进行升维(1x1卷积)。**不管哪种方法,当shortcut跨越两种尺寸的feature map时,步幅都为2。



3.4 Implementation

训练基本上是跟随AlexNet、VGG来配置,a) 将最短边随机缩放至[256, 480]区间内用于尺度增强; b) 在图像和对应的水平翻转上进行224x224的随机剪裁; c) 减去各通道像素均值; d) ALexNet中的颜色增强;e) 不同的是,在卷积后**函数前使用了Batch Normalization;f) He初始化方法;g) mini batch=2565的SGD优化,初始学习率为0.1,当error rate不再下降时,除以10,weight decay=0.0001,momentum=0.9;h) 没有使用dropout。

在测试阶段,使用AlexNet中的10-crop测试方法(四个角的224x224 + 中心的224x224,以及它们的水平翻转),并且还采用了类似VGG中的全卷积形式,将平均得分作为输出结果(按最短边{224,256,384,480,640}进行缩放)。



4. Experiments



4.1 ImageNet Classification

上图为实验所构造的Plain Network和对应的ResNet(在每个残差模块加入shortcut connection)详细结构,自50-layer之后,残差函数的结构发生了变化,由两层变为了三层,具体结构也可见下图。

Plain Network: 上图左边就是Plain Network的实验结果,细线为training error,粗线为validation error。可以看到模型从18层变为34层时出现了退化的情况,并且作者在结构中加了Batch Normalization,所以这种退化并不是梯度消失引起的。

Residual Networks: 使用shortcut connection(option A)将网络变为对应的ResNet之后,上图右边即为实验结果。从上图和Table 2中可以得到以下几个结论:1)退化问题在Residual Learning结构下被解决;2)残差学习在深度模型中十分有效的;3)Residual Learning能够使模型更快收敛。
Identity vs. Projection Shortcuts: 接下来比较了Identity Shortcuts和Projection Shortcuts(之前的公式2),其中设计了三种网络:A)仍为Identity Shortcuts,但用零填充增加维度,无需额外参数;B)Projection Shortcut用来增加维度,其他部分仍为Identity Shortcuts;C)所有的Shortcuts均为Projection Shortcuts。

Table3展示了无论是A)B)C)那种方案,均优于plain network。其中,B)略优于A),作者认为这主要是由于A)中零填充的部分没有进行残差学习;C)略由于B),这可以归功于额外参数的引入。但是三者之间的差距很微小,这证明Projection Shortcuts对于解决Model的退化问题并不是必须的。
Deeper Bottleneck Architecutres: 如下图所示(Figure 5 右),随着网络层数的加深,考虑所能负担的训练时长,将Building Block修改为bottleneck设计。对于每一个残差函数F,使用3层代替2层,3层分别为:1x1,3x3以及1x1。1x1卷积层主要是用来减少/恢复特征图的维度,使得3x3层在进行卷积的时候,输入/输出维度都比较小。图5左右两种设计模式,虽然它们的层数不一样,但是它们的时间复杂度是相似的。同时,对于bottleneck网络来说,identity shortcuts是更高效的选择,由于shortcuts连接了两个高纬度的终端,如果使用Projection Shortcuts的话,时间复杂度和模型大小会加倍。

50-layer ResNet: 从50层之后,就开始使用”bottleneck“结构,具体结构见之前的结构图。

101-layer and 152-layer ResNets: 在Residual Learning结构下,模型只需要不断地加深,就可以获得更好的结果。并且即使模型的层数达到了152层,但从参数量来看,模型仍比VGG16/19要更小。

Comparisons with State-of-the-art Methods: 首先,ResNet在ImageNet竞赛classification赛道上荣登第一,然后在提交时,作者结合了6个不同深度的Model进行ensemble(其中有2个ResNet152)。



4.2 CIFAR-10 and Analysis

在CIFAR-10数据集上,作者还做了相应的实验,实验的目的是为了观察深层网络,并不是为了获得SOTA的结果。与之前用于ImageNet的Plain Network结构类似,这个的网络主要由3x3 Conv组成(见下图),经过卷积之后,会进行一个average pooling,10-way全连接+softmax。所以,总共有6n+2层权重层。

shortcut connection全用的为Identity Shortcuts,使得对应的ResNet与Plain Net复杂度一致。

左边为PlainNet在CIFAR-10上的结果,出现了model退化的结果,这证明model退化是一个基础问题;中间是ResNet的结果,解决了Model退化的问题;右边将ResNet增加到1202层,可以看到,虽然1202层和110层的training error很相近,但是ResNet-1202的test error比110要更高,这个现象可以归于过拟合,因为结构中没有用到maxout和dropout等强正则化的手段。

上图展示了每层响应的标准差,它是在BN层之后,ReLU之前的输出。对于ResNet来说,这展示残差函数的响应强度,结果展示,ResNet相比于它的Plain Network有更小的响应,这个结果也就支持了作者之前的动机:残差函数比原始函数更接近零(3.1节)。并且也说明,当层数越多时,ResNet每一层的改动幅度越小。



回顾(Review)

看完整篇论文,一个词:牛逼。全篇主要解决了的一个问题就是:随着模型层数的加深,优化越来越难,网络的性能出现了退化。这个问题如果让我去想,可能抠破脑袋也想不出,而ResNet解决了。ResNet并没有大多复杂的数学原理,只是改变了一下模型的表达形式:Residual Learning (H(x) -> H(x)=F(x)+x)。现在回顾这篇工作,可以发现深度学习领域也确实是从ResNet之后,才真正地变为“深度”学习:模型的层数变得越来越深,达到了百层以上。



代码

等我复现之后,贴上链接。当然,github上关于ResNet的复现代码也有很多。



以上为个人的浅见,水平有限,如有不对,望大佬们指点。

未经本人同意,请勿转载,谢谢。



推荐阅读
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 本文详细介绍了如何在本地环境中安装配置Frida及其服务器组件,以及如何通过Frida进行基本的应用程序动态分析,包括获取应用版本和加载的类信息。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 深入解析Java并发之ArrayBlockingQueue
    本文详细探讨了ArrayBlockingQueue,这是一种基于数组实现的阻塞队列。ArrayBlockingQueue在初始化时需要指定容量,因此它是一个有界的阻塞队列。文章不仅介绍了其基本概念和数据结构,还深入分析了其源码实现,包括各种入队、出队、获取元素和删除元素的方法。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 使用R语言进行Foodmart数据的关联规则分析与可视化
    本文探讨了如何利用R语言中的arules和arulesViz包对Foodmart数据集进行关联规则的挖掘与可视化。文章首先介绍了数据集的基本情况,然后逐步展示了如何进行数据预处理、规则挖掘及结果的图形化呈现。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 1,滤波流程2,图像的金字塔分解(拉普拉斯金字塔)3,金字塔傅里叶频率组合滤波(本文完ÿ ... [详细]
  • 使用Python构建网页版图像编辑器
    本文详细介绍了一款基于Python开发的网页版图像编辑工具,具备多种图像处理功能,如黑白转换、铅笔素描效果等。 ... [详细]
  • 使用Pandas DataFrame探索十大城市房价与薪资对比
    在本篇文章中,我们将通过Pandas库中的DataFrame工具,深入了解中国十大城市的房价与薪资水平,探讨哪些城市的生活成本更为合理。这是学习Python数据分析系列的第82篇原创文章,预计阅读时间约为6分钟。 ... [详细]
  • 最新进展:作为最接近官方声明的信息源,本文吸引了大量关注。若需获取最新动态,请访问:lkhill.com/ccie-version-5-update ... [详细]
  • 本文详细介绍了个人电脑的组装流程,从基础的机箱准备到复杂的系统安装,每一步都提供了详细的指导,旨在帮助DIY爱好者顺利完成自己的电脑组装。 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • MVC模式下的电子取证技术初探
    本文探讨了在MVC(模型-视图-控制器)架构下进行电子取证的技术方法,通过实际案例分析,提供了详细的取证步骤和技术要点。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有