Skip to content
大模型算法实战教程
Main Navigation
第零部分 前置知识与环境准备
第一部分 硬件与系统基础
第二部分 PyTorch 核心算法
第三部分 Triton 算子开发
第四部分 CUDA C++ 与系统优化
专题讨论
组队学习
Appearance
Menu
Return to top
On this page
06 MoE Router这章,为什么说“传统初学者容易犯的错误是先选 Top-K 的 logits,再做 Softmax”?先选 Top K 和后选 Top K,它都是选了前 K 个值,最后再对这 K 个值的概率做 Softmax 归一化,理论上概率权重是一致的呀
第一轮讨论
Q1: 我并没有看懂大模型的解释,对话几轮后感觉越问越偏。softmax并不能改变大小关系,而且最后就是选最高的K个,为什么会说先topK会导致“完全忽略了落选专家(即使概率极低)携带的相对信息”,先softmax后不也topK只取了K个专家的信息吗?
A1: 没做softmax,哪来的总和为1的概率值呢,
A2: 也就是取了k个选项之后剩下的再softmax会导致最后的概率变了(是的,等于还没排序就扔掉一大批了)
A3: 那些topk以外的选项,虽然没有用他们,但是它们是客观存在的,影响了其他选项的概率值
第二轮讨论
Q2: 不能先 Top K 再做 Softmax ,是不是因为 gate 的梯度会断掉呀?比如说先选了 Top K 之后再做 Softmax,对于没有选中的专家,他们的 logits 在这一个 step 中没有参与运算,所以得到的梯度是 0,导致gate中对大多数专家的链路无法进行权重更新,我举了长尾的和这个相对均衡一点的,算出来的结果好像都基本一致
A4: 我觉得问题在于:没被选中的那几个moe,是否会影响最终的权重分布。你先选,就没参与最终的分布,先softmax再选,那就参与了
A5: 在很多 MoE 实现里,更推荐先做全体 Experts 的 Softmax,再 Top-k,是因为它更方便得到全局 Router probabilities,用于 weighting、Load Balancing 和训练稳定性分析。-- gpt5.5的总结
A6:一个原因是你说的没选中的专家没有被更新权重,还有个原因就是我刚才说的,教程里说的为了平衡还是会归一化这件事是发生在全softmax之后的,梯度会顺着原始softmax流到所有专家,所以top-k个专家的softmax值是不一致的
Q3: 得到这一步的结论没太明白:所以top-k个专家的softmax值是不一致的
A7: 你得到一样的权重是因为你进行了再次的归一化,但是反向传播前传播的是没有再次归一化之前的