KaiSpace
tech

DeepSeek mHC详解

Original source

最后关于HC到mHC的地方讲的不是很好,我在这里补充一下:
Screenshot_20260828_164006.png

mHC 没有改变 HC 的基本数据流

(h1,h2,,hn)mixAttention/FFN写回多个 stream(h_1,h_2,\dots,h_n) \rightarrow \text{mix} \rightarrow \text{Attention/FFN} \rightarrow \text{写回多个 stream}

1. HC 的问题:HresH^{res} 完全自由

假设 n=2n=2

[h1h2]=[a11a21a12a22]Hres[h1h2]+Attention output\begin{bmatrix} h'_1\\ h'_2 \end{bmatrix} = \underbrace{ \begin{bmatrix} a_{11} & a_{21}\\ a_{12} & a_{22} \end{bmatrix}}_{H^{res}} \begin{bmatrix} h_1\\ h_2 \end{bmatrix} +\text{Attention output}

在普通 HC 中,这四个数基本可以自由学习。

于是可能学成:

Hres=[1.30.70.41.2]H^{res}= \begin{bmatrix} 1.3 & 0.7\\ 0.4 & 1.2 \end{bmatrix}

那么:

h1=1.3h1+0.7h2h'_1=1.3h_1+0.7h_2

信号明显被放大。

更麻烦的是,Transformer 有几十层:

HLresH2resH1resH^{res}_{L}\cdots H^{res}_{2}H^{res}_{1}

这些矩阵一直乘,最后可能把信号放大到几十、几百甚至几千倍;论文里确实观察到了 HC 的 composite mapping 出现极大的 gain,并伴随训练不稳定。


2. mHC:强迫 HresH^{res} 成为 doubly stochastic matrix

mHC 最核心的修改就是:

Hres 的所有元素0\boxed{ H^{res}\text{ 的所有元素}\ge 0 }

而且:

每一行和=1,每一列和=1\boxed{ \text{每一行和}=1,\qquad \text{每一列和}=1 }

例如:

Hres=[0.80.20.20.8]H^{res}= \begin{bmatrix} 0.8&0.2\\ 0.2&0.8 \end{bmatrix}

这是允许的。

于是:

h1=0.8h1+0.2h2h'_1=0.8h_1+0.2h_2
h2=0.2h1+0.8h2h'_2=0.2h_1+0.8h_2

注意发生了什么:

它仍然允许 h1,h2h_1,h_2 互相交流,但只能做“加权平均式”的 mixing。

不会出现:

h1=3h12h2h'_1=3h_1-2h_2

这种疯狂放大/抵消。

这类矩阵叫 doubly stochastic matrix(双随机矩阵),集合构成 Birkhoff polytope。mHC 用 Sinkhorn-Knopp 迭代把原始学习出的矩阵投影到这个集合中。


3. 为什么这样就稳定了?

最漂亮的地方就在这里。

假如:

A=[0.80.20.20.8]A= \begin{bmatrix} 0.8&0.2\\ 0.2&0.8 \end{bmatrix}

下一层:

B=[0.70.30.30.7]B= \begin{bmatrix} 0.7&0.3\\ 0.3&0.7 \end{bmatrix}

那么:

BABA

仍然是 doubly stochastic matrix。

所以不管:

Layer 1
   ↓ Hres_1
Layer 2
   ↓ Hres_2
Layer 3
   ↓ Hres_3
...
Layer 100

最终:

H100resH1resH^{res}_{100}\cdots H^{res}_1

依然满足:

row sum=1,column sum=1\text{row sum}=1,\qquad \text{column sum}=1

而且 spectral norm 不超过 1,因此不会通过 residual routing 不断把信号放大。论文把这种性质称为 compositional closure 和 norm preservation。

4. 另外 HpreH^{pre}HpostH^{post} 也被约束了

HC 原本有三个东西:

Hpre,Hres,HpostH^{pre},\quad H^{res},\quad H^{post}

mHC 对它们分别做:

Hpre=σ(H~pre)H^{pre}=\sigma(\tilde H^{pre})
Hpost=2σ(H~post)H^{post}=2\sigma(\tilde H^{post})
Hres=Sinkhorn(H~res)\boxed{ H^{res}=\operatorname{Sinkhorn}(\tilde H^{res}) }

所以 HpreH^{pre}HpostH^{post} 也变成非负,避免正负权重互相 cancellation;但最重要的修改还是 HresH^{res} 的 doubly-stochastic constraint

这里的数学证明我也不懂,我猜测都是试错试出来的。

一句话总结

mHC 本质上就是对多路 residual stream 做加权混合。以 4 路为例:Residual Mapping 用 4×44\times4 矩阵把 4 路重新加权成 4 路;Pre Mapping 用 414\to1 的权重将 4 路合成一个输入;Post Mapping 再用 141\to4 的权重把层输出写回 4 路。Decode 时 n=1n=1,Prefill 时 n>1n>1,对每个 token 独立执行同样的混合。

Comments

No comments yet.