《Deep Residual Learning for Image Recognition》阅读笔记

news2025/1/31 8:15:02

论文标题

《Deep Residual Learning for Image Recognition》

  • 撑起CV界半边天的论文
  • Residual :主要思想,残差。

作者

何恺明,超级大佬。微软亚研院属实是人才辈出的地方。

初读

摘要

  • 提问题:

    更深层次的神经网络更难训练。

  • 提方案:

    提出了残差网络解决深层网络训练的问题。这也就是本文的主题。

    用 reference 的残差函数替代了 unreferenced 的函数。

  • 概况主要内容:

    通过实验证明残差的有效性。甚至在 CIFAR-10 上试到了 1000 层。

  • 秀成果:

    • 低复杂度:比 VGG 深 8 倍但复杂度更低。
    • 高精度:
      • 在 ImageNet 测试集上实现了 3.57% 的误差
      • 在 COCO 目标检测数据集上获得了 28% 的相对改进

结论

这篇文章比较别致,没有写结论。主要是受限于 CVPR 对论文篇幅的限制,把最后一段给了目标检测而没有写结论。为啥不再单写一篇目标检测的文章。

再读

Section 1 Introduction

  • 第一段主题:深度卷积好

    深度卷积神经网络好,好就好在能很深

  • 第二段主题:质疑“深就是好?

    稍微深点就遇到了梯度消失/爆炸的问题,这个问题通过初始化正则和中间正则解决

  • 第三段主题:深反倒不好

    网络深了精度反而会下降,深度深了之后训练误差和测试误差都上升了,说明变差还不是过拟合的锅。

    在这里插入图片描述

  • 第四段主题:深带来的问题

    新添加的层是恒等映射(identity mapping)[TODO],按理说不应该更差,但是现实就是优化不动。

  • 第五段主题:引入残差学习框架

    让残差块拟合 F ( X ) = H ( x ) − x F(X)=H(x)-x F(X)=H(x)x,而不是 H ( x ) H(x) H(x),最终再进行 F ( x ) + x F(x)+x F(x)+x 。假设残差映射优于原始映射。

    在这里插入图片描述

  • 第六段主题:残差学习的实现不会使模型复杂化

    上述的 F ( x ) + x F(x)+x F(x)+x 操作通过有捷径连接的前馈型神经网络实现。不会增加参数量和模型复杂度,仍可以由 SGD 进行优化。

  • 第七段主题:实验验证

    经过全面的实验显示:

    • 残差网络更容易优化
    • 残差网络可以从深度中获得精度增益
  • 第八段主题:超深层数探索

    在比较简单的 CIFAR-10 数据集上实验了超千层的模型。

  • 第九段主题:再次展示成果

    • 有史以来最深
    • 比 VGG 深,但是复杂度更低
    • 在 ImageNet 测试集上实现了 3.57% 的误差
    • 在 COCO 目标检测数据集上获得了 28% 的相对改进
    • 认为残差这一思想是通用的,在其他视觉或非视觉问题都应该能够应用。

Section 2 Related Work

简单讲了和本文工作相关的方法。

  • 残差表示(Residual Representations)

    对于矢量量化,编码残差矢量比编码原始矢量更有效。良好的重构或预处理可以简化优化过程。

  • 捷径连接(Shortcut Connections)

    MLPs中对捷径连接的早期实践是添加从网络输入连接到输出的线性层。或使一些中间层直接连接到辅助分类器,以解决梯度消失/爆炸。

    此外,不同于 highway networks 中有时会关闭的门控函数,本文模型没什么门。总是学习残差函数,标识快捷键永远不会关闭,所有信息始终都会被传递,还需要学习其他残余函数。

Section 3 Deep Residual Learning

Residual Learning

残差学习

  • 第一段:残差映射

    不是像传统的那样让堆叠的层逼近 H(x),而是明确让这些层逼近残差函数 F(x):= H(x)-x。根据万能近似定理来说,两种形式都应能够渐近地逼近所需的函数,但学习的难易程度有所不同。

  • 第二、三段:残差的好处

    退化现象表明求解器在用多个非线性层逼近恒等映射时可能存在困难。通过残差学习的重构,如果恒等映射是最佳的,残差模块只需要拟合零映射。

    即使恒等映射不是最佳的,后面的网络也只需要拟合前面网络的输出与期望函数的残差,这比起恒等映射要容易。

Identity Mapping by Shortcuts

