mHC:把残差连接推进到下一个时代
从残差到 mHC:一条清晰的三代演进路
如果你训练过深层 Transformer,一定对残差连接(Residual Connection)不陌生。它是 ResNet 留下的最重要的遗产之一,也是今天所有大语言模型的标配。
但残差连接有个根本问题:它只有一条信息流。
DeepSeek 在 2025 年连发两篇论文,把这个问题彻底讲透了。故事的三步是:
- Residual(2015):
x_{l+1} = x_l + F(x_l)— 一条流,稳定但表达弱 - HC(2024):把残差流拓宽到 n 条并行流,表达能力暴涨,但训练直接崩
- mHC(2025):给 HC 加上数学约束,又强又稳
这篇文章把这三代讲清楚,重点放在 mHC 上。
残差连接的瓶颈:一条流不够用
标准 Transformer 里,每一层的计算是这样的:
1 | x = x + Attention(Norm(x)) # 残差连接 |
Layer 0 到 Layer 42 的所有信息,全都挤在同一个向量里做加法。
浅层的语法信息、中层的语义信息、深层的推理信息,互相覆盖、互相干扰。这是残差连接的天花板。
HC(Hyper-Connections) 提出了一个很自然的想法:
为什么不把 1 条流扩成 n 条并行流,让不同深度的信息走不同的”车道”?
HC 的公式如下:
$$X_{l+1} = B_l X_l + C_l F(A_l X_l)$$
- $A_l$:把 n 条流压缩成 1 条,送给 Attention/MoE
- $F$:正常的层计算
- $C_l$:把 F 的输出扩回 n 条流
- $B_l$:n×n 矩阵,控制 n 条流之间怎么混合(残差项)
n=4 的时候,FLOPs 几乎没增加(F 只算 1 次),但信息容量翻了 4 倍。
听起来完美,对吧?
HC 的致命缺陷:训练会崩
问题出在 B_l 上。
HC 里的 B_l 是完全可学习的,没有任何约束。当模型叠到 60 层、参数量到万亿级时,这个无约束的矩阵会出问题:
多层复合后,信号被无限放大或衰减。
数学上,HC 跨层递归展开后得到:
$$x_L = \left(\prod B_i\right) x_l + \sum \left(\prod B_j\right) C_i^T F(…)$$
$\prod B_i$ 是多层 $B$ 矩阵的复合。因为 $B$ 无约束,这个复合矩阵的谱范数可以远大于 1,也可以接近 0。
实测结果(DeepSeek 27B 实验):
HC 的复合映射增益(Amax Gain Magnitude)达到 ~3000,意味着信号在前向传播中可以被放大 3000 倍。训练到第 12k 步,loss 直接 spike,梯度范数爆炸。
HC 的作者(ByteDance Seed 团队)在 ICLR 2025 发表了这个想法,但没有解决稳定性问题。
mHC:给 HC 加上”安全阀”
DeepSeek 团队在 2025 年提出的 mHC(Manifold-Constrained Hyper-Connections),只做了一件事:
把 HC 中的残差混合矩阵
B_l约束在双随机矩阵流形上。
什么是双随机矩阵?
一个 $n \times n$ 矩阵,满足:
- 所有元素非负
- 每行之和等于 $1$
- 每列之和等于 $1$
这样的矩阵,谱范数 永远 ≤ 1。也就是说,它永远不会放大信号。
而且,双随机矩阵在乘法下是封闭的:两个双随机矩阵相乘,结果还是双随机矩阵。这意味着叠 100 层,复合映射仍然稳定。
一句话:mHC = HC + 双随机约束,恢复了残差连接的恒等映射性质,同时保留了多流的表达能力。
怎么把矩阵变成双随机?Sinkhorn-Knopp 算法
mHC 的核心算法是 Sinkhorn-Knopp 迭代,操作很简单:
1 | # 输入: B_raw (4×4, 可能是负数) |
为什么第一步用 exp()?因为 B_raw 是神经网络输出的 logit,可能有负数。直接归一化会产生负权重,违反”非负”约束。exp() 把任意实数映射到正数,完美解决。
20 次迭代是实验得出的经验值,足够收敛,又不会太慢。
4 条流到底解决了什么问题?
很多人问:为什么是 4 条流?不是 2 条或 8 条?
三个核心作用:
1. 梯度高速公路
普通残差的梯度路径是 43 个乘法项的连乘,容易消失或爆炸。
4 条流提供了 4 条并行的梯度路径,一条堵了还有其他。类似 DenseNet 的思路,但高效得多(F 只算 1 次)。
2. 信息分离存储
1 | stream_0: 可能专注浅层信息(位置、语法) |
Layer 5 学到的特征,通过 B 矩阵的合理混合,可以在 Layer 30 仍然清晰可用。而在 1 条流里,这个特征早就被 25 次加法淹没了。
3. 动态容量分配
B 矩阵是输入依赖的(由当前层的 hidden state 动态生成):
- 简单 token(”the”, “a”):
B≈ 单位矩阵,4 条流基本不混合,省计算 - 复杂 token(需要深度推理):
B大幅混合,让更多层的信息参与
这是 1 条流做不到的——普通残差对所有 token 都是 $x + F(x)$。
为什么选 n=4?
论文实测:n=4 是性价比最优的点。n=2 效果不够,n=8 的 Sinkhorn 开销(8×8 矩阵 × 20 次迭代)显著增加,但收益递减。
工程优化:为什么只多 6.7% 开销?
mHC 看起来很重:每行代码都有矩阵运算、Sinkhorn 迭代、4 倍 hidden state……
但 DeepSeek 做了三件事,把开销压到了 **仅 +6.7%**:
1. Kernel Fusion(算子融合)
用 TileLang 把整个 mHC 计算——RMSNorm + 线性投影 + Sigmoid + Sinkhorn——融合成一个 CUDA kernel,减少内存读写。
2. Selective Recomputing(选择性重计算)
前向时只保存每块的第一个层输入,反向时重新计算 mHC 的中间激活。最优块大小由公式给出:
$$L_r^* \approx \sqrt{\frac{nL}{n+2}}$$
3. Overlapping with DualPipe
把 mHC 的计算和流水线通信重叠。在 DualPipe 调度中,F_post,res kernel 放到高优先级流,避免阻塞 All-to-All 通信。
实验效果:又强又稳
DeepSeek 用 27B MoE 模型做了对比实验:
| 指标 | Baseline | HC | mHC |
|---|---|---|---|
| 训练稳定性 | 稳定 | loss spike @12k步 | 稳定 |
| 最终 loss 下降 | — | +0.021 vs baseline | +0.027 vs baseline |
| 复合映射增益 | 1.0 | ~3000 | ~1.6 |
| 训练开销 | 0% | +?% | +6.7% |
下游任务(BBH / DROP / GSM8K 等 8 个 benchmark)上,mHC 全面超过 baseline 和 HC。
最重要的结论: mHC 让 1.6T 参数、60+ 层、MoE 模型能够稳定训练——这是普通 HC 做不到的。
一句话总结
mHC = HC + 双随机矩阵约束,是残差连接的最终进化形态,让万亿参数 MoE 能稳定训练。
如果你正在设计超大模型,mHC 是目前最值得考虑的残差连接方式。它不改 FLOPs,不改层计算,只改残差流的拓扑结构——但就是这一点,让深层训练从”可能崩”变成了”一定稳”。
参考资料:
- Hyper-Connections, Zhu et al., ByteDance Seed, ICLR 2025, arXiv:2409.19606
- mHC: Manifold-Constrained Hyper-Connections, Xie et al., DeepSeek, 2025, arXiv:2512.24880
- DeepSeek-V4 Technical Report, 2026
写于 2026-06-02,基于 DeepSeek-V4-Pro 代码和 mHC 原始论文整理。