@

0. 论文链接

ResNet

1. 概述

  从AlexNet出现后,后面的模型包括VGG,GoogLe-Net等都是想办法让网络边更宽更深,因为大量的实验证明网络更深更宽它的性能会更好。比较容易想到的是一味的增加深度会使得梯度爆炸/消失,但这问题在很大程度上使用标准化初始赋值跟中间层(BN)解决。但经过实验发现,如果一味的堆叠层数,性能反而会更差(无论在训练集还是测试集上)。
  在上述背景下,作者提出了一种残差网络,即当前layer不只从上一层获取输入,也从前面某一层获取输入,这种“捷径”不会增加额外的参数或者计算量,同时可以现有的库进行构建而不用做改进。如下图:

  作者在ImageNet使用了152层的残差网络,最终获得了 3.57%的top-5 error,然后获得了各种第一。之前的工作也有与“Residual Representation” 与 “Shortcut Connections”相关的,他们的研究也证明了在不同尺度上进行残差学习有助于模型的收敛与性能, Shortcut Connections有助于防止梯度消失/爆炸(Google-Net直接连接辅助分类器)

2. 残差学习

  读了好一会才理解文章中构建残差块的动机与想法是什么,主要还是读的文章少了,对了“underlying mapping”,“identity mapping”等的理解产生了奇异,导致久久不能理解文中的表达的意思。下面详细的说一下残差学习这方面。
  首先,按照正常的想法, 在一个浅层模型加一些其他的layer他的训练错误率最高不能高过原来的浅层网络,因为如果浅层网络已经是最优的了, 那么我完全可以后面添加的layer自身映射(identity mapping),前面的layer相当于直接从最优浅层网络复制过来,这样即使是深层网络其实相当于原来的浅层网络,中间某些层来学习前面网络的某一层,学习的输入feature map本身,可是经过大量实验发现网络层增加后错误率会高不少,如下图:

  恺明大神从这种反常的线性中得到了启发,是不是对于通过几层非线性layer去学习“自身映射”有一定的困难,因此他提出了一种残差学习的方式:

假设通过几个非线性层可以拟合任意复杂函数(这也是神经网络一直讨论与争议的一个点,不过好像今年的ICML有一篇文章证明了在网络足够宽的情况下,确实可以拟合任意复杂函数),用\(H(X)\)表示一些堆叠网络层要拟合的最优映射,\(X\)表示这几层layer中第一层的输入,那么假设那一些堆叠网络层可以拟合\(H(X)\)的话,当然也可以拟合残差函数\(F(X) := H(X)-X\)(假设输入与输出的维数相同),因此原来要拟合函数也就是\(F(X) + X\),极端一点,如果自身映射是最优的,那么相对用几个堆叠的非线性网络去拟合一个identity mapping,把残差(\(F(X)\))逼近于0更容易一点。

3. Identity Mapping by shortcuts

  可以把一个残差块表示成如下所示:
\[
y = F(x, \{W_i\}) + W_sx
\]
  其中x跟y是残差块中间堆叠layer的输入与输出, \(F(x, \{W_i\})\)代表要学习的残差函数。因为这里必须保证x与 \(F(x, \{W_i\})\)输出的维度相同,因此如果维度不同可以通过\(W_s\)来调节相同的维度,残差块通常包含2,3或者更多的layers,一层相当于一个线性映射,效果不好。对于卷积层,其实就是将对应的两个feature map相加,channel by channel。

4. Network Architectures

对于网络结构,文章中的结构图十分清晰:

网络参数图:

“bottleneck” building block:

使用这种block速度更快,减少运算量,两个1x1卷积用来先减少维度让3x3计算再恢复原来的维度,这样可以减少计算。
普通网络
  遵循两个设计规则:(关于第二条看不太懂)

  1. 对于相同的尺寸的输出feature map,每层必须含有相同数量的过滤器。
  2. 如果feature map的尺寸减半,则过滤器的数量必须翻倍,以保持每层的时间复杂度。

  通过观察可以看到,网络直接通过卷积层(stride=2)进行下采样,网络末端以全局的均值池化层结束,有1000路的全连接层(Softmax激活)。含有权重的网络层的总计为34层

  另外,当输入输出尺寸发生增加时(图3中的虚线的快捷连接),我们考虑两个策略:

(a)快捷连接仍然使用自身映射,对于维度的增加用零来填补空缺。此策略不会引入额外的参数;
(b)\(W_s\)(之前公式介绍过的)被用来匹配尺寸(靠1×1的卷积完成)。

对于这两种选项,当快捷连接在两个不同大小的特征图谱上出现时,用stride=2来处理。

5. 训练细节

ImageNet中我们的实现遵循[21,40]的实践。调整图像大小,其较短的边在[256,480]之间进行随机采样,用于尺度增强[40]。224×224裁剪是从图像或其水平翻转中随机采样,并逐像素减去均值[21]。使用了[21]中的标准颜色增强。在每个卷积之后和激活之前,我们采用批量归一化(BN)[16]。我们按照[12]的方法初始化权重,从零开始训练所有的简单/残差网络。我们使用批大小为256的SGD方法。学习速度从0.1开始,当误差稳定时学习率除以10,并且模型训练高达\(60×10^4\)次迭代。我们使用的权重衰减为0.0001,动量为0.9。根据[16]的实践,我们不使用丢弃[13]。

