一、前言

隨著大型語言模型以及深度學習領域的發展,MoE(混合專家模型)憑藉其具備的條件計算特性與高度可擴充性,逐漸成為研究上的熱門方向。本文主要梳理 MoE 模型的一些基本原理、整體架構設計與關鍵核心技術,並結合部分開源實例,簡要說明典型 MoE 模型在實作上的主要思路及其應用場景。

二、什麼是 MoE?

在深入了解 MoE 之前,先回顧經典的 Transformer 架構。在標準 Transformer 中,每一個 Encoder/Decoder 層都包含多頭注意力(Multi-Head Attention)以及全連接前饋網路(Feed-Forward Network,通常簡稱 FNN)。這個 FNN 會對所有輸入 token 執行相同的線性變換與非線性映射,因此會產生稠密計算並帶來高昂的資源消耗。

而混合專家模型(Mixture of Experts,簡稱 MoE)技術,則是在 FNN 的位置引入「專家」機制:將一個大型前饋網路拆分為多個子網路(即專家),並借助門控網路(Router)對 token 進行動態路由分配。具體而言,門控網路會依據 token 的特徵(例如詞嵌入或注意力上下文)計算各個專家的分數(score),並只啟用分數最高的 K 個專家參與計算,其餘專家維持閒置。透過這種方式,模型的總參數量可以達到數千億規模,但每次實際運算時被啟用的參數(Activated Parameters)僅占其中一小部分,典型比例約為 5% 到 15%,從而大幅降低計算成本與顯存占用。

  • Transformer 與 MoE 的本質差異
    • 稠密計算:標準 Transformer 架構的 FNN 會一視同仁處理所有參數;
    • 條件計算:MoE 模型則只對部分專家執行計算任務,實現稀疏啟用。
  • 為什麼要這樣設計? 主要原因包括:
    • 可擴充性:在預算允許下,可增加專家數量以提升模型容量;
    • 效率:由於啟用參數較少,可立刻降低 FLOPs 與顯存使用;
    • 專業化:不同專家可「專攻」不同類型特徵或任務,以提升整體效能。
想像一座圖書館(如同 Transformer),裡面存放成千上萬本書(如同參數),若要查找資訊,你必須翻遍所有書頁;而 MoE 就像一位圖書館員(門控網路),會依據你的問題,只取出最相關的幾本書(專家)來閱讀,既省時又高效。

三、MoE 的核心組成

