## 介紹 Mixture of Expert (MOE) 混合專家模型(MoE)是一種機器學習技術,起源於1991年的「Adaptive Mixture of Local Experts」論文,其設計靈感在於將複雜任務分解為多個子問題,並交由專門的「專家」子模型處理,這種方法的核心在於利用一個門控網絡(gating network)來動態分配輸入數據,讓每個專家專注於自己擅長的領域,從而提升整體模型的性能與效率。  ## 什麼是專家(Expert)以及門控網絡(Gating network)? 在語言模型中,MoE 通常被整合進 Transformer 架構中,取代傳統的前饋網絡層(Feedforward Neural Network, FNN),門控網絡會根據每個輸入標記的特徵,選擇最適合的專家進行處理,這種稀疏激活的設計使得模型能在保持高效計算的同時,擁有數以萬億計的參數。 * 專家:通常由 FFN 組成,且每個專家是一個獨立的子網絡,可能具有不同的結構或參數配置。 * 門控網絡:根據輸入特徵選擇少數專家來參與計算,例如選擇前 k 個得分最高的專家(top-k gating),或使用 softmax 門控選擇少數專家,而未被選中的專家則不執行計算。 MoE 模型透過將任務分配給多個「專家」子模組來提高大型深度學習任務的處理效率,例如在語言模型中,MoE 架構可以更有效地處理輸入並生成輸出。 ## 實際案例:Mixtral-8x7B vs. Llama2-70B ### Mixtral-8x7B Mixtral 採用僅解碼器(decoder-only)的 Transformer 架構,其中每個前饋塊(FeedForward block)並非固定的單一參數組,而是由 8 個不同的專家(Experts)組合而成,這些專家各自擁有獨立的參數集,專門處理特定的輸入特徵。 路由器(Router)會根據當前標記的特徵,從 8 個專家中選擇兩個最適合的專家進行處理,並將這兩個專家的輸出相加,作為該層對該標記的最終輸出。 由於 SMoE 設計,每次處理一個 token 時僅使用 12.9B(129億)個參數,這使得其推理成本和延遲與 12.9B 參數的模型相當,大幅提高了效率,從而在增加模型總參數的同時,有效控制了計算成本和延遲。  :::info 需要注意的是,雖然模型名稱為 "8x7B",但這並不意味著總參數量為 8 個 70 億參數的簡單相加(即 560 億)。實際上,只有 Transformer 中的前饋塊被擴展了 8 倍,其他部分保持不變,因此總參數量約為 467 億。 ::: ### Llama2-70B Llama2-70B 是由 Meta AI 開發的一款大型語言模型,基於傳統的 Transformer 架構,採用密集(dense)設計,與 Mixtral-MoE 最大不同之處在於,它的參數在處理每個輸入時都會被全面使用,沒有動態選擇機制的特性。 ### Mixtral-8x7B 和 Llama2-70B 性能比較 下方表格比較了 Mixtral-8x7B 和 LLaMA 2 系列模型在多項基準測試(benchmarks)中的表現,並特別強調了它們在不同規模的「活躍參數數量(Active Params)」下的性能差異,這些測試涵蓋了常識推理、數學計算、程式碼生成和語言理解等不同類型的任務。  ## MOE 主要優勢與挑戰 ### 優勢 1. 計算效率提升:每次僅啟動部分專家,降低整體計算成本。 1. 參數規模擴展性:可輕鬆擴展至數兆級參數,而不顯著增加計算需求。 1. 推理加速與可伸縮性:可根據資源條件動態調整專家選擇,提高推理效率。 1. 模型能力提升:不同專家可專門學習特定類型的輸入,提高模型的泛化能力。 ### 挑戰 * 負載不均衡:部分專家可能被過度使用,而其他專家則幾乎不被選擇。 * 訓練不穩定性:門控網路的離散選擇使梯度更新不平穩,影響模型收斂。 * 通信與記憶體開銷:專家網路通常需要跨設備通信,可能導致延遲和額外開銷。 * 實現與調試難度高:門控策略與專家分配方式影響性能,需要精細調參。 --- :::info 以上就是這篇文章「Mixture of Expert (MOE)」的所有內容,第一次看的人會花比較多時間消化吸收,這是很正常的事情,若有任何問題,歡迎在下方與我聯繫、討論,接下來也會繼續分享相關文章,敬請期待。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up