吴恩达《深度学习》之看懂 ResNet

在深度学习的发展史上,2015 年是一个分水岭。那一年,何恺明(He Kaiming)提出了 ResNet(残差网络),一举斩获了当年 ImageNet 竞赛的所有冠军。

在各种技术面试中,关于 ResNet 的经典问题层出不穷:

问题: 为什么在普通深层网络中增加层数有时会导致训练误差反而上升?残差块(Residual block)是如何通过"恒等函数"逻辑解决这个问题的?

很多死记硬背的同学只能答出:"因为 ResNet 解决了梯度消失,能训练更深的模型。"

但如果面试官追问:"为什么层数更深时,普通网络的训练误差会'反常'地比浅层网络还要高?这真的是梯度消失的锅吗?" 很多同学就卡壳了。

今天,我们依然像剥洋葱一样,带你一步步看清何恺明当年那个极其优雅的数学直觉。

第一步:直面那个令人抓狂的反直觉现象

在理想的数学世界里,我们总是理所当然地认为:模型越深,参数量越大,拟合能力就越强。

提问: 假设我们有一个 20 层 的网络,它已经训练得非常完美了,训练误差很低。现在,我无聊地在它后面硬生生加上了 36 层毫无用处的"废话层",把它变成了一个 56 层 的网络。

如果这后加的 36 层能够完全原封不动地复制前 20 层的输出(即输入是什么,输出就是什么),那么这个 56 层网络的训练误差,理论上会比 20 层更差吗?

解析: 你的直觉一定会告诉你:当然不会 。最差的情况也就是那 36 层什么都不干,模型和 20 层一模一样嘛。这种"输入等于输出,不做任何改变"的函数,在数学上叫做恒等映射(Identity Mapping,即 f(x)=xf(x) = xf(x)=x)

然而,在 2015 年前,科学家们在做实验时却发现天塌了:56 层的普通网络(Plain Network),其训练误差居然比 20 层还要高得多!

这被称为退化问题(Degradation Problem)。它不是过拟合(因为训练误差也变高了),也不是梯度消失(因为在使用了 Batch Norm 确保梯度能传回来的情况下,它依然存在)。

既然只要把后面 36 层学成 f(x)=xf(x)=xf(x)=x 就能维持原状,为什么拥有超强拟合能力的深度网络,连这么简单的"什么都不做"都学不会?


第二步:为什么普通深层网络学不会"什么都不做"?

让我们来看看普通网络(Plain Network)的物理结构。数据 xxx 灌进去,经过第一层矩阵乘法、激活函数,再经过第二层、第三层......

提问: 假设这一层网络用 F(x)F(x)F(x) 来表示。如果神经网络想让这一层实现"恒等映射"(即输出等于输入:F(x)=xF(x) = xF(x)=x),它必须把里面的权重参数矩阵 WWW 调整成什么精准的鬼样子?在经过 ReLU 激活函数(把负数全变成 0)的摧残后,它还能完好无损地吐出原本的 xxx 吗?

解析:答案是极其困难,几乎不可能!

在非线性激活函数(如 ReLU)和层层矩阵乘法的堆叠下,让网络去精准配置权重,使得一长串复杂的数学变换恰好全部抵消,不多不少正好输出 xxx,这概率简直比在沙滩上用风吹出一座城堡还要低。

换句话说,在普通的堆叠网络里,"什么都不做(恒等映射)"其实是一个极度复杂的特技动作。网络层数越深,这个特技就越难演。最后,网络不仅没有学到新特征,反而把前面好不容易学好的特征全给传丢了,导致训练误差不降反升。

第三步:ResNet 的神来之笔------把特技变成"本能"

何恺明说,既然网络学不会恒等映射,那我们为什么不从物理结构上直接帮它一把?

于是,他设计了著名的残差块(Residual Block),在原有的普通网络旁边,拉了一条无条件通行的"小路"(Skip Connection / Shortcut):

看这个结构,现在最终的输出变成了:

Y=F(x)+xY = F(x) + xY=F(x)+x

这里的 F(x)F(x)F(x) 是原本那层网络要学的变换(即残差),而那个挂在加号后面的 +x+x+x,就是那条直接滑过去的"快捷通道"。

提问: 现在,假设我们又遇到了刚才的困境------后加的这些层其实不需要学新特征了,网络只需要维持原状(即输出 YYY 应该等于输入 xxx)。

