成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起聊聊大模型的模型融合方法

人工智能
由于大模型的參數量增大,在參數規模更大的場景,簡單的集成學習可以考量的方法相比低參數的機器學習更受限制,比如經典的stacking,boosting等方法,因為堆疊模型的參數問題,無法簡單拓展。因此針對大模型的集成學習需要仔細考量。

模型融合大家以前用的很多,特別是在判別模型里,屬于永遠都能穩定提升的那一類方法。但是生成語言模型,因為解碼的過程存在,并不像判別模型那樣直觀。

另外,由于大模型的參數量增大,在參數規模更大的場景,簡單的集成學習可以考量的方法相比低參數的機器學習更受限制,比如經典的stacking,boosting等方法,因為堆疊模型的參數問題,無法簡單拓展。因此針對大模型的集成學習需要仔細考量。

下面我們講解五種基本的集成方法,分別是 模型整合、概率集成、嫁接學習、眾包投票、MOE。

一、模型整合

模型整合較為簡單,即大模型在輸出的文字層次進行融合,如簡單的使用3個不同的LLama模型的輸出結果,作為prompt輸入到第四個模型中進行參考。在實際中,信息通過文字傳遞可以作為一種通信方法,其代表性的方法為EoT,來自于文章《Exchange-of-Thought: Enhancing Large Language Model Capabilities through Cross-Model Communication》,EoT提出了一個新的思想交流框架,即“交換思想”(Exchange-of-Thought),旨在促進模型之間的交叉通信,以提升問題解決過程中的集體理解。通過這一框架,模型可以吸收其他模型的推理,從而更好地協調和改進自身的解決方案。用論文中的圖示表示為:

圖片圖片

如圖所示,作者統一地將CoT和自糾正方法同以來看,EoT允許多個模型分層次傳遞消息,通過跨模型通信,模型可以借鑒其他模型的推理和思考過程,從而更好地解決問題。這可以提高模型的性能和準確性。

二、概率集成

概率集成與傳統的機器學習融合相似,比如將模型預測的logit結果進行平均,形式化的可以表示為類似地,大模型的概率集成可以在transformer的詞表輸出概率層次進行融合。要注意的是,這樣的操作需要其融合的多個原始模型的詞表保持一致。

下面我們給出一個簡單偽代碼的實現。

kv_cache = None
While True:
    input_ids = torch.tensor([[new_token]], dtype=torch.long, device='cuda')
    kv_cache1, kv_cache2 = kv_cache 
    output1 = models[0](input_ids=input_ids, past_key_values=kv_cache1, use_cache=True)
    output2 = models[1](input_ids=input_ids, past_key_values=kv_cache2, use_cache=True)
    kv_cache = [output1.past_key_values, output2.past_key_values]
    prob = (output1.logits + output2.logits) / 2
    new_token = torch.argmax(prob, 0).item()

三、嫁接學習

嫁接學習的概念來自于國內Kaggle Grandmaster的plantsgo,最早源自于數據挖掘競賽。其本質上是一種遷移學習,一開始是用來描述將一個樹模型的輸出作為另一個樹模型的輸入的方法。此種方法與樹的繁殖中的嫁接類似,故而得名。在大模型中,也有嫁接學習的應用,其模型名字為SOLAR,文章來源于 《SOLAR 10.7B: Scaling Large Language Models with Simple yet Effective Depth Up-Scaling》,文中提出了一個模型嫁接的一種思路,與機器學習中的嫁接學習不同的是,大模型并不直接融合另外一個模型的概率結果,而是將其中的部分結構和權重嫁接到融合模型上,并經過一定的繼續預訓練過程,使其模型參數能夠適應新的模型。具體的操作為,復制包含n層的基礎模型,以便后續修改。然后,從原始模型中移除最后的m層,并從其副本中移除最初的m層,從而形成兩個不同的n-m層模型。最后將這兩個模型連接起來,形成一個具有2*(n-m)層的縮放模型。

如圖所示,需要構建一個48等的目標模型時候,可以分別從兩個32層的模型取前24層和后24層連接到一起,組成一個全新的48層的模型,將組合后的模型進行繼續預訓練即可,通常繼續預訓練耗費的的數據量和計算資源要小于完全從頭開始訓練的消耗。

圖片圖片

在繼續預訓練之后,還需要進行對齊操作,包含兩個過程,分別是指令微調和DPO。指令微調采用開源instruct數據并改造出一個數學專用instruct數據,以增強模型的數學能力。DPO是傳統的RLHF的替代,最終形成了SOLAR-chat版本。

四、眾包投票

