自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

人工智能
由于大模型的參數(shù)量增大,在參數(shù)規(guī)模更大的場(chǎng)景,簡單的集成學(xué)習(xí)可以考量的方法相比低參數(shù)的機(jī)器學(xué)習(xí)更受限制,比如經(jīng)典的stacking,boosting等方法,因?yàn)槎询B模型的參數(shù)問題,無法簡單拓展。因此針對(duì)大模型的集成學(xué)習(xí)需要仔細(xì)考量。

模型融合大家以前用的很多,特別是在判別模型里,屬于永遠(yuǎn)都能穩(wěn)定提升的那一類方法。但是生成語言模型,因?yàn)榻獯a的過程存在,并不像判別模型那樣直觀。

另外,由于大模型的參數(shù)量增大,在參數(shù)規(guī)模更大的場(chǎng)景,簡單的集成學(xué)習(xí)可以考量的方法相比低參數(shù)的機(jī)器學(xué)習(xí)更受限制,比如經(jīng)典的stacking,boosting等方法,因?yàn)槎询B模型的參數(shù)問題,無法簡單拓展。因此針對(duì)大模型的集成學(xué)習(xí)需要仔細(xì)考量。

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

一、模型整合

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

圖片圖片

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

二、概率集成

概率集成與傳統(tǒng)的機(jī)器學(xué)習(xí)融合相似,比如將模型預(yù)測(cè)的logit結(jié)果進(jìn)行平均,形式化的可以表示為類似地,大模型的概率集成可以在transformer的詞表輸出概率層次進(jìn)行融合。要注意的是,這樣的操作需要其融合的多個(gè)原始模型的詞表保持一致。

下面我們給出一個(gè)簡單偽代碼的實(shí)現(xiàn)。

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()

三、嫁接學(xué)習(xí)

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

如圖所示,需要構(gòu)建一個(gè)48等的目標(biāo)模型時(shí)候,可以分別從兩個(gè)32層的模型取前24層和后24層連接到一起,組成一個(gè)全新的48層的模型,將組合后的模型進(jìn)行繼續(xù)預(yù)訓(xùn)練即可,通常繼續(xù)預(yù)訓(xùn)練耗費(fèi)的的數(shù)據(jù)量和計(jì)算資源要小于完全從頭開始訓(xùn)練的消耗。

圖片圖片

在繼續(xù)預(yù)訓(xùn)練之后,還需要進(jìn)行對(duì)齊操作,包含兩個(gè)過程,分別是指令微調(diào)和DPO。指令微調(diào)采用開源instruct數(shù)據(jù)并改造出一個(gè)數(shù)學(xué)專用instruct數(shù)據(jù),以增強(qiáng)模型的數(shù)學(xué)能力。DPO是傳統(tǒng)的RLHF的替代,最終形成了SOLAR-chat版本。

四、眾包投票

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

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

五、MoE

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

混合專家模型(Mixture of Experts,MoE)并不是最近才有的新概念,混合專家模型的概念最早可以追溯到1991年發(fā)表的論文《Adaptive Mixture of Local Experts》。這種方法與集成學(xué)習(xí)有著相似之處,其核心是為由眾多獨(dú)立專家網(wǎng)絡(luò)構(gòu)成的集合體創(chuàng)立一個(gè)協(xié)調(diào)融合機(jī)制。在這樣的架構(gòu)下,每個(gè)獨(dú)立的網(wǎng)絡(luò)(即“專家”)負(fù)責(zé)處理數(shù)據(jù)集中的特定子集,并且專注于特定的輸入數(shù)據(jù)區(qū)域。這個(gè)子集可能是偏向于某種話題,某種領(lǐng)域,某種問題分類等,并不是一個(gè)顯示的概念。

面對(duì)不同的輸入數(shù)據(jù),一個(gè)關(guān)鍵的問題是系統(tǒng)如何決定由哪個(gè)專家來處理。門控網(wǎng)絡(luò)(Gating Network)就是來解決這個(gè)問題的,它通過分配權(quán)重來確定各個(gè)專家的工作職責(zé)。在整個(gè)訓(xùn)練過程中,這些專家網(wǎng)絡(luò)和門控網(wǎng)絡(luò)會(huì)被同時(shí)訓(xùn)練,并不需要顯示的手動(dòng)操控。

