稀疏专家混合模型(MoE)方法提供了一种有组织的条件计算实现方式,使神经网络能够大幅增加参数量,同时不按比例提高每个输入的计算成本。在只激活网络相关部分的普遍构想上,MoE架构提供了一种具体的机制,用以达成这种稀疏性,在大规模Transformer模型中表现尤其明显。其根本上,MoE层取代了标准组件,例如Transformer中的前馈网络(FFN)模块,由两大部分构成:专家网络集合:它们是多个独立的子网络,表示为 $E_1, E_2, ..., E_N$。每个专家通常具有相同的架构(例如,标准FFN),但拥有各自独立的学习参数集。专家总数$N$可以从几个到数百或数千不等。门控网络(路由):这是一个较小、可训练的网络,$G$,它检查每个输入令牌$x$并决定由哪个或哪些专家来处理。路由器的作用举足轻重:它根据令牌的特征动态地进行路由,将它们导向那些推测专门处理此类输入的专家。稀疏性源于路由器的选择机制。路由器不是将每个令牌发送给所有专家(这会带来高昂的计算成本,类似于一个集成模型),而是通常采用一种稀疏选择策略。最常用的方式是top-k路由,对于每个输入令牌,路由器会计算出与$N$个专家中每个专家的亲和性分数。然后它只选择分数最高的$k$个专家来处理该令牌,$k$是一个小的整数,通常是1或2,并且远小于$N$($k \ll N$)。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="Arial", fontsize=10]; edge [fontname="Arial", fontsize=9]; subgraph cluster_input { label = "输入"; style=invis; input [label="输入令牌 (x)", shape=ellipse, style=filled, fillcolor="#a5d8ff"]; } subgraph cluster_moe { label = "MoE 层"; bgcolor="#e9ecef"; node [style=filled]; Router [label="门控网络 G(x)", fillcolor="#ffec99"]; subgraph cluster_experts { label = "专家 (共N个)"; style=dotted; bgcolor="#dee2e6"; E1 [label="专家 1", fillcolor="#b2f2bb"]; E2 [label="专家 2", fillcolor="#ced4da"]; Ek [label="专家 k", fillcolor="#b2f2bb"]; Edots [label="...", shape=plaintext]; EN [label="专家 N", fillcolor="#ced4da"]; } } subgraph cluster_output { label = "输出"; style=invis; output [label="输出 (y)", shape=ellipse, style=filled, fillcolor="#a5d8ff"]; } input -> Router [label=" 路由\n 分数", color="#495057"]; Router -> E1 [label=" G(x)₁", color="#37b24d", style=bold, penwidth=1.5]; Router -> E2 [label=" G(x)₂=0", color="#adb5bd", style=dashed]; Router -> Ek [label=" G(x)k", color="#37b24d", style=bold, penwidth=1.5]; Router -> EN [label=" G(x)N=0", color="#adb5bd", style=dashed]; E1 -> output [label=" E₁(x)", color="#37b24d", style=bold, penwidth=1.5]; Ek -> output [label=" Ek(x)", color="#37b24d", style=bold, penwidth=1.5]; {rank=same; E1; E2; Ek; Edots; EN;} }稀疏MoE层的视图。输入令牌由门控网络处理,门控网络选择并加权少量专家子集(本例中为专家1和专家k,由实心绿线表示)。非活跃专家(虚线灰线)对此令牌未启用。活跃专家的输出组合起来生成最终输出。对于特定的令牌$x$,只有选定的top-k专家执行计算(即所选集合中$i$的$E_i(x)$)。其余的$N-k$个专家对此令牌不活跃,其处理不增加计算负载(FLOPs)。这使得模型的总参数量(路由器和所有$N$个专家的参数之和)可以非常大,同时每个令牌的计算成本得到控制,仅随$k$和单个专家的大小而变化,而不随专家总数$N$变化。MoE层对令牌$x$的最终输出$y$通常是激活专家输出的加权组合。权重也由门控网络的分数决定。回顾一下一般公式:$$y = \sum_{i=1}^{N} G(x)_i E_i(x)$$在稀疏top-k情境下,$G(x)_i$仅对选定的$k$个专家非零,从而使总和变得稀疏:$$y = \sum_{i \in \text{TopK}(G(x))} G(x)_i E_i(x)$$此处,$\text{TopK}(G(x))$代表路由器$G$为输入$x$选择的$k$个专家的索引,而$G(x)_i$是分配给专家$i$输出的学习权重。这种稀疏MoE方式提供了一个强大的机制,将模型大小(参数量)与计算成本(每令牌FLOPs)解耦。它使得构建具有万亿参数的模型成为可能,同时在训练和推理期间保持可控的计算预算。然而,实现其潜在优势需要应对这种架构固有的特定难题,例如确保专家资源的平衡使用以及路由器训练的稳定动态,这些在后续章节中是核心议题。