恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
【自用】DeepSeek V4架构解读-mHC
首页
资讯中心
/
【自用】DeepSeek V4架构解读-mHC
【自用】DeepSeek V4架构解读-mHC
发布时间:2026/10/17 6:44:36
一、前序1、残差连接transformer每层做的就是xl1xlF(xl)x_{l1}x_l F(x_l)xl1xlF(xl)这条xlx_lxl的捷径叫残差。作用是让梯度能直接从顶层传到底层不会在几十层的堆叠中消失。2、残差流把x1,x2,⋯ ,xlx_1,x_2,\cdots,x_lx1,x2,⋯,xl这些一路往上传的状态看成一条主干道每一层都在往这个主干道上加东西。残差流的宽度hidden size d。3、谱范数矩阵M作用到任何向量上最多把向量『拉长』多少倍——就是它的最大奇异值∣∣M∣∣2||M||_2∣∣M∣∣2。谱范数≤1意味着『这个矩阵作用到谁身上都不会让它变大』。二、为什么要有hyper-connection普通残差的工作方式一条宽度为d的主干道每层往上面加一个向量。带来的问题主干道只有一条所有层都往这一条d维向量上叠加信号。浅层的『低级特征』和深层的『高级语义『全挤在一个d维空间里打架。读写权完全平权每一层都以11的强度读主干道、以11的强度写回去。没法让哪些层『多读少写』或『只读不写』。hyper-connectionsHC的想法把主干道从『1条d维』扩成『nhcn_{hc}nhc条d维』。v4中nhcn_{hc}nhc4所以主干道变成4条并行的d维轨道。然后给每一层配三个小矩阵A、B、C负责『读/搅拌/写』公式Xl1BlXlClFl(AlXl)X_{l1} B_lX_lC_lF_l(A_lX_l)Xl1BlXlClFl(AlXl)对照普通残差xl1xlF(xl)x_{l1}x_l F(x_l)xl1xlF(xl)普通残差相当于A1,B1,C1完全平权HC中ABC可学让『读/搅拌/写』可调模型想强调哪条轨道就强调哪条关键三个小矩阵非常小nhcn_{hc}nhc4时A是1x4B是4x4C是4x1几乎不增加参数但给残差流新增了一个『宽度』维度可以调。HC的问题ds在训v4时遇到深堆几十层后数值会爆。why因为B_l是4x4的自由矩阵如果它的最大奇异值1那么x_l每过一层就被放大一点几十层累乘主干道的数值就炸了。反向传播同理。三、mHC把B锁在『双随机矩阵』流形上mHC的洞察很干脆B自由就会爆那就给B加约束逼它的谱范数≤1。1、双随机矩阵是什么一个nxn矩阵M叫双随机矩阵doubly stochastic如果满足三个条件每个元素≥0每一行加起来1每一列加起来1举一个3x3的例子0.5 0.3 0.20.2 0.5 0.30.3 0.2 0.5验证行和都是1列和都是1元素都非负。所有这样的nxn矩阵组成的集合叫Birkhoff polytype伯克霍夫多胞形记作M。它是一个流形——可以理解为n2n^2n2维空间里的一块『曲面』矩阵在这块曲面上游走。2、为什么锁在这个流形上就不会爆三个数学事实共同保证稳定性事实1双随机矩阵的谱范数小于等于1.直觉证明双随机矩阵的行和是1且元素非负意味着它是一个『概率混合』——把输入向量的各分量按概率权重加权平均。平均永远不会让最大分量变大所以作用到任何向量上都不会让它变长。形式上||Bx||≤||x||。这直接保证BX_l永远不会比X_l更大。前向不爆。事实2反向梯度也受控反向传播要乘BTB^TBT而BTB^TBT也是双随机矩阵行和列和1这对约束对称所以梯度回传时也不扩张。反向也不爆。事实3集合M在矩阵乘法下封闭。两个双随机矩阵相乘结果还是双随机矩阵。意味着BL⋅BL−1⋅⋯⋅B1B_L \cdot B_{L-1} \cdot \cdots \cdot B_1BL⋅BL−1⋅⋯⋅B1累乘几十层后整个链条的谱范数依然≤1.一句话总结把B关在双随机矩阵的笼子里不管模型堆多深、怎么训残差流都不会炸。四、B是从网络『学』出来的怎么保证它在流形上这是mHC工程实现的关键。你不能把『必须是双随机』直接写进反向传播会破坏梯度。解决方法分两步**步骤A**先让网络自由地生成一个原始的B̃_l没有约束什么值都行。**步骤B**用一个投影算法把B̃_l变成离它最近的双随机矩阵B_l再拿B_l去做残差更新。这个投影算法叫Sinkhorn-Knopp迭代。1、Sinkhorn-Knopp算法的核心思想问题给一个正矩阵如何把它变成双随机矩阵办法反复做两件事——①把每一行除以它的行和-行和变成1但可能破坏列和②把每一列除以它的列和-列和变成1但可能破坏行和③回到①循环奇迹这个过程会收敛。行归一化和列归一化会越来越接近『同时成立』最后得到一个真正的双随机矩阵。2、mHC实际做法PDF 式 8 对应的伪代码defproject_to_doubly_stochastic(B_tilde,iters20):# 先取 exp 保证正数可微且和距离最近的双随机矩阵数学上关联Mexp(B_tilde)for_inrange(iters):MM/M.sum(axis1,keepdimsTrue)# 行归一化MM/M.sum(axis0,keepdimsTrue)# 列归一化returnM# 这个就是约束后的 B_l整个投影过程可微——可以走反向传播梯度会穿过20次迭代回到B̃。所以B̃会被学习只要它输出的每个样本都会被这层Skinhorn投影掰弯到流形上。四、完整的mHC前向流程重点拆解1、三套参数都是『动态静态』组合式3-5动态部分从当前输入X̂_l 算出来所以每个样本、每个token都有自己的ABC静态部分可学习的固定偏置SpreS^{pre}Spre、SresS^{res}Sres、SpostS^{post}Spost门控因子α可学习的小标量初始化为很小的值——意思是『训练开始时几乎等同于普通残差慢慢再学复杂的动态』A和C只用sigmoid约束式6-7A σ(Ã)落在[0,1]保证读取是非负的加权C 2·σ(C̃)落在[0,2]保证写入非负且有界C 2σ(C̃)的2是为了让C的默认值正好是1.0使训练初期mHC退化为普通残差连接xF(x)保证稳定起步。A后面有Layer F的归一化兜底不需要这种对齐所以只用 σ 就够了。为什么要非负放置A或C里出现正负相抵的大值『信号抵消』同样是稳定性考虑只有B需要真正的流形约束因为B是4x4的『主干道之间搅拌』矩阵会被连乘很多次每层一次所以最容易爆、也最需要谱函数≤1的强保证。A和C只读一次写一次不连乘sigmoid就够了。2、三组公式整体说明A、B、C不是直接随机初始化后开始学而是每一层、每一个token都当场生成一组新的。PDF3-5给出三个生成公式三个公式的共同结构每条公式都是同一个模板原始矩阵 门控标量 α · (输入 · 投影矩阵 W) 静态偏置 S↑ ↑ ↑gate训练初期 动态部分 静态部分很小后面放开 随 token 变 所有 token 共享为什么要这样『动态静态』组合只用静态-A/B/C固定所有token共用一组读写权重丧失灵活性只用动态-训练初期动态部分是随机的会直接破坏残差流动态静态门控α训练初期α≈0公式退化为Ã ≈ S固定随训练α增长动态部分才逐渐生效——既稳定又保留灵活性3、详解A~lαpre⋅(X^l⋅Wpre)SpreÃ_l α^{pre} · (X̂_l · W^{pre}) S^{pre}A~lαpre⋅(X^l⋅Wpre)Spre第一步设计动机——A应该怎么生成A是『把4条track读成1条d维向量』的权重。要生成A有三种设计路径路径1-固定A让A是一个学出来的常数向量所有token共用。问题没有灵活性不同token明明该从不同track读信息却被强行统一。路径2-完全动态A让 A MLP(X̂_l)每个token都算一个自己的A。问题训练初期MLP是随机的输出乱七八糟会破坏残差流而且参数量大。路径3mhc的选择动态静态的混合A的原始值一个小的α乘以『根据输入算的动态量』一个学出来的静态偏置好处静态偏置S提供一个『默认值』训练开始时已经是合理的读取方式动态部分让每个token有微调空间α是门控因子初始化是很小的值比如0.001——训练初期几乎等于S接近固定随着训练α变大动态部分才逐渐起作用这个”从固定开始 → 慢慢学动态”的策略保证训练初期稳定。第二步拆每个符号第三步数值走查训练刚开始假设αpreα^{pre}αpre0.001SpreS^{pre}Spre [0.5, 0.5, 0.5, 0.5]X̂_l · W^pre ≈ [3.2, -1.7, 0.8, 2.1] 动态部分随便一个值α^pre · (…) ≈ [0.0032, -0.0017, 0.0008, 0.0021] 被 α 压得很小S^pre [0.5032, 0.4983, 0.5008, 0.5021] 基本等于 Sσ(Ã_l) A_l ≈ [0.623, 0.622, 0.623, 0.623] 接近均匀-此时A几乎是固定的均匀读取动态部分贡献极小。训练中后期假设αpreα^{pre}αpre被学到了0.8X̂_l · W^pre ≈ [3.2, -1.7, 0.8, 2.1]α^pre · (…) ≈ [2.56, -1.36, 0.64, 1.68] 被放大S^pre [3.06, -0.86, 1.14, 2.18] S 变得相对次要σ(Ã_l) A_l ≈ [0.955, 0.297, 0.758, 0.898] 出现明显的 track 选择偏好-此时不同token会对不同track有不同偏好A真正『动态』起来。第四步一句话直觉Ã_l 公式 “预设一个默认读取模式 S再让网络学会在此基础上根据输入做微调微调幅度由 α 逐步放开”。B和C的公式结构完全一样只是W、S、α各自独立而且B的中间结果要reshape呈矩阵。4、B̃_l 里为什么要 reshape三组公式里只有 B 的生成用了 reshapePDF 里记作 Mat(·)A 和 C 都没有 reshape为什么只有 B 要核心原因一句话B必须是一个4x4的矩阵但线性层X̂_l · W^res 只能产出一个扁平向量 (1, 16)所以要 reshape 成 (4, 4) 才能当矩阵用。五、为什么这事值得单独搞一个创新表面看 mHC 只是 HC 上的一个工程修补但它在 V4 里的意义是1、v4堆了61层pro)/43层flash。层数越多残差稳定性越敏感。HC在20层可能没事61层就爆了。2、v4用muon优化器muon的更新比adamW更激进直接正交化梯度对数值稳定性要求更高。HC的不稳定性在muon下被放大。3、v4用fp8/fp4混合精度低精度下任何放大都会被量化误差进一步放大。谱范数严格≤1变成硬需求。4、mhc的代价sinkhorn迭代20次动态参数生成4条并行轨道——活化内存和流水线通信都增加。所以 mHC 不是锦上添花而是”想要 61 层 Muon FP4 长上下文”这个组合拳能打下来的必要基础。