在2010年至2015年這段時(shí)間里,有兩個(gè)研究方向?qū)旌蠈<夷P停∕oE)的進(jìn)一步發(fā)展產(chǎn)生了重要影響:

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

條件計(jì)算:傳統(tǒng)神經(jīng)網(wǎng)絡(luò)會(huì)在每一層對(duì)所有輸入數(shù)據(jù)進(jìn)行處理。在這段時(shí)期,Yoshua Bengio等學(xué)者開始研究一種基于輸入特征動(dòng)態(tài)激活或者禁用網(wǎng)絡(luò)部分的方法。

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

圖片圖片

傳統(tǒng)的MoE都集中在非transfomer的模型架構(gòu)上,大模型時(shí)代的transfomer模型參數(shù)量達(dá)百億級(jí),如何在transformer上應(yīng)用MoE并且把參數(shù)擴(kuò)展到百億級(jí)別,并且解決訓(xùn)練穩(wěn)定性和推理效率的問題,成為MoE在大模型應(yīng)用上的關(guān)鍵問題。谷歌提出了代表性的方法Gshard,成功將Transformer模型的參數(shù)量增加至超過六千億,并以此提升模型水平。

在GShard框架下,編碼器和解碼器中的每個(gè)前饋網(wǎng)絡(luò)(FFN)層被一種采用Top-2門控機(jī)制的混合專家模型(MoE)層所替代。下面的圖示展現(xiàn)了編碼器的結(jié)構(gòu)設(shè)計(jì)。這樣的設(shè)計(jì)對(duì)于執(zhí)行大規(guī)模計(jì)算任務(wù)非常有利:當(dāng)模型被分布到多個(gè)處理設(shè)備上時(shí),MoE層在各個(gè)設(shè)備間進(jìn)行共享,而其他層則在每個(gè)設(shè)備上獨(dú)立復(fù)制。其架構(gòu)如下圖所示:

圖片圖片

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

輔助負(fù)載均衡損失函數(shù):損失函數(shù)考量某個(gè)專家的buffer中已經(jīng)存下的token數(shù)量,乘上某個(gè)專家的buffer中已經(jīng)存下的token在該專家上的平均權(quán)重,構(gòu)建這樣的損失函數(shù)能讓專家負(fù)載保持均衡。

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

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

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

整個(gè)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是門控訓(xùn)練參數(shù),維度為(M, E),E是MoE層中專家的數(shù)量,輸出每個(gè)token被分配給每個(gè)專家的概率,維度為(S, E)

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

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

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

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

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

圖片圖片

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

圖片圖片

責(zé)任編輯:武曉燕 來源: 包包算法筆記
相關(guān)推薦

2023-03-26 23:47:32

Go內(nèi)存模型

2024-05-20 11:33:20

AI模型數(shù)據(jù)

2025-01-10 08:06:39

2024-09-05 10:36:58

2024-02-19 10:11:00

Kubernetes網(wǎng)絡(luò)模型

2024-08-12 15:55:51

2022-10-08 00:00:05

SQL機(jī)制結(jié)構(gòu)

2023-04-26 07:30:00

promptUI非結(jié)構(gòu)化

2023-08-04 08:20:56

DockerfileDocker工具

2022-05-24 08:21:16

數(shù)據(jù)安全API

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2023-09-10 21:42:31

2023-06-30 08:18:51

敏捷開發(fā)模式

2021-08-27 07:06:10

IOJava抽象

2024-02-20 21:34:16

循環(huán)GolangGo

2025-02-13 09:32:12

C#重寫override

2022-09-08 08:50:17

SSDOracleCPU

2024-06-14 09:32:12

2022-12-06 08:12:11

Java關(guān)鍵字

2023-08-02 08:35:54

文件操作數(shù)據(jù)源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)