眾包投票在今年的WSDM CUP第一名方案里上有所應用,在過往的國內生成比賽中大家也實踐過。其核心思想是:如果一個模型生成的句子,與所有模型的結果最像,那這個句子可以認為是所有模型的平均。這樣就把概率意義上的平均,變成了生成token結果的上的平均。假設給定一個測試樣本,我們有個候選回答需要聚合,對于每一個候選,我們計算和)(之間的相關性分數并將它們加在一起作為的質量分數()。同樣地,相關性量化來源可以是嵌入層余弦相似度(表示為emb_a_s)、詞級ROUGE-L(表示為word_a_f)和字符級ROUGE-L(表示為char_a_f)。這里就是一些人工構造的相似度指標,包括字面上的和語義上的。

代碼地址:https://github.com/zhangzhao219/WSDM-Cup-2024/tree/main

五、MoE

最后,也是最重要的大模型混合專家模型(Mixture of Experts,簡稱MoE),這是一種結合多個子模型(即“專家”)的模型架構方法,旨在通過多個專家的協同工作來提升整體的預測效果。MoE結構能夠顯著增強模型的處理能力和運行效率。典型的大模型MoE體系結構包含了一個門控機制(Gating Mechanism)和一系列專家網絡。門控機制負責依據輸入數據動態調配各個專家的權重,以此來決定每個專家對最終輸出的貢獻程度;同時,專家選擇機制會根據門控信號的指示,挑選出一部分專家來參與實際的預測計算。這種設計不僅降低了整體的運算需求,還使得模型能夠根據不同的輸入選擇最適用的專家。

混合專家模型(Mixture of Experts,MoE)并不是最近才有的新概念,混合專家模型的概念最早可以追溯到1991年發表的論文《Adaptive Mixture of Local Experts》。這種方法與集成學習有著相似之處,其核心是為由眾多獨立專家網絡構成的集合體創立一個協調融合機制。在這樣的架構下,每個獨立的網絡(即“專家”)負責處理數據集中的特定子集,并且專注于特定的輸入數據區域。這個子集可能是偏向于某種話題,某種領域,某種問題分類等,并不是一個顯示的概念。

面對不同的輸入數據,一個關鍵的問題是系統如何決定由哪個專家來處理。門控網絡(Gating Network)就是來解決這個問題的,它通過分配權重來確定各個專家的工作職責。在整個訓練過程中,這些專家網絡和門控網絡會被同時訓練,并不需要顯示的手動操控。

在2010年至2015年這段時間里,有兩個研究方向對混合專家模型(MoE)的進一步發展產生了重要影響:

組件化專家:在傳統的MoE框架中,系統由一個門控網絡和若干個專家網絡構成。在支持向量機(SVM)、高斯過程以及其他機器學習方法的背景下,MoE常常被當作模型中的一個單獨部分。然而,Eigen、Ranzato和Ilya等研究者提出了將MoE作為深層網絡中一個內部組件的想法。這種創新使得MoE可以被整合進多層網絡的特定位置中,從而使模型在變得更大的同時,也能保持高效。

條件計算:傳統神經網絡會在每一層對所有輸入數據進行處理。在這段時期,Yoshua Bengio等學者開始研究一種基于輸入特征動態激活或者禁用網絡部分的方法。

這兩項研究的結合推動了混合專家模型在自然語言處理(NLP)領域的應用。尤其是在2017年,Shazeer和他的團隊將這一理念應用于一個137億參數的LSTM模型(這是當時在NLP領域廣泛使用的一種模型架構,由Schmidhuber提出)。他們通過引入稀疏性來實現在保持模型規模巨大的同時,加快推理速度。這項工作主要應用于翻譯任務,并且面對了包括高通信成本和訓練穩定性問題在內的多個挑戰。如圖所示《Outrageously Large Neural Network》 中的MoE layer架構如下:

圖片圖片

傳統的MoE都集中在非transfomer的模型架構上,大模型時代的transfomer模型參數量達百億級,如何在transformer上應用MoE并且把參數擴展到百億級別,并且解決訓練穩定性和推理效率的問題,成為MoE在大模型應用上的關鍵問題。谷歌提出了代表性的方法Gshard,成功將Transformer模型的參數量增加至超過六千億,并以此提升模型水平。

在GShard框架下,編碼器和解碼器中的每個前饋網絡(FFN)層被一種采用Top-2門控機制的混合專家模型(MoE)層所替代。下面的圖示展現了編碼器的結構設計。這樣的設計對于執行大規模計算任務非常有利:當模型被分布到多個處理設備上時,MoE層在各個設備間進行共享,而其他層則在每個設備上獨立復制。其架構如下圖所示:

圖片圖片

為了確保訓練過程中的負載均衡和效率,GShard提出了三種關鍵的技術,分別是損失函數,隨機路由機制,專家容量限制。

輔助負載均衡損失函數:損失函數考量某個專家的buffer中已經存下的token數量,乘上某個專家的buffer中已經存下的token在該專家上的平均權重,構建這樣的損失函數能讓專家負載保持均衡。

隨機路由機制:在Top-2的機制中,我們總是選擇排名第一的專家,但是排名第二的專家則是通過其權重的比例來隨機選擇的。

專家容量限制:我們可以設置一個閾值來限定一個專家能夠處理的token數量。如果兩個專家的容量都已經達到了上限,那么令牌就會發生溢出,這時token會通過殘差連接傳遞到下一層,或者在某些情況下被直接丟棄。專家容量是MoE架構中一個非常關鍵的概念,其存在的原因是所有的張量尺寸在編譯時都已經靜態確定,我們無法預知會有多少token分配給每個專家,因此需要預設一個固定的容量限制。

需要注意的是,在推理階段,只有部分專家會被激活。同時,有些計算過程是被所有token共享的,比如自注意力(self-attention)機制。這就是我們能夠用相當于12B參數的稠密模型計算資源來運行一個含有8個專家的47B參數模型的原因。如果我們使用Top-2門控機制,模型的參數量可以達到14B,但是由于自注意力操作是專家之間共享的,實際在模型運行時使用的參數量是12B。

整個MoeLayer的原理可以用如下偽代碼表示:

M = input.shape[-1] # input維度為(seq_len, batch_size, M),M是注意力輸出embedding的維度

reshaped_input = input.reshape(-1, M)

gates = softmax(einsum("SM, ME -> SE", reshaped_input, Wg)) #輸入input,Wg是門控訓練參數,維度為(M, E),E是MoE層中專家的數量,輸出每個token被分配給每個專家的概率,維度為(S, E)

combine_weights, dispatch_mask = Top2Gating(gates) #確定每個token最終分配給的前兩位專家,返回相應的權重和掩碼

dispatched_expert_input = einsum("SEC, SM -> ECM", dispatch_mask, reshaped_input) # 對輸入數據進行排序,按照專家的順序排列,為分發到專家計算做矩陣形狀整合

h = enisum("ECM, EMH -> ECH", dispatched_expert_input, Wi) #各個專家計算分發過來的input,本質上是幾個獨立的全鏈接層
h = relu(h)
expert_outputs = enisum("ECH, EHM -> ECM", h, Wo) #各個專家的輸出

outputs = enisum("SEC, ECM -> SM", combine_weights, expert_outputs) #最后,進行加權計算,得到最終MoE-layer層的輸出
outputs_reshape = outputs.reshape(input.shape) # 從(S, M)變成(seq_len, batch_size, M)

關于在MoE的架構改進上,Switch Transformers設計了一種特殊的Switch Transformer層,該層能夠處理兩個獨立的輸入(即兩個不同的token),并配備了四個專家進行處理。與最初的top2專家的想法相反,Switch Transformers 采用了簡化的top1專家策略。如下圖所示:

圖片圖片

與之區別,國內知名大模型DeepSeek MoE的架構設計了一個共享專家,每次都參與激活,其設計基于這樣一個前提:某個特定的專家能夠精通特定的知識領域。通過將專家的知識領域進行細粒度的分割,可以防止單一專家需要掌握過多的知識面,從而避免知識的混雜。同時,設置共享專家能夠確保一些普遍適用的知識在每次計算時都能被利用。

圖片圖片

責任編輯:武曉燕 來源: 包包算法筆記
相關推薦

2023-03-26 23:47:32

Go內存模型

2024-05-20 11:33:20

AI模型數據

2025-01-10 08:06:39

2024-09-05 10:36:58

2024-02-19 10:11:00

Kubernetes網絡模型

2024-08-12 15:55:51

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-04-26 07:30:00

promptUI非結構化

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

2022-10-08 00:00:05

SQL機制結構

2025-02-13 09:32:12

C#重寫override

2023-03-07 07:05:29

生產數據庫運維

2021-07-31 11:40:55

Openresty開源

2023-08-02 08:35:54

文件操作數據源

2022-12-06 08:12:11

Java關鍵字
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品免费视频 | 精品久久国产 | 综合久| 又爽又黄axxx片免费观看 | 亚洲精品电影在线观看 | 7777精品伊人久久精品影视 | 亚洲大片在线观看 | 欧美一区二区三区在线看 | japanhdxxxx裸体| 欧美一二三 | a视频在线观看 | 91看片网 | 欧美日韩一 | 日日操日日干 | 国产片侵犯亲女视频播放 | 欧美a∨ | 国产一区免费视频 | 欧美中文 | 国产欧美日韩综合精品一区二区 | 99亚洲| 在线a视频网站 | 亚洲高清视频一区二区 | 亚洲九九精品 | 99国产精品一区二区三区 | 粉嫩粉嫩芽的虎白女18在线视频 | 免费观看羞羞视频网站 | 成人福利网 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 欧美一级片在线看 | 亚洲欧美在线视频 | 伊人春色在线 | 免费一级片 | 欧美日本在线观看 | 亚洲视频欧美视频 | 美女一区 | 一区二区三区免费在线观看 | 久久精品亚洲欧美日韩久久 | 奇米av | 日本一区二区三区在线观看 | 国产欧美精品一区二区 | 日本不卡一区二区三区在线观看 |