想象你走进一家超级专科医院:一楼心血管科、二楼神经科、三楼骨科……上百个诊室,每位医生都只深耕自己那一亩三分地。但你挂一次号,绝不会看到所有医生乌泱泱围过来——分诊台护士问几句症状,只帮你叫来最相关的两三位专科医生会诊。这家医院能同时收治大量病人,靠的不是让每个医生都全知全能,而是让“对的人出现在对的诊室”。 MoE(Mixture of Experts,混合专家模型)正是把这套“医院模式”搬进了神经网络。传统大模型就像一位全科医生,无论你问“猫”还是“微积分”,所有脑细胞都得一起上;而MoE把模型拆成几十个“专家网络”,每次处理一个词时,由一个“路由器”快速判断该把任务交给哪几位专家,其余专家原地待命。这样一来,模型的“总知识量”可以做得极大,但每次计算只动用一小部分参数——用更少的算力,拿到更大模型的效果。GPT-4、Mixtral等大模型都靠这个“医院模式”在有限显卡上撑起了千亿规模。 这篇文章会用这家“专科医院”当导游,带你从挂号、分诊、会诊到全院调度,把MoE的路由机制、稀疏激活、负载均衡、训练与推理的秘密一次讲透。
学会MoE思维,你就能读懂GPT-4级别大模型的“成本控制术”,在模型选型与架构设计时做出更聪明的工程决策,是LLM应用开发和基础架构岗位的必备认知。
可视化演示
展示FCFS、SSTF和SCAN三种磁盘调度算法的磁头移动轨迹,比较寻道距离与服务顺序的差异。
本节配有交互动效(进入视口后自动加载,约 3KB)。
FCFS 先来先服务 磁头按请求到达顺序依次服务,简单但寻道距离较长 无优化策略,可能产生大幅磁头摆动 SeekTotal = |c1-h0| + |c2-c1| + ... + |cn-c(n-1)| FCFS公平但效率较低
MoE核心思想
想象你走进一家超级专科医院:一楼心血管科、二楼神经科、三楼骨科……上百个诊室,每位医生都只深耕自己那一亩三分地。但你挂一次号,绝不会看到所有医生乌泱泱围过来——分诊台护士问几句症状,只帮你叫来最相关的两三位专科医生会诊。这家医院能同时收治大量病人,靠的不是让每个医生都全知全能,而是用最少的会诊人次解决最多的病症。
MoE(Mixture of Experts,混合专家模型)把同样的套路搬进了神经网络。传统的Transformer模型,每一层前馈网络(FFN)都是一位“全科医生”——不管你输入“猫”还是“微积分”,所有的参数都得上场。而MoE模型把这一层FFN替换成一组专家网络(Experts),再配一个路由器(Router)。平时所有专家“待命”,来一个token,路由器就根据它的特征,只把活儿派给得分最高的那几位。
每个专家本质上是结构相同但参数独立的小型FFN。输入token的向量x会先经过路由器打分,选出Top-K个专家(K通常取1或2),然后把被选中专家的输出按路由得分加权合并。整个过程完全可微,可以通过反向传播端到端训练。
回到医院:这个"y"不是所有科室都来表态的结果,而是被点名的两三位专家说话,并且说话分量按分诊台给的优先级来定。这就是MoE最核心的思想:总知识量可以很大,但每次只让最对口的专家上场。
- x(输入向量)当前token在模型中间的向量表示,带着“这个token想表达什么”的信息,类比病人的症状清单。
- E_i(x)(专家i的输出)第i个专家网络对x做变换后的结果,类比某专科医生看完症状清单后给出的专业判断。
- s_i(路由得分)路由器为x和专家i算出的匹配程度,所有专家的s_i之和为1,类比分诊台给各科室打的优先级分。
- T_K(TopK专家集合)从N位专家中选出的得分最高的K位专家下标集合,其余专家不参与本层计算。
路由机制
分诊台护士凭什么决定把病人分给哪个科室?她会快速问几个关键问题:哪里疼、怎么疼、有没有其他症状。然后在心里给各科室默默打分:胸痛加发烧,呼吸科90分,心内科75分,骨科10分……最后只给得分最高的两个科室打电话。
MoE里的路由器(Router,也叫门控网络Gating Network)正是这位分诊台护士。它可不是预先写死的规则表,而是一个可学习的线性层:输入token的向量x,乘上权重矩阵W_g,得到一个长度为N(专家总数)的得分向量,再经过softmax转成概率分布。“问什么”和“怎么打分”,全都是在训练中自动学出来的。
为什么用softmax?因为它能把任意实数得分压成0到1之间的概率,并且保证所有专家得分加起来等于1。这样既方便后续做加权合并,也让“总分”有了约束。TopK选择则保证了稀疏性:得分再低的专家也拿不到活干,相当于护士根本不给那个科室打电话。
分诊台护士的“成长”,就是在一次次问诊中不断校准手里的打分表:哪些症状组合该优先找哪个科室,判断错了就通过损失函数的梯度反馈挨罚。最终,她变成了一位经验老到的导诊高手。这就是路由机制的魔力——不需要人手工设计规则,模型自己学会了怎么分配专家。
- W_g(路由权重矩阵)尺寸为N×d的可学习参数,类比护士脑子里那张“症状到科室”的映射表。
- z = W_g x(原始得分向量)x与W_g矩阵乘后得到一个N维向量,每一位对应一个专家的原始打分。
- softmax归一化把原始得分转成和为1的概率分布,方便后续作为加权系数使用。
- TopK稀疏选择只保留得分最高的K个专家,其余专家的概率直接置零,实现真正的稀疏激活。
稀疏激活原理
为什么每次只请两三位专家就够?因为一个病人的症状信息量有限:阑尾炎的病人不需要眼科专家会诊,心脏病患者也不用麻烦骨科。硬把所有科室都叫来,不仅浪费资源,不相关科室的“外行意见”还可能干扰正确诊断。
稀疏激活(Sparse Activation)就是MoE省算力的核心:前向计算时,每个token只经过K个被选中的专家,其余N-K个专家的参数完全不参与运算。注意,“不参与运算”不等于“不存在”——它们的参数仍然存着、仍然贡献模型的容量,只是这一刻没有被激活。
这打破了Dense模型“参数量等于计算量”的等式。Dense模型参数量翻倍,推理算力基本也翻倍;而MoE模型可以把专家从8个加到64个,总参数量涨了8倍,但每次激活的参数量不变——因为K没变。模型变得“大而聪明”,算力却维持原样。
医院想扩建到100个科室,也不用担心运营成本爆炸,因为每个病人仍然只占用两三个科室的资源。稀疏激活就是医院的“扩建策略”——大楼(参数量)可以无限盖大,但接诊流程(计算量)没有被拖垮。
- C_MoE(单token计算量)每个token实际消耗的算力,等于K个专家计算量之和加上共享部分(注意力、embedding等)。
- P_总(模型总参数量)所有专家的参数加起来,N越大,模型总知识量越大。
- K与N的对比(激活比例)K通常取1或2,N通常取8到64,所以激活参数只占总参数的很小一部分。
负载均衡
分诊台护士要是偏心,什么病人都往心内科送,会发生什么?心内科医生忙到连喝水的时间都没有,骨科医生却闲在诊室刷短视频。很快,心内科累垮了,骨科也因为缺少病例积累越来越没经验——整个医院的水平开始失衡。
MoE训练中有一个著名问题叫“专家崩溃”(Expert Collapse):路由器在训练初期可能倾向于把token总分配给少数几个专家,导致这些专家快速收敛、变得“更好用”,于是路由器更偏爱它们;而其他专家得不到训练信号,成了永远闲着的“摆设专家”。
解决方案是在训练损失里加一个辅助负载均衡损失(Auxiliary Load Balancing Loss)。它会统计每个专家实际分到的token比例f_i和平均路由概率P_i,如果某个专家两项都高——说明它又抢数据又被路由器偏爱——就会受到惩罚,让路由器把活儿匀给闲着的专家。另一个常用手段是设置容量因子(Capacity Factor),限制每个专家单批次最多处理的token数,超出的token被丢弃或走残差连接。
医院管理层给分诊台设了KPI:各科室接诊比例不能偏差太大,并且通过信息系统实时监控每个科室的负荷。这个"KPI"就是辅助损失——它让所有专家都能持续接诊、持续精进,而不是少数人累死、多数人饿死。
- f_i(实际分配比例)第i个专家本批次实际分到的token数占全部token数的比例,类比各科室的实际接诊量占比。
- P_i(平均路由概率)路由器给第i个专家的平均softmax得分,反映路由器对它的“偏爱程度”。
- N·Σ(惩罚项)N乘以所有专家的f_i与P_i乘积之和,当某个专家两项同时偏高时,这一项会明显增大,形成抑制。
- α(权重系数)控制负载均衡损失在总损失中的影响力,太大影响主任务精度,太小压不住“偏科”。
训练策略
培养几百位专科医生可不是把医学院毕业生扔进诊室就完事。他们要先轮转、跟诊、复盘,还要保证整个医院的诊疗水平稳步提升——不能让某位医生练成了绝世高手,其他人还在原地踏步。
MoE训练同样面临三个挑战:第一,每个专家都要吃够“有代表性的病例”,不能因为路由器偏心而让某些专家数据饥饿;第二,在分布式训练中,不同专家通常放在不同GPU上,token要跨设备送给专家,这就产生了All-to-All通信;第三,训练要稳定,不能让路由器的得分剧烈波动导致损失震荡。
针对第一点,上一节的负载均衡损失保证每个专家都有数据可学。针对第二点,MoE标准做法是专家并行(Expert Parallelism):N个专家分布在多张GPU上,token先通过All-to-All通信送到被选中专家所在的设备,算完再All-to-All把结果收回来——通信量随token数和K增长,所以批次大小需要仔细调优。针对第三点,常用Router Z-Loss惩罚路由logits的绝对值过大,让softmax输出更平滑,训练更稳定。
医院每年给主治医生设定“接诊量加学习会出席率”等考核指标(L_aux),同时控制专家会诊时不乱抢话(L_z),最终目标还是治好病人(L_main)。三管齐下,一家专科医院才能长期稳定运转。
- L_main(主任务损失)语言模型预测下一个token的交叉熵损失,是模型学习的最终目标。
- L_aux(负载均衡损失)上节讲的专家负载均衡项,保证数据在专家间均匀分配。
- L_z(Router Z-Loss)惩罚路由logits的logsumexp平方,防止路由器输出过大导致softmax过于自信。
- α和β(权重系数)两个辅助损失的强度,一般取10⁻²到10⁻⁴量级,既起到约束作用又不至于过度干扰主任务。
推理优化
医院盖好了、医生培训出来了,接下来就是每天开门营业。早高峰时病人源源不断涌进大厅,挂号处排起长队,最忙的科室门口挤满了人。这时候运营的重点不再是“培养医生”,而是“调度流程”:怎么让分诊更快、专家诊室不空转、病人不在走廊干等。
MoE推理和Dense模型最大的不同是:虽然每次只激活K个专家,但这K个专家是谁,要到真正推理那一刻才知道。所以GPU显存里必须把所有专家参数都准备好——这是显存的大头。同时,如果专家分布在多张卡上,每来一个token都要做跨卡通信,延迟会变高。
工程师们用三类手段来优化:一是专家卸载(Expert Offloading),把访问频率低的专家参数放到CPU内存甚至磁盘,用的时候再换上来,缓解单卡显存压力;二是专家缓存(Expert Caching),根据路由统计把热门专家常驻GPU,冷门专家按需加载;三是增大Batch Size——稀疏激活会让单卡算力利用率下降,批次越大,路由器分诊越均匀,GPU管线越满,单位token的推理成本越低。
医院高峰期不会临时扩建大楼,而是优化流程:把热门科室的医生安排到最近的诊室(专家缓存)、冷门科室合并诊室定期开放(专家卸载)、挂号缴费分流引导(大batch)。推理优化的本质,就是“用运营手段弥补物理资源的限制”。
- P_激活(实际计算参数)推理时每个token真正经过的参数总量,只由K决定,与N无关。
- K·P_专家(专家部分)K个被选中专家的参数量之和,是稀疏激活实际付出的“专家成本”。
- P_共享(共享部分)Transformer的注意力、embedding等不经过路由、始终全量计算的参数。
应用与前景
这套“专科医院模式”如今已经是顶级医疗集团的标配。GPT-4据传采用了16个专家、每次激活2个的MoE结构;Mixtral 8x7B则是开源医院里的明星——总参数46.7B,但每次推理只激活约12.9B,硬件门槛和推理速度接近13B的Dense模型,效果却对标70B量级。
为什么MoE到GPT-4时代才被大规模应用?因为稀疏激活依赖三个工程前提:一是显存容量足够装下所有专家参数,这需要大规模集群;二是分布式通信足够快,All-to-All在高速网络里开销可控;三是负载均衡和路由稳定性有了成熟解法,即辅助损失加Z-Loss的组合拳。
从实践角度,选MoE还是Dense要权衡四件事:第一,模型容量需求——想要更大知识量但算力预算有限,选MoE;第二,显存与设备——MoE对显存要求高,单卡跑不动32专家的大模型;第三,推理批次大小——批量大、并发高时MoE性价比明显,单条低延迟请求反而可能不如同激活量的Dense模型;第四,生态与框架——vLLM、SGLang等推理框架已原生支持MoE,部署成本在快速下降。
三甲医院的运营模式证明了“专才协同”比“全才单打”更可持续。对AI从业者来说,理解MoE不只是认识一个架构,更是建立一种“资源有限、知识无限”的工程思维——在算力预算内,用架构设计撬动更大的模型能力。
- 8×7B(专家参数总量)8个7B参数的专家,理论上是56B,但注意力等层在专家间共享,实际总参数量为46.7B。
- 2×7B(激活专家部分)每次只激活2个专家,约14B的专家参数参与计算,再加上共享层。
- 容量与成本之比用总参数除以激活参数,得到约3.6倍的“算力杠杆”——这就是MoE性价比的来源。
AI 应用场景
LLM服务降本增效
阶段:模型部署与推理优化
解决的问题:传统Dense模型推理成本随参数量线性增长,10B以上模型单次推理的GPU开销很高,很多中小企业用不起。MoE用“总参数大、激活参数小”的稀疏激活机制,让模型在保持高质量回答的同时大幅降低单位token推理成本。
具体案例:某创业公司的客服机器人原本使用13B Dense模型,切换到Mixtral 8x7B后,多项Zero-Shot评测准确率提升约8个百分点,而单token推理延迟只上升15%,服务成本几乎不变。工程团队在vLLM上直接加载开源权重,配合专家缓存策略,高峰期吞吐量提升了40%。
大规模广告推荐系统
阶段:模型训练与特征建模
解决的问题:广告场景特征维度极高,包含用户长期兴趣、短期行为、价格敏感度、时段规律等异质信息,单一大模型难以同时兼顾所有模式。MoE天然适合“不同特征找不同专家”——把不同类型的特征路由到各自擅长的专家子网络。
具体案例:某电商平台的CTR预估模型采用MoE结构,将用户行为特征分别路由到“价格敏感专家”和“品类偏好专家”,在线实验AUC提升0.012,广告GMV提升3.7%。训练时通过负载均衡损失保证了各专家都得到充分训练,没有出现冷门专家退化的问题。
Python 演示
import torchimport torch.nn as nnimport torch.nn.functional as F class Expert(nn.Module): """单个专家网络:两层全连接 + ReLU,类比一位专科医生""" def __init__(self, d_model, d_ff): super().__init__() self.fc1 = nn.Linear(d_model, d_ff) self.fc2 = nn.Linear(d_ff, d_model) self.act = nn.ReLU() def forward(self, x): return self.fc2(self.act(self.fc1(x))) class SparseMoE(nn.Module): """稀疏混合专家层:路由器 + N 位专家 + Top-K 激活""" def __init__(self, d_model, d_ff, n_experts, top_k): super().__init__() self.n_experts = n_experts self.top_k = top_k self.router = nn.Linear(d_model, n_experts) self.experts = nn.ModuleList( [Expert(d_model, d_ff) for _ in range(n_experts)] ) def forward(self, x): # 1. 分诊台打分:softmax 计算每个专家的路由概率 scores = F.softmax(self.router(x), dim=-1) # 2. 只保留得分最高的 top_k 位专家 top_scores, top_ids = torch.topk(scores, self.top_k, dim=-1) # 3. 用被选中专家的输出加权合成最终结果 out = torch.zeros_like(x) for rank in range(self.top_k): weight = top_scores[..., rank:rank + 1] exp_id = top_ids[..., rank] for e in range(self.n_experts): mask = (exp_id == e).unsqueeze(-1).float() out += weight * mask * self.experts[e](x) return out if __name__ == "__main__": torch.manual_seed(42) model = SparseMoE(d_model=16, d_ff=32, n_experts=4, top_k=2) batch = torch.randn(2, 5, 16) # batch=2, seq=5, d_model=16 output = model(batch) total_params = sum(p.numel() for p in model.parameters()) print("MoE 输出形状:", output.shape) print(f"总参数量: {total_params}") print(f"每个 token 只激活 2/{model.n_experts} 个专家")
self.router = nn.Linear(d_model, n_experts)路由器就是一个线性层,负责给每位专家打初始分scores = F.softmax(self.router(x), dim=-1)把原始得分归一化成和为1的概率,相当于分诊台护士给出各科室优先级top_scores, top_ids = torch.topk(scores, self.top_k, dim=-1)只挑得分最高的K位专家,其余专家的输出直接忽略mask = (exp_id == e).unsqueeze(-1).float()判断当前专家是否被选中,被选中才让它参与计算out += weight * mask * self.experts[e](x)按路由权重把被选中专家的输出累加进最终结果
常见误区
误区MoE模型总参数量动辄几百B,推理时肯定又慢又费显存,普通硬件根本跑不动吧?
正解这是把“参数量”和“计算量”混为一谈了。MoE虽然总参数多,但每次只激活Top-K个专家,前向计算只走被激活的专家,推理延迟主要由激活参数决定,与总参数量不是一回事。不过需要注意的是,显存确实要容纳所有专家参数——好比医院大楼盖得大,但每次接诊只占用几个诊室。所以MoE是“算力友好、显存不友好”的架构。
为何常见:大家习惯了Dense模型“参数量等于计算量”的直觉,没意识到稀疏激活打破了这种绑定关系。
误区路由器的分配策略在训练时已经固定了,推理时每个token去哪个专家是安排好的。
正解路由器是模型的一部分,一个线性层加softmax,推理时它会实时根据输入token的向量计算得分。同一个词在不同上下文里,路由结果也会动态变化。比如“苹果”在“吃苹果”和“苹果手机”中,会流向不同的专家。它更像一位随时在岗的分诊台护士,而不是一张打印好的排班表。
为何常见:很多人把路由理解成“哈希查找表”或“离线聚类”,忽略了它是一个随输入变化的神经网络层。
误区既然专家越多模型越大效果越好,那我直接上1000个专家,岂不是无敌了?
正解专家数量增加会带来三个代价:一是All-to-All通信开销随专家数增长,训练和推理的分布式成本上升;二是负载均衡难度加大,专家越多越容易“冷热不均”;三是训练稳定性变差,需要更强的辅助损失来约束。实践中8到64个专家是常见区间,超出后收益递减。好比医院从10个科室扩到100个,管理成本会非线性上升,不一定划算。
为何常见:把MoE当成“免费扩容”神器,忽略了稀疏激活背后要付的工程代价——通信、负载均衡、显存,都是隐形成本。
误区MoE是ChatGPT带火之后才出现的架构,属于大模型时代的最新发明。
正解MoE思想可以追溯到1991年的论文《Adaptive Mixture of Local Experts》,2017年Google的Shazeer等人把稀疏MoE引入NLP,做出了大规模稀疏专家模型。GPT-4只是把MoE成功规模化的集大成者,而不是发明者。就像“专科医院模式”很早就有了,三甲医院只是把它运营得最好。
为何常见:AI新闻的传播集中在近两年,公众对技术缺少历史纵深,误以为“大模型时代才有MoE”。
面试题
Q1. MoE中“稀疏激活”的确切含义是什么?
- A.只激活少数的专家网络← 正确答案
- B.只激活部分的神经层
- C.只激活一个多头注意力
- D.只激活少数的训练样本
答案:A。稀疏激活指输入token只经过路由器选出的少数几个专家网络,其余专家参数完全不参与前向计算。B是层级别剪枝,C是注意力机制内部结构,D是数据采样策略,都与MoE的稀疏激活无关。
Q2. 路由器(门控网络)最核心的职责是什么?
- A.计算所有专家的平均输出
- B.为token分配最合适的专家← 正确答案
- C.统一更新所有专家参数
- D.大幅度压缩模型总体参数
答案:B。路由器就是一个打分器:输入token表示,给每个专家打一个匹配分,然后选出TopK。A是模型集成(Ensemble)的做法,C是优化器的工作,D是剪枝或量化的目标,都不属于路由器的职责。
Q3. 若专家总数N=8,TopK=2,模型每次实际激活的参数比例是?
- A.约 8%
- B.约 20%
- C.约 25%← 正确答案
- D.约 50%
答案:C。激活比例等于K除以N,即2/8=25%。不过这是“专家参数”的激活比例,实际总FLOPs还要把共享的注意力层等计算算进去,所以整体计算量会略高于25%。
Q4. “专家崩溃”(Expert Collapse)指的是什么现象?
- A.专家训练时梯度直接爆炸
- B.路由器偏科导致部分专家挨饿← 正确答案
- C.专家太多导致显存直接溢出
- D.所有专家同时激活算力不足
答案:B。专家崩溃是路由机制的两极分化:热门专家被路由器偏爱、越用越强,冷门专家长期接不到数据、退化成了摆设。A是梯度问题,C是工程资源问题,D是稀疏激活失效的问题,都不是专家崩溃的本意。
Q5. 下列哪些是MoE负载均衡的常用手段?
- A.添加辅助负载均衡损失← 正确答案
- B.设置容量因子限制专家负载← 正确答案
- C.禁用得分最高的专家
- D.惩罚路由分配不均衡← 正确答案
答案:ABD。负载均衡靠三招:aux loss惩罚f_i·P_i过高的专家、capacity factor限制每个专家单批处理的token上限、路由惩罚项抑制不均衡分配。C“禁用最强专家”等于自废武功,正确做法是让冷门专家多吃数据,而不是把热门专家禁掉。
Q6. MoE训练中All-to-All通信的主要作用是什么?
- A.同步所有专家的梯度信息
- B.把token交换给目标专家设备← 正确答案
- C.大幅减少模型的参数量
- D.给所有专家广播相同的参数
答案:B。MoE的专家分布在多张GPU上,token在前向计算时要先发送到被选中专家所在的设备,算完再传回来,这就是All-to-All通信。A是梯度同步(AllReduce),C和D与通信的作用无关。通信量随token数和K增长,这也是MoE训练要控制batch的原因。
Q7. 关于MoE推理优化,正确的说法有哪些?
- A.所有专家参数都需要驻留显存← 正确答案
- B.冷门专家可卸载到CPU内存← 正确答案
- C.单条请求延迟一定低于Dense
- D.大batch有助于提升GPU利用率← 正确答案
答案:ABD。MoE推理时虽然只激活K个专家,但router是动态选择的,无法预知哪些专家会被用到,所以所有专家参数都必须能访问到(显存或offload换入换出)。大batch让不同token路由到不同专家,GPU并行度更高。C太绝对,稀疏激活在低并发时可能因为路由计算和跨卡通信反而延迟更高。
Q8. 相比Dense模型,MoE最大的优势是什么?
- A.参数量小显存占用更低
- B.总参数量大但推理算力低← 正确答案
- C.推理延迟一定比Dense低
- D.训练过程一定更稳定
答案:B。MoE用“总参数大、激活参数小”打破了参数量与算力的强绑定:知识容量大,但每次推理只算一小部分。A错在MoE总参数反而更大、显存更高;C错在延迟不一定更低;D错在MoE训练更复杂,需要辅助损失来稳定。
Q9. Mixtral 8x7B模型的总参数量和激活参数量约为多少?
- A.总约 56B,激活约 7B
- B.总约 46.7B,激活约 12.9B← 正确答案
- C.总约 7B,激活约 56B
- D.总约 12.9B,激活约 46.7B
答案:B。Mixtral 8x7B有8个7B参数的专家,总参数约46.7B(注意力等共享层后),每次激活2个专家加共享层约12.9B。这两个数字是理解MoE“算力杠杆”的典型样本,也常被拿来做部署成本估算。
Q10. 关于MoE的正确表述有哪些?
- A.专家数增多通信开销变大← 正确答案
- B.TopK增大激活参数变多← 正确答案
- C.MoE层替换的是FFN前馈层← 正确答案
- D.路由器与专家共享同一参数
答案:ABC。A对,更多专家跨卡通信更频繁;B对,K增大激活专家增多,计算量线性上升;C对,MoE通常只替换Transformer的FFN层,注意力层保持全量计算;D错,路由器的W_g是独立参数,不与其他专家共享,否则会被“专家偏科”带偏,无法公正分诊。