在测试阶段,为了比较学习我们采用标准的10-crop测试[21]。对于最好的结果,我们采用如[40, 12]中的全卷积形式,并在多尺度上对分数进行平均(图像归一化,短边位于\(\{224, 256, 384, 480, 640\}\)中)。

PS: 因为要复现Resnet,所以这一段直接找了网上的翻译

6. 实验

具体可以看论文这里主要可以看几个数据,首先解释一下集中shortcut:

A 零填充捷径用来增加维度,所有的捷径都是没有参数的自身捷径
B 投影捷径用来增加维度,其他的捷径都是没有参数的自身捷径。
C 所有的捷径都是投影捷径

实验如下:

可以发现,C比BA要好很多,但是实验中大多用的是B,特别是在深度ResNet中,因为用C维度太大,时间计算量都太大。
另外比较plain Net的实验如下,可以发现没有ResNet网络更深性能反而不好:

【网络结构】Deep Residual Learning for Image Recognition(ResNet) 论文解析的更多相关文章

  1. Deep Residual Learning for Image Recognition (ResNet)

    目录 主要内容 代码 He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[C]. computer vi ...

  2. [论文阅读] Deep Residual Learning for Image Recognition(ResNet)

    ResNet网络,本文获得2016 CVPR best paper,获得了ILSVRC2015的分类任务第一名. 本篇文章解决了深度神经网络中产生的退化问题(degradation problem). ...

  3. 论文笔记——Deep Residual Learning for Image Recognition

    论文地址:Deep Residual Learning for Image Recognition ResNet--MSRA何凯明团队的Residual Networks,在2015年ImageNet ...

  4. [论文理解]Deep Residual Learning for Image Recognition

    Deep Residual Learning for Image Recognition 简介 这是何大佬的一篇非常经典的神经网络的论文,也就是大名鼎鼎的ResNet残差网络,论文主要通过构建了一种新 ...

  5. Deep Residual Learning for Image Recognition这篇文章

    作者:何凯明等,来自微软亚洲研究院: 这篇文章为CVPR的最佳论文奖:(conference on computer vision and pattern recognition) 在神经网络中,常遇 ...

  6. Deep Residual Learning for Image Recognition

    Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun           Microsoft Research {kahe, v-xiangz, v-sh ...

  7. Deep Residual Learning for Image Recognition论文笔记

    Abstract We present a residual learning framework to ease the training of networks that are substant ...

  8. Deep Residual Learning for Image Recognition(残差网络)

    深度在神经网络中有及其重要的作用,但越深的网络越难训练. 随着深度的增加,从训练一开始,梯度消失或梯度爆炸就会阻止收敛,normalized initialization和intermediate n ...

  9. ResNet——Deep Residual Learning for Image Recognition

    1. 摘要 更深的神经网络通常更难训练,作者提出了一个残差学习的框架,使得比过去深许多的的网络训连起来也很容易. 在 ImageNet 数据集上,作者设计的网络达到了 152 层,是 VGG-19 的 ...

随机推荐

  1. win下自动sftp脚本定时下载文件

    缘起一个BA与客户交流的软件.但因为数据不能通过系统直连的方式进行获取. 对方只提供每天一份全量数据到指定文件夹下,我方自动通过sftp的方式去拉取. 一个只有简单几行的操作,想必肯定是不可能需写程序 ...

  2. shell_02

    if判断: if [$? -eq 0];then echo "xxxxxxxxxxx" else echo "xxxxxxxxxxxxx" fi case判断: ...

  3. 重新编写equals()方法,hashCode()方法,以及toString(),提供自定义的相等标准,以及自描述方法

    下面给出一个实例,重新编写equals()方法,提供自定义的相等标准 public class PersonTest { public static void main(String[] args) ...

  4. Mock Server 之 moco-runner 使用指南一

    文章出处http://ju.outofmemory.cn/entry/96866 用以下命令可以启动moco-runner 服务 java -jar moco-runner-<version&g ...

  5. C# comport 打印图像

    public string GetLogo() { string logo = ""; if (!File.Exists(@"C:\bitmap.bmp")) ...

  6. OS X 10.9 Mavericks下如何安装Command Line Tools(命令行工具)

    OS X 10.9 Mavericks下如何安装Command Line Tools(命令行工具) 今天OS X 10.9 Mavericks正式发布,免费更新,立即去更新看看效果. 不过升级后安装命 ...

  7. [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程

    基于NVidia开源的nvidia/cuda image,构建适用于DeepLearning的基础image. 思路就是先把常用的东西都塞进去,再装某个框架就省事儿了. 为了体验重装系统的乐趣,所以采 ...

  8. XDU 1022 (数论筛法+前缀和)

    解法一:数论筛法+前缀和 //其实题目中f[n]的值可理解为存在多少个整数对使a*b<=n #include<cstdio> #define N 1007 #define maxn ...

  9. ruby中的instance_eval,class_eval,eval

    ruby具有在运行时执行以字符串形式保存的代码的功能设施,eval族方法 .包括Kernel#eval,Object#instance_eval,Module#class_eval. Kernel#e ...

  10. Restful风格API

    一:协议 API与用户的通信协议,总是使用HTTPS协议. 二:域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有进一步扩展,可以 ...