当前位置: 首页 > news >正文

ResNet 论文阅读(二):用传话游戏理解残差学习为什么有效

论文信息:

  • 论文标题:Deep Residual Learning for Image Recognition
  • CVPR 官方页面:CVPR 2016 Open Access Page
  • arXiv 摘要页:Deep Residual Learning for Image Recognition
  • 官方 PDF:CVPR 2016 PDF

上一篇文章里,我们从 VGG 的加深思路出发,讲到了 ResNet 要解决的核心问题:普通网络继续加深以后,可能出现退化问题,也就是网络更深了,训练误差反而更高。随后我们从公式角度理解了残差学习:

y = F(x) + x

这篇文章换一种方式,不再一上来盯着公式,而是用一个更生活化的“传话游戏”来理解 ResNet。这个类比的目标不是替代数学推导,而是帮助我们把残差学习的直觉真正吃透:为什么保留原信息,再学习一点修正量,会比每一层都重新生成完整表示更容易。

一、先把残差块翻译成传话规则

假设有五个人参加传话游戏:

A -> B -> C -> D -> E

原话是:

今天下午实验室窗外在下小雨,但屋里很安静,大家都在认真调试自己的模型。

这句话里有一个核心主干:

大家都在认真调试自己的模型

也有一些修饰信息:

今天下午 实验室窗外在下小雨 屋里很安静

如果把这句话类比成网络里的特征表示,那么主干信息就像是需要被保留下来的重要特征,修饰信息则像是在不同层之间可以继续调整和增强的细节。

现在我们分别看普通网络和 ResNet 会怎样完成这场传话。

二、普通网络:每个人都重新组织整句话

在普通网络里,可以粗略理解为每一层都要根据上一层输入,重新生成一个完整输出。类比到传话游戏里,就是每个人听到上一版后,都要靠自己的理解重新说一遍整句话。

传话过程可能变成这样:

A: 今天下午实验室窗外在下小雨,但屋里很安静,大家都在认真调试自己的模型。 B: 今天下午实验室外面在下雨,屋里很安静,大家都在调试模型。 C: 下午外面下着雨,实验室里的人都在安静地做实验。 D: 下雨天大家都在实验室里做实验,气氛很安静。 E: 雨天实验室里很安静,大家都在工作。

最后 E 说出来的句子并不是完全错误,但和原句相比,信息已经发生了明显变化:

  • 认真调试自己的模型被压缩成了工作
  • 今天下午消失了
  • 实验室窗外在下小雨变成了笼统的雨天
  • 原句里“大家在调试模型”的专业语境被削弱了

这就是普通深层网络里容易出现的一个直观问题:每一层都在做完整变换,原始信息每经过一层都可能被重新解释一次。层数少时,这种偏差可能还不明显;层数一多,信息就容易在连续变换中被削弱、扭曲或丢失。

用公式来表示,普通网络更像是:

y = F(x)

也就是说,输出完全依赖当前层学到的变换F(x)。如果当前层没有学好,后面的层只能基于这个已经偏掉的表示继续加工。

三、ResNet:先保留上一版,再做一点修改

ResNet 的传话规则不一样。它不是要求每个人都重新组织整句话,而是要求每个人先保留上一版,然后只决定自己要不要做一点小修改。

这时传话过程可能变成这样:

A: 今天下午实验室窗外在下小雨,但屋里很安静,大家都在认真调试自己的模型。 B: 我保留原句,只把“在下小雨”说得更自然一点。 今天下午实验室窗外下着小雨,但屋里很安静,大家都在认真调试自己的模型。 C: 我保留主干,只把“屋里很安静”改成“实验室里很安静”。 今天下午实验室窗外下着小雨,实验室里很安静,大家都在认真调试自己的模型。 D: 我觉得这句已经很好了,不改。 今天下午实验室窗外下着小雨,实验室里很安静,大家都在认真调试自己的模型。 E: 我只补一点语气,把“认真”换成“专心”。 今天下午实验室窗外下着小雨,实验室里很安静,大家都在专心调试自己的模型。

这一次,最后的句子仍然保留了原句最重要的含义:

大家都在调试自己的模型

它只是对局部表达做了一些调整,比如“小雨”的说法更自然,“屋里很安静”更明确为“实验室里很安静”,“认真”被换成了“专心”。

这就是残差学习最重要的直觉:

新结果 = 旧结果 + 一点修正

对应到 ResNet 的公式就是:

y = F(x) + x

这里:

  • x就像上一版原话;
  • F(x)就像这一层给出的修改意见;
  • F(x) + x就像“保留原话,再加上一点修订”。

所以 ResNet 并不是让每一层都推翻前面的表达,而是在前一层的基础上做增量更新。

四、为什么“不改”反而很重要

