残差连接为什么能帮助训练深层网络?
简化版
残差连接把子层输出写成 y=x+F(x),为信息和梯度提供恒等捷径,使深层网络更容易学习接近恒等的变换。相加要求形状一致;通道或分辨率改变时需投影,且归一化位置决定梯度主路径。
详细版
-
残差学习的是相对输入的修正,而非从头重建完整映射。
-
反向梯度包含一条系数为 1 的直接路径,可缓解深层退化。
-
捷径不是保证梯度永不消失,F 分支和非线性仍可能不稳定。
-
shape 不同可用 1×1 stride 投影,但这条捷径不再是纯恒等。
-
Transformer Pre-LN 与 Post-LN 的训练稳定性差异来自主路径结构。
完整版教学
一、恒等路径让深度成为可选择的修正
若新增层没有帮助,残差块只需把 F 学到接近 0,输出即可接近 x;普通堆叠层要直接拟合恒等映射更困难。
梯度 dy/dx = I + dF/dx,即便残差分支局部导数较小,仍有 I 传回。
但连续缩放、归一化与数值误差仍会影响长链。
二、底层机制与公式
y = x + F(x;theta)
dL/dx = dL/dy * (I + dF/dx)
projection: y = W_s x + F(x)
三、带数字的推演
若残差分支输出 [0.1,-0.2]、输入 [2,3],输出为 [2.1,2.8]。
当 F 初始接近 0,100 个块也可近似传递输入,而非每层重新编码。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| 恒等捷径 | 无额外参数、梯度直接 | 要求形状一致 |
| 投影捷径 | 对齐通道/步幅 | 增加参数且非纯恒等 |
| Dense 连接 | 拼接历史特征 | 通道和显存增长 |
五、执行流程
输入 x -> 主分支 F(x) -----------------+
-> 恒等/投影 shortcut -----------+ -> 相加 -> 激活/下一块
六、边界条件与工程代价
相加前两支的空间尺寸、通道和 dtype 必须完全兼容。
广播虽然可能让代码运行,却会悄悄改变语义,应显式断言 shape。
极深网络常用残差缩放、合适初始化或 Pre-LN 控制 F 分支幅度。
捷径存在不代表可以忽略学习率和归一化。
记忆钩子:残差块的核心不是“多加一次 x”,而是让网络学习修正 F,并给梯度保留 I。
七、常见误区与追问
-
误区:残差连接让梯度绝对不会消失。 它提供直接项,但整体训练仍受其他算子和数值影响。
-
追问:为什么 F 学 0 比普通层学恒等容易? 残差参数接近零即可保持输入。
-
误区:shape 不同也能直接相加。 必须投影或调整采样使各维一致。
-
追问:1×1 投影做什么? 同时对齐通道数,并可用 stride 对齐空间尺寸。
-
追问:Pre-LN 有何关系? 归一化放在残差分支内,使主捷径更接近无阻恒等路径。
八、加强记忆
残差块的核心不是“多加一次 x”,而是让网络学习修正 F,并给梯度保留 I。
回答时一定检查形状对齐、投影代价和归一化位置。