通过快捷方式进行恒等映射

  • 第一段:残差块结构

    描述了图2,实际就是再描述一遍残差,车轱辘话来回说,还是拟合 H(x)-x,最后再加回 x,用一下 Relu。

  • 第二段:残差不增加复杂度

    残差没有引入额外的参数和计算复杂度,深度宽度都一样,这一点也提供了和不使用残差模型对比的条件(控制变量)。

  • 第三段:恒等映射就足够了

    实验表明,后面用恒等映射效果是最好的,引入参数还会增加额外的复杂度。只有需要匹配维度的时候才会给恒等映射加上权重。

  • 第四段:残差层数

    两层或者三层残差就足够了,但是不能只有一层,只有一层就和线性层很像了,效果不好。

  • 第五段:残差适用于卷积

    上面为了方便而使用的全连接表示,实际上可以表示卷积层,在两个特征映射上逐个通道执行逐元素加法。

Network Architectures

网络体系结构

对比了带残差的和不带残差的

  • 无残差网络:
    • 类似VGG网络:
      • 3 × 3 3\times 3 3×3 卷积
      • 每个块里卷积层数一致
      • 大小减半时通道加倍
      • 通过步长为2的卷积层执行下采样
      • 以全局平均池化层和带有softmax的1000路全连接层结束
    • 用了残差之后甚至参数量比VGG还要少,VGG好臃肿。
  • 残差网络:
    • 其余的一模一样,只是带上了残差。
    • 当维度增加时,下采样有两种方案:
      • 不够的用0填充,此方案不必引入新的参数
      • 1 × 1 1\times 1 1×1 的卷积层卷积,

Implementation

实施

具体试验方案:

  • 调整图像大小,随机采样其较短的一面以进行比例增强
  • 从图像或其水平翻转中随机采样224×224作物,本文主要进行标准的10种裁剪测试方法
  • 并减去每像素均值,本文采用了多尺度裁剪和特征融合
  • 使用标准色彩增强
  • 在每次卷积之后和激活之前采用批归一化,而不使用 dropout
  • 使用最小批量为256的SGD
  • 学习率从0.1开始,当误差平稳时除以10

Section 4 Experiments

ImageNet Classification

ImageNet分类

本节主要讲了实验结果

介绍数据集ImageNet
  • 包含1000个类。在128万张训练图像上训练模型,并在50k验证图像上进行评估。
  • 在测试服务器报告的10万张测试图像上获得最终结果,评估了top-1和top-5的错误率
普通网络和残差网络对比
  • 普通网络:

  • 较深的34层普通网络比较浅的18层普通网络具有更高的验证误差

    • 18-layer 错误率是 27.94%
    • 34-layer 错误率是 28.54%
  • 出现了退化现象:

    即使18层普通网络的解空间是34层普通网络的子空间,在整个训练过程中34层普通网络具有较高的训练误差。

  • 不是梯度问题导致的

    普通网络也使用了BN,有非零方差。数据不会挤在一起。前向传播反向传播也都正常。更多轮次的迭代也不能解决,钉死这是退化而不是别的事儿。

  • 猜测:

    我们推测深层的普通网络的收敛速度可能呈指数级降低,这会影响到减少训练误差。将来将研究这种优化困难的原因。

  • 残差网络:

    • 再次强调已经控制变量了,除了加了残差,在参数量之类别的方面都一样
    • 34 层 ResNet 表现出较低的训练误差,验证了残差学习在极深系统上的有效性。
    • 18-layer 错误率是 27.88%
    • 34-layer 错误率是 25.04%
    • 此外,带残差的网络收敛更快。

在这里插入图片描述

恒等映射和投影短链接对比
  • 三个方案:
    • A)零填充短链接用于增加维度,并且所有短链接都是无参数的(与表2和右图4相同);
    • B)投影短链接用于增加维度,其他短链接是恒等的。
    • C)所有短链接都是投影。
  • 结果:
    • B比A稍好。作者认为是因为A中的零填充维度没有残差学习。
    • C比B好一点,作者认为是由于投影快捷方式引入的额外参数。
  • 结论:
    • A/B/C之间的细微差异表明,投影捷径对于解决退化问题并不是必不可少的。
    • 为了那一点精度增加参数量可能得不偿失,因此本文的其余部分中不会使用选项C来减少内存/时间的复杂性和模型大小。
Deeper Bottleneck Architectures

