主题
JavaGuide 无对应专题,二哥与小林都讲透了。对比二哥《MoE 是什么?》《Flash 激活参数比 Pro 小,能力为什么反超?》与小林《MoE 混合专家模型》《Post-Training 全景》。
两版对比
MoE 是什么,两边同一张图:把 Transformer 每层的 FFN 拆成 N 个「专家」加一个 Router,每个 token 只激活 Top-K 个。二哥的医院比喻最好背(256 位专科医生 + 1 位全科,导诊台挑 6 位对口,全科负责语法常识这类通用知识——即共享专家);小林补了结构细节(Router 是个线性层打分 + softmax + Top-K)和设计哲学:总参数大、激活参数小,学得多跑得快。
关键反差,小林独有且必背:显存按总参数走,推理速度按激活参数走——所有专家都要常驻显存(671B 全量,FP16 约 1.3TB),但每个 token 只算激活的 37B,延迟接近 37B 的 Dense 模型。二哥的数字案例可作佐证:V4 Flash 284B 总参 / 13B 激活,激活比例不到 3%。
训练难点,小林独有:专家不平衡是著名难题——Router 偏爱某几个专家,其他专家躺平;解法有负载均衡损失、Expert Choice(让专家挑 token)、DeepSeek 的 Auxiliary-Loss-Free(动态调偏置项不引入额外损失)。还有 Router 训不稳和 All-to-All 通信开销两大坑。
后训练为什么能让小激活参数反超(二哥的核心论证):预训练是读书,后训练是考前专项刷题——SFT 教「卷子长什么样」,偏好优化教「哪条调用序列有坑」,强化学习(GRPO)在可验证的任务里试错。关键洞察:Agent 能力(规划、工具选择、错误恢复、长程追踪)预训练学不到,因为优化目标根本不同——预训练是预测下一个词,Agent 要在真实环境里做决策;新手和老司机过弯的差距不在发动机在策略。案例:架构一个参数没动,只重做后训练,DeepSWE 从 7.3 飙到 54.4,13B 激活参数逼平闭源旗舰。
小林在 post-training 上的体系:SFT → RLHF/PPO → DPO → GRPO 的族谱关系,比二哥的三步划分更细,作为追问深水区。
最优题解
MoE 就是把每层的前馈网络拆成几十到几百个「专家」,加一个路由器给每个 token 挑最对口的 K 个,再配一个所有 token 都路过的共享专家管通用知识。设计哲学一句话:总参数大、激活参数小——总参数代表知识量,激活参数决定推理成本。但有个反直觉的工程现实:显存按总参数走(所有专家常驻),速度按激活参数走,所以 MoE 省算力不省显存。
为什么 Agent 场景特别受益?一个任务几十上百次模型调用,每次都省一点,成本差距被任务链条放大。而 Agent 能力本身跟参数量关系不大——规划、工具选择、错误恢复这些能力预训练学不到,预训练的目标是预测下一个词,Agent 要的是真实环境里的决策。所以架构不动、只重做后训练(SFT 教格式、偏好优化教取舍、强化学习在可验证任务里试错),激活参数小四倍的模型就能反超。2026 年的模型竞争已经从「谁参数多」变成「谁后训练做得好」,选模型先看 Agent 专项跑分和价格,参数量排最后。
追问链
追问:专家不平衡是什么,怎么解决? 参考答:Router 偏爱少数专家,其他专家得不到训练,恶性循环后模型实际只用一两个专家。解法是训练时加负载均衡约束——常见的辅助损失、反向的 Expert Choice 路由,DeepSeek 用免辅助损失的动态偏置调整,对主任务干扰更小。
追问:为什么显存按总参数走? 参考答:Router 可能把 token 路由给任何一个专家,所有专家必须常驻显存,不然路由到没加载的就算不了。这也解释了为什么 MoE 部署门槛高、批量吞吐还受跨卡 All-to-All 通信拖累。
我的理解
这组题把「模型架构」和「训练方法」两条线拧成一个问题:为什么 13B 激活参数能打 49B——MoE 负责「学得多跑得快」,后训练负责「学得对」。小林的「显存按总参数、速度按激活参数」是必须背死的反直觉句;二哥的「新手老司机」比喻和 DeepSWE 案例用来开场。两家的数字(V4 的 284B/13B、DeepSWE 7.3→54.4)都是转述技术报告,引用时注明出处口径。