DL ML Learning Lab
09 / 10
第 9 步 · 给深网一条高速公路

残差网络 · ResNetResidual Network

网络越深反而越难训?给梯度一条绕过层层变换的捷径,让深层也能训——这正是第 1 步梯度消失的工程解法。

14 分钟
阅读 + 实操
2 个
交互演示
中级
难度

残差网络 · 交互演示

深度20
ResNet loss
Plain loss
① 残差块结构:y = F(x) + x — 数据走两条路,一条经变换 F,一条走恒等捷径,相加后梯度反向时含 +1 项
绿色路径是变换 F(x)=W₂·ReLU(W₁·x+b₁)+b₂,灰色虚线是恒等捷径 x。相加得 y;反向时 ∂y/∂x = 1 + ∂F/∂x,那个 +1 让梯度不随深度衰减。
② Plain vs ResNet 深网对决:同深度同数据训练,看谁的 loss 先降下去
③ 逐层梯度范数(左=早期块,右=末期块)——Plain 衰减到近零,ResNet 靠 +1 项保持
网络深度 20
深度越大,PlainNet(灰)越难训、loss 居高不下;ResNet(绿)因残差捷径保持梯度,loss 稳定下降。这正是 ResNet 让百层网络可训的关键。

为什么学这步?

第 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:另一种序列上的梯度消失

📝 课后练习

检验你的理解——答对为止