DeepSeek-V4.1 模型结构(7):输入端与优化器

DeepSeek-V4.1 模型结构(7):输入端与优化器

💡 原文中文,约15600字,阅读约需38分钟。
📝

内容提要

DeepSeek-V4.1在主干外有两处改动。视觉端:自研DeepSeek-ViT从零训练,采用2D-RoPE、RMSNorm、SwiGLU,经3×3 pixel-unshuffle将token数除以9,再投影到5120维;1302×1302图像占994个位置,文本与图像token各用一套MoE负载均衡偏置。优化器端:head-wise Muon按注意力头分别正交化query权重;Sinkhorn-balanced update以行列交替归一化替代Adam二阶动量,仅存一份动量即可训练196B参数的Engram表。

🔎

延伸解读

视觉编码器设计:从零训练与语言模型对齐

DeepSeek-ViT 从零训练,在标准 ViT 上做了四处改动:用 2D-RoPE 替代可学习绝对位置编码,以支持任意分辨率;用 RMSNorm 和 SwiGLU 向语言模型的做法靠拢;将 patch embedding 从卷积改为线性层,以便与 Muon 优化器兼容。这些改动体现了视觉编码器与语言主干在架构和优化上的协同设计。

图像 token 的序列化与位置预算

一张 1302×1302 的图经 14×14 patch 切分和 3×3 pixel-unshuffle 后,视觉 token 数除以 9,再投影到 5120 维。在主干序列中,图像被表示为起始符、每行视觉 token 加换行符、结束符,共占 994 个位置。config 的 max_image_tokens=1024 限制的是总位置数,而非视觉 token 数,因此方图最多 961 个视觉 token。

MoE 负载均衡:文本与图像各用一套偏置

图像 token 和文本 token 的表示分布不同,可能偏好不同的 expert。若共用一套负载均衡偏置,总负载可能看似均衡,但会掩盖模态内部的不均衡。V4.1 为文本和图像 token 分别维护一套偏置,每个 token 用自己模态的偏置选择 expert,两套偏置独立更新,从而更精细地平衡各模态的 expert 使用。

优化器创新:head-wise Muon 与 Sinkhorn-balanced

head-wise Muon 将 query 权重按注意力头切分,每个头单独正交化,使各头更新幅度不受梯度大小影响,更好处理头间梯度差异。Sinkhorn-balanced update 用行列交替归一化替代 Adam 的二阶动量,仅存一份动量即可训练 196B 参数的 Engram 表,通过配平行和列的 RMS 来稳定更新,适用于 embedding 等大矩阵。

❓

Q&A

DeepSeek-V4.1 的视觉编码器 DeepSeek-ViT 相比标准 ViT 做了哪些改动?

DeepSeek-ViT 从零训练,在标准 ViT 上改了四处:位置编码从可学习的绝对位置 embedding 改为 2D-RoPE;patch embedding 从卷积改为线性层;归一化从 LayerNorm 改为 RMSNorm(pre-norm);FFN 激活从 GELU 改为 SwiGLU。

一张 1302×1302 的图像在 DeepSeek-V4.1 主干中占多少个位置?这些位置是如何计算的?

占 994 个位置。计算过程:图像切成 14×14 的 patch,得到 93×93=8649 个 patch;经过 3×3 pixel-unshuffle 后 token 数除以 9,得到 31×31=961 个视觉 token;序列排布为起始符 + (每行视觉 token + 换行符) × 行数 + 结束符,即 1 + 31×32 + 1 = 994 个位置。

为什么 DeepSeek-V4.1 要为文本和图像 token 分别维护一套 MoE 负载均衡偏置?

因为图像 token 和文本 token 的表示分布不同,可能偏好不同的 expert。如果共用一套偏置,总负载均衡会掩盖各模态内部的不均衡,导致某些 expert 对某一模态完全未使用,且调整偏置时会相互干扰。两套偏置分别按各自模态的负载更新,互不影响。

head-wise Muon 与标准 Muon 有什么区别?它用在哪些权重上?

标准 Muon 对整个梯度矩阵做一次正交化,所有头共用一个预条件矩阵;head-wise Muon 将 query 权重按头切成 64 块,每块单独正交化,每个头有自己的预条件矩阵,使各头更新幅度相同。它用于注意力中 query 和 key 的权重(query 的展开矩阵 wq_b 按头切分)。

Sinkhorn-balanced update 的算法步骤是什么?它为什么能替代 Adam 训练大表?

算法步骤:1) 计算 Nesterov 动量;2) 屏蔽 ℓ2 范数接近零的行;3) 交替进行行和列的 ℓ2 归一化 K=11 次(奇数次行归一化,偶数次列归一化);4) 乘以 √n 换算成 RMS;5) 更新权重。它只存一份动量,不需要 Adam 的二阶动量,因此能训练 196B 参数的 Engram 表,节省显存。

DeepSeek-V4.1 中不同参数分别使用哪种优化器?

主干线性层矩阵、Engram 投影 wkv、视觉 projector 使用 Muon;注意力中 query 和 key 的权重使用 head-wise Muon;Engram 表、token embedding、LM head 使用 Sinkhorn-balanced update;RMSNorm 权重、偏置和缩放系数等非矩阵参数使用 AdamW。

🏷️

标签

➡️

继续阅读