论文链接:Deep Residual Learning for Image Recognition

1 前言

1.1 背景

深度残差网络(ResNet)由微软研究院的何恺明、张祥雨、任少卿、孙剑提出。研究动机是为了解决深度网络的退化问题,不同于过去的网络是通过学习去拟合一个分布,ResNet通过学习去拟合相对于上一层输出的残差。实验表明,ResNet能够通过增加深度来提升性能,而且易于优化,参数量更少,在许多常用数据集上有非常优秀的表现。ResNet 在2015 年的ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了冠军。

配合阅读:上述作者在Identity Mappings in Deep Residual Networks中介绍了ResNet易于优化、快速收敛的原因,并且分析几种不同的残差结构

1.2 问题与挑战

深度网络在物体检测、语义分割等许多领域上都有重要的需求,它能够提取数据中更高层次的丰富的特征,但直接简单地堆积搭建深度的网络往往无法取得良好的效果,甚至会非常糟糕。

  • 梯度消失/梯度爆炸(Vanishing/Exploding Gradients):随着网络变深(层数增多),反向传播求取梯度的时候,容易发生梯度消失或梯度爆炸的问题。简单的理解就是,通过链式法则反向不断求梯度时,如果每一次求得的结果都小于1,那么相乘之后的结果就会趋近于0,造成梯度消失(梯度爆炸可对应大于1的情况)。该问题阻碍了算法初期的收敛,会使得训练速度变慢,甚至无法收敛。相关研究表明,通过适当的权重初始化和归一化(常用Batch Normalization,简称BN)可以有效解决这个问题。
  • 退化问题(Degradation Problem):该问题是ResNet聚焦解决的问题,指的是深度网络的性能不如浅层网络的问题,网络加深并没有带来性能的提高。网络退化不是由梯度消失/梯度爆炸/过拟合导致的,因为过拟合的表现是算法在训练集上的误差低,而在测试集上的误差高,但退化的网络在训练集与测试集上的误差都高。

图1.1 网络退化

1.3 思考与尝试

对于退化问题,既然浅层网络的性能优于深度网络,那么不妨做这样的一个构建。假设我们已经有了一个浅层网络,并且由输入得到了输出,那么当构建与之相对应的深度网络时,我们直接在原浅层网络的基础上连接一系列的恒等映射层(Identity Mapping),使得输入与输出完全相同,这样一来,虽然网络的层数增加了,但输出结果仍然与浅层网络的结果一致,那么至少可以保证深度网络的性能不会比浅层网络差。但这样的做法仅在理论上成立,在实际过程中,网络训练往往难以拟合恒等映射,因为在训练过程中网络总会学习某些权重、总要做出一些改变。为此,论文作者提出了一种深度残差学习框架用于解决退化问题。

2 ResNet 基本理论

2.1 残差学习(Residual Learning)

图2.1 残差块                    

假设是需要学习得到的底层映射(不一定是整个网络的,可以是局部层次的),ResNet并没有让网络层去直接拟合,而是去拟合相对于x的残差,最后将残差与输入相加就可以得到。图2.1中,曲线表示的是恒等映射(也称为Shortcut Connection短路连接/Skip Connection),左边的网络用于拟合残差,两条路径汇合时,结果相加再激活。相加(需要保证两者的shape与channel是相同的)的操作既不会增加参数,也不会增加模型复杂度。拟合残差往往比拟合底层映射要容易,网络通常难以拟合恒等映射。在某种极端情况下,当恒等映射达到最优,即上一层的输出结果已经最佳时,残差部分的权重可以直接置为0,这时恒等映射就是底层映射。这说明拟合残差确实能够实现恒等映射,在大多数情况下,恒等映射往往无法达到最优,这时就需要通过残差模块进行修正。

万能近似定理:人工智能领域的著名定理,指的是只要有一个隐含层的神经网络,理论上就可以拟合任何函数,不论这个函数有多复杂。

2.2 通过短路连接实现恒等映射(Identity Mapping by Shortcuts)

用数学公式表达图2.1中最后相加的环节就是

图2.2 短路连接效果的数学表示

其中代表激活函数。偏置(bias)通常是被忽略掉的,当添加有BN层时,则完全不需要偏置,因为它不会发挥作用,反而添加了多余的参数。

有时左侧网络与恒等映射的输出维度并不一致,这时候就需要使用一个方阵(做卷积操作)来调整恒等映射的输出维度,使得两者能够相加,这时图2.2中的式子就变为:

注意】该方阵仅用于匹配维度,在Identity Mappings in Deep Residual Networks中,实验表明采用恒等映射的效果是最好的,使用该方阵反而会增加了参数。

3 网络架构

图3.1 34层的残差网络                                                                                             
  • 以34层的残差网络为例,不同的颜色将网络分成不同的块(Block),颜色块中设置多个残差块,不同的颜色块之间涉及通道维度的变化。
  • 跨越不同颜色块时,采用stride为2的卷积核取代下采样层

图3.2 Shortcut Connection                                                         

