[{"data":1,"prerenderedAt":372},["ShallowReactive",2],{"article:column:/column/llm-to-agent-learning/12":3},{"id":4,"title":5,"body":6,"description":364,"extension":365,"meta":366,"navigation":367,"path":368,"seo":369,"stem":370,"__hash__":371},"column/column/llm-to-agent-learning/12.md","12｜MoE：很多参数，为什么每次只用一部分",{"type":7,"value":8,"toc":346},"minimark",[9,13,16,21,24,27,37,40,43,46,50,53,56,59,62,70,74,77,93,96,102,105,108,115,118,121,124,127,135,138,142,145,148,156,159,162,168,171,175,178,181,184,190,193,196,199,202,206,214,222,236,239,242,246,249,252,255,258,262,267,270,275,278,283,286,289,294,297,302,305,310,313,316,321,324,329,332,337,340,343],[10,11,12],"p",{},"一个模型可以有数千亿总参数，却在处理每个token时只激活其中数百亿。没有参与这一次计算的参数去了哪里？模型是不是先叫来几个不同的机器人，再把他们的答案合并？",[10,14,15],{},"本章沿着一个token的隐藏表示，走过路由、专家和合并，再算一次参数与存储。读完以后，你应该能分清总容量与单次运算，知道MoE省下了哪部分工作，以及这些节省为什么不会自动变成同样比例的提速。先修只需要第6章的前馈网络和第9章的Transformer结构。",[17,18,20],"h2",{"id":19},"_1改动发生在模型内部的哪一段","1．改动发生在模型内部的哪一段",[10,22,23],{},"回想Transformer中的两种重要计算：注意力让当前位置读取可见的其他位置；前馈网络把每个位置的表示再作变换。常见稀疏MoE把某些层原本统一使用的前馈网络，换成一组可以选择的前馈网络，称为专家。",[10,25,26],{},"这里的“专家”是一些权重矩阵及相应运算。输入是隐藏向量，输出也是隐藏向量。它没有独立对话历史，不会自己检索资料，也不先写一篇意见交给主持人。MoE属于模型内部的结构设计；多个完整模型相互交流，是另一种系统组织方式。",[10,28,29,30],{},"关键变化是条件计算：不同输入只使用部分网络。一个可学习的路由网络，根据当前隐藏表示给专家打分，再决定送到哪些专家。早期稀疏门控MoE研究已经把这一点说清楚：扩大可用参数容量，不必让每个输入都执行全部专家的运算。",[31,32,36],"a",{"href":33,"rel":34},"https://arxiv.org/abs/1701.06538",[35],"nofollow","稀疏门控MoE原论文",[10,38,39],{},"这也说明“稠密”与“稀疏”的分界不在参数有没有很多零。这里的稀疏主要指参与的路径少：对当前token，许多专家的前馈计算被跳过。那些专家的参数仍存在，下一个token可能就会选择它们。",[10,41,42],{},"专家输出能相加，还因为它们遵循兼容的向量形状。如果这一层接收四维表示，专家可以先扩展成更宽的中间表示，再变回四维；不同专家的输出才能按位置合并。它们是在同一模型里共同训练的计算模块，不能随意找两个不同模型的内部向量就直接相加。",[10,44,45],{},"层号也很重要。第十层的E1与第二十层的E1通常是两套不同权重，编号只用于区分各层内部的专家。没有特别说明时，不应把一张简化示意图理解成全模型只存在四个专家，也不能把某一层的专家数当成整模型专家模块总数。",[17,47,49],{"id":48},"_2路由怎样从分数变成一条计算路径","2．路由怎样从分数变成一条计算路径",[10,51,52],{},"设这一层有E1、E2、E3、E4四个路由专家，规定每个token只选分数最高的两个，这叫top-2。更一般的top-k，就是选k个。k是结构和训练设置的一部分，并非用户临时把它改小，就一定能保持原能力。",[10,54,55],{},"路由读取的是当前层、当前token的隐藏表示，而不是只查这个token的文字编号。同一个词在不同上下文里的表示可能不同，进入更深层后也不同，因此选择可以变化。不能画成“整篇法律文本一直交给同一位法律专家”。",[10,57,58],{},"选出专家后，还要决定怎样合并输出。我们采用一种便于手算的教学规则：将选中专家的非负分数，除以它们的分数总和，得到合计为1的权重；每个专家输出向量乘以对应权重，最后逐项相加。",[10,60,61],{},"记住这个结构比背公式更重要：先选路径，再算所选专家，最后加权合并。真实实现对打分、选择和缩放有不同规定，不能假定所有模型都使用同一套softmax或归一化顺序。路由权重表达内部组合比例，也不代表这个专家提供了多少“事实正确概率”。",[10,63,64,65],{},"部分模型另设共享专家，每个token都经过它；其输出与路由专家的结果一起组合。这样设计希望让公共模式获得共同计算路径，减少路由专家重复承担通用部分。这是一种训练意图，不保证共享专家里能找到人类可读的“常识清单”。",[31,66,69],{"href":67,"rel":68},"https://arxiv.org/abs/2401.06066",[35],"DeepSeekMoE共享专家设计",[17,71,73],{"id":72},"_3四个token亲手追踪谁参与了运算","3．四个token，亲手追踪谁参与了运算",[10,75,76],{},"现在用四个抽象token位置T1到T4演练，不给它们贴法律或医学标签。下面按E1、E2、E3、E4的顺序列出教学分数：",[78,79,80,84,87,90],"ul",{},[81,82,83],"li",{},"T1：0.60、0.30、0.08、0.02，选择E1和E2",[81,85,86],{},"T2：0.10、0.60、0.20、0.10，选择E2和E3",[81,88,89],{},"T3：0.05、0.05、0.45、0.45，选择E3和E4",[81,91,92],{},"T4：0.20、0.10、0.10、0.60，选择E1和E4",[10,94,95],{},"以T1为例，选中分数之和是0.90，因此权重分别为0.60÷0.90＝2/3和0.30÷0.90＝1/3。假设E1对这个输入的输出是［2，0］，E2输出是［0，3］，加权合并为：",[10,97,98],{},[99,100,101],"strong",{},"(2/3)×［2，0］＋(1/3)×［0，3］＝［4/3，1］",[10,103,104],{},"E3和E4不对T1执行专家前馈计算，没有两份隐藏的聊天答案等着投票。如果共享专家S对T1输出［1，1］，再相加得到［7/3，2］。这只是MoE前馈分支的教学输出，完整Transformer层还要按自身结构接回残差等运算。",[10,106,107],{},"再核对其他位置的组合权重：T2给E2和E3的是3/4、1/4；T3给E3和E4的是1/2、1/2；T4给E1和E4的是1/4、3/4。专家对不同输入通常会产生不同向量，不能把T1的［2，0］直接当成E1对所有token的固定答案。",[10,109,110],{},[111,112],"img",{"alt":113,"src":114},"12｜MoE：很多参数，为什么每次只用一部分：图1","/collections-assets/llm-to-agent-learning/acb290be2d992562bafb862bb3b4b43ec39b2d31c372d6a6c21371f4f6be076f.png",[10,116,117],{},"图1｜T1的同一个隐藏向量h既送路由评分，也进入所选专家。路由只决定选择与混合权重，E1、E2实际加工h；E3、E4不运行。共享S是独立旁路，最后加到路由混合结果上。",[10,119,120],{},"在纸上画四个专家格子，把各token名字填入：E1收到T1、T4；E2收到T1、T2；E3收到T2、T3；E4收到T3、T4。总共有4×2＝8次路由专家调用，每位恰好两次。共享专家另外处理四次。这种整齐分配是我们特意安排的，真实路由未必均匀。",[10,122,123],{},"注意“每token只选两个”不等于“这个批次总共只用两个”。本例四个token加在一起，四位路由专家全部参与。后续层还会重新选择，长回答也可能陆续使用许多不同专家。",[10,125,126],{},"再问一步：这些分工是谁教出来的？路由与专家都是模型的一部分，会在训练中随损失调整。被选中的专家从经过自己的token得到相应训练信号，路由的可学习打分也会受到训练目标影响。某专家没被T1选中，不妨碍它从同批T3获得学习机会。不同方法怎样处理离散选择和梯度有具体差别，不能把路由理解成人预先写好的一张职业分配表。",[10,128,129,130],{},"把三个对象分开，会更容易理解“可学习”：选中集合是离散决定；集合固定时的混合权重可以连续变化；专家内部参数决定每条支路输出什么。对当前选中集合，损失能经过加权和传到专家与连续权重；“排名第三突然挤进前二”的边界，却不能当作处处光滑的普通运算。均衡信号还会单独影响路由。不同方法采用不同近似、噪声或额外目标，不应画一支无条件穿过top-k的普通导数箭头。",[31,131,134],{"href":132,"rel":133},"https://arxiv.org/html/1701.06538v1#S2",[35],"原始稀疏门控研究的门控与均衡讨论",[10,136,137],{},"做纸笔实验时，可以用两种颜色分别标出“这个token走过的路径”和“整个批次走过的路径”。先只看T1，再叠上T2到T4，就会看到单token稀疏与批次覆盖广泛可以同时成立。这也解释了为什么训练一个MoE，通常不能只维护一次激活的那小部分参数。",[17,139,141],{"id":140},"_4为什么必须操心负载均衡","4．为什么必须操心负载均衡",[10,143,144],{},"把实验改一下：四个token都选择E1和E2。总调用数仍是八次，但分布变成4、4、0、0。若专家分散在不同设备上，部分设备排队，另一些设备空闲；一轮计算可能要等最拥挤的部分完成。",[10,146,147],{},"偏载还可能妨碍学习。频繁被选择的专家得到更多训练机会，冷门专家难以发挥作用；这种失衡如果持续扩大，名义上的大容量就没有被充分利用。因此，MoE训练不仅要把语言预测做好，也要让计算分配保持可用。",[10,149,150,151],{},"一种常见办法是加入负载均衡损失：除了预测目标，再对过度集中的分配增加约束。它不要求每个短句都平均派单，而是希望在适当统计范围内避免长期偏载。约束太弱可能堵车，太强也可能干扰本来有用的分工。",[31,152,155],{"href":153,"rel":154},"https://arxiv.org/abs/2101.03961",[35],"Switch Transformer研究",[10,157,158],{},"还要区分专家的容量限制与参数容量。有的实现给每个批次能送入某专家的token数设上限，超额时需要特殊处理；“超过就丢弃”不是所有MoE的共同规定。读报告应检查具体策略，不能把一个早期实现的限制推广为定义。",[10,160,161],{},"这给了我们一个容易忽略的判断：一张均匀的路由统计图，不足以证明质量好；一张不完全均匀的图，也不一定说明训练失败。需要同时看效果、拥堵程度、统计范围和系统如何处理高峰。",[10,163,164],{},[111,165],{"alt":166,"src":167},"12｜MoE：很多参数，为什么每次只用一部分：图2","/collections-assets/llm-to-agent-learning/f32613a87e9fd3ce7afee53b8029e7cc8e6ca5776df41c75c0f5e7f844afd4fb.png",[10,169,170],{},"图2｜上方按token列出被选专家，连到每位专家收到的原token索引；均匀例的次数为2、2、2、2，偏载例为4、4、0、0，总数同为8。下方示意返回后按T1、T4等原索引归位，避免把专家批次顺序误当原序列顺序。",[17,172,174],{"id":173},"_5总参数激活参数与显存是三笔账","5．总参数、激活参数与显存是三笔账",[10,176,177],{},"再构造一个假设玩具模型：公共部分共6M参数，已包含共享专家、路由及其他总是参与的模块；四个路由专家各10M。M表示一百万。这里只为记账，不对应任何真实架构配置。",[10,179,180],{},"总参数是6M＋4×10M＝46M；每个token选择两个路由专家，激活参数是6M＋2×10M＝26M，约占总数的56.5%。这个比例表达一条路径涉及多少参数，不直接表达整机耗时比例；不同模块的读写和计算性质并不相同。",[10,182,183],{},"假设所有权重每个参数用2字节保存，原始权重容量是46M×2＝92MB，这里MB按十进制百万字节计。不能只拿26M计算模型下载大小，因为另外两个专家下一次可能要用。也不能把92MB写成运行显存要求，因为还没算缓存、激活、通信缓冲和运行时开销，训练还会有梯度与优化器状态。",[10,185,186],{},[111,187],{"alt":188,"src":189},"12｜MoE：很多参数，为什么每次只用一部分：图3","/collections-assets/llm-to-agent-learning/58a26aae35364a6fab07bbe0b2f7a33c90e616185fc61ea26e1e3ad2c58624c6.png",[10,191,192],{},"图3｜同一比例尺下，总参数为公共6M加四个10M专家；T1路径只激活公共6M及E1、E2。总权重仍按46M×2字节＝92MB计；未走的路径仍要存放，不能用26M推断下载大小或实际耗时。",[10,194,195],{},"没有足够快的存储时，可以把部分权重放在其他内存或磁盘，按需搬运，但代价可能是等待加载。把专家分布到多张设备上，则需要把token表示发送给对应设备，再收回结果、恢复顺序并合并。通常不是每处理一个token就把整份专家权重在设备间搬一遍。",[10,197,198],{},"分发后还不能丢掉token的位置。假如设备把E1收到的T1、T4连在一起处理，返回时必须知道每个输出属于哪个原位置，再与该token从另一位专家获得的结果合并。否则即使每次矩阵乘法都算对，整体回答也会错。路由系统因而还维护索引、缓冲和调度，这些工作并不体现在简单的激活参数比例里。",[10,200,201],{},"小批次时，专家可能只收到很少输入，矩阵运算难以充分利用硬件；大批次更有机会把发往同一专家的输入凑在一起，但等待、内存和延迟又会变化。所以激活参数少，是效率潜力的线索，不是速度承诺。",[17,203,205],{"id":204},"_6两份官方报告展示两种具体选择","6．两份官方报告，展示两种具体选择",[10,207,208,209],{},"DeepSeek-V3公开报告列出671B总参数、每token激活37B；除最初三层的前馈网络外，其MoE层设1个共享专家和256个路由专家，每token选8个路由专家。这些数来自该公开版本，是代表案例，不表示目前最新模型都沿用它。",[31,210,213],{"href":211,"rel":212},"https://arxiv.org/html/2412.19437v2#S4.SS2",[35],"DeepSeek-V3报告，模型配置",[10,215,216,217],{},"其主要均衡方法会根据负载调整影响专家选择的偏置，同时另保留很小的序列级均衡损失。因此，报告中的“辅助损失自由”不能读成训练完全没有任何辅助均衡损失。偏置用于选择，实际合并权重仍由原来的亲和分数得到。",[31,218,221],{"href":219,"rel":220},"https://arxiv.org/html/2412.19437v2#S2.SS1.SSS2",[35],"DeepSeek-V3报告，负载均衡",[10,223,224,225,230,231],{},"Qwen3-235B-A22B则公开为235B总参数、22B激活参数。其2025年Qwen3报告给出的MoE配置是128个专家、每token激活8个，并明确没有共享专家。它提醒我们，共享专家是一种设计选择，不能画成每个MoE都必有的组件。",[31,226,229],{"href":227,"rel":228},"https://qwenlm.github.io/blog/qwen3/",[35],"Qwen3官方发布","、",[31,232,235],{"href":233,"rel":234},"https://arxiv.org/html/2505.09388v1#S2",[35],"Qwen3技术报告，架构",[10,237,238],{},"两个模型都选8个专家，也不意味着专家同样大、层数相同或计算成本一样。更不能把37B激活直接等同于一个37B稠密模型：参数如何分布、注意力结构、通信和数据训练都不同，最终仍要在一致任务与条件下比较。",[10,240,241],{},"还有一个同名陷阱：生成文字时也可能使用top-k，表示从得分较高的候选token里选择下一个输出；MoE的top-k则是在内部选择专家。前者决定接下来写什么，后者决定当前隐藏表示经过哪些计算。两个位置、两个对象，即使数字都叫k，也不能混成同一个控制旋钮。",[17,243,245],{"id":244},"_7专家这个名字哪些地方会误导","7．“专家”这个名字，哪些地方会误导",[10,247,248],{},"路由训练后可能出现某些偏好，但分工未必沿着人类学科边界。同一个领域可能调用多个专家，同一专家也可能参与多类文本。仅凭观察几个例子，就宣布“E7专门管法律”，会把统计现象误当成稳定职责。",[10,250,251],{},"MoE也不会自动修复错误知识、过时信息或不可靠推理。专家共享同一训练体系，可能共同受到数据偏差影响；加权合并向量不是独立核查事实。把专家数加倍，也需要适合的训练和系统支持，否则只是多了一批未充分利用的权重。",[10,253,254],{},"选择MoE通常是在容量、计算和部署复杂度之间取舍。对有高速设备互联、足够批量和成熟实现的系统，稀疏计算可能很值得；对内存紧张的小设备，全部专家的存储负担仍可能成为障碍。先问实际瓶颈在哪里，才知道这种结构是否合适。",[17,256,257],{"id":257},"本章练习",[259,260,261],"h3",{"id":261},"题目",[10,263,264],{},[99,265,266],{},"问题1｜算一次路由",[10,268,269],{},"T1的分数为0.60、0.30、0.08、0.02，选top-2；E1输出［2，0］，E2输出［0，3］，共享S输出［1，1］。求混合权重、路由输出及加上共享项后的输出。E3、E4是否也计算T1？",[10,271,272],{},[99,273,274],{},"问题2｜分开两种分母",[10,276,277],{},"按本章四个token的路由，四位专家各调用几次？公共6M、四专家各10M、每token选2个时，总参数、单token激活参数与2字节权重大小各多少？",[10,279,280],{},[99,281,282],{},"问题3｜检查系统边界",[10,284,285],{},"四个token全选E1、E2时，总调用数与负载如何变化？另回到第3节的原始路由：E1把T1、T4一起处理后返回，聚合器为什么还必须保留原token索引？",[259,287,288],{"id":288},"思考提示",[10,290,291],{},[99,292,293],{},"提示1｜对应问题1",[10,295,296],{},"先对选中分数重新归一化，再按向量分量混合；共享项单独相加。",[10,298,299],{},[99,300,301],{},"提示2｜对应问题2",[10,303,304],{},"单token经过的参数、整批专家调用次数、整模型存储不可混用。",[10,306,307],{},[99,308,309],{},"提示3｜对应问题3",[10,311,312],{},"先统计各专家的队列，再检查返回值应该与哪个token的另一条支路相加。",[259,314,315],{"id":315},"参考答案与解析",[10,317,318],{},[99,319,320],{},"答案1｜对应问题1",[10,322,323],{},"选E1、E2，权重2/3、1/3；路由输出［4/3，1］；加S后为［7/3，2］。E3、E4跳过T1的专家前馈计算。共享S不占这两个路由名额；输出仍是隐藏向量，不是聊天答案。",[10,325,326],{},[99,327,328],{},"答案2｜对应问题2",[10,330,331],{},"E1收T1、T4；E2收T1、T2；E3收T2、T3；E4收T3、T4，各两次，总八次；共享S另处理四次。总参数46M，单token激活26M；全部权重按2字节保存为92MB，MB按十进制计。单token激活约56.5%，不能当成端到端耗时比例。",[10,333,334],{},[99,335,336],{},"答案3｜对应问题3",[10,338,339],{},"在四个token都选E1、E2的情形，总调用数仍为8，负载由2、2、2、2变成4、4、0、0，可能增加排队并降低利用率，不能保证同速。回到原始路由，聚合时必须把E1的T1结果与T1的另一位专家结果组合，把T4与T4组合；按专家返回次序直接拼接，可能串错位置。",[17,341,342],{"id":342},"下一章",[10,344,345],{},"内部容量与计算路径已经清楚，但基础模型仍可能只会续写，不能稳定按要求完成任务。下一章把一条“时间和地点提取”示范拆成输入、目标与计分范围，看看SFT究竟改变了什么。",{"title":347,"searchDepth":348,"depth":348,"links":349},"",3,[350,352,353,354,355,356,357,358,363],{"id":19,"depth":351,"text":20},2,{"id":48,"depth":351,"text":49},{"id":72,"depth":351,"text":73},{"id":140,"depth":351,"text":141},{"id":173,"depth":351,"text":174},{"id":204,"depth":351,"text":205},{"id":244,"depth":351,"text":245},{"id":257,"depth":351,"text":257,"children":359},[360,361,362],{"id":261,"depth":348,"text":261},{"id":288,"depth":348,"text":288},{"id":315,"depth":348,"text":315},{"id":342,"depth":351,"text":342},"从信息表示和学习出发，用可核算的例子与白板图逐步理解大模型、后训练、推理和Agent系统。","md",{},true,"/column/llm-to-agent-learning/12",{"title":5,"description":364},"column/llm-to-agent-learning/12","XP0mfumIE0UTFcAOBRV6nIyVt5QKSyN5xsfqWbhcujU",1791935828762]