圖解 MoE 模型
在查看最新發布的 LLMs 時,你可能會在標題中看到 “MoE” 這個詞。那麼,這個 “MoE” 到底代表什麼?爲什麼現在有這麼多 LLM 都在使用它呢?
下面我們將通過 50 多個圖示來詳細探討這一重要組件:專家混合模型(MoE)!
目錄
第一部分:什麼是專家混合模型?
第二部分:專家的角色
-
密集層(Dense Layers)
-
稀疏層(Sparse Layers)
-
專家能學到什麼?
-
專家的架構
第三部分:路由機制
-
路由器(Router)
-
專家的選擇
-
路由的複雜性
第四部分:負載平衡與優化
-
KeepTopK 策略
-
Token 選擇策略
-
輔助損失函數
-
專家容量
-
使用 Switch Transformer 簡化 MoE
-
切換層(Switching Layer)
-
容量因子(Capacity Factor)
-
簡化的輔助損失函數
第五部分:視覺模型中的專家混合模型
-
Vision-MoE
-
從稀疏 MoE 到軟 MoE
第六部分:帶有 Mixtral 8x7B 的激活與稀疏參數
什麼是專家混合模型?
專家混合模型(MoE)是一種通過使用多個不同的子模型(或 “專家”)來提升 LLM 質量的技術。
MoE 的兩個主要組成部分爲:
專家(Experts):每個前饋神經網絡層(FFNN)現在都有一組可以選擇的 “專家”。這些“專家” 通常本身也是前饋神經網絡(FFNN)。
路由器或門控網絡(Router 或 Gate Network):決定哪些 token 被髮送到哪些專家。
在具有 MoE 的 LLM 的每一層中,我們可以發現一些(相對專業化的)專家:
路由器(或門控網絡)負責爲每個輸入選擇最合適的專家:
專家
要理解專家的含義及其工作方式,首先需要了解 MoE 用來替代的內容:密集層(Dense Layers)。
密集層(Dense Layers)
專家混合模型(MoE)最初是從大型語言模型(LLMs)中相對基礎的功能開始的,即前饋神經網絡(Feedforward Neural Network, FFNN)。
請記住,在標準的 Decode-only Transformer 架構中,FFNN 通常應用於層歸一化(Layer Normalization)之後:
然而,FFNN 的規模增長速度很快。爲了學習這些複雜的關係,它通常需要對接收到的輸入進行擴展:
稀疏層(Sparse Layers)
在傳統的 Transformer 中,FFNN 被稱爲密集模型(Dense Model),因爲它的所有參數(包括權重和偏置項)都會被激活。所有參數都被用於計算輸出,沒有任何部分被遺棄。
如果我們仔細觀察密集模型,可以發現輸入在某種程度上激活了所有參數:
爲了說明這一點,我們可以將密集模型分解爲多個部分(稱爲專家),並重新訓練它。隨後,在某一時刻只激活部分專家:
當面對一個問題時,我們可以選擇最適合該任務的專家:
專家學習了什麼?
正如我們之前所見,專家學習的信息比整個領域的信息更加細粒度。因此,有時將它們稱爲 “專家” 可能會產生誤導。
在 Mixtral 8x7B 論文中,每個 token 都被其選擇的第一個專家進行了着色,這是一個很好的例子。
https://arxiv.org/pdf/2401.04088
這一可視化結果也表明,專家往往更關注句法,而不是某個特定領域的內容。
因此,儘管解碼器中的專家似乎沒有特定的專業化,但它們確實在某些類型的 tokens 上表現得更加一致。
專家的架構
雖然將專家可視化爲密集模型的隱藏層被切分成若干部分很有幫助,但實際上它們通常本身就是完整的 FFNN。
路由機制(The Routing Mechanism)
現在我們有了一組專家,模型如何知道該使用哪些專家呢?
在專家之前會加入一個路由器(也稱爲門控網絡),它會被訓練來選擇每個 token 應選擇的專家。
路由器(The Router)
路由器(或門控網絡)本身也是一個 FFNN,它根據特定的輸入選擇專家。路由器會輸出概率值,並利用這些概率來選擇最匹配的專家:
路由器和專家(其中僅選擇少部分)共同構成了 MoE 層:
兩者都使用路由器來選擇專家,但稀疏 MoE 只選擇少數幾個專家,而密集 MoE 則選擇全部專家,但可能會以不同的分佈進行選擇。
在目前的 LLM 中,當你看到 “MoE” 時,它通常指的是稀疏 MoE,因爲稀疏 MoE 允許使用部分專家,從而減少計算開銷,這對於 LLM 來說是一個重要的特性。
專家的選擇
門控網絡可以說是 MoE 中最重要的組件,因爲它不僅決定了推理時要選擇哪些專家,還決定了訓練時的選擇。
最基本的形式是,我們將輸入(x)與路由器的權重矩陣(W)相乘:
最後,我們將每個路由器的輸出與各自選擇的專家輸出相乘,並將結果相加:
路由的複雜性
然而,這個簡單的功能往往會導致路由器總是選擇相同的專家,因爲某些專家可能比其他專家學習得更快:
因此,我們希望在訓練和推理期間,各個專家的使用具有同等的重要性,這就是所謂的負載平衡。某種程度上,這是爲了防止模型在同一組專家上過擬合。
負載平衡與優化
爲了平衡專家的重要性,我們需要重點關注路由器,因爲它是決定某一時刻選擇哪些專家的主要組件。
KeepTopK
一種對路由器進行負載平衡的方法是使用一個簡單的擴展策略,稱爲 KeepTopK。通過引入可訓練的(高斯)噪聲,我們可以防止總是選擇相同的專家:
https://arxiv.org/pdf/1701.06538
然後,除希望激活的前 k 個專家(例如 2 個)以外的所有專家權重都將被設爲 -∞:
Token 選擇策略
KeepTopK 策略會將每個 token 路由到若干選定的專家。這種方法被稱爲 Token 選擇策略(Token Choice),它允許一個給定的 token 被路由到一個專家(top-1 路由):
輔助損失(Auxiliary Loss)
爲了在訓練期間實現專家的均勻分佈,網絡的常規損失中加入了輔助損失(也稱爲負載平衡損失)。
輔助損失增加了一個約束,強制專家在訓練過程中具有相同的重要性。
輔助損失的第一個組成部分是對整個批次中每個專家的路由值進行求和:
我們可以使用這些重要性得分計算變異係數(Coefficient of Variation, CV),它表示各個專家的重要性得分之間的差異程度。
專家容量(Expert Capacity)
專家的不平衡不僅體現在被選中的專家上,還體現在分配給這些專家的 token 分佈上。
例如,如果輸入 token 被不成比例地分配到某些專家上,而不是平均分配,這可能導致某些專家的訓練不足:
解決這個問題的方法是限制每個專家能夠處理的 token 數量,即專家容量(Expert Capacity)。當一個專家達到其容量時,多餘的 token 將被分配到下一個專家:
使用 Switch Transformer 簡化 MoE
第一個解決 MoE 訓練不穩定性問題(如負載平衡)的基於 Transformer 的 MoE 模型是 Switch Transformer。它通過簡化架構和訓練過程,提高了訓練穩定性。
切換層(Switching Layer)
Switch Transformer 是一個 T5 模型(編碼器 - 解碼器結構),它將傳統的 FFNN 層替換爲切換層(Switching Layer)。切換層是一個稀疏的 MoE 層,它爲每個 token 選擇單個專家(top-1 路由)。
容量因子(Capacity Factor)
容量因子是一個重要參數,它決定了每個專家可以處理的 token 數量。Switch Transformer 通過引入直接影響專家容量的容量因子擴展了這一概念。
輔助損失(Auxiliary Loss)
爲了進一步防止 token 被丟棄,Switch Transformer 引入了簡化版的輔助損失。
在簡化版的輔助損失中,不再計算變異係數,而是將分配的 token 數量與每個專家的路由概率進行加權比較:
α 是一個超參數,用於在訓練過程中微調此損失的重要性。值過高會影響主要損失函數,而值過低則無法有效進行負載平衡。
視覺模型中的專家混合模型
MoE 並不僅限於語言模型。視覺模型(如 ViT)使用 Transformer 架構,因此也有潛力使用 MoE。
快速回顧一下,ViT(Vision Transformer)是一種將圖像分割爲若干塊,並將其作爲 tokens 處理的架構。
Vision-MoE
Vision-MoE(V-MoE)是圖像模型中第一個實現 MoE 的例子之一。它將 ViT 中的密集 FFNN 層替換爲稀疏 MoE。
爲了降低硬件限制,每個專家都設置了一個較小的預定義容量,因爲圖像通常包含大量的圖像塊。然而,低容量往往會導致圖像塊被丟棄(類似於 token 溢出)。
從稀疏 MoE 到軟 MoE
在 V-MoE 中,優先評分機制能夠區分出重要和不重要的圖像塊。然而,圖像塊被分配給每個專家後,未被處理的圖像塊中的信息就會丟失。
軟 MoE(Soft-MoE)旨在通過混合圖像塊,從離散的圖像塊(token)分配轉變爲軟分配。
第一步,我們將輸入 x(圖像塊嵌入)與一個可學習矩陣 Φ 相乘。這將生成路由信息,它告訴我們某個 token 與某個專家的相關程度。
因此,我們獲得了 “軟” 圖像塊 / token,這些 token 被處理,而不是離散輸入。
Mixtral 8x7B 的激活與稀疏參數對比
MoE 的一個重要特點是其計算需求。由於在同一時刻只會使用部分專家,我們可以擁有比實際使用的更多的參數。
儘管給定的 MoE 擁有更多的參數(稀疏參數),但由於我們在推理時只使用部分專家(活躍參數),因此激活的參數較少。
讓我們以 Mixtral 8x7B 爲例來探討稀疏參數與活躍參數的數量差異。
結論
以上就是我們對專家混合模型(MoE)的探索之旅!希望這篇文章能幫助你更好地理解這一有趣技術的潛力。如今幾乎所有的模型架構中都有 MoE 變體,這也預示着它可能會長期存在下去。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/W8gWtjzGJBi9-t_--o_RHQ