残差连接的作用:为什么深度网络离不开它

副标题 / 摘要 残差连接通过“旁路”让梯度更容易传播,是深层网络可训练的关键。本文从原理到工程实践梳理残差的作用,并给出最小 PyTorch 示例。 预计阅读时长:12~16 分钟 标签:residual、skip-connection、transformer SEO 关键词:残差连接, ResNet, Transformer 元描述:系统解释残差连接为何能提升深度网络训练稳定性,并给出可运行示例。 目标读者 想理解残差连接价值的入门读者 在深层网络训练中遇到不稳定的工程实践者 关注 Transformer/ResNet 结构设计的开发者 背景 / 动机 深层网络容易梯度消失或爆炸,训练难以收敛。 残差连接通过“恒等映射”提供一条更短的梯度通道,使深层网络可训练。 它也是 ResNet 与 Transformer 的基础结构之一。 核心概念 残差连接(Skip/Residual):输出 = 输入 + 子层变换。 恒等映射:让网络学习“增量”而非全部映射。 梯度流动:减少梯度衰减,提高可训练性。 A — Algorithm(题目与算法) 用通俗语言说明主题内容 残差连接的思路是: 如果一个深层网络难以直接学习映射 H(x),那就让它学习 F(x) = H(x) - x。 这样输出变成 x + F(x),训练更容易。 基础示例(1) 深层 MLP 加残差后 loss 更稳定、收敛更快。 基础示例(2) Transformer 每个子层都带残差,保证梯度可传播。 实践指南 / 步骤 在深层块中加入 x + f(x) 结构。 若维度不一致,用线性投影对齐。 配合 LayerNorm/RMSNorm 提升稳定性。 可运行示例(最小残差对比) import torch import torch.nn as nn torch.manual_seed(42) class PlainMLP(nn.Module): def __init__(self, dim=64, depth=6): super().__init__() layers = [] for _ in range(depth): layers += [nn.Linear(dim, dim), nn.ReLU()] self.net = nn.Sequential(*layers) def forward(self, x): return self.net(x) class ResMLP(nn.Module): def __init__(self, dim=64, depth=6): super().__init__() self.blocks = nn.ModuleList([ nn.Sequential(nn.Linear(dim, dim), nn.ReLU()) for _ in range(depth) ]) def forward(self, x): for block in self.blocks: x = x + block(x) return x x = torch.randn(8, 64) plain = PlainMLP() res = ResMLP() print(plain(x).shape, res(x).shape) 解释与原理 残差提供恒等路径,使梯度能绕过非线性层。 深层网络更容易学习“增量”,降低优化难度。 在 Transformer 中,残差 + 归一化是稳定训练核心。 C — Concepts(核心思想) 方法类型 残差连接属于架构层面的优化技巧,目的是改善训练稳定性与可扩展性。 ...

2026年1月24日 · 2 分钟 · map[name:Jeanphilo]