JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

混合專家:更大卻更便宜

路由器如何讓一個兆參數模型以小模型的成本運行——以及為何負載均衡是會壞掉的那塊。

稠密模型每次都動用全部

在一般的——*稠密*——模型裡,每個 token 每一步都經過每一個參數。參數加倍,每個 token 的運算就加倍。這個線性耦合就是那道牆:更多參數有幫助,但你每一個 token 都得為它們全部付費,永遠如此,訓練與推論皆然。

混合專家(MoE)打破這個耦合。把區塊裡單一的前饋網路換成許多並行的前饋網路——專家——但讓每個 token 只路由經過其中幾個。一個模型可以裝下 6000 億參數的知識,而任一 token 只碰到 300 億。你買到了容量,卻不必買運算

路由器決定誰來幹活

MoE 層的腦袋是一個叫路由器(router)或(gate)的小網路。對每個 token,MoE 路由為所有專家評分,挑出最高的幾個——常是從比方 64 個中取 top-2——只把 token 送給那幾個,再依路由分數加權混合它們的輸出。路由器與其他一切一起學:訓練過程中,專家悄悄分工,路由器學會哪個 token 該去哪裡。

y=\sum_{i\in\text{top-}k} g_i(x)\,E_i(x),\qquad g(x)=\mathrm{softmax}\!\left(W_g\,x\right)

Top-k 门控:路由器用 softmax 给每个专家打分,但只混合它选中的少数几个。

scores  = router(token)              # one score per expert, e.g. 64 scores
top     = top_k(scores, k=2)         # pick the 2 highest-scoring experts
out     = sum(softmax(top.scores)[i] * expert[top.idx[i]](token)
              for i in range(2))      # blend just those two
Top-2 路由:存在 64 個專家,但這個 token 只跑 2 個。

負載均衡是它會壞的地方

MoE 有一個討厭的失效模式。訓練早期路由器找到剛好稍微好用的幾個專家,送它們更多 token,於是它們被訓練得更多、變得更好——一個富者愈富的螺旋。放著不管,少數幾個專家幹完所有活,其餘成了死重,浪費掉你大部分的容量。修這件事就是專家負載均衡的全部工夫。

  1. 輔助負載均衡損失——加一個懲罰項,推動路由器把 token 平均散到各專家,直接對抗富者愈富的螺旋。
  2. 專家容量上限——限制單一專家每批次能接受的 token 數;溢出的 token 被丟棄或原樣通過,讓沒有專家獨吞佇列。
  3. 加噪或偏置校正路由——訓練時對路由分數加擾動,讓稍微好一點的專家無法立刻壟斷,給冷門專家暖機的機會。
\mathcal{L}_{\text{aux}} = \alpha \, N \sum_{i=1}^{N} f_i \, P_i

辅助负载均衡损失惩罚每个专家的词元占比 f_i 与其平均路由概率 P_i 的乘积,促使路由趋于均匀分配。

實驗室為何忍受這份頭痛

MoE 帶來真實的複雜度:多一個要調的損失、token 在 GPU 間不均地散開、以及一個可能悄悄崩潰的路由器。實驗室全盤接受,因為擴展的數學好到難以拒絕——在每個 token 固定的運算預算下,稀疏模型達到的 loss 低於同樣活躍規模的稠密模型。DeepSeek、Mixtral 與 Qwen 最大的開放模型全是 MoE。你做的交換很清楚:花記憶體裝下所有專家,靠只跑幾個來省運算

缩放定律正是各实验室容忍 MoE 麻烦的原因——更大的容量持续把损失往下推。

对数-对数图,显示损失随模型规模增大而下降。