专家该大还是小?
本课一问:专家该大还是小?
这一课先不碰:专家多了以后 all-to-all 怎么变贵、怎么限制跨节点(C10 岔路 2);每个专家用 4 位存(C9 岔路)。
从已有出发
第 1 课里,贯穿例句「小明把苹果给了小王」的每个 token 在 Qwen3.8-2.4T 的一层里选 10 个专家;第 2 课保证了这些专家都在干活。还剩一个设计问题:同样的参数预算,是分成少而大的专家,还是多而小的专家?每个 token 能选出多少种不同的「专家组合」,就是这个问题的一个直接度量。
先自己设计:16 个大专家,每个 token 选 2 个
GShard、Switch 一代的做法是专家数不多、每个都很宽(和 dense FFN 一样宽)。DeepSeekMoE 论文拿「16 个专家选 2」举例:
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
每个 token 从 16 个里挑 2 个,一共只有 120 种挑法。「贯穿例句里的『苹果』需要的那部分知识」和「代码里的某种括号模式」很可能被迫挤进同一个大专家——DeepSeekMoE 把这叫知识杂糅;而每个专家都要自己学一遍通用的语言模式,叫知识冗余。
改进:细粒度切分 + 共享专家(DeepSeekMoE)
Dai 等人 2024 的两个动作:① 细粒度切分:每个专家的中间维切成 1/m,专家数变成 mN、每个 token 选 mK 个——参数总量和每 token 的计算逐项不变,组合数暴涨;② 共享专家隔离:单独留 Ks 个专家,每个 token 都经过,专门承载公共知识,让路由专家少做重复功。
DeepSeekMoE 论文自报:16B 的模型只用约 40% 的计算,达到 LLaMA2 7B 的水平 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条作者自报,与不同数据训练的 LLaMA2 比较;组合数的论证是动机,不是证明。 出处Dai et al. 2024 摘要(需联网) ↗需联网 。组合数本身是精确的 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条C(64, 8) = 4,426,165,368,BigInt 现算;参数、计算不变是按构造的恒等式。 出处待补 ,但「组合多 = 专家更专精 = 效果更好」这一环是理论动机加实验,不是定理。
2026 年的真实配置
读这张表:
- 专家越来越细:Qwen3.8-2.4T 每个专家的中间维 2048,只有 hidden 8192 的 1/4;稀疏度(路由专家 ÷ 每 token 选几个)大多在 30 到 60 之间。贯穿例句的一个 token 在这一层有 3.12 × 10²⁰ 种可能的专家组合。
- Kimi K3 的 LatentMoE:896 个路由专家、每 token 选 16 个。专家这么多,每个被选中的专家都要收到完整的 7168 维向量,通信和读专家权重的量都跟着涨;K3 先把路由那一路压到 3584 维的潜空间里再分发,共享专家仍走全宽 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条官方自报;稀疏度 56;这种极端稀疏又引出激活爆炸与负载均衡两个新问题(SiTU-GLU 在 C15,Quantile Balancing 在第 2 课)。 出处Kimi K3 §2.3(本地 PDF) ↗ 。
- 共享专家不是共识:Qwen3(2025)明确写「与 Qwen2.5-MoE 不同,Qwen3-MoE 不设共享专家」 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条报告只陈述了设计,没有给出去掉共享专家的消融数字。 出处Qwen3 技术报告 §2(需联网) ↗需联网 ;可一代之后的 Qwen3-Next / 3.5 / 3.8 又放回了 1 个(config 的 shared_expert_intermediate_size,HF 实现里乘一个 sigmoid 门)。同一家公司一年内来回改,说明这是一个实验选择,不是被证明的最优。
常见误解一:「专家是按学科分工的:一个数学专家、一个代码专家。」 不是。路由学到的分工通常在更细的 token 模式上(语法、某类子词),同一个专家会在各种领域里被点亮。Mixtral 论文统计了 The Pile 各子集的专家分配,原话是「没有观察到按主题分配专家的明显模式」,ArXiv、PubMed、哲学论文的分布非常相似;按专家给 token 上色时,Python 里的 self 这类词常被派给同一个专家——是语法结构,不是学科 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条Mixtral 8x7B(8 选 2 的粗粒度专家);细粒度专家的分工可能不同。 出处Mixtral of Experts §5(需联网) ↗需联网 。上面 SideRef 里的真路由可视化可以亲眼看。DeepSeek-V3 的图 9 倒是显示,batch 级均衡下不同领域的专家负载分布不同——那是统计上的偏好,不是「一个专家管一个学科」。
常见误解二:「组合数越多,模型一定越强。」 组合数只是「能表达多少种专家搭配」的上限;专家太细会让路由、通信、均衡都更难(K3 为此专门加了 LatentMoE 和 QB)。最终效果只能靠实验比。
常见误解三:「共享专家是 MoE 的标配。」 0 个(Qwen3、MiMo)、1 个(DeepSeek-V3 / V4.1、GLM、Qwen3.8)、2 个(DeepSeek-V2、K3)都有人用。
① 更多参数,不要更多算力(MoE)
- 解决了结构最简单:所有参数对每个 token 都生效。卡在锚点 Qwen3.8-27B 每 token 前向约 51.2 GFLOPs;同家族 2.4T 规模若是 dense,约 4.84 TFLOPs(94 倍)。
- 解决了每个 token 只算 top-k 个专家:Qwen3.8-2.4T-A95B 每 token 约 186.5 GFLOPs,是同参数 dense 的 26 分之一。卡在路由会自我强化地偏心:8 个专家全挤到 1 个时,Switch 负载损失从 0.01 升到 0.08;所有专家的权重仍要常驻显存。
- 解决了把「均衡」写进 loss,路由器被梯度推向均匀。卡在α 难调:太小拉不平,太大干扰主 loss(Switch 在 10⁻¹ 到 10⁻⁵ 之间扫;Wang 2024 的出发点)。
- 解决了偏置只改「选谁」,不进门控、不产生干扰梯度;DeepSeek-V3 前 14.3T token 用 γ = 0.001,最后 500B 设为 0。卡在固定步长在近千个专家时太慢或来回震荡(Kimi K3 报告)→ Quantile Balancing;而且统计范围(整批 vs 单条序列)比「有没有 loss」更要紧。
- 解决了同参数同计算,16 选 2 的 120 种组合变成 64 选 8 的 4,426,165,368 种;共享专家装公共知识。卡在显存账不减:Qwen3.8-2.4T 路由专家占主干参数 97.98%,BF16 权重 4.89 TB。
- 解决了Qwen3.8-2.4T 512 选 10 + 1 共享;K3 896 选 16 + LatentMoE + Quantile Balancing;V4.1 图文两套偏置。卡在共享专家 0、1、2 个都有人用(Qwen3 一个不设),稀疏度从 32 到 64 都有(GLM-5.3 与 V3 为 32、GLM-5.3-Flash 36、K2 48、Qwen3.8 51、K3 56、V4.1-Flash 64)——都是实验选择。
② 长文本:KV 与计算不再随长度等比例涨
- 解决了每个 token 都能精确回看任意一个前文 token。卡在KV ∝ 长度:锚点若 64 层全是全注意力,262,144 token 时 64 GiB。
- 解决了去掉 softmax,求和提前累加成一个固定大小的状态,与长度无关。卡在只加不减:同一个键写两次,读回的是两个值之和;状态最多装 d 对互不干扰的键值(C0 岔路)。
- 解决了写前先擦(delta)、每步衰减(门):锚点 48 层状态共 144 MiB(FP32)、与长度无关;KV 降到四分之一(262,144 时 16 GiB 对 64 GiB)。卡在剩下四分之一的全注意力层仍按长度涨;容量有限,3:1 是实验选出来的。
- 解决了每通道一个衰减;g_min = −5 让 16 token 块内累积不低于 −80,e⁸⁰ ≈ 5.5 × 10³⁴ 在 BF16 范围内(上限约 3.4 × 10³⁸),慢路径删除。卡在MiniMax M1 用线性混合、M2 又退回全注意力:大规模下多跳推理缺陷、训练受访存限制、低精度与缓存难题(官方博客)。
- 解决了lightning indexer 每个 query 只挑 top-2048 条做核心注意力。卡在省计算不省内存:KV 一条不少,每 token 48,068 B;indexer 本身仍要扫全部前文。
- 解决了V3.2 每 token 48,068 B → V4-Flash 3,514 B → V4.1-Flash 890 B(1M 时 0.87 GiB)。卡在是近似:V4.1 自陈 Bounded Replay「数学上不等价」、选择误差可能在未测过的边界情况退化。
③ 训练 4K,使用 128K
- 解决了训练与使用同一个长度,不需要任何折算。卡在注意力项随长度涨:Qwen3-32B(64 层全注意力)在 131,072 时注意力项是 6N 的 215%;早期长序列还带来梯度方差极端值(Li 2021)。
- 解决了DeepSeek-V3 的 14.8T token 全在 4K,之后两段各 1,000 步扩到 32K、128K,只占全部训练 token 的 0.84%;Llama 3 405B 六段、约 800B token。卡在长序列阶段的数据要专门配(长度上采样、领域均衡、合成跨全文任务)。
- 解决了K3:8K → 64K → 256K → 1M(NoPE 也照走课程);V4.1 注意力从头就是压缩稀疏的,直接从 64K 起训。卡在各家配方大多只公开阶段、不公开每段 token 数,无法横向比较成本。
- 解决了每个位置多学一个更远的目标;推理时当草稿,接受率 α 时每步期望产出 1 + α 个 token。卡在DeepSeek-V3 第 2 个 token 接受率 85%–90%,实测 1.8 倍 TPS;V4.1 预训练干脆去掉 MTP,没有公开消融。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 同样的参数与计算,让每个 token 能挑出更细、更多样的专家组合;把公共知识从路由专家里剥出来 |
| ② 数学上为什么可能有效? | 切细后组合数从 C(16, 2) = 120 变成 C(64, 8) = 4,426,165,368,参数与计算按构造不变 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条组合数与参数、FLOPs 的记账。 出处待补 ;「更多组合 → 更专精」是理论动机 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条论文用它解释动机,没有证明。 出处DeepSeekMoE(需联网) ↗需联网 |
| ③ 实验上为什么最后选了它? | DeepSeekMoE 16B 以约 40% 的计算追平 LLaMA2 7B;2026 年前沿几乎都是几百个细专家。共享专家有无,Qwen3 与 DeepSeek 选择相反 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条作者自报;没有同条件的跨家对照。 出处DeepSeekMoE;Qwen3 技术报告(需联网) ↗需联网 |
一句话
专家切细,同样的参数和计算能拼出多得多的组合,共享专家兜住公共部分——但这是实验选择,Qwen3 一个共享专家都不设。
先停在这里:MoE 这条线到此讲完:两本账、负载均衡、专家粒度。
再深一层:在表里比较 K3 与 Qwen3.8-2.4T 的「专家中间维 ÷ 输入维」,想想 LatentMoE 为什么要先降维再分发;再去 C10 岔路 2 看 all-to-all 的通信量由什么决定(每个 token 发往 k 个专家、跨几个节点),想一想:专家数翻倍而 k 不变时,它会不会变?
下一个缺口
FFN 这边「多参数不多算」有了;注意力那边,长文本的 KV 还能再压吗? → 第 4 课:长文本的 KV 还能再压吗?
这一问也是一个延迟兑现:锚点 Qwen3.8 的 64 层里,从 C2 起一直只讲那 16 层全注意力。另外 48 层是什么(C0 岔路只点过名)、怎么更新,下一课揭晓。
你可能会问
- 「专家能不能大小不一?」 有研究在做(异构专家、按 token 难度动态选几个专家);本课程讲到的开源旗舰都用等大的专家与固定 k。
- 「共享专家也要跨卡通信吗?」 结构上不需要,它像注意力一样在 token 所在的卡上算;见 C10 岔路 2 的「你可能会问」。
- 「前几层为什么常是 dense?」 DeepSeek-V3、GLM-5.3 的前 3 层、K3 的第 1 层用 dense FFN(config 的 first_k_dense_replace 等字段)。官方没有给出消融,常见的解释是底层特征还很通用、路由不稳定;这里只陈述事实,不当结论。