MoE 的運作主要依賴兩大模組:

  1. 專家(Experts)
    • 每個專家本身都是獨立的前饋網路子層(通常為兩層含啟用函數的線性變換),相當於針對模型參數空間中的一個子集進行專門訓練(可參考《Outrageously Large Neural Networks: The Sparsely‑Gated Mixture‑of‑Experts Layer》)。
    • 專家之間可採用不同切分策略,例如參數聚類(Balanced K‑Means)、共啟用圖分割(Co‑activation Graph)或梯度感知分割等方法,目的在於確保每位專家在其擅長領域擁有最佳參數配置。
  2. 門控網路(Router)
    • 輸入 x 會經過線性映射得到專家打分:H(x)=xW\_g,並加入可學習噪聲以做平滑化:H'(x)=H(x)+SoftPlus(xW\_n)⊙𝒩(0,1)(此過程稱為 Noisy Gating)。
    • 採用 Top‑K 選擇策略:保留分數最高的 K 位專家,歸一化後輸出 G(x)=Softmax(KeepTopK(H'(x),K)),並將輸入分配給這 K 個被選中的專家。
    • 同時搭配輔助負載損失 L\_aux=λ·CV(n\_1,…,n\_E),用以讓分配到各專家的 token 數量方差最小化,避免「熱門專家」過載。

四、為什麼 MoE 如此高效?

1. 透過條件計算降低 FLOPs

標準 Transformer 的 FNN 需要對全部 N 個專家子層與所有輸入 token 執行相同計算,其複雜度約為 O(N·d^2);而 MoE 只啟用 K 個專家,使複雜度降為 O(K·d^2)。當 K 遠小於 N 時,計算量可近似線性下降 N/K 倍。

2. 參數過度配置與表示能力

超大模型往往需要大量參數以擬合複雜模式,而稠密成長方式會遇到運算瓶頸。MoE 藉由稀疏路由機制,在訓練過程中允許全域參數量(E·d^2)是啟用參數的數倍,從而提升模型捕捉多樣模式的能力。

3. 專家分工與分散式並行

每個專家只需學習子空間特徵以達到功能分工;而專家並行(Expert Parallelism)會把不同專家部署在不同設備上,降低主幹網路同步時的開銷。結合 Pipeline 並行或 Tensor 並行,可獲得更高吞吐率與更低延遲(可參考《GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding》)。

4. 實務驗證

  • GLaM 在 1.2 兆參數規模下僅啟用 8% 參數,並在 29 項 NLP 任務上超越 175B 的 GPT‑3,充分展示條件計算的優勢。
  • Switch Transformer 的 Top‑1 路由策略使吞吐率提升接近 2 倍,同時維持任務表現不下降。

五、MoE 的技術細節

傳統大型神經網路(例如常見的 Transformer)就像「全能型選手」,每次處理資料都必須動用全部參數參與計算,成本較高。

而 MoE 採用「按需呼叫」(即條件計算)的方法,只讓一部分專家參與計算,避免不必要的資源浪費。

1. 稀疏啟用與啟用參數

Transformer 架構中的 FFN 層理論上需要對所有 token 執行完整計算,但實測發現只有部分神經元會被觸發,呈現天然稀疏性(參見《MoEfication: Transformer Feed-forward Layers are Mixtures of Experts》)。MoE 正是基於此,將大型 FNN 切分為 E 個「專家」,並讓門控網路對每個 token 只選擇 K 個專家參與後續計算:

指標說明
總參數量可高達數十億甚至上千億等級
啟用參數量約等於總參數量乘以 (K/E) 的比例,通常占比 5% 到 15%
帶來的優勢FLOPs 與顯存開銷按比例下降,顯著提升訓練與推論效率

2. 門控網路與路由策略

專家挑選由門控網路(Router) 完成,常見實作流程如下:

  1. 線性映射:H(x)=xW\_g
  2. 噪聲注入:H'(x)=H(x)+g·StandardNormal()⊙SoftPlus(H(x))(亦稱 Noisy Gating)
  3. 取 Top‑K:G(x)=Softmax(KeepTopK(H'(x),K))
  • Top‑2 vs. Top‑1:GShard 使用 Top‑2 並混合輸出以提升魯棒性;Switch Transformer 使用 Top‑1 以簡化通訊複雜度(參見《GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding》與《Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity》)。
  • 分層稀疏:如 Qwen3 等模型會在不同網路深度動態調整 K 值,以達到更細粒度的條件計算。

3. 負載均衡與輔助損失

部分專家可能因分數偏高而持續被啟用,造成過載。為避免資源分配不均,MoE 引入輔助負載損失(Auxiliary Load Loss),通常定義為各專家接收 token 數量的變異係數:

L\_aux = λ · CV(n₁, n₂, …, n\_E) 其中 nᵢ 表示第 i 位專家在該 batch 中處理的 token 數量,λ 為平衡權重。

此損失項在預訓練時會與主損失一同最佳化,確保各專家利用率大致均勻(可參考 GShard 與 transformers 程式庫中 aux\_loss 的實作)。

六、一些經典 MoE 模型實例

以下依時間順序介紹幾個具代表性的開源 MoE 模型:

1. Sparsely‑Gated Mixture‑of‑Experts Layer(2017)

由 Shazeer 等人(Google Brain)提出(參考《Outrageously Large Neural Networks: The Sparsely‑Gated Mixture‑of‑Experts Layer》),首次在前饋層引入門控路由機制,採用可學習噪聲 Top‑K 門控(Noisy Top‑K Gating),並提出輔助負載損失(Auxiliary Load Loss)以平衡各專家負載。奠定條件計算(Conditional Computation)基石,使大規模參數下的稀疏啟用與高效訓練成為可能。

2. GShard(2020)

由 Lepikhin 等人(Google Research)提出,論文《GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding》。在 Transformer 每層 FFN 都部署 Top‑2 門控的 MoE 結構,引入專家容量(capacity)概念,可自動將專家分配到多台機器的多張 GPU;同時採用隨機路由與負載平衡策略。實現跨機專家並行(Expert Parallelism)與自動參數分片,支援 6000 億級參數模型訓練與推論。

3. Switch Transformer(2021)

由 Fedus 等人(Google Research)提出,論文《Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity》。提出 Top‑1 門控策略,使每個 token 只訪問單一專家以簡化通訊複雜度;引入容量因子(Capacity Factor)以改善負載;並支援 bfloat16 訓練。在通訊開銷與吞吐率間取得良好平衡,將模型規模擴展到 1 兆參數,同時保持高效率。

4. GLaM(2021)

由 Du 等人(Google Research)提出,論文《GLaM: Efficient Scaling of Language Models with Mixture-of-Experts》。模型含 64 個專家,每層啟用其中 2 個;採用 Mixture‑of‑Modality 路由策略,將不同模態(如文本、編碼等)任務定向到不同專家;啟用參數僅占總參數量 8%。證明稀疏啟用不僅能維持原有性能,還可進一步提升多模態與多任務學習效果。

5. DeepSeek‑MoE(2024)

由 DeepSeek AI 團隊提出,論文《DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models》。採用細粒度專家切分(Fine‑Grained Expert Segmentation),將 FFN 拆分為更小專家;引入共享專家(Shared Experts)處理通用知識;每個 token 啟用 6 位專家。在提升專家專業化與減少冗餘資訊方面提供新思路。

6. LLaMA‑MoE(2024)

由 Sys4NLP 團隊基於 Meta LLaMA2 開發,可參考《LLaMA‑MoE: Building Mixture of Experts from LLaMA with Continual Pre-training》。支援隨機、聚類、共啟用圖等多種專家切分方法;提供 Top‑K 噪聲門控與 Switch 單專家門控兩種策略;專家參數設計趨向輕量化。展示 MoE 在輕量模型上的應用路徑。

7. Qwen3‑235B‑A22B(2025)

由阿里巴巴通義千問團隊發布,可參考官方文件與開源倉庫。總參數量 2350 億,含 128 位專家;採用分層稀疏調度機制動態調整啟用專家數量,單 token 啟用 8 位專家;原生支援 32K 上下文,並可透過 YaRN 技術擴展到 128K;同時使用 GQA 注意力與異步卸載等技術提升並行計算效率。融合分層調度與動態啟用,為超長文本與高吞吐場景提供新解法並降低推論成本。

七、MoE 的適用場景與侷限性

在實際部署中,MoE 與傳統 Transformer 各有優勢,需依資源與需求選擇:

  • 多機器、高吞吐場景更適合 MoE
    • 專家並行:MoE 的專家子網路可拆分到多台機器或多個設備並行執行(Expert Parallelism),每台機器只負責少數專家計算,避免複製整個模型造成顯存壓力。
    • 條件路由:門控網路只需傳遞必要的路由資訊,不需同步所有參數,顯著降低通訊開銷並提升吞吐率。
    • 彈性擴展:集群擴容時只需新增或重新分配專家,模型容量與硬體資源高度解耦。
  • 單機、低顯存或低吞吐需求更適合稠密 Transformer
    • 路由與調度開銷:MoE 在門控計算、專家狀態管理與跨設備通訊上會有額外成本,單機場景可能反而提高延遲並增加實作複雜度;
    • 部署較簡單:標準 Transformer 不需額外負載均衡或路由策略,程式與框架更成熟,模型大小與效率更容易權衡;
    • 資源利用率:在顯存與算力有限環境,可透過剪枝、量化或蒸餾等方式優化稠密網路,以取得更高性價比。

八、總結與展望

回顧 MoE 的發展脈絡,從早期的「噪聲 Top‑K 門控」到後來的「跨機自動分片」,再到「單專家路由」、「多模態專家」、「細粒度切分」與「分層稀疏調度」等創新,每一次迭代都在追求「更大的模型容量」與「更少的計算資源消耗」之間的平衡點。MoE 的核心思想在於條件計算(Conditional Computation),賦予模型高度可擴充性與高效率,但也帶來路由、負載均衡與通訊等挑戰。

MoE 已成為深度學習大模型領域的重要分支;理解其設計原理與應用場景,對推動下一代高效智慧系統至關重要。


一些詞語

Token:指模型在處理文本時使用的最小單位,例如一個漢字或一個英文單字。

參數(Parameters):指神經網路中可被訓練的數值,就像樂高積木的塊數一樣,參數越多,模型就越複雜。

條件計算(Conditional Computation):依據輸入內容,只啟用模型中的一部分專家進行運算,就像向特定領域的老師請教,而不是召開全體會議。

專家(Expert):MoE 模型中的子網路,每個專家負責處理特定類型資料或特徵,就像不同領域的專家老師。

門控網路(Router/Gating Network):決定每個輸入 token 應分配給哪些專家的模組,就像負責派工的調度員。

啟用參數(Activated Parameters):一次計算中實際參與運算的參數數量,通常遠小於總參數量。

稀疏啟用(Sparse Activation):每次計算只啟用一部分專家或參數,以節省計算資源。

稠密模型(Dense Model):傳統模型,每次計算都要動用全部參數參與,像所有成員都要參加會議。

FLOPs(浮點運算次數):衡量模型計算量的指標,數值越低代表越省資源。

顯存(GPU Memory):顯示卡上用於存放模型參數與中間結果的空間,消耗越低越容易部署大模型。

前饋網路(Feed‑Forward Network,FFN):Transformer 架構中的神經網路層,主要負責對輸入做非線性變換。

多頭注意力(Multi‑Head Attention):Transformer 架構中的機制,使模型可同時關注輸入的不同部分。

Top‑K 選擇/路由(Top‑K Routing):門控網路選擇分數最高的 K 位專家參與計算的策略。

Noisy Gating(噪聲門控):在專家選擇階段引入噪聲,以提升魯棒性並改善負載均衡。

輔助負載損失(Auxiliary Load Loss):用於平衡各專家工作量的特定損失函數,防止熱門專家過度繁忙。

變異係數(Coefficient of Variation,CV):衡量負載均衡程度的統計量,CV 越小代表分配越均勻。

專家並行(Expert Parallelism):將不同專家分布到多台機器上,每台只執行其負責的子網路。

分散式並行(Distributed Parallelism):將模型或資料分布到多台設備上同時計算,以提升效率。

Pipeline 並行:將模型不同部分分配到不同設備上,像流水線一樣分步處理。

Tensor 並行:將單一網路層的計算分散到多台設備並行執行。

容量因子(Capacity Factor):控制每位專家最多能處理多少 token 的參數,防止單一專家過載。

專家容量(Expert Capacity):每位專家一次前向計算可處理的最大 token 數量。

細粒度專家切分(Fine‑Grained Expert Segmentation):將前饋網路拆分成更多且更小專家,以提升專業化程度。

共享專家(Shared Experts):為多個任務或多個輸入共享的專家,主要處理通用知識。

分層稀疏(Hierarchical Sparsity):在不同網路層級動態調整啟用專家數量,以實現更細緻的條件計算。

GQA(Grouped Query Attention):高效注意力機制,可提升大型模型推論效率。

異步卸載(Asynchronous Offloading):以異步方式將部分計算或資料轉移到其他設備,優化資源利用。

Mixture‑of‑Modality:依輸入模態(例如文本、編碼等)分配到不同專家處理,以提升多模態能力。

剪枝(Pruning):移除模型中較不重要的參數,以減少模型大小與計算量。

量化(Quantization):用較低精度資料型別存儲與計算參數,以降低資源消耗。

蒸餾(Distillation):用大模型訓練小模型,使小模型繼承大模型能力。

路由(Routing):門控網路為每個輸入 token 選擇合適專家的過程。

主損失(Main Loss):模型訓練的主要最佳化目標,例如交叉熵損失。

輔助損失(Auxiliary Loss):輔助最佳化目標,用於提升某些特性(例如負載均衡)。

專家切分(Expert Partitioning):將大型網路切分為多位專家的過程,可用聚類、圖分割等方法實現。

共啟用圖分割(Co‑activation Graph Partitioning):依神經元啟用相關性進行專家切分的方法。

梯度感知分割(Gradient‑aware Partitioning):依梯度資訊進行專家切分的方法。

專家路由(Expert Routing):將輸入分配給合適專家的過程。

Top‑1/Top‑2 路由:每個 token 只分配給分數最高的 1 位或 2 位專家。

容量(Capacity):每位專家一次前向計算可處理的最大 token 數量。

啟用比例(Activation Ratio):每次計算中啟用參數占總參數的比例。

吞吐率(Throughput):單位時間內模型可處理的資料量,越高代表效率越好。

延遲(Latency):模型處理一次輸入所需時間,越低越好。

自動分片(Automatic Sharding):自動將模型參數分配到多台設備,以提升並行計算效率。

bfloat16:一種低精度浮點格式,常用於大型模型訓練以節省顯存。

YaRN 技術:用於擴展上下文長度的技術,可提升模型處理長文本能力。