本小节主要是介绍引入Bottleneck 结构使网络更深。

  • 思想:先降维后升维

    在这里插入图片描述

  • 使用恒等映射

    • 因为短链接连接到两个高维端。如果用投影参数和复杂度会翻倍
  • 更深的残差网络

    • 50层ResNet
      • 替换了具有3层瓶颈块的34层网,形成了50层ResNet
      • 使用选项B来增加尺寸。该模型具有38亿个FLOP。
    • 101层和152层ResNet:
      • 通过使用更多的3层块来构建101层和152层ResNet(表1)。
      • 值得注意的是,尽管深度显着增加,但152层ResNet(113亿个FLOP)的复杂度仍低于VGG-16/19网(153.96亿个FLOP)。
  • 引入残差之后,更深确实更好

    • 50/101/152层ResNet比34层ResNet准确度高。
    • 没有观察到退化问题,因此深度的增加大大提高了精度。所有评估指标都证明了深度的好处

CIFAR-10 and Analysis

本节主要是在更简单的CIFAR-10数据集上测试,把深度拉到了恐怖的1202层。

  • 使用简单架构:不为刷榜,只为极致的深
    • 网络输入为32×32图像,仍然是每像素减去均值。
    • 分别在大小为{32,16,8}的特征图上使用具有3×3卷积的6n层堆栈,每个特征图尺寸为2n层
    • 卷积核的数量分别为{16,32,64}
    • 通过步幅为2的卷积执行二次采样
    • 仍然以全局平均池,10路全连接层和softmax结尾
    • shortcut用A方案,这样最简单
  • 结果:
    • 依然是普通网络会退化
    • 引入残差则会越深越好
  • 110层残差网络的特殊处理
    • 先使用0.01的学习率来预热训练,直到训练误差低于80%(约400次迭代),返回0.1的学习率继续训练

三读

未完待续。

个人感想

  • 本文的实验设计非常透彻
    • 通过观察各个细节,先是排除了是过拟合的影响,再排除了梯度爆炸/消失的影响,从而确定了深层网络的问题在于模型退化。
    • 再通过严格的控制变量的比较有无残差的模型,360度无死角的验证了残差就是能解决退化问题,值得学习。
  • 数据和模型都是有上限的
    • 数据本身决定了问题上限,这个数据的最优结果就在那里摆着,模型只是在不断逼近这个上限。
    • 模型结构决定了模型的上限,调参也就是再不断逼近这个上限。不加残差的模型就算调参调的再好也会撞上退化这堵墙,引入残差才是真正的提高了模型的上限。
  • 感觉这篇论文的参考文献就像论文阅读指南,都是值得一读的精品论文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于unaipp生成的vue3项目开启微信云函数所遇到的问题

使用uniapp创建的vue3项目,需要用到H5静态页面跳转小程序的时候(具体操作看微信开发文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/jump-miniprogram.html),会用到微信开发者工…

Linux基本配置与用户创建

文章目录 一.Linux的配置二.Linux用户的创建 一.Linux的配置 Linux是一款类UNIX的操作系统,一般指的是Linux内核加GUN套件。Linux系统稳定,而且是开源软件,应用范围很广,很受欢迎。为了能学习Linux我们需要配置一个Linux系统&…

LeetCode讲解篇之198. 打家劫舍

LeetCode讲解篇之198. 打家劫舍 文章目录 LeetCode讲解篇之198. 打家劫舍题目描述题解思路题解代码 题目描述 题解思路 该问题可以通过递推来完成 递推公式: 前n间房的最大金额 max(前n-1间房的最大金额, 前n-2间房的最大金额第n-1间房的最…

蓝桥杯双周赛算法心得——三带一(暴力枚举)

大家好,我是晴天学长,枚举思想,需要的小伙伴可以关注支持一下哦!后续会继续更新的。 1) .三带一 2) .算法思路 1.通过Scanner读取输入的整数n,表示接下来有n个字符串需要处理。 2.使用循环遍历每个字符串:…

2023版 STM32实战10 内部Flash读写

简介和注意事项 -1-STM32内部提供了闪存区域,用来存储用户代码和自定义数据 -2-F1系列的写入最少两字节(半字) -3-每个地址存8位数据 -4-写入之前需要解锁,写完需要上锁 -5-读取不需要解锁 存储器分布 以下三张图可清楚的…

SLAM从入门到精通(bresenham绘制算法)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,学术界和工业界对于slam的要求是不一样的。前者要求robot在运动的过程中,同步实现定位和制图的操作。但是工业…

罗德施瓦兹频谱仪使用笔记

本文主要介绍罗德频谱仪的两个重要参数RBW和VBW,以及测量设置,以帮助初学者理解频谱解析以及频谱仪的具体使用。 一、什么是RBW和VBW,它们对测量得到结果的影响。 在罗德施瓦兹频谱仪的频谱测量中,有两个参数设置用得比较多&…

