蟈蟈俊的技術(shù)心得
DeepSeek-V3 采用的 DeepSeekMoE 架構(gòu),通過(guò)細(xì)粒度專家、共享專家和 Top-K 路由策略,實(shí)現(xiàn)了模型容量的高效擴(kuò)展。
每個(gè) MoE 層包含 1 個(gè)共享專家和 256 個(gè)路由專家,每個(gè) Token 選擇 8 個(gè)路由專家,最多路由至 4 個(gè)節(jié)點(diǎn)。這種稀疏激活的機(jī)制,使得 DeepSeek-V3 能夠在不顯著增加計(jì)算成本的情況下,擁有龐大的模型容量?!?/p>
想象一下,一個(gè)超級(jí)英雄聯(lián)盟,每個(gè)英雄都有自己獨(dú)特的超能力,專門應(yīng)對(duì)特定的威脅。MoE 架構(gòu)就類似于此,它包含多個(gè)“專家”網(wǎng)絡(luò),每個(gè)專家專注于處理特定類型的輸入或特征。當(dāng)一個(gè)輸入進(jìn)來(lái)時(shí),一個(gè)“Gate Network”會(huì)決定將輸入路由到哪些最合適的專家進(jìn)行處理。
在 DeepSeek-V3 中,MoE 層主要由兩種類型的專家構(gòu)成:
-
路由專家 (Routed Experts): 數(shù)量眾多,負(fù)責(zé)處理特定類型的輸入。DeepSeek-V3 的每個(gè) MoE 層包含 256 個(gè)路由專家。
-
共享專家 (Shared Experts): 數(shù)量較少,負(fù)責(zé)處理所有輸入,提供通用的特征提取。DeepSeek-V3 每個(gè) MoE 層包含 1 個(gè)共享專家。
類比,想象一個(gè)大型公司的客服中心:
-
共享專家 就像是總機(jī)接待員,每個(gè)來(lái)電都會(huì)先經(jīng)過(guò)他們。他們負(fù)責(zé)處理一些常見(jiàn)問(wèn)題和基本信息收集,并將電話轉(zhuǎn)接到更專業(yè)的部門。
-
路由專家 就像是各個(gè)專業(yè)部門的客服人員(例如,技術(shù)支持、賬單查詢、投訴處理)??倷C(jī)接待員(Gate)會(huì)根據(jù)來(lái)電者的需求將電話路由到相應(yīng)的專業(yè)部門。每個(gè)來(lái)電只會(huì)連接到少數(shù)幾個(gè)最相關(guān)的專業(yè)部門。
當(dāng)一個(gè)句子輸入到 DeepSeek-V3 的 MoE 層時(shí),會(huì)經(jīng)歷以下步驟:
-
路由 (Routing): Gate 網(wǎng)絡(luò)接收輸入(每個(gè)詞的表示),并計(jì)算每個(gè)詞與各個(gè)路由專家的匹配程度(得分)。
-
選擇 (Selection): 根據(jù)得分,Gate 網(wǎng)絡(luò)為每個(gè)詞選擇 Top-K 個(gè)最合適的路由專家。在 DeepSeek-V3 中,每個(gè) Token 選擇 8 個(gè)路由專家。
-
專家處理 (Expert Processing): 被選中的路由專家以及共享專家會(huì)對(duì)輸入進(jìn)行處理,提取特征。
-
加權(quán)與聚合 (Weighting and Aggregation): 每個(gè)路由專家的輸出會(huì)根據(jù) Gate 網(wǎng)絡(luò)給出的權(quán)重進(jìn)行加權(quán),然后與共享專家的輸出進(jìn)行聚合,形成 MoE 層的最終輸出。
我們用個(gè)示例來(lái)理解這個(gè)過(guò)程:
假設(shè)我們有一個(gè) MoE 層,其中包含幾個(gè)不同的路由專家,每個(gè)專家擅長(zhǎng)處理不同類型的語(yǔ)言信息:
-
專家 1: 擅長(zhǎng)處理情感詞匯和情感表達(dá)。
-
專家 2: 擅長(zhǎng)處理實(shí)體指代和關(guān)系理解。
-
專家 3: 擅長(zhǎng)處理語(yǔ)法結(jié)構(gòu)和句法關(guān)系。
-
共享專家 (雖然不是路由專家,但也參與處理): 提供通用的特征提取。
現(xiàn)在,考慮以下句子:
"我今天非常高興地收到了一份期待已久的禮物。"
當(dāng)這個(gè)句子輸入到 MoE 層時(shí),Gate 模塊會(huì)為每個(gè)詞計(jì)算路由得分,并決定將哪些詞路由到哪些專家:
-
"我" (Pronoun): 可能會(huì)被路由到 專家 2 (實(shí)體指代)。
-
"今天" (Time Adverb): 可能也會(huì)被路由到 專家 2 (情境理解)。
-
"非常高興地" (Adverb + Adjective): 很可能會(huì)被路由到 專家 1 (情感詞匯)。
-
"收到" (Verb): 可能會(huì)被路由到 專家 3 (動(dòng)詞,語(yǔ)法結(jié)構(gòu))。
-
"了" (Particle): 可能也會(huì)被路由到 專家 3 (語(yǔ)法助詞)。
-
"一份期待已久的" (Adjective Phrase): 可能部分路由到 專家 1 (情感),部分路由到 專家 2 (描述性信息)。
-
"禮物" (Noun): 可能會(huì)被路由到 專家 2 (實(shí)體)。
-
整個(gè)句子也會(huì)經(jīng)過(guò)共享專家。
處理過(guò)程:
-
路由: 每個(gè)詞根據(jù) Gate 的決策被分配到相應(yīng)的路由專家。
-
專家處理:
-
專家 1 接收到 "非常高興地",會(huì)提取其積極的情感特征。
-
專家 2 接收到 "我"、"今天"、"禮物",會(huì)處理實(shí)體信息和它們之間的關(guān)系。
-
專家 3 接收到 "收到"、"了",會(huì)分析動(dòng)詞的含義和時(shí)態(tài)。
-
共享專家 會(huì)對(duì)整個(gè)句子的表示進(jìn)行通用的特征提取。
-
-
加權(quán)和聚合: 每個(gè)專家對(duì)接收到的詞進(jìn)行處理后,會(huì)產(chǎn)生一個(gè)輸出表示。這些輸出表示會(huì)根據(jù) Gate 給出的權(quán)重進(jìn)行加權(quán),然后進(jìn)行聚合(例如,求和或拼接)。同時(shí),共享專家的輸出也會(huì)被加進(jìn)來(lái)。
-
傳遞到下一層: MoE 層的最終輸出表示會(huì)傳遞到 Transformer 模型的下一層進(jìn)行進(jìn)一步處理。
將同一句話的不同詞路由到不同的專家是 MoE 架構(gòu)的核心機(jī)制,這是 MoE 設(shè)計(jì)的核心思想,旨在讓不同的專家專注于處理不同類型的輸入或特征,從而提高模型的整體能力。
讓我們深入到 DeepSeek-V3 的代碼實(shí)現(xiàn),理解 MoE 的關(guān)鍵組件:
Gate 類的 forward 方法是路由的核心。它首先計(jì)算每個(gè) Token 與所有路由專家的得分,然后,如果啟用了專家分組(n_groups > 1),則會(huì)先選擇 Top-K 個(gè)專家組,再在這些組內(nèi)選擇最終的 Top-K 個(gè)專家。這是一種保障負(fù)載均衡的策略。
Expert 類定義了一個(gè)簡(jiǎn)單的 MLP 結(jié)構(gòu),每個(gè)路由專家都是一個(gè)獨(dú)立的 Expert 實(shí)例,負(fù)責(zé)處理被路由到它的 Token。
MoE 類的 forward 方法完成整個(gè) MoE 層的計(jì)算。它首先通過(guò) Gate 獲取路由決策,然后將 Token 分配給相應(yīng)的路由專家進(jìn)行處理,并將路由專家的輸出與共享專家的輸出進(jìn)行合并。
為了解決 MoE 中常見(jiàn)的負(fù)載不均衡問(wèn)題(某些專家過(guò)載,某些專家利用不足),DeepSeek-V3 提出了一種創(chuàng)新的、無(wú)額外損耗的負(fù)載均衡策略。 傳統(tǒng)的 MoE 模型通常會(huì)引入額外的輔助損失函數(shù)來(lái)平衡各個(gè)專家的負(fù)載,但這可能會(huì)對(duì)模型的主要任務(wù)性能產(chǎn)生負(fù)面影響。
DeepSeek-V3 的方法則更加優(yōu)雅。它在 Gate 模塊中引入了一個(gè)可學(xué)習(xí)的偏置項(xiàng) (Bias Term):
這個(gè) bias 是一個(gè)可學(xué)習(xí)的參數(shù),與路由專家的數(shù)量相同。在計(jì)算路由得分時(shí),這個(gè)偏置項(xiàng)會(huì)被動(dòng)態(tài)地加到每個(gè)路由專家的得分上:
那么,這個(gè)偏置項(xiàng)是如何實(shí)現(xiàn)負(fù)載均衡的呢?
-
動(dòng)態(tài)調(diào)整路由傾向: 通過(guò)學(xué)習(xí)這些偏置項(xiàng),模型可以動(dòng)態(tài)地調(diào)整對(duì)不同路由專家的偏好。如果某個(gè)專家的負(fù)載過(guò)重,其對(duì)應(yīng)的偏置項(xiàng)可能會(huì)被學(xué)習(xí)為負(fù)值,從而降低其被選擇的概率。反之,對(duì)于負(fù)載較輕的專家,其偏置項(xiàng)可能會(huì)被學(xué)習(xí)為正值,提高其被選擇的概率。
-
無(wú)額外損耗: 關(guān)鍵在于,這個(gè)偏置項(xiàng)的調(diào)整是直接通過(guò)模型的訓(xùn)練目標(biāo)進(jìn)行優(yōu)化的,而不是通過(guò)一個(gè)獨(dú)立的負(fù)載均衡損失函數(shù)。這意味著,模型在努力提高主要任務(wù)性能的同時(shí),也會(huì)自然而然地學(xué)習(xí)到一種更均衡的路由策略,而不會(huì)因?yàn)轭~外的負(fù)載均衡損失而影響性能。
DeepSeek-V3 還對(duì)偏置項(xiàng)的學(xué)習(xí)率進(jìn)行了動(dòng)態(tài)調(diào)整,以更好地平衡訓(xùn)練的早期探索和后期穩(wěn)定:
-
預(yù)訓(xùn)練早期 (前 14.3T 個(gè) Token): 偏置項(xiàng)的更新速度 (γ) 設(shè)置為 0.001,允許模型在早期快速探索不同的路由策略。
-
預(yù)訓(xùn)練后期 (剩余 500B 個(gè) Token): 偏置項(xiàng)的更新速度 (γ) 設(shè)置為 0.0,意味著在模型訓(xùn)練的后期,路由策略趨于穩(wěn)定,不再進(jìn)行大幅調(diào)整。
-
模型容量擴(kuò)展: MoE 允許模型擁有大量的參數(shù)(每個(gè)專家都有自己的參數(shù)),而每個(gè)輸入只需激活少量專家。通過(guò)增加專家數(shù)量,可以顯著擴(kuò)展模型的參數(shù)量,而不會(huì)顯著增加計(jì)算成本(因?yàn)槊總€(gè)輸入只激活少數(shù)幾個(gè)專家)。
-
專業(yè)化處理: 不同的專家可以學(xué)習(xí)到不同的特征,使得模型能夠更精細(xì)地處理各種復(fù)雜的輸入。
-
動(dòng)態(tài)路由: Gate 網(wǎng)絡(luò)能夠根據(jù)輸入內(nèi)容動(dòng)態(tài)地調(diào)整路由策略,實(shí)現(xiàn)更靈活的計(jì)算。
-
無(wú)損負(fù)載均衡: 通過(guò)可學(xué)習(xí)的偏置項(xiàng),實(shí)現(xiàn)更均衡的專家利用率,提升訓(xùn)練效率和模型性能。
DeepSeek-V3 的 MoE 架構(gòu)是一種精巧的設(shè)計(jì),它借鑒了“分而治之”的思想,通過(guò)引入多個(gè)專業(yè)化的路由專家和一個(gè)通用的共享專家,實(shí)現(xiàn)了模型容量的高效擴(kuò)展和更精細(xì)化的輸入處理。
創(chuàng)新的無(wú)額外損耗負(fù)載均衡策略,通過(guò)動(dòng)態(tài)調(diào)整可學(xué)習(xí)的偏置項(xiàng),進(jìn)一步提升了 MoE 架構(gòu)的效率和性能。
Gate 網(wǎng)絡(luò)作為智能的“調(diào)度員”,確保每個(gè) Token 都能找到最合適的“專家”進(jìn)行處理。
深入理解 MoE 的工作原理和代碼實(shí)現(xiàn),有助于我們更好地理解 DeepSeek-V3 強(qiáng)大能力的背后邏輯。
轉(zhuǎn)載請(qǐng)注明來(lái)自濟(jì)南富森木工刀具制造有限公司 ,本文標(biāo)題:《蟈蟈俊的技術(shù)心得》
還沒(méi)有評(píng)論,來(lái)說(shuō)兩句吧...