看着这个公式 Y=F(x)+xY = F(x) + xY=F(x)+x,神经网络要付出多大的努力,才能让输出 YYY 恰好等于 xxx 呢?

推导过程:

网络根本不需要费尽心机去让某些矩阵相乘刚好抵消。它只需要偷懒,把这一层网络 F(x)F(x)F(x) 的权重全部缩减到 0(这只需要把权重 WWW 乘以一个趋近于 0 的数即可,对反向传播算法来说轻而易举)。

当 F(x)=0F(x) = 0F(x)=0 时:

Y=0+x=xY = 0 + x = xY=0+x=x

恒等映射,诞生了!

总结:用结构改变数学的难易度

你注意到这个精妙的心理学/数学转换了吗?

  • 在普通网络中: 网络要拼尽全力把参数调得极度精细,才能勉强让 F(x)=xF(x) = xF(x)=x。这叫逆水行舟
  • 在残差网络中: 网络只要偷懒躺平,把参数全躺成 0(F(x)=0F(x) = 0F(x)=0),天然就能得到 Y=xY = xY=x。这叫顺流而下

我们用一条完整的因果链来复盘全貌:

普通深层网络  ⟹  极难通过复杂矩阵和激活函数学到 F(x)=x  ⟹  特征在深层丢失,误差变糟(退化)\text{普通深层网络} \implies \text{极难通过复杂矩阵和激活函数学到 } F(x)=x \implies \text{特征在深层丢失,误差变糟(退化)}普通深层网络⟹极难通过复杂矩阵和激活函数学到 F(x)=x⟹特征在深层丢失,误差变糟(退化)

ResNet (残差网络)  ⟹  引入跳跃连接 Y=F(x)+x  ⟹  网络只需令 F(x)=0 即可轻易实现恒等映射  ⟹  确保深层网络性能有保底,绝不退化\text{ResNet (残差网络)} \implies \text{引入跳跃连接 } Y = F(x) + x \implies \text{网络只需令 } F(x)=0 \text{ 即可轻易实现恒等映射} \implies \text{确保深层网络性能有保底,绝不退化}ResNet (残差网络)⟹引入跳跃连接 Y=F(x)+x⟹网络只需令 F(x)=0 即可轻易实现恒等映射⟹确保深层网络性能有保底,绝不退化

残差块的本质,就是把"恒等映射"变成了网络的默认保障(保底机制)。如果这一层学不到更有用的新特征,那就什么都别做,把前面的成果原封不动传过去。

这样,网络哪怕叠到 1000 层,其性能也绝不会比 20 层更差。这就是用结构改变数学难易度的最高境界。

欢迎在评论区留下你的思考: 既然 ResNet 这么强大,是不是意味着我们可以无限无脑地叠加层数了呢?大模型时代它又扮演了什么角色?

相关推荐
阿拉斯攀登2 分钟前
Agent 核心架构:思考-行动-观察循环(ReAct)
人工智能·ai·agent·react
HyperAI超神经6 分钟前
活动预告|智源/TileRT/腾讯/华为/智元创新同台,共探 AI 编译的多层级协同优化
人工智能·ai 编译器·腾讯·具身智能·矩阵乘法·算子优化·华为昇腾
在水一缸10 分钟前
GLM 5.2 发布:当长上下文与智能体走向深度融合
人工智能·大模型·智能体·智谱ai·长上下文·glm-5.2
小妖同学学AI16 分钟前
AI编程 AI Ping+Cline搭建自己的编程助手!
人工智能·ai编程
星马梦缘22 分钟前
机器学习与模式识别 第十四章 神经网络中的反向传播 考点压缩
人工智能·机器学习·微分·反向传播
love530love24 分钟前
WorkBuddy + 本地 ComfyUI MCP:免订阅费的自建方案
人工智能·windows·mcp·comfy cloud
无心水30 分钟前
【全域智能营销实战】2、Spring AI 模块化架构深度解读:从 1.0 到 2.0 的演进与最佳实践
人工智能·spring·架构·harness·顶尖架构师·全域智能营销·harmess
HavenlonLabs41 分钟前
Havenlon 对抗性完整(十七):安全不是“防住攻击”,而是控制失败方式
网络·人工智能·架构·安全威胁分析·安全架构·havenlon