机器视觉工程师越学习越谦虚-庆幸自己始终保持清醒

目录 ​这么多年的职场生涯,不断的学习,不断的进取,不断追求新的梦想。一直学习,越学习,越感觉自己的不足,自我感觉越无知,越谦虚。所以孔子讲“不耻下问”、“三人行必有我师”,像释…

芯片学习记录MP2144

MP2144 芯片介绍 MP2144是一款具有内部功率MOSFET的单片降压开关模式转换器。它可以从2.5V到-5.5V的输入电压实现高达2A的连续输出电流,具有出色的负载和线路调节。输出电压可以调节到低至0.6V。 恒定导通时间控制方案提供快速瞬态响应并简化环路稳定。故障状态保…

__main__文件学习测试如下

参考博客 https://www.jb51.net/article/251567.htm test01.py # https://www.jb51.net/article/251567.htmdef step():print(__name__)print("step1 买菜""step2 洗菜""step3 切菜""step4 炒菜")if __name__ __main__:print(准备制…

【统计学概念】初学者指南:了解置信区间

一、说明 什么是置信区间?如何将概率转化成信心度?信心度如何去工作?这些初步的统计概念需要明晰,然后才能应用统计模型,然后是贝叶斯推理,我们将逐步深入这些概念。 二、总体与样本个体统计 总体是研究人…

自定义Docker镜像--Jupyterlab

概述 自定义Jupyterlab镜像,为deployment做准备 步骤 下载基础镜像:centos:7.9.2009 docker search centos:7.9.2009 docker pull centos:7.9.2009 启动容器 部署应用 # 启动容器 docker run -it --name test centos:7.9.2009 bash# 在容器内部署…

windows 10LTSC安装微软应用商店(理论上适用于所有windows10)

LTSC-Add-MicrosoftStore-2019.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供LTSC-Add-MicrosoftStore-2019.zip最新版正式版官方版绿色版下载,LTSC-Add-MicrosoftStore-2019.zip安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://w…

习题2.17

很简单的一个提 代码如下 (defn last-pair[a](if (empty? (rest a))(first a)(last-pair (rest a) ))) 获取列表最后一个元素,递归的办法如上。

WLAN 无线案例(AC配置模板)

实验说明: 无线用户VLAN 30 192.168.30.0/24 AP和AC用VLAN 20 192.168.20.0/24 有线网段 VLAN 10 192.168.10.0/24 步骤一:全网互通 sw1: sysname sw1 # vlan batch 10 20 30 # dhcp enable # ip pool 20 gateway-list 192.168.20.1…

PHP基础语法(上)

目录 前言 一、基础语法 1.1 标记 1.2 输出语句 1.2.1 echo 1.2.2 print 1.3 注释 1.3.1 单行注释 1.3.2 多行注释 1.4 标识符 1.5 关键字 二、数据与运算 2.1 常量 2.1.1 常量的定义和使用 2.1.2 预定义常量 2.2 变量 2.2.1 变量的赋值 2.2.2 超全局变量 2.3 数据类型 2.3.1 …

Python 中的 DNS 查找

本文将讨论 DNS 和 DNS 查找的概念。 之后,我们讨论使用 Python 进行 DNS 查找的方法。 什么是 DNS DNS(域名系统)将域名转换为公共IP地址。 DNS 服务器将任何网站的域名转换为该网站主机服务器的公共 IP。 DNS查询 DNS 查找是一个过程&…

微信小程序 uniapp+vue线上洗衣店业务管理系统演89iu2

本课题意在设计一种系统的、基于用户体验的线上洗衣服务模式,具有如下的研究意义: (1)为用户提供更简单、便捷的洗衣服务模式; (2)为智能柜的盈利模式提供了新的方向; (3)通过线上系统、智能柜与洗衣工厂结合的方式,为洗衣企业构建了一套节 省人力成本的…

X86_64 栈和函数调用

引言 大家都知道函数调用是通过栈来实现的,而且知道在栈中存放着该函数的局部变量。但是对于栈的实现细节可能不一定清楚。本文将介绍一下在 x86 平台下函数栈是如何实现的。 1、x86-64 汇编 Intel 系列处理器通常称为x86,目前常用的笔记本或台式机都是…

常见场景面试题:BitMap、布隆过滤器

typora-copy-images-to: imgs位图 BitMap BitMap 到底用于解决什么问题? BitMap 常常用于解决一些数据量比较大的问题,比如说对于1千万个整数,整数的范围在 1~100000000,对于一个整数 x ,我们怎么知道在不在这1千万个整…