第 9 步 · 给深网一条高速公路
残差网络 · ResNetResidual Network
网络越深反而越难训?给梯度一条绕过层层变换的捷径,让深层也能训——这正是第 1 步梯度消失的工程解法。
14 分钟
阅读 + 实操
2 个
交互演示
中级
难度
残差网络 · 交互演示
深度20
ResNet loss—
Plain loss—
① 残差块结构:y = F(x) + x — 数据走两条路,一条经变换 F,一条走恒等捷径,相加后梯度反向时含 +1 项
② Plain vs ResNet 深网对决:同深度同数据训练,看谁的 loss 先降下去
③ 逐层梯度范数(左=早期块,右=末期块)——Plain 衰减到近零,ResNet 靠 +1 项保持
为什么学这步?
第 1 步你见过梯度消失让深网难训。ResNet 用一个极简的工程技巧——加一条恒等捷径——彻底解决了它,让网络从几十层跃升到上百层。
📌 发生了什么
- 每块加恒等捷径 y=x+F(x)
- 梯度反向含 +1 直通项
- 深网不再梯度消失
⚠️ 常见陷阱
- 深网退化≠过拟合
- 捷径维度不匹配需 1×1 投影
- ResNet 不解决所有过拟合
✅ 本章小结
- 残差=学 H(x)=F(x)+x
- +1 项是梯度高速公路
- 呼应第 1 步梯度消失
📐 残差与梯度高速公路
残差块把目标从「直接学 H(x)」改为「学残差 F(x)=H(x)−x」。恒等映射时 F→0 即可,优化更容易;梯度反向时多了一个 +1。
连乘 N 层时,Plain 网梯度 ∝ ∏(∂Fᵢ/∂x),谱半径<1 则指数衰减;ResNet 每层多 +1,梯度 ∝ ∏(1+∂Fᵢ/∂x),即使 ∂Fᵢ 很小也至少保持 1,不衰减。
这正是上方热力图所示:Plain 早期块梯度近零(无法学习),ResNet 全程保持——深网可训的根本原因。
🎛 深度对比
拖动深度滑块,看 Plain 与 ResNet 在不同深度下的训练表现差异。
| 深度 | Plain | ResNet |
|---|---|---|
| 5 | 能训 | 能训 |
| 20 | 退化 | 稳定 |
| 40 | 难训 | 仍可训 |
💡 浅网二者差不多;越深越能体现 ResNet 的优势——这也是它登上 ImageNet 的原因。
💻 残差块前向
残差块核心(本页引擎逻辑):
// 残差块前向:y = F(x) + x
function residualBlock(x, W1, b1, W2, b2) {
const z1 = matVec(W1, x, b1); // z1 = W1·x + b1
const a1 = z1.map(v => v > 0 ? v : 0); // a1 = ReLU(z1)
const F = matVec(W2, a1, b2); // F = W2·a1 + b2
return F.map((f, i) => f + x[i]); // y = F + x (残差捷径)
}
// 反向:∂y/∂x = 1 + ∂F/∂x —— +1 项是梯度高速公路
// 堆叠 N 块 → 深网可训;Plain 网去掉 +x → 梯度随 N 衰减
📚 参考文献与延伸阅读
- He et al. (2015), Deep Residual Learning for Image Recognition, CVPR 2016 — ResNet 原论文,ImageNet 冠军
- He et al. (2016), Identity Mappings in Deep Residual Networks, ECCV 2016 — pre-activation ResNet v2,分析恒等映射
- Veit et al. (2016), Residual Networks Behave Like Ensembles of Relatively Shallow Networks — ResNet 可视作浅网集成
- 回顾 → 第 1 步 · 梯度消失:残差连接的工程解法;第 8 步 · RNN:另一种序列上的梯度消失
📝 课后练习
检验你的理解——答对为止