mhc_pre_torch 的数学公式与 CUDA 代码解释

背景 mHC(multi-Head Combinatorial)是 DeepSeek V4 模型中引入的一种多头残差混合机制。它将传统 Transformer 中单一的残差向量扩展为 $M$ 个并行的残差副本(multi-head residual),并在每个 block 前后通过可学习的门控和组合矩阵对多头残差进行变换。 本文以 mhc_pre_torch 为核心,从数学公式出发逐行对照 PyTorch 代码,并延伸至 mhc_post_torch 和整个 mHC 流水线,帮助读者完整理解这一算子的设计思路与实现细节。 ...

June 1, 2026 · 5 min · 993 words

DeepSeek Attention 中为什么除以 √d_k — 从代码到数学

引言 在 Transformer 的 Scaled Dot-Product Attention 中,有一个看似简单却至关重要的操作: scores = Q @ K^T / math.sqrt(d_k) 这个 ÷√d_k 几乎出现在每一个 Attention 实现中。DeepSeek 的 MLA(Multi-head Latent Attention)也不例外。本文从 DeepSeek V4 的 vLLM 实现代码出发,深入探讨这个缩放因子的数学动机、工程实现,以及 DeepSeek 特有的优化变体。 标准 Attention 中的缩放因子 Softmax 的"饱和"问题 原始 Attention 计算公式为: Attention(Q, K, V) = softmax(QK^T / √d_k) V 设 Q、K 的每个元素是独立同分布、均值为 0、方差为 1 的随机变量。对于向量 q 和 k(维度为 d_k),其点积的均值和方差为: E[q·k] = Σ E[q_i·k_i] = 0 Var(q·k) = Σ Var(q_i·k_i) = d_k 即点积的方差正比于 d_k。当 d_k 较大时(如 128、512),点积的绝对值会很大,导致 softmax 进入梯度极小的饱和区: 当某个 x_i 远大于其他值时,e^{x_i} 会主导分母,softmax 输出接近 one-hot,梯度趋近于 0,训练难以收敛。 ...

June 1, 2026 · 4 min · 721 words