这个传话规则里,有一个看似不起眼但非常关键的能力:如果某个人觉得上一版已经很好,他可以选择不改。

在传话游戏里,D 的操作是:

我觉得这句已经很好了,不改。

翻译成 ResNet 的公式,就是:

F(x) = 0

于是:

y = F(x) + x y = 0 + x y = x

这就表示当前残差块可以近似变成恒等映射,也就是把输入原样传下去。

这件事正好对应 ResNet 要解决的退化问题。理论上,更深的网络至少应该可以模仿浅层网络,因为新增的层只要不改变已有表示就行。但在普通网络中,让一组卷积层精确学成“什么都不改”的恒等映射并不容易。

而在 ResNet 里,这件事被改写得更简单:

如果不需要改,就让 F(x) 接近 0

所以残差学习给深层网络提供了一个更容易达到的基线:新增层不一定非要学出复杂变换,它也可以先学会“少改一点”,甚至“暂时不改”。

五、反向传播:错误信息怎么传回来

传话游戏不只可以解释前向传播,也可以帮助我们理解反向传播。

假设老师最后检查 E 的结果,发现 E 说的是:

今天下午实验室窗外下着小雨,实验室里很安静,大家都在专心调试自己的模型。

原话是:

今天下午实验室窗外在下小雨,但屋里很安静,大家都在认真调试自己的模型。

两句话的大方向没有错,主要差别在于:

认真 -> 专心 屋里很安静 -> 实验室里很安静 在下小雨 -> 下着小雨

现在老师要把“哪里错了”这个反馈从 E 往回传给 D、C、B、A,这就像神经网络里的梯度回传。

六、普通网络的回传:每个人都很难判断是谁改偏了

在普通网络式传话里,每个人都重新组织过整句话。于是最后出了偏差时,反馈很难准确定位。

E 会对 D 说:

最后这句话和原句有点不一样,你看看是不是前面传偏了。

D 再对 C 说:

好像意思整体有点变化,但我也不确定是哪里开始变的。

C 再对 B 说:

后面说法和原句不完全一致,可能主干和细节都有点变化。

传到越前面,反馈越模糊。因为每一层都做过完整改写,前面的层很难判断:

  • 是我把主干改偏了?
  • 是后面的人把细节改丢了?
  • 是整体表达变化太大,还是只有某个局部词语变化?

对应到普通网络的梯度公式,就是:

dL/dx = dL/dy * dF(x)/dx

它表示前一层收到的梯度,完全要经过F(x)这条复杂变换路径。如果网络很深,这种变化率会一层层相乘。每层都缩小一点,就可能梯度消失;每层都放大一点,就可能梯度爆炸。

七、ResNet 的回传:主干保留,谁改了什么就检查什么

在 ResNet 式传话里,情况更清楚。

因为每个人都保留上一版,只做少量修改,所以最后回传错误时,可以更容易定位到每个人的修改。

比如老师说:

主干“大家都在调试自己的模型”是对的,只是部分修饰词发生了变化。

那么 E 很容易知道:

我主要把“认真”改成了“专心”,这个变化需要检查。

D 也很容易知道:

我没有改,所以我大概率没有引入新的偏差。

C 会知道:

我把“屋里很安静”改成了“实验室里很安静”,这是局部表达变化。

B 会知道:

我把“在下小雨”改成了“下着小雨”,这个变化也比较局部。

也就是说,ResNet 的回传更像是:

主干信息先保留,重点检查每一层额外加的修改。

对应到公式,就是:

y = F(x) + x

所以梯度回传时可以写成:

dL/dx = dL/dy * dF(x)/dx + dL/dy

这行公式可以拆成两部分理解:

dL/dy * dF(x)/dx

表示错误信号经过残差分支F(x)回传,相当于检查“这一层具体改了什么”。

dL/dy

表示错误信号可以沿着 shortcut 直接回传,相当于主干信息有一条更直接的反馈通路。

这就是 ResNet 反向传播更顺畅的原因。它不是只靠复杂变换路径传梯度,而是额外保留了一条恒等路径。这样即使残差分支在训练初期还不稳定,前面的层也仍然能收到更直接的误差信号。

八、这个类比对应到 ResNet 的哪些核心点

这个传话游戏可以帮助我们抓住 ResNet 的几个关键直觉。

第一,普通网络更像“每一层都重写全文”:

y = F(x)

如果层数变多,每一层的改写都会影响后续表达,信息可能在不断变换中逐渐偏移。

第二,ResNet 更像“保留上一版,再做少量修订”:

y = F(x) + x

这样每一层不必从零生成完整表示,而是学习相对于输入的增量。

第三,残差学习让恒等映射更容易实现:

如果 F(x) = 0,那么 y = x

这意味着当某些层暂时不需要做复杂变换时,它们可以更容易接近“不改动输入”的状态。

