2015年由He KaiMing 大神 提出的ResNet现在是一种经典模型。在这之前,虽然VGG的深度已经高达19层了,但是152层的ResNet真的让我们目瞪口呆。

ResNet这篇文章则是CVPR2016的best paper。
论文链接:https://arxiv.org/abs/1512.03385
code:https://github.com/KaimingHe/deep-residual-networks

首先,我们要问一个问题:
Is learning better networks as easy as stacking more layers?

很显然不是,原因有二。
一,vanishing/exploding gradients;深度会带来恶名昭著的梯度弥散/爆炸,导致系统不能收敛。然而梯度弥散/爆炸在很大程度上被normalized initialization and intermediate normalization layers处理了。
二、degradation;当深度开始增加的时候,accuracy经常会达到饱和,然后开始下降,但这并不是由于过拟合引起的。可见figure1,56-layer的error大于20-layer的error。

with the network depth increasing, accuracy gets saturated (which might be unsurprising) and then degrades rapidly

但要是就这么完了,那这篇文章就结束了。如果深度不能带来accuracy的提升,那么也就没有这篇文章什么事情了。
He kaiMing大神认为靠堆layers竟然会导致degradation,那肯定是我们堆的方式不对。因此他提出了一种基于残差块的identity mapping,通过学习残差的方式,而非直接去学习直接的映射关系。

事实证明,靠堆积残差块能够带来很好效果提升。而不断堆积plain layer却会带来很高的训练误差
残差块的两个优点:

  1. Our extremely deep residual nets are easy to optimize, but the counterpart “plain” nets (that simply stack layers) exhibit higher training error when the depth increases; 2) Our deep residual nets can easily enjoy accuracy gains from greatly increased depth, producing results substantially better than previous networks.

对比实验

Plain Network, 思想主要来自于VGG,由于小卷积核要比大卷积核更加高效,因此在plain network中一般选择3x3的filters,在设计plain Network的时候有两个设计细节:1)为了输出相同大小的特征map,在每层中将拥有相同的filters。2)为了保证每层的计算时间复杂度相同,如果特征map被缩水1/2后,我们将增加2倍的filters

Residual Network, 该网络是在Plain Network上进行添加identity shortcut。但是identity shortcut要求输入和输出feature map的相加,这也就意味着输入输出的维度要相同。但是在PlainNetwork中根据pooling一共划分了5个res区域,这跨区域连接的时候,作者给了两种想法:1)继续直接使用shortcut,对不足的特征维数直接进行补零。2)利用1x1卷积核进行升降维。


左侧是plain_Net的训练误差,右侧是ResNet的训练误差,可以看到ResNet在加大深度的同时并没有出现类似于Plain_Net的degradation.

Identity vs. Projection Shortcuts.

事实上如果输入输出的维数不统一的话,identity是会出现问题的,因为没法直接将feature map进行直接相加。在上文提到两种方法:1)对不足的特征维数直接进行补零。2)利用1x1卷积核进行升降维。

作者把维数不同的shortcuts称之为projection shortcuts

作者测试了三种方案,第一种:进行补零以达到维数统一。第二种:仅在几个维数不统一的地方进行projection升维,其他地方还是identity。第三种,全部都是projection;

上图A,B,C分别对应着1,2,3种方法。事实上C的效果要好,然而为了计算复杂度的考虑,本文不使用C方法。

Deeper Bottleneck Architectures.


先用1x1降维,3x3进行卷积,再用1x1进行升维。
事实上,deeper左边这种结构也能获得很好的效果。那么为什么要用右边这种结构呢?
主要是源自于practical,因为左边这种结构在训练时间上要比右边结构长的多。

deeper non-bottleneck ResNets (e.g., Fig. 5 left) also gain accuracy from increased depth (as shown on CIFAR-10), but are not as economical as the bottleneck ResNets. So the usage of bottleneck designs is mainly due to practical considerations.

当换成上图右边这种Bottleneck 结构的时候,可以发现152层的ResNet竟然比VGG16/19 都要少的复杂度

Cifar10 实验.

上图左边指的是Plain Net, 然而deeper的时候,会出现明显的degradation。当深度达到100+的时候,plain Net的错误率达到了60%以上。
上图中间这是ResNet,可以看到当deeper的时候,错误率也在降低,并没有出现所谓的degradation。
然而右边则显示1202layers的ResNet的错误率比101layers的错误率高,作者认为这不是degradation导致,而是由于这么大的参数量在cifar10这个小数据集上过拟合导致。

后记
ResNet整篇文章骨架清晰,而且idea很work,这个工作在深度学习上应该是一个里程碑的模型。
好了,ResNet介绍完了,敬请期待他的小姨子们。

系列文章:
【深度学习】入门理解ResNet和他的小姨子们(一)—ResNet
http://blog.csdn.net/shwan_ma/article/details/78163921
【深度学习】入门理解ResNet和他的小姨子们(二)—DenseNet
http://blog.csdn.net/shwan_ma/article/details/78165966
【深度学习】入门理解ResNet和他的小姨子们(三)—ResNeXt
http://blog.csdn.net/shwan_ma/article/details/78203020
【深度学习】入门理解ResNet和他的小姨子们(四)—WideResNet
http://blog.csdn.net/shwan_ma/article/details/78168629
【深度学习】入门理解ResNet和他的小姨子们(五)—ResNet增强版
http://blog.csdn.net/shwan_ma/article/details/78595937