在图3.1当中,可以发现存在两种Shortcut Connection的类型:

  • 实线类型:第一个粉色块的输出与第三个粉色块的输出channel数相同,都为64,故Shortcut Connection为恒等映射,无需进行维度匹配
  • 虚线类型:第三个粉色块的输出与第二个绿色块的输出channel数不同,前者为64,后者为128,故Shortcut Connection需要进行维度匹配

论文作者提供了两种维度匹配方式:

(A)通过Padding填充0,补充通道数。这种做法不会引入额外的参数。

(B)通过1×1的卷积核改变维度

深度残差网络 ResNet相关推荐

  1. dlibdotnet 人脸相似度源代码_使用dlib中的深度残差网络(ResNet)实现实时人脸识别 - supersayajin - 博客园...

    opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...

  2. 何恺明编年史之深度残差网络ResNet

    文章目录 前言 一.提出ResNet原因 二.深度残差模块 1.数学理论基础 2.深度网络结构 三.Pytorch代码实现 四.总结 前言 图像分类是计算机视觉任务的基石,在目标监测.图像分割等任务中 ...

  3. TF2.0深度学习实战(七):手撕深度残差网络ResNet

    写在前面:大家好!我是[AI 菌],一枚爱弹吉他的程序员.我热爱AI.热爱分享.热爱开源! 这博客是我对学习的一点总结与记录.如果您也对 深度学习.机器视觉.算法.Python.C++ 感兴趣,可以关 ...

  4. 【深度学习之ResNet】——深度残差网络—ResNet总结

    目录 论文名称:Deep Residual Learning for Image Recognition 摘要: 1.引言 2.为什么会提出ResNet残差网络呢? 3.深度残差网络结构学习(Deep ...

  5. 深度残差网络ResNet解析

    ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它"简单与实用"并存,之后很多方法都建立在ResNet50或者ResNet1 ...

  6. 深度残差网络RESNET

    一.残差神经网络--ResNet的综述 深度学习网络的深度对最后的分类和识别的效果有着很大的影响,所以正常想法就是能把网络设计的越深越好, 但是事实上却不是这样,常规的网络的堆叠(plain netw ...

  7. 【深度学习】深度残差网络ResNet

    文章目录 1 残差网络ResNet 1.1要解决的问题 1.2 残差网络结构 1.3 捷径连接 1.4 总结 1 残差网络ResNet 1.1要解决的问题   在传统CNN架构中,如果我们简单堆叠CN ...

  8. 通过深度残差网络ResNet进行图像分类(pytorch网络多网络集成配置)

    通过深度残差网络进行图像分类(pytorch网络多网络集成配置) 简介 本项目通过配置文件修改,实现pytorch的ResNet18, ResNet34, ResNet50, ResNet101, R ...

  9. 大话深度残差网络(DRN)ResNet网络原理

    -- 原文发布于本人的微信公众号"大数据与人工智能Lab"(BigdataAILab),欢迎关注. 一说起"深度学习",自然就联想到它非常显著的特点" ...

  10. CNN经典模型:深度残差网络(DRN)ResNet

    一说起"深度学习",自然就联想到它非常显著的特点"深.深.深"(重要的事说三遍),通过很深层次的网络实现准确率非常高的图像识别.语音识别等能力.因此,我们自然很 ...

最新文章

  1. java 为什么有匿名类_全面了解Java中的内部类和匿名类
  2. mysql 查询包含1或者2_Mysql:同一个表上有2个不同的查询,包含count和group by
  3. Java面试之五大框架的理解
  4. CUDA C编程权威指南 第一章
  5. C语言 FileStreaming 键盘与屏幕IO
  6. 搭建php环境,更换织梦服务器
  7. WordPress后台定制-为WooCommerce产品增加自定义字段
  8. 破解docx文档保护密码
  9. 【图像压缩】替换输入改善压缩+实现可变比特率
  10. Power算法求X的N次幂
  11. Android通过浏览器打开App并传递参数
  12. 阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices
  13. r语言中,如何将分类变量化为虚拟变量
  14. 应急响应 | Windows事件ID及解释大全
  15. AD的单端输入和查分输入
  16. 关于Qt6.2中的所有属性绑定
  17. kafka消费者--coordinate分析
  18. 硬件开发规范化管理_华为硬件工程师手册_笔记1
  19. 阅读感悟《给中年程序员的温暖人心的巴比奇的故事》
  20. 2021-08-22爱奇艺后端笔试【完犊子了-选择20题+编程4道】

热门文章

  1. matlab编制log算子程序代码,8.5.1实验1用Matlab生成LOG算子的图像.PDF
  2. python箱线图标注单位_【可视化】箱线图异变标注
  3. 用户画像数据建模方法
  4. 用计算机弹逆战的简谱,张杰逆战歌曲钢琴简谱
  5. 联想g510拆键盘的简单方法_联想G510重点笔记本拆机教程.doc
  6. 【Flask+SocketIO】如何用Flask做一个快捷迷你的局域网聊天室
  7. 小学计算机课动画制作的评课稿,小学信息技术评课稿
  8. 【计算机网络实验】使用Packet Tracer搭建网络拓扑
  9. 计算机excel乘法函数公式,excel乘法函数
  10. 20000本当当豆瓣畅销书电子书免费领取,免费送