1.概述
MoE代表“混合專家模型”(Mixture of Experts),這是一種架構設計,透過將不同的子模型(即專家)結合起來進行任務處理。與傳統的模型相比,MoE結構能夠動態地選擇並啟用其中一部分專家,從而顯著提升模型的效率和效能。尤其在計算和引數規模上,MoE架構能夠在保持較低計算開銷的同時,擴充套件模型的能力,成為許多LLM的熱門選擇。
2.內容
本篇內容主要介紹MoE架構的兩個核心元件:專家(Experts)和路由器(Router)。這兩個元件在典型的基於LLM的架構中發揮著關鍵作用。專家是負責執行特定任務的子模型,而路由器則負責決定哪些專家需要在給定任務中被啟用,從而最佳化計算效率和模型表現。
2.1 什麼是專家混合
混合專家模型(MoE)是一種創新技術,透過將多個專門的子模型(即“專家”)整合進大型語言模型(LLM)中,顯著提升了模型的效能和效率。
MoE架構的核心由以下兩個部分構成:
- 專家(Experts):每個前饋神經網路層都配備了一組專家,這些專家是模型中的獨立子網路,每次計算時,只有一部分專家會被啟用參與處理。專家通常是具備特定任務能力的神經網路。
- 路由器(Router)或門控網路(Gate Network):該元件負責根據輸入資料(如令牌)決定哪些專家會處理特定任務。路由器根據模型的輸入動態地選擇最適合的專家,從而提高計算效率。
透過這種結構,MoE架構不僅在保持較低計算成本的同時,能夠處理更多樣化、複雜的任務,也能夠根據需求擴充套件模型規模,從而提升LLM的整體表現。
值得注意的是,MoE中的“專家”並非專注於某一特定領域,如“心理學”或“生物學”。相反,這些專家主要專注於學習詞彙層面的句法結構,而不是領域知識。因此,每個專家的作用更偏向於捕捉語言的基本模式和結構,而非專業領域的深度理解。
更具體地說,MoE中的“專家”專注於在特定上下文中處理特定的令牌。路由器(門控網路)根據輸入資料的特徵,動態選擇最適合處理該資料的專家。這種機制使得模型能夠根據任務需求靈活地呼叫不同的專家,從而提高處理效率和準確性。
每個“專家”並不是獨立的完整大型語言模型,而是嵌入在LLM架構中的一個子模型元件。它們與其他專家協同工作,共同提升整個模型的處理能力和效率。
2.2 密集層
為了更好地理解專家的作用以及它們的工作原理,我們首先需要了解MoE所替代的傳統架構——密集層(Dense Layers)。
混合專家模型(MoE)構建於大型語言模型(LLM)的基本組成部分之一——前饋神經網路(FFNN)之上。需要注意的是,在標準的解碼器-only Transformer架構中,FFNN通常在層歸一化後被應用到每一層中。這是LLM處理資訊的核心方式之一,而MoE的引入旨在透過引入多個專家模型替代傳統的密集層,提升模型的表達能力和計算效率。
前饋神經網路(FFNN)使模型能夠基於注意力機制提取的上下文資訊,進一步處理並捕捉資料中的複雜關係。然而,FFNN的規模隨著層數增加而迅速膨脹。為了能夠學習這些複雜的關係,FFNN通常會在輸入資訊的基礎上進行擴充套件,這可能導致計算開銷的大幅增加。
2.3 稀疏層
在傳統的Transformer架構中,前饋神經網路(FFNN)被稱為密集模型,因為它的所有引數(包括權重和偏置)都會被啟用並用於計算輸出,沒有任何資訊被忽略。仔細分析密集模型時,我們可以看到,輸入資訊會啟用所有的引數,每個引數在計算中都會發揮作用,從而導致計算複雜度和資源消耗較大。
與密集模型不同,稀疏模型只啟用一部分引數,這種方式與混合專家模型(MoE)緊密相連。具體來說,我們可以將密集模型拆分為多個“專家”子模型,重新訓練它們,並在每次任務中僅啟用一部分專家進行計算。這種方法不僅能減少計算開銷,還能提高模型處理特定任務時的效率。
這種方法的核心理念是,每個專家在訓練過程中專注於學習不同的資訊。到了推理階段,根據任務的具體需求,系統只會啟用最相關的專家。這樣,面對不同的問題時,我們能夠選擇最適合的專家來進行高效處理。
2.4 專家學習的內容
如前所述,專家並非專注於學習某一完整領域的知識,而是專注於捕捉更細粒度的資訊。因此,將它們稱為“專家”有時會讓人誤解,因為這些專家並不具備傳統意義上在某一領域的深度專業知識。
在解碼器模型中,專家似乎並未表現出相同型別的專業化。儘管如此,這並不意味著所有專家在作用上是相同的。一個很好的例子可以參考《Mixtral 8x7B》論文,其中每個令牌都被標註為其首選專家,從而展示了專家選擇的多樣性和靈活性。
上圖還展示了專家們更傾向於關注句法結構,而非特定領域的知識。因此,儘管解碼器中的專家沒有明確的專業化,它們在處理某些型別的令牌時卻表現出一致性和特定的應用模式。
2.5 專家架構
雖然將專家看作是密集模型中的隱藏層並將其拆分成若干部分進行視覺化是一個有趣的方式,但實際上,專家通常是獨立的、完整的前饋神經網路(FFNN)。每個專家在模型中扮演著獨立的角色,執行特定的計算任務。
由於大多數大型語言模型(LLM)包含多個解碼器層,一個輸入文字通常會在生成過程中經過多個專家的處理,每個專家負責不同的任務或處理不同的特徵。這樣,模型可以更有效地捕捉複雜的語言模式和語境資訊。
由於每個令牌可能會啟用不同的專家,這導致模型在處理每個令牌時可能會選擇不同的“路徑”。這種動態選擇使得模型能夠靈活地根據不同的上下文需求進行最佳化。
更新後的解碼器模組視覺化將顯示更多的前饋神經網路(FFNN),每個FFNN代表一個專家。這樣,每個專家都擁有獨立的計算路徑,以便在處理不同任務時提供更具針對性的計算能力。
3.路由
有了專家模型後,模型如何確定使用哪些專家呢?在專家之前,加入了一個路由器(或稱門控網路),其作用是根據輸入令牌的特徵來決定啟用哪個專家。路由器是一個前饋神經網路(FFNN),它會輸出一組機率值,根據這些機率值來選擇最適合當前任務的專家。
有了專家模型後,模型如何確定使用哪些專家呢?在專家之前,加入了一個路由器(或稱門控網路),其作用是根據輸入令牌的特徵來決定啟用哪個專家。路由器是一個前饋神經網路(FFNN),它會輸出一組機率值,根據這些機率值來選擇最適合當前任務的專家。
MoE層有兩種實現方式:稀疏型和密集型混合專家模型。兩者都依賴路由器來選擇專家,但稀疏型MoE只啟用少數幾個專家,而密集型MoE則啟用所有專家,只不過啟用的比例和分佈可能不同。這種設計使得模型在處理不同任務時可以靈活調節計算資源的分配。
例如,給定一組令牌,普通的MoE會將令牌分配給所有專家,而稀疏型MoE則只啟用少數幾個專家。在現有的LLM中,提到“MoE”時,通常指的是稀疏型MoE,因為它透過僅啟用一部分專家來減少計算開銷,這對於大型語言模型的高效執行至關重要。
門控網路可以說是MoE中最為重要的部分,因為它不僅在推理時決定選擇哪些專家,而且在訓練過程中也起著關鍵作用。在最簡單的形式下,輸入(x)與路由器的權重矩陣(W)相乘,生成一個加權的輸出,用於決定啟用哪些專家。
然後,我們對輸出應用SoftMax函式,將其轉化為每個專家的機率分佈G(x)。這個機率分佈決定了每個專家被選中的可能性,從而指導路由器選擇最合適的專家進行處理。
路由器根據機率分佈選擇最匹配的專家來處理給定的輸入。最終,模型將每個選定專家的輸出與相應的路由器機率相乘,並將所有結果相加,得到最終的輸出。
然而,這種簡單的機制可能會導致路由器頻繁選擇相同的專家,因為某些專家的學習速度可能快於其他專家,從而使得它們在選擇過程中佔據主導地位。
這種不均衡的選擇不僅會導致某些專家被頻繁啟用,而其他專家幾乎沒有機會參與訓練,還會引發訓練和推理階段的問題。因此,我們希望在訓練和推理過程中保持專家間的平衡,這就是所謂的負載均衡。負載均衡有助於避免某些專家過度擬合,提高模型的多樣性和泛化能力。
4.小節
至此,我們的混合專家模型(MoE)之旅圓滿結束!希望這篇文章能幫助你更好地理解這種創新技術的潛力。如今,幾乎所有的模型架構都包含了至少一種MoE變體,MoE看起來將成為未來技術中的重要組成部分。
5.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!
另外,博主出新書了《深入理解Hive》、同時已出版的《Kafka並不難學》和《Hadoop大資料探勘從入門到進階實戰》也可以和新書配套使用,喜歡的朋友或同學, 可以在公告欄那裡點選購買連結購買博主的書進行學習,在此感謝大家的支援。關注下面公眾號,根據提示,可免費獲取書籍的教學影片。