残差连接:Hyper-Connections 与 mHC#
本页内容5 个部分
1. Residual#
1.1 核心思想#
传统神经网络里, 每一层学的是一个完整的映射 . 残差网络 (ResNet, He et al. 2015) 改成让这一层学 残差 , 然后输出:
那个 就是 skip connection (跳跃连接) 或 shortcut, 把输入直接加到几层之后的输出上.
1.2 为什么要这么做#
1. 解决深层网络退化问题. 理论上网络越深表达能力越强, 但实际上 50 层往往比 20 层还差 -- 不是过拟合, 而是优化变难了. 残差连接让 "什么都不学" 变得很容易: 只要 , 这一层就等于恒等映射, 不会让网络变差.
2. 缓解梯度消失. 反向传播时:
那个 来自 skip connection, 提供一条直接梯度通路;与其他项的抵消、激活函数及投影仍可能使总梯度消失.
3. 让损失曲面更平滑. 实证研究 (Li et al. 2018, Visualizing the Loss Landscape) 显示, 加了残差之后 loss landscape 明显更光滑, 更容易找到好的极小值.
1.3 一个 Residual Block (PyTorch 风格伪代码)#
def forward(self, x):
identity = x
out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)
out = self.conv2(out)
out = self.bn2(out)
out = out + identity # ← 残差连接
return self.relu(out)
如果 和 的维度对不上 (比如改了通道数或下采样), shortcut 上会加一个 卷积来对齐, 这叫 projection shortcut.
1.4 影响#
- ResNet 让 100+ 层的网络真正能训练, 2015 年 ImageNet 冠军, 152 层.
- Transformer 每个 sub-layer (attention、FFN) 外面都包了一层残差 + LayerNorm, 没有它训练不稳定.
- 现在几乎所有深层架构 (U-Net、Diffusion model、LLM) 都默认用残差连接, 已经是基础设施级别的组件.
一句话总结: 与其让网络学 , 不如让它学 相对于 的修正量 -- 这个看似微小的改动让 "训练任意深的网络" 从难题变成了默认操作.
2. Hyper-Connections#
残差连接虽然好用, 但存在一个两难权衡:
| 归一化位置 | 优点 | 缺点 |
|---|---|---|
| Pre-Norm () | 直接残差路径有利于优化 | 表征坍缩: 深层 hidden state 越来越相似, 深度收益递减 |
| Post-Norm () | 表征更有区分度 | 初始化与学习率更敏感,非必然梯度消失 |
具体地说, 讨论 Pre-Norm vs Post-Norm 时常常这样写:
- Pre-Norm: , 残差通路上没有 LN, 有直接梯度通路,但不保证所有方向的梯度不消失.
- Post-Norm: , 每层都要穿一次 LN, 随深度衰减.
但实际更新的是参数 , 不是 . 为什么分析 就能说明 的行为?
2.1 参数梯度的链式分解#
设第 层的参数为 , 做的运算是 . 链式法则:
- 全局因子: 从顶部传下来的梯度, 要穿过 层.
- 局部因子: 只跟第 层自己的运算有关, 与深度无关.
局部 Jacobian 取决于该层输入与参数,而输入分布也随深度和训练变化。全局因子与局部因子都影响参数梯度,不能只看其中一个就推出稳定性。
2.2 把全局因子展开#
全局因子可以再拆:
2.3 Pre-Norm#
恒等项是直接通路的贡献,但其余项可能与它抵消,因此不能从“存在 I”推出整个 Jacobian 有非零下界。最简单的反例是一般残差块 ,其总 Jacobian 为零。Pre-Norm 的结论也应结合归一化和完整 Jacobian 分析。
2.4 Post-Norm#
每层穿一次 LN:
Post-Norm 的梯度涉及归一化 Jacobian 连乘,可能放大或衰减;仅从某些方向的局部特征值小于 1,不能推出非交换矩阵乘积的所有梯度必然指数消失。
2.5 HC 的核心思想#
ByteDance Seed 团队 2024 年底的工作 (Zhu et al., Hyper-Connections), 目标是 取代残差连接, 同时拿到 Pre-Norm 和 Post-Norm 两边的好处.
把单一的 residual stream 扩展为 条并行的 hidden streams, 并让每一层用可学习的连接矩阵决定:
- 从这 条流里怎么 "读" 出输入喂给 (attention/FFN)
- 的输出怎么 "写" 回这 条流
- 条流之间怎么相互混合
设有 条并行流, 每条 维:
每一层做三件事:
2.6 为什么 是向量, 是矩阵?#
维度上的必然:
- 必须是 维向量, 因为它们在 " 条流" 和 " 的单一 维输入/输出" 之间架桥. 一头是 , 一头是 , 桥本身就是 维.
- 必须是 矩阵, 因为它做的是 条流 条流的内部重组. 两头都是 , 桥就是 .
如果把 也降成向量 (等价于 , 对角阵), 更新就变成:
此时残差分支本身不直接混合各条流,但 读入和 写回仍通过共享的 耦合它们,因此并不等于独立残差网络。完整矩阵 额外提供直接跨流的线性混合。
矩阵 的非对角项才是 hyper-connection 真正多出来的东西: 它允许第 条流从第 条流 "取信息". 比如:
- 某条流可以专门保留浅层原始信息 ( 里它对自己权重接近 , 其它流权重接近 )
- 某条流可以做 "深层加工", 里它从其它流大量吸收信号
- 两条流甚至可以在某层 swap
把参数特殊化一下就能退回普通残差:
所以 的对角项扮演的就是 "传统残差里的那个 ", 而 off-diagonal 项 hyper-connection 相对 residual 的真正增量. 把 限制为对角阵会删掉直接跨流混合,但是否值得采用仍需消融实验。
2.7 Static vs Dynamic#
- Static Hyper-Connections (SHC): 连接权重 是纯参数, 与输入无关.
- Dynamic Hyper-Connections (DHC): 连接权重由当前 token 的 hidden state 动态生成 (类似一个小 router). 表达力更强, 效果也更好, 但多一点参数和计算.
2.8 为什么有效 (直觉)#
- 多条流: 不同的流可以扮演不同角色 -- 有的保留浅层信息 (防坍缩), 有的承载深层加工后的信号 (保性能), 不再被迫挤在一条 residual stream 里.
- 可学习路由: 每层自己决定从哪条流读、写到哪条流, 相当于在深度方向上多了一种 soft 的 "层间注意力".
- 保留恒等通路: 矩阵里包含了 identity 成分, 所以梯度依然能直通到底层, 没丢残差的核心好处.
2.9 实证#
- LLM 预训练: 同等参数量下, Pre-Norm + Hyper-Connections 比 Pre-Norm 残差收敛更快、最终 loss 更低, 论文里报告等价于约 的训练加速.
- 视觉任务 (ViT、图像生成) 也有一致的提升.
- 推理开销很小: 一般取 左右就够, 额外 FLOPs 主要是几个小矩阵乘.
2.10 要点回顾#
残差连接 一条 hidden stream 固定的恒等加法; Hyper-Connections 条 hidden stream 可学习 (甚至动态) 的层间路由. 它把 "如何把过去的信息和当前层的输出融合" 这件事从硬编码变成了可学的, 从而绕开 Pre-Norm/Post-Norm 的二选一困境.
3. mHC: Manifold-Constrained Hyper-Connections#
DeepSeek-AI 于 2025 年 12 月首次发布的工作 (Xie et al., arXiv 2512.24880). 这篇直接回答了 " 是矩阵, 那它能随便取吗?" -- 答案是 不能, 它必须落在一个特定的流形上.
3.1 HC 在 scale 上的问题#
把 HC 多层展开 (论文 Eq.4):
令 、。按乘法顺序定义 ,空乘积为 ,则
动态映射时,这些矩阵沿当前前向轨迹取值;求导还需包含它们对输入的依赖。
跟普通 residual 的展开 对比:
- residual 里浅层信号 是 直接 传到深层的 (系数为 , identity mapping).
- HC 里浅层信号要穿过 . 是无约束矩阵, 连乘 次之后这个 product 既不接近 , 也没界 -- 信号可能被显著放大或衰减.
实测数据: 在 27B 模型上, 复合映射 的 "Amax Gain" 峰值达到 3000 (理想值是 ), 训练在 12k 步附近 loss 出现尖峰, gradient norm 也跟着炸. 即: HC 砸碎了 residual 的 identity mapping 性质, scale 一上来就不稳.
3.2 解决方法: 把 约束到 Birkhoff polytope 上#
mHC 强制 必须是 doubly stochastic matrix (双随机矩阵): 每一个行/列和都为 , 元素非负.
这个集合叫 Birkhoff polytope -- 所有 置换矩阵的凸包.
3.3 为什么偏偏是双随机矩阵?#
三个性质, 每一个都是为大规模训练稳定性量身定做的:
1. Non-expansion(固定残差混合不放大范数)
双随机矩阵的谱范数 , 固定 时,该线性混合 non-expansive,但不是保持所有向量范数:例如均匀平均矩阵会消去流间差异。动态 的总 Jacobian 还包含 ,加上非线性分支后,不能由此保证整个网络的梯度不放大/不消失。
2. Compositional Closure (深度也不会爆炸)
双随机矩阵的乘积仍是双随机矩阵. 这意味着 不管乘多少层, 都还在这个 manifold 里, 谱范数永远 . 这正是 HC 缺失的 "跨层不发散" 性质.
3. 退化回 residual
当 , 双随机条件退化为标量 , , 完全恢复了 residual 的 identity mapping. 所以 mHC 是 residual 的严格泛化: 把 推广为 doubly stochastic matrix.
几何直观: 是若干 permutation matrix 的 convex combination -- 把 条流之间的混合解释成 "软的置换", 反复施加就是稳健的特征融合.
另外 也被约束为 非负 (用 sigmoid), 防止正负系数相消时的 signal cancellation.
3.4 怎么把矩阵投到 Birkhoff polytope? Sinkhorn-Knopp#
经典做法 (Sinkhorn & Knopp 1967):
- 先把矩阵指数化保证非负:
- 交替按行归一化、按列归一化:
正矩阵满足适当条件时可收敛到双随机缩放。固定 20 次与浮点算术只给近似结果,应监控行/列和残差;这不是任意矩阵到该集合的欧氏正交投影。
完整的层操作 (论文 Eq.7-9):
3.5 是怎么被 "学" 出来的? (注意: 不是 projected GD)#
先对齐符号: 我们前面 HC 一节里写的 , 就是 mHC 论文里的 -- 同一个 " 条流互相混合" 的 矩阵.
一个常见的误解: " 是参数, 每步梯度下降之后再投影到 Birkhoff" (这就是经典的 projected gradient descent).
mHC 不是 这么做的. 根本不是被直接存储的参数, 真正被存储的是无约束的 . 在每次 forward 时 临时算出来:
forward (每层每个 token):
raw = α^res · mat(x · φ^res) + b^res # 由参数 + 输入算原始矩阵
H^res = SinkhornKnopp(raw) # 投到 Birkhoff (forward 计算图的一部分)
用 H^res 做 HC 更新
backward:
Sinkhorn-Knopp 是可微的, 梯度直接穿过它
更新的是 φ^res, α^res, b^res (普通无约束 SGD/Adam)
所以 没有显式的 "projection step" -- 投影本身就是 forward 计算图里的一个可微算子, 跟 ReLU、softmax 同级.
3.6 跟 softmax 的类比#
这个 pattern 你其实很熟, 只是平时没意识到:
| 输入 | 投影算子 | 输出落在 | 真正学的参数 | |
|---|---|---|---|---|
| Attention | logits | softmax | 单纯形 (行和 ) | |
| mHC | raw matrix | Sinkhorn-Knopp | Birkhoff polytope (行 列和 ) |
注意力里你不会说 "学一个概率分布然后投影", 你是学 logits, 让 softmax 在 forward 把它投到单纯形上. Sinkhorn-Knopp 就是 softmax 在 二维约束 (行和 列和 ) 下的推广版本.
3.7 为什么不用 projected GD?#
- 是 input-dependent 的 (DHC 形式): 每个 token 的 都不一样, 根本没法存一个统一的 当作参数. 因此本文采用输入依赖参数化;这是一种设计选择,不排除其他受约束参数化。
- Differentiable projection 让梯度信息更丰富: raw matrix 的梯度直接告诉你 "该往哪个方向调 才能让投影后的 更好". 两者优化的变量与约束不同,不能直接断言 projected GD 的梯度“信息量更少”。
3.8 工程实现#
朴素实现 mHC 慢且费显存. 论文做了大量底层优化:
- Kernel Fusion (TileLang): 把 RMSNorm、线性投影、bias、sigmoid、Sinkhorn 都融合到少数几个 fused kernel 里.
- Recomputing: 丢掉 mHC 中间激活, 反向时按块 () 重算.
- DualPipe 通信重叠: -stream residual 的 PP 通信量是 倍, 他们扩展了 DualPipe schedule, 把 kernel 放在 high-priority compute stream 上, 跟 attention/MLP 的通信重叠.
最终 时 训练只多了 时间开销.
3.9 实证 (27B MoE 模型, DeepSeek-V3 架构)#
稳定性:
- HC 在 12k 步左右出现 loss 尖峰, gradient norm 不稳.
- mHC 全程稳定, gradient norm 跟纯 baseline residual 几乎一样.
- 复合映射的 Amax Gain: HC 峰值 ; mHC 上限约 -- 降了三个数量级.
性能 (27B, 相对 baseline residual 和 HC, 零/少样本):
| Benchmark | Baseline | HC | mHC |
|---|---|---|---|
| BBH | 43.8 | 48.9 | 51.0 |
| DROP | 47.0 | 51.6 | 53.9 |
| GSM8K | 46.7 | 53.2 | 53.8 |
| HellaSwag | 73.7 | 74.3 | 74.7 |
| MMLU | 59.0 | 63.0 | 63.4 |
| TriviaQA | 54.3 | 56.3 | 57.6 |
mHC 相对 HC 在推理类任务 (BBH +2.1, DROP +2.3) 改善尤其明显.
Scaling: 3B / 9B / 27B 三档下, mHC 相对 baseline 的优势在 compute scaling 曲线上保持稳定, 没有衰减.
3.10 一句话回到主线#
residual HC mHC 是这样一条线:
也就是说, 不光得是矩阵 (HC 的回答, 表达力), 它还得是 doubly stochastic 矩阵 (mHC 的回答, 稳定性). 这类约束旨在保留 HC 的多流表达力, 又恢复了 residual 在 scale 上 identity-mapping 的稳定性 (连乘不发散).
4. 参考资料与边界#
mHC 原论文。上述性能数字是论文相应配置的报告值,未在本文独立复现。Birkhoff polytope 是凸多面体,不应把整个含边界的集合直接当作光滑流形;“manifold-constrained”沿用论文名称。双随机约束控制残差混合的范数上界,不保证整体训练稳定或信息无损。
延伸阅读#
- mHC 与 TE 在 H200 上的环境排障:在记录的 DSW 环境中,怎样配置并验证一次可运行训练?