Mixtral 8x7B 的推出, 使我們開始更多地關(guān)注 基于MoE 的大模型架構(gòu), 那么,什么是MoE呢?
1. MoE溯源
MoE的概念起源于 1991 年的論文 Adaptive Mixture of Local Experts(https://www.cs.toronto.edu/~hinton/absps/jjnh91.pdf)。這個概念與集成學(xué)習(xí)方法相似,旨在為由多個單獨網(wǎng)絡(luò)組成的系統(tǒng)并建立一個監(jiān)管機制。在這種系統(tǒng)中,每個網(wǎng)絡(luò)處理訓(xùn)練樣本的不同子集,專注于輸入空間的特定區(qū)域。
后來,論文(https://arxiv.org/abs/1312.4314)探索了將 MoE 作為更深層網(wǎng)絡(luò)的一個組件。這種方法允許將 MoE 嵌入到多層網(wǎng)絡(luò)中的某一層,使得模型既大又高效。而且, 由研究開始探索基于輸入令牌動態(tài)激活或停用網(wǎng)絡(luò)組件的方法。2017年,論文(https://arxiv.org/abs/1701.06538)將這一概念應(yīng)用于 137B 的 LSTM ,通過引入稀疏性,這項工作在保持高規(guī)模的同時實現(xiàn)了快速的推理速度。
總之,MoE 的引入使得訓(xùn)練具有數(shù)千億甚至萬億參數(shù)的模型成為可能。
2.什么是MoE?
從溯源中可以看到,MoE 的基本思想在于“人多力量大”,這意味著利用多個專家網(wǎng)絡(luò),每個專家網(wǎng)絡(luò)專門處理數(shù)據(jù)的不同方面,以獲得更好的性能。其目的是創(chuàng)建一個動態(tài)系統(tǒng),在這個系統(tǒng)中,可以根據(jù)輸入數(shù)據(jù)利用各種專家的優(yōu)勢,從而比單一模型能夠?qū)崿F(xiàn)的預(yù)測更加靈活和準(zhǔn)確。
在技術(shù)上,MoE是一種集成學(xué)習(xí)方法,把一個大任務(wù)分解成更小的部分,讓不同的專家處理每個部分。然后,有一個聰明的決策者,會根據(jù)情況決定采納哪位專家的建議,所有這些建議都被混合在一起。
圖片
這種方法有四個主要步驟:
1. 把大問題分成小塊;
2. 為每一塊訓(xùn)練一個超級聰明的專家。
3. 引入一個決策者,也就是眾所周知的門控模型,來選擇應(yīng)該由哪位專家?guī)ь^。
4. 收集專家的意見和決策者的選擇,提出最終的預(yù)測。
典型地,MoE 是一類transformer模型, 使用“稀疏”方法,其中每個輸入只使用模型組件的一個子集。這種設(shè)置允許更有效的預(yù)訓(xùn)練和更快的推理,同時管理一個更大的模型大小。每個專家模型一般都是一個神經(jīng)網(wǎng)絡(luò),通常是一個前饋網(wǎng)絡(luò)(FFN) ,專門處理輸入數(shù)據(jù)的不同方面,使模型能夠更有效地處理范圍更廣的任務(wù)。
圖片
MoE的優(yōu)勢在于更少的計算工作使得模型的預(yù)訓(xùn)練更快,與為更多步驟訓(xùn)練更小的模型相比,為更少步驟訓(xùn)練更大的模型可以產(chǎn)生更好的結(jié)果。在推理過程中,與其他大模型相比,參數(shù)數(shù)目相同的 MoE 模型表現(xiàn)出更快的推理速度。盡管有許多參數(shù),但只使用了一個子集,從而導(dǎo)致更快的預(yù)測。
3. MoE的組成
在MoE系統(tǒng)中,傳統(tǒng) Transformer 模型中的每個前饋網(wǎng)絡(luò) (FFN) 層替換為 MoE 層,其中 MoE 層由兩個核心部分組成: 一個門控網(wǎng)絡(luò)和若干數(shù)量的專家。
同時,token在封裝輸入數(shù)據(jù)中的特征和信息方面發(fā)揮著重要作用。token表示為高維向量,作為一種綜合的結(jié)構(gòu)化格式,用于編碼輸入的相關(guān)特征。每個token由多個維度組成,每個維度表示數(shù)據(jù)的特定特征或方面。通過以高維向量格式組織信息,系統(tǒng)可以有效地捕捉輸入數(shù)據(jù)中的復(fù)雜性和細(xì)微差別,為進一步分析提供豐富的數(shù)據(jù)來源。
token的高維表示使系統(tǒng)內(nèi)的專家能夠從數(shù)據(jù)中提取詳細(xì)的見解和模式。通過將token作為高維向量處理,專家模型可以利用先進的算法和技術(shù)來發(fā)現(xiàn)隱藏的相關(guān)性和關(guān)系,提高MoE系統(tǒng)的整體分析能力。
3.1 專家模型
專家模型是針對較小問題創(chuàng)建的模型,不僅僅局限于神經(jīng)網(wǎng)絡(luò),也可以是任何類型的模型。對每個專家模型進行訓(xùn)練,使其能夠在輸入空間的指定區(qū)域內(nèi)專門預(yù)測數(shù)據(jù)點。當(dāng)然,可以神經(jīng)網(wǎng)絡(luò)來同時扮演決策者和專家的角色,這時一般會稱為“混合密度網(wǎng)絡(luò)”。所有這些專家都得到了相同的數(shù)據(jù)集 ,都會嘗試在此基礎(chǔ)上做出預(yù)測。
“專家”通常指的是模型的一個組成部分,專注于數(shù)據(jù)中特定類型的任務(wù)或模式(如代碼生成、推理、匯總) 。其專業(yè)化程度取決于他們接受的訓(xùn)練數(shù)據(jù)和模型本身的結(jié)構(gòu),更多的是關(guān)于計算任務(wù)的本質(zhì)(例如,識別特定的模式,處理特定類型的輸入) ,而不是特定領(lǐng)域的知識。
MoE 模型中,每個專家模型一般是一個經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò),能夠很好地處理整個數(shù)據(jù)或任務(wù)的子集。這些專家之前的共同骨干網(wǎng)絡(luò)充當(dāng)特征提取器,將原始輸入轉(zhuǎn)化為專家可以更有效地工作的高級表示。這種設(shè)置允許每個專家關(guān)注它最適合處理的模式或數(shù)據(jù)特征,從而實現(xiàn)更加細(xì)致和準(zhǔn)確的預(yù)測。
3.2 門控模型
在給定的情況下,我們需要一個決策者來決定遵循哪位專家的建議,這個決策者被稱為門控模型。門控模型決定了對于給定的輸入應(yīng)該使用哪個專家模型的預(yù)測。門控模型學(xué)習(xí)將輸入路由到最合適的專家當(dāng)門控模型是一個神經(jīng)網(wǎng)絡(luò)的時候, 有時也稱為門控網(wǎng)絡(luò)。門控網(wǎng)絡(luò)基本上起到?jīng)Q策者的作用,根據(jù)不同專家的熟練程度和與輸入數(shù)據(jù)的相關(guān)性為他們分配權(quán)重。也就是說,門控網(wǎng)絡(luò)根據(jù)給出的信息動態(tài)調(diào)整專家模型的權(quán)重。
圖片
門控網(wǎng)絡(luò)是 MoE 區(qū)別于一個簡單的模型集合的關(guān)鍵。它是一個可訓(xùn)練的組件,學(xué)會根據(jù)輸入數(shù)據(jù)為每個專家的輸出分配適當(dāng)?shù)淖⒁饬?或權(quán)重)。這種分配不是任意的; 它是由門控網(wǎng)絡(luò)對哪位專家最有可能為給定輸入產(chǎn)生正確輸出的評估決定的。門控機制有效地引導(dǎo)集合,將輸入導(dǎo)向最相關(guān)的專家,并將他們的輸出合成為一個內(nèi)聚預(yù)測。這種動態(tài)路由功能允許 MoE 模型具有高度的適應(yīng)性和高效性,并為每個任務(wù)利用最適當(dāng)?shù)馁Y源。
當(dāng)使用神經(jīng)網(wǎng)絡(luò)模型時,門控網(wǎng)絡(luò)和專家模型一起訓(xùn)練,這種訓(xùn)練就像是教他們?nèi)绾蜗褚粋€團隊一樣工作。過去,用一種叫做“期望最大化”的方法來解決這個問題。門控網(wǎng)絡(luò)可能會給每個專家一個看起來像概率的分?jǐn)?shù),表明它對每個專家的預(yù)測有多么信任。
隨著Softmax和噪聲top-k 門機制的引入,MoE模型有了長足的進展。Softmax是一種流行的選擇,以確定每個專家模型的貢獻模型的預(yù)測。它根據(jù)每個專家與輸入數(shù)據(jù)的相關(guān)性為其分配權(quán)重,較高的權(quán)重給予更相關(guān)的專家。噪聲 Top-k 門控機制通過選擇一個Top-k 專家子集進行預(yù)測來引入隨機性。這種隨機元素有助于在專家選擇過程中引入多樣性,提高模型的魯棒性和泛化能力。
4. MoE 的實現(xiàn)
實現(xiàn)MoE系統(tǒng)的關(guān)鍵在于體系結(jié)構(gòu)的設(shè)計,其中一個比較前沿的方法涉及到利用Switch Transformer結(jié)構(gòu)來集成混合的專家模型層。該體系結(jié)構(gòu)使系統(tǒng)能夠利用多個專家模型在作出決定和預(yù)測方面的綜合專門知識。
圖片
在構(gòu)建Switch Transformer體系結(jié)構(gòu)時,必須保證專家混合層的無縫集成。這些層負(fù)責(zé)從不同的角度處理和分析數(shù)據(jù),使系統(tǒng)能夠根據(jù)各種不同的見解作出明智的決定。典型的實現(xiàn)步驟如下:
- 結(jié)合Switch Transformer框架,設(shè)計MoE系統(tǒng)的總體架構(gòu);
- 將專家模型混合層集成到系統(tǒng)中,以支持并行的數(shù)據(jù)處理;
- 實現(xiàn)根據(jù)上下文和信息類型將數(shù)據(jù)路由到適當(dāng)專家的機制;
- 優(yōu)化訓(xùn)練過程,微調(diào)專家權(quán)重和切換機制。
實現(xiàn)MoE系統(tǒng)的另一個關(guān)鍵點是動態(tài)路由和負(fù)載均。此策略確保token在整個系統(tǒng)中有效分布,優(yōu)化性能和資源利用率。動態(tài)路由涉及到根據(jù)工作量和信息的復(fù)雜性實時分配任務(wù)和數(shù)據(jù)給不同的專家模型。通過動態(tài)路由token,系統(tǒng)能夠適應(yīng)不斷變化的需求,在運行過程中保持最佳效率。負(fù)載均衡對于在專家之間均勻分配計算任務(wù)和數(shù)據(jù)處理起著至關(guān)重要的作用。這可以防止瓶頸和資源浪費,最終提高系統(tǒng)的整體性能。一般的策略實現(xiàn)方式如下:
- 監(jiān)控每個專家模型的工作負(fù)載,并動態(tài)地重新分發(fā)token以保持平衡。
- 實現(xiàn)基于緊迫性和復(fù)雜性對任務(wù)進行優(yōu)先排序的算法,以優(yōu)化處理效率。
- 利用反饋機制不斷調(diào)整負(fù)載均衡參數(shù)。
圖片
下面這些開源項目可以用于訓(xùn)練MoE:
- Megablocks: https://github.com/stanford-futuredata/megablocks
- Fairseq: https://github.com/facebookresearch/fairseq/tree/main/examples/moe_lm
- OpenMoE: https://github.com/XueFuzhao/OpenMoE
5. MoE 的訓(xùn)練
MoE模型的訓(xùn)練是一個微妙的過程,其中每個專家在特定類型的推理中變得更好。它不像直接在特定任務(wù)或領(lǐng)域中訓(xùn)練一個專家那樣簡單。
5.1 MoE 系統(tǒng)訓(xùn)練的特點
由于模型的體系結(jié)構(gòu)和它所暴露的數(shù)據(jù)組合,MoE 模型中專家的專業(yè)化通常在訓(xùn)練過程中自然出現(xiàn),特點如下:
- 多樣化數(shù)據(jù): 該模型是在包含廣泛任務(wù)或領(lǐng)域的多樣化數(shù)據(jù)集上進行訓(xùn)練的。這種多樣性至關(guān)重要,因為它使每個專家面臨不同類型的數(shù)據(jù)和問題。
- 門控機制: MoE 模型有一個門控機制,它決定哪個專家處理輸入數(shù)據(jù)的哪個部分。在訓(xùn)練期間,這個門控網(wǎng)絡(luò)學(xué)會根據(jù)不同專家模型的專長向他們發(fā)送不同類型的數(shù)據(jù)。
- 專家模型: 隨著訓(xùn)練的進行,每個專家模型逐漸變得更加擅長處理特定類型的數(shù)據(jù)或任務(wù)。發(fā)生這種專門化是因為專家接收并學(xué)習(xí)他們在處理數(shù)據(jù)時最有效的數(shù)據(jù)類型。
- 反饋回路: 有一個反饋回路在起作用的時候,如果一個專家模型在某種類型的數(shù)據(jù)方面做得更好,門控機制將更有可能向該專家發(fā)送類似的數(shù)據(jù)。這加強了每個專家的專業(yè)化。
- 正規(guī)化和損失函數(shù): 訓(xùn)練過程通常包括正規(guī)化技術(shù)和專門的損失函數(shù),以鼓勵有效的學(xué)習(xí),避免出現(xiàn)一個專家成為“萬事通”的情況,從而確保專業(yè)化的分布。
- 能力限制: 通過對模型施加能力限制,該模型確保沒有任何一位專家任務(wù)負(fù)擔(dān)過重,促進所有專家之間學(xué)習(xí)的平衡分配。
- 微調(diào)和調(diào)整: 模型可能經(jīng)歷微調(diào)階段,其中強調(diào)某些類型的任務(wù),進一步完善每個組件的專門知識。指令調(diào)優(yōu)已經(jīng)成為超越傳統(tǒng)稠密模型性能的關(guān)鍵策略。通過優(yōu)化模型中每個專家執(zhí)行的指令,以在不增加模型復(fù)雜性的情況下獲得更高的精度和效率。
專家模型通常不會只專注于一個狹窄的任務(wù)類型,“專業(yè)知識”應(yīng)該被理解為某些類型的數(shù)據(jù)或任務(wù)的效率或有效性的相對提高,而不是嚴(yán)格的領(lǐng)域限制。
5.2 聯(lián)合訓(xùn)練
優(yōu)化MoE模型的一個重要策略是對門控網(wǎng)絡(luò)與其他組件進行聯(lián)合訓(xùn)練。在聯(lián)合訓(xùn)練過程中,門控網(wǎng)絡(luò)的參數(shù)通過整個模型的反向傳播進行更新。這個過程允許門控網(wǎng)絡(luò)根據(jù)從專家模型收到的反饋來調(diào)整其路由決策。該模型通過對所有組件進行集成優(yōu)化,可以更好地平衡不同專家的貢獻,優(yōu)化路由機制,達到最優(yōu)結(jié)果。
5.3 指令調(diào)優(yōu)
指令調(diào)優(yōu)方法同樣可用于訓(xùn)練MoE系統(tǒng)。這些方法著重于調(diào)整路由機制和專家模型,以提高模型在不同任務(wù)和輸入數(shù)據(jù)分布中的性能。常見的微調(diào)策略包括:
- 軟路由: 軟路由技術(shù)使用連續(xù)概率來分配每個專家模型對最終輸出的貢獻。通過將路由決策建模為概率,特別是在多個專家模型可能提供互補信息的情況下,該模型可以執(zhí)行更平滑和更靈活的路由。
- 硬路由: 與軟路由不同,硬路由涉及為給定輸入選擇單個專家模型的離散路由決策。硬路由策略更易于實現(xiàn)和解釋,因此適用于需要顯式專家選擇的任務(wù)。
- 正則化技術(shù): 正則化方法,如 L1或 L2正則化可以應(yīng)用到路由參數(shù),以防止過擬合并提高泛化能力。通過懲罰過于復(fù)雜的路由決策,正則化可以鼓勵模型關(guān)注更健壯和可解釋的路由策略。
- 自適應(yīng)路由: 自適應(yīng)路由機制根據(jù)輸入數(shù)據(jù)和模型的當(dāng)前狀態(tài)動態(tài)調(diào)整路由概率或決策。自適應(yīng)路由策略使模型能夠根據(jù)數(shù)據(jù)中不斷變化的模式調(diào)整自己的路由行為,從而實現(xiàn)更加自適應(yīng)和高效的專家選擇。
6. MoE 的典型應(yīng)用
MoE 架構(gòu)已經(jīng)被用來為語言模型建立大型的、計算效率高的神經(jīng)網(wǎng)絡(luò)。它們可以處理計算模式或任務(wù),如代碼生成、推理和匯總。MoE已經(jīng)應(yīng)用于強化學(xué)習(xí)問題,每個專家都可以專門處理環(huán)境的不同方面。在遷移學(xué)習(xí)中,MoE可以用來將在一個領(lǐng)域?qū)W到的知識應(yīng)用到另一個相關(guān)領(lǐng)域。
另外,MoE正在個性化推薦系統(tǒng)方面取得長足進展,它們可以通過讓不同的專家參與不同類型的內(nèi)容或用戶簡介來迎合用戶的不同偏好。這種基于輸入數(shù)據(jù)進行適應(yīng)和專門化的能力使得 MoE 對于未來的應(yīng)用程序特別有吸引力。
舉例而言,谷歌的 Gemini 1.5采用了MoE架構(gòu),這種架構(gòu)使Gemini 1.5更有效的訓(xùn)練和服務(wù)。它將您的請求路由到一組較小的“專家”神經(jīng)網(wǎng)絡(luò),這樣響應(yīng)速度更快,質(zhì)量更高。Gemini 1.5 Pro,這是一個中等大小的多模態(tài)模型,針對不同任務(wù)的縮放進行了優(yōu)化。它的性能與1.0 Ultra 相當(dāng),后者可能是迄今為止谷歌最重要的模型。Gemini 1.5 Pro 還在長語境理解方面引入了一個突破性的實驗特性。它提供了一個標(biāo)準(zhǔn)的128,000 token 上下文窗口,但是有限的開發(fā)人員和企業(yè)客戶可以使用最多100萬token的上下文窗口來進行嘗試。
另一個應(yīng)用示例是Mixtral 8x7B ,它使用稀疏混合專家架構(gòu)(SMoE)。它的架構(gòu)與Mixtral 7B 相同,不同之處在于每一層包含八個前饋網(wǎng)絡(luò)。對于每一個token,在每一層,門控網(wǎng)絡(luò)選擇兩個專家來處理當(dāng)前狀態(tài)并合并他們的輸出。因此,每個令牌都可以訪問47B 參數(shù),但是在推理期間只使用13B 活動參數(shù)。Mistral 8x7B 在所有評估的基準(zhǔn)測試中都優(yōu)于或匹配 Llama 270B 和 GPT-3.5。特別爹,Mixtral 在數(shù)學(xué)、代碼生成和多語言基準(zhǔn)測試方面遠(yuǎn)遠(yuǎn)超過了Llama 270B 。
圖片
7. MoE 的簡單示例
MoE 模型通常用于處理復(fù)雜的數(shù)據(jù)分布,并根據(jù)不同的專家子模型進行預(yù)測。下面使用 TensorFlow/Kera 實現(xiàn)一個基本的 MoE 模型步驟。
(1)定義專家模型, 可以是任何典型的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dense, Input, Lambda, Layer, Softmax
from tensorflow.keras.models import Model
def create_expert_model(input_dim, output_dim):
inputs = Input(shape=(input_dim,))
x = Dense(64, activatinotallow='relu')(inputs)
x = Dense(32, activatinotallow='relu')(x)
outputs = Dense(output_dim, activatinotallow='softmax')(x)
model = Model(inputs=inputs, outputs=outputs)
return model
(2)定義門控網(wǎng)絡(luò),該網(wǎng)絡(luò)接受輸入并輸出每個專家的門控系數(shù)(權(quán)重),這些系數(shù)決定了每個專家對最終預(yù)測的貢獻。
def create_gating_network(input_dim, num_experts):
inputs = Input(shape=(input_dim,))
x = Dense(32, activatinotallow='relu')(inputs)
x = Dense(num_experts, activatinotallow='softmax')(x)
outputs = x
model = Model(inputs=inputs, outputs=outputs)
return model
(3)創(chuàng)建 MoE 模型,使用門控機制來計算專家模型預(yù)測的加權(quán)和
def create_moe_model(input_dim, output_dim, num_experts):
input_layer = Input(shape=(input_dim,))
expert_models = [create_expert_model(input_dim, output_dim) for _ in range(num_experts)]
gating_network = create_gating_network(input_dim, num_experts)
expert_outputs = [expert(input_layer) for expert in expert_models]
gating_coefficients = gating_network(input_layer)
def moe_function(args):
expert_outputs, gating_coefficients = args
return tf.reduce_sum(expert_outputs * tf.expand_dims(gating_coefficients, axis=-1), axis=1)
moe_output = Lambda(moe_function)([expert_outputs, gating_coefficients])
model = Model(inputs=input_layer, outputs=moe_output)
return model
(4)選擇適當(dāng)?shù)膿p失函數(shù),編譯模型并在數(shù)據(jù)集上對其進行訓(xùn)練
input_dim = X_train.shape[1]
output_dim = len(np.unique(y_train))
num_experts = 5
moe_model = create_moe_model(input_dim, output_dim, num_experts)
moe_model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
moe_model.fit(X_train, y_train, epochs=10, batch_size=32)
一句話小結(jié)
在復(fù)雜的門控機制指導(dǎo)下,智能地結(jié)合多個專家網(wǎng)絡(luò),基于MoE 系統(tǒng)的大模型提供了強大的靈活性、效率和準(zhǔn)確性。
【參考文獻】
- Mixtral of Experts,https://arxiv.org/abs/2401.04088
- Improving Expert Specialization in Mixture of Experts,https://arxiv.org/abs/2302.14703
- Merging Experts into One: Improving Computational Efficiency of Mixture of Experts,https://arxiv.org/abs/2310.09832
- https://huggingface.co/blog/zh/moe
- https://blog.google/technology/ai/google-gemini-next-generation-model-february-2024/