【深度学习】入门理解ResNet和他的小姨子们(一)---ResNet相关推荐

  1. 深度学习入门理解——零基础数学篇(一)

    前言 本文章仅代表作者对于入门神经网络的一些总结,不涉及高深的数学知识. 将深度学习之前我们先来了解一下什么是回归问题,关于回归问题的讲解可以直接百度,这里具体来说就是要让机器观察猫的特征或者一群学生 ...

  2. 深度学习入门(三十三)卷积神经网络——ResNet

    深度学习入门(三十三)卷积神经网络--ResNet 前言 卷积神经网络--ResNet 课件 加更多的层总是改进精度吗? 残差块 ResNet块细节 不同的残差块 ResNet块 ResNet架构 总 ...

  3. 【深度学习入门基础】二、简单理解 Transformer

    [深度学习入门基础]二.简单理解 Transformer 文章目录 [深度学习入门基础]二.简单理解 Transformer 自注意力层 多头注意力 Transformer 输入(输出)嵌入 位置编码 ...

  4. 【深度学习入门-1】透彻理解卷积的三层含义:从“卷积”、到“图像卷积操作”、再到“卷积神经网络”的含义(学习笔记)

    一.写在前面 笔者在进行卷积神经网络入门的时候花了很多功夫,理解的也不够透彻,基础不牢,地动山摇.在查阅了很多资料后,发现了大佬up"王木头学科学"讲的卷积神经网络的理解,茅塞顿开 ...

  5. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  6. pytorch深度学习入门笔记

    Pytorch 深度学习入门笔记 作者:梅如你 学习来源: 公众号: 阿力阿哩哩.土堆碎念 B站视频:https://www.bilibili.com/video/BV1hE411t7RN? 中国大学 ...

  7. 深度学习入门 (九):卷积层和池化层的实现

    目录 卷积神经网络 CNN 整体结构 卷积层 全连接层存在的问题 卷积运算 乘积累加运算 偏置 填充 (padding) 步幅 (stride) 小结:卷积层的输出特征图的大小 3 维数据的卷积运算 ...

  8. 深度学习入门笔记(八):深层网络的原理

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  9. 【《深度学习入门》—— 学习笔记(二)】

    <深度学习入门>-- 学习笔记(二)_5-8章 第五章 误差反向传播法 方法一:基于数学式 - 严密简洁 方法二:基于计算图(computational graph) - 直观 5.1 计 ...

  10. 福利丨一门面向所有人的人工智能公开课:MIT 6.S191,深度学习入门

    对初学者来说,有没有易于上手,使用流行神经网络框架进行教学的深度学习课程?近日,麻省理工学院(MIT)正式开源了在线介绍性课程「MIT 6.S191:深度学习入门」.该课程包括一系列有关神经网络及其在 ...

最新文章

  1. 汇编:call指令的应用
  2. C# web api 中过滤器的使用
  3. window.print只打印了1页的原因
  4. 一、Vmware安装Centos7虚拟机
  5. python写水仙花的作文_python自动打开浏览器下载zip,并且提取内容写入excel
  6. LeetCode(合集)两数之和总结 (1,167,1346)
  7. 作者:蓝梦微, 女, 中国人民大学信息学院博士生,CCF学生会员。
  8. Project facet Java version 1.7 is not supported.解决方法
  9. api k8s restful 创建pods_Kind:一个容器创建K8S开发集群
  10. 数据分析之数据可视化
  11. SD敢达服务器源码,《sd高达wars》金手指代码 SD高达G世纪WARS金手指
  12. 守望先锋外挂(OWG)透视原理分析
  13. 研究:骇客又在合法的苹果Xcode专案上植入恶意程式
  14. Java8新特性JDK8之joining函数
  15. Hadoop流程---从tpch到hive
  16. 大数据开发工程师需要具备哪些技能?
  17. 西门子smart200和西门子伺服V90三轴程序 包括smart200PLC 程序和西门子smart触摸屏程序
  18. 戴尔计算机配置情况,戴尔灵越14(3443)lns14 r452814寸笔记本电脑的配置状况
  19. [矩阵论] Unit 3. 矩阵的分解 - 知识点整理
  20. 流式布局java_Java_流式布局、边框布局以及网格布局

热门文章

  1. python单引号打不出来_python里单引号怎么打
  2. Linux常用命令——lpq命令
  3. 基于python的Django框架 校园鲜花水果购物商城设计与实现毕业设计毕设参考
  4. 【Spring Cloud】Nacos注册中心
  5. 微信公众号添加关注后自动回复图文信息(素材)
  6. 低调做人的智慧课(附XMIND阅读笔记)
  7. 企业岗位申请表-Word简历可编辑下载
  8. unity塔防游戏怪物转向_防御之迷无限战争游戏下载-防御之迷无限战争游戏安卓版 v1.0...
  9. HHUOJ 1687 字符串的查找删除
  10. 解决k8s Error registering network: failed to acquire lease: node “master“ pod cidr not assigne