第四,shortcut 让梯度回传多了一条直接路径:

dL/dx = dL/dy * dF(x)/dx + dL/dy

多出来的dL/dy,就是残差连接带来的直接回传项。

九、这个类比也有边界

虽然传话游戏很好理解,但它毕竟只是类比,不能把它当成神经网络训练的完整解释。

真实的 ResNet 里,每一层不是人在主动判断“我要不要改”,而是通过损失函数和反向传播自动调整参数。网络也不是在处理自然语言句子,而是在处理高维特征图。shortcut 是否能直接相加,还要求两条路径的特征图尺寸和通道数能够匹配;如果不匹配,论文中会使用 projection shortcut 来调整维度。

因此,这个类比最适合帮助我们理解 ResNet 的直觉,而不是替代严格的网络结构和优化分析。

十、小结:用一句话记住 ResNet

如果用传话游戏来总结 ResNet,我会这样说:

普通网络像是每个人都重新说一遍整句话,ResNet 则像是每个人先保留上一版,再只修改自己认为需要调整的部分。

这句话背后的数学形式就是:

y = F(x) + x

也正因为有了这个结构,ResNet 在前向传播时更容易保留已有信息,在反向传播时也能让梯度沿着 shortcut 更直接地传回前面。它解决退化问题的关键,不是简单地“网络变深了”,而是让深层网络的每一段都从“完整重建”变成了“增量修正”。

上一篇文章更偏严谨地解释了残差学习的数学原理,这一篇则用传话游戏把直觉补上。两篇合在一起看,ResNet 最核心的思想就比较完整了:深层网络不一定要每层都重新发明表示,很多时候,学会在已有表示上少量修正,反而是更稳定、更高效的方式。

参考文献

  • He, K., Zhang, X., Ren, S., & Sun, J. (2015).Deep Residual Learning for Image Recognition. arXiv:1512.03385.
http://www.jsqmd.com/news/1398402/

相关文章:

  • NCM转MP3终极指南:用ncmdump快速解锁网易云音乐加密文件,重获你的音频自由
  • 缓冲区溢出攻击原理与实践:从栈溢出到现代防御机制
  • Sunshine游戏串流快速上手指南:免费开源自托管,从安装到调优一次跑通
  • AI办公助理深度解析:从对话工具到流程引擎的价值跃迁
  • Spring Boot数据转换实战:从反射到MapStruct的性能与安全演进
  • Allegro 17.4转Altium Designer实战:完整流程与避坑指南
  • 蔚蓝档案自动脚本BAAS一学就会:托管日常加按轴凹分,每天多出两小时自由时间
  • 【EU thetis_MRV网站之额外篇-履约报告篇】
  • 【移远CAT1模组】005.第一份代码--LED闪烁
  • 根治 MSVCP140.dll 缺失:Visual C++ 运行库一键安装全攻略
  • 2026年金华市漏水检测行业优质服务商 - 全域品牌推荐
  • UE Viewer 深度解析:虚幻引擎 1-4 资源查看与导出的完整实战指南
  • 向量召回变差:先查数据、切分和过滤条件
  • 把画图变成写代码:Draw.io Mermaid插件快速上手指南
  • Scrapy Pipeline 保存 MySQL 完整代码
  • 基于STM32的ThreadX+NetX Duo物联网终端
  • Bebas Neue 字体完全指南:从零上手这款免费开源标题字体
  • 蓝奏云直链解析API部署教程:一个PHP文件,三个参数,十秒拿到下载地址
  • 微博备份完整指南:如何用 Speechless 扩展把任意公开微博导出为 PDF
  • 彻底解决xapofx1_5.dll加载失败:从DirectX原理到游戏运行库修复
  • 免费开源的图像浏览器,为什么比系统自带看图工具更全能?
  • 收藏备用!2026 昆明黄金回收常见问题汇总:“三免服务 + 四红线” 合规交易,金价流程、门店挑选,一篇讲透 - 日常前沿快讯
  • 【MYSQL】MYSQL学习的一大重点:MySQL连接池原理与分析简易网站数据流动是如何进行
  • AI 能否承接企业 HR 政策答疑工作?怎样防范薪酬涉密信息与越权访问风险?:允许启用 AI,务必前置身份认证并配置分级权限
  • 一次装齐 2005 到 2022 全系列 Visual C++ 运行库,跟 MSVCP140.dll 报错说再见
  • ThreadX+GUIX工业仪表界面开发实战
  • Windows下Anki LaTeX插件配置全攻略:从环境搭建到排错优化
  • Spring Cloud 微服务契约先行:为什么 Controller 建议要实现 Feign 接口?
  • 暗黑2存档编辑器d2s-editor:3步上手,不懂十六进制也能给角色换身神装
  • Switch注入零基础教程:3步用TegraRcmGUI完成RCM注入全流程