chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

3萬字長文!深度解析大語言模型LLM原理

穎脈Imgtec ? 2025-09-02 13:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文轉(zhuǎn)自:騰訊技術(shù)工程

作者:royceshao

大語言模型LLM的精妙之處在于很好地利用數(shù)學(xué)解決了工業(yè)場景的問題,筆者基于過往工程經(jīng)驗(yàn)繼續(xù)追本溯源,與騰訊學(xué)堂合作撰寫本文,嘗試讓人人都能懂大語言模型的基礎(chǔ)原理。

1、大語言模型簡述

截止到2025年“大模型”一般泛指“超大參數(shù)模型”,參數(shù)是指深度神經(jīng)網(wǎng)絡(luò)里面“神經(jīng)元數(shù)量、層數(shù)、神經(jīng)元權(quán)重、神經(jīng)元偏移量、超參數(shù)”等數(shù)據(jù)的集合,截止到本年度全球應(yīng)用最廣泛的是以O(shè)penAI的ChatGPT為代表的“語言類模型”。在Transformer架構(gòu)之前,一般使用“循環(huán)神經(jīng)網(wǎng)絡(luò)RNN”及其衍生“長短記憶循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM”來進(jìn)行語言類模型的推理,而transformer架構(gòu)的精髓在于通過針對文本的編碼器(encoder)和解碼器(decoder)的堆疊設(shè)計(jì),通過多頭注意力機(jī)制(MHA)來計(jì)算文本序列中前后token的關(guān)聯(lián)度,與傳統(tǒng)的RNN架構(gòu)的巨大區(qū)別(LSTM通過門機(jī)制來賦予不同時(shí)間所出現(xiàn)的token不同的重要性)。

通過預(yù)訓(xùn)練(Pre-Train)+監(jiān)督學(xué)習(xí)(Supervised Learning)標(biāo)注(除了普通的標(biāo)注外,針對特殊領(lǐng)域的問題會(huì)引入專家來進(jìn)行標(biāo)注),模型的預(yù)測精準(zhǔn)度是決定于他所能看到的范圍,在同一時(shí)間看到10w上下文和1k上下文,預(yù)測精準(zhǔn)度和合理性是不一樣的,所以在預(yù)訓(xùn)練時(shí)盡可能構(gòu)造出“同一時(shí)間可以看見的最大范圍的上下文”,那么在推理時(shí)就會(huì)更加的精準(zhǔn),這也是預(yù)訓(xùn)練(Pre-Train)需要超大規(guī)模集群的原因。


2、預(yù)訓(xùn)練過程概述

2.1 神經(jīng)網(wǎng)絡(luò)發(fā)展史

神經(jīng)網(wǎng)絡(luò)誕生于20世紀(jì)40年代,取得重要突破的節(jié)點(diǎn)在20世紀(jì)70年代、20世紀(jì)80年代、21世紀(jì)初。

20世紀(jì)70年代:Paul Werbos博士提出了影響深遠(yuǎn)的Back Propagation的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法,實(shí)際上找到了訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)的方法。

20世紀(jì)80年代:Hinton教授等提出“隱單元”的概念,首次將神經(jīng)網(wǎng)絡(luò)的層數(shù)進(jìn)行了增加,為解決非線性問題提供了更大的靈活性,同時(shí)Hinton教授在傳統(tǒng)的Back Propagation算法中引入了可微非線性神經(jīng)元(如Sigmoid激活函數(shù)神經(jīng)元、可微是為了可以求偏微分),克服了早期神經(jīng)元的一些問題(前饋計(jì)算結(jié)果爆炸等);Yann LeCun教授提出了著名的卷積神經(jīng)網(wǎng)絡(luò)CNN,有效地應(yīng)用于圖像識(shí)別領(lǐng)域。

21世紀(jì)初至今:Hinton教授等揭開了深度學(xué)習(xí)的大幕;2012年,Alex Krizhevsky等使用GPU運(yùn)行卷積神經(jīng)網(wǎng)絡(luò)AlexNet在圖像分類大賽中取得了巨大的成功;2012同年,吳恩達(dá)教授與Jeff Dean主導(dǎo)了Google Brain項(xiàng)目,通過1.6萬個(gè)CPU組成有10億個(gè)節(jié)點(diǎn)的深度神經(jīng)網(wǎng)絡(luò)模型,在圖像識(shí)別和語音識(shí)別領(lǐng)域取得了重大成功;2016年,由DeepMind研發(fā)的AlphaGo圍棋程序,利用蒙特卡洛樹搜索與兩個(gè)深度神經(jīng)網(wǎng)絡(luò)相結(jié)合的方法,使用強(qiáng)化學(xué)習(xí)進(jìn)一步改善它,先后戰(zhàn)勝人類圍棋高手,強(qiáng)化學(xué)習(xí)(Reinforce Learning)方法(Q-Learning、策略梯度法、蒙特卡羅方法和時(shí)序差分學(xué)習(xí))等,模仿了人類為實(shí)現(xiàn)目標(biāo)所采取的反復(fù)試驗(yàn)的學(xué)習(xí)過程,開始被廣泛運(yùn)用。

2017年,Google在其著名論文《Attention is All you Need》中公開了奠定了現(xiàn)代LLM基礎(chǔ)的Transformer架構(gòu),在transformer之前,循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)及其更先進(jìn)版本長短時(shí)記憶網(wǎng)絡(luò)LSTM和門控循環(huán)單元(GRU)是處理序列任務(wù)的主流架構(gòu),但也正是因?yàn)楸仨氉裱蛄刑幚?,大大限制了其并行化的能力;Transformer架構(gòu)則放棄了循環(huán)層,僅依賴注意力機(jī)制,進(jìn)一步演化的叫做多頭注意力機(jī)制(MHA),并行化帶來了訓(xùn)練速度的極大提升。雖然Transformer架構(gòu)最早是為自然語言處理設(shè)計(jì)的,但是已經(jīng)被大量應(yīng)用于其他領(lǐng)域,如視覺領(lǐng)域(Vision Transformer)、生命科學(xué)(DeepMind的Alpha Fold系列)等。

2018年,OpenAI推出了GPT-1,首次融合Transformer與無監(jiān)督預(yù)訓(xùn)練技術(shù),開啟了對大語言模型的探索之旅,OpenAI的高光時(shí)刻出現(xiàn)在2023,當(dāng)年推出的ChatGPT3.5在問題回答場景表現(xiàn)非常卓越,使得 ChatGPT 上知天文、下知地理,還具有能根據(jù)聊天的上下文進(jìn)行互動(dòng)的能力,具有與真正人類幾乎無異的聊 天能力,其精準(zhǔn)度遠(yuǎn)遠(yuǎn)要超出普通的搜索引擎。

2025年,真正地進(jìn)入到LLM百家爭鳴時(shí)代,北美有ChatGPT、Claude、Gemini、Grok等,歐洲則有Mistral,國內(nèi)則有DeepSeek、Hunyuan等,業(yè)內(nèi)趨勢逐步從基礎(chǔ)模型軍備競賽轉(zhuǎn)移到AI應(yīng)用的落地,首先是Anthropic提出了MCP(Model Context Protocol)方便應(yīng)用以統(tǒng)一的協(xié)議來集成各類模型;其次是智能體,通過模型搭配知識(shí)引擎、文本庫向量化的能力,能夠構(gòu)建相對精準(zhǔn)的智能體。

作為AI相關(guān)從業(yè)者,將嘗試從原理上解釋大語言模型的訓(xùn)練原理,以及與GPU集群的關(guān)系,核心部分:(1)涉及transformer的精華部分(self-attention);(2)back propagation梯度理解及求解過程。這兩部分是理解大語言模型如何被訓(xùn)練出來的基礎(chǔ)。

2.1.1 認(rèn)識(shí)單層神經(jīng)網(wǎng)絡(luò)(neural network)

首先建立對神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)認(rèn)知,如圖1所示,圖中關(guān)鍵的概念如下:

① neural network:神經(jīng)網(wǎng)絡(luò),是函數(shù)的進(jìn)階形式,能夠更好地?cái)M合計(jì)算目標(biāo)。

② input layer:輸入層,可以是數(shù)值,也可以是向量,也可以是矩陣。

③ hidden layer:隱藏層,隱藏層的數(shù)量即為該神經(jīng)網(wǎng)絡(luò)的數(shù)量,圖中為單層神經(jīng)網(wǎng)絡(luò)。

④ weight:權(quán)重參數(shù),輸入值乘以權(quán)重,針對輸入值起到放大或縮小的作用。

⑤ output layer:輸出層,可以為最后的計(jì)算結(jié)果,也可以是更進(jìn)一步的歸一化處理(normalization),更好的評價(jià)本次計(jì)算的擬合程度。

⑥ bias:偏移量參數(shù),輸入值乘以權(quán)重后加一個(gè)偏移量,起到微調(diào)的作用。

7d93db80-87be-11f0-9080-92fbcf53809c.png

圖1:單層神經(jīng)網(wǎng)絡(luò)示意圖

2.1.2 認(rèn)識(shí)深度神經(jīng)網(wǎng)絡(luò)(deep neural network)

如圖2所示,為深度神經(jīng)網(wǎng)絡(luò),重要概念如下:

① 層數(shù):hidden layer的總層數(shù),不含輸入層和輸出層

② 維度:dimension,在語言類模型中,每個(gè)token會(huì)使用一定維度的向量來表示

③ 全連接:full connected network,在圖2中,第0層的神經(jīng)元與第1層的每個(gè)神經(jīng)元都相連,這里神經(jīng)元是指權(quán)重,連接線是指偏移量,每個(gè)計(jì)算結(jié)果(a*w+b)又會(huì)被送入所有的下一層神經(jīng)元產(chǎn)生計(jì)算結(jié)果。

7da82838-87be-11f0-9080-92fbcf53809c.png

圖2:深度神經(jīng)網(wǎng)絡(luò)

2.2 文本如何在神經(jīng)網(wǎng)絡(luò)中計(jì)算

2.2.1 了解單詞向量化(word2vec)

在互聯(lián)網(wǎng)世界中當(dāng)我們常需要計(jì)算兩個(gè)單詞之間的關(guān)聯(lián)度,從最早的one-hot表示法(假設(shè)一部詞典有N個(gè)單詞,用一個(gè)n維向量來表示,每個(gè)單詞占據(jù)某個(gè)位置,其他位置的值均為0,兩兩單詞之間是正交的),逐步發(fā)展為word embedding表示法(翻譯為“詞嵌入”,即將一個(gè)單詞嵌入到某一個(gè)空間的過程)。谷歌在2013年提出來的“word2vec語言算法模型”(一個(gè)2層的神經(jīng)網(wǎng)絡(luò)模型、輸出結(jié)果為稠密向量)基于大量的文本的無監(jiān)督學(xué)習(xí)為每個(gè)單詞進(jìn)行了word embedding的編碼;如圖3所示,word2vec編碼也是包含了兩個(gè)更早語言類編碼模型(CBOW和skip-gram),詞向量模型本身也是開源的,所以各個(gè)廠商都會(huì)有自己的詞向量模型,也會(huì)在持續(xù)的實(shí)踐中迭代詞向量模型。

7db57358-87be-11f0-9080-92fbcf53809c.png

圖3:單詞向量化算法

2.2.2 將句子分詞為token(Tokenizer)

雖然通過word2vec給了每個(gè)單詞一個(gè)詞向量的編碼,但是此種word-based tokenization會(huì)造成詞表過大的問題,另外一種是char-based tokenization則會(huì)忽略一些拼寫錯(cuò)誤,而業(yè)內(nèi)常用的是”subword-basedtokenization”,從最后的切分效果來看一個(gè)token大概是0.75個(gè)word。Byte-Pair Encoding(BPE)是最廣泛采用的subword分詞模型,該模型也應(yīng)用于GPT系列模型訓(xùn)練和推理中,事實(shí)上也取得了非常好的應(yīng)用效果。圖4是分詞過程簡單示意圖,通過tokenizer過程,將句子中的每個(gè)token處理為向量。

7dc94162-87be-11f0-9080-92fbcf53809c.png

圖4:分詞過程示意圖

2.3 大語言模型訓(xùn)練過程

2.3.1 Pre-Train訓(xùn)練過程概述

通常生成式大語言模型會(huì)歷經(jīng)如下訓(xùn)練過程,包括:

1、Pre-Train預(yù)訓(xùn)練:該過程讓模型能夠從大量的無監(jiān)督文本數(shù)據(jù)中學(xué)習(xí)語言的統(tǒng)計(jì)規(guī)律、語法結(jié)構(gòu)、語義關(guān)系等,以便后續(xù)可以應(yīng)用于下游任務(wù),比如文本分類、問題應(yīng)答、翻譯等等。

2、Supervised Fine Tuning有監(jiān)督微調(diào):該過程將會(huì)讓模型學(xué)習(xí)如何解決特定領(lǐng)域的問題,OpenAI提出了指令微調(diào)(Instruct Finetuning)的方案來完成SFT過程。

3、RL強(qiáng)化學(xué)習(xí)及RLHF基于人類反饋強(qiáng)化學(xué)習(xí):Reinforcement Learning with Human Feedback,該過程為模型生成的數(shù)據(jù)提供一個(gè)獎(jiǎng)勵(lì)分?jǐn)?shù),幫助模型學(xué)習(xí)哪些生成符合人類期望,哪些生成不符合人類期望。獎(jiǎng)勵(lì)模型的數(shù)據(jù)通常來自于人工標(biāo)注的排序數(shù)據(jù),標(biāo)注員會(huì)對多個(gè)生成的回答進(jìn)行排名,獎(jiǎng)勵(lì)模型基于人類的反饋排名來進(jìn)行訓(xùn)練。

4、OpenAI在2022年發(fā)表的《Training language models to follow instructions with human feedback》論文中解釋了GPT3基于RLHF的訓(xùn)練過程。

2.3.2 Pre-Train目標(biāo)和過程簡述

1、訓(xùn)練目的:調(diào)整權(quán)重參數(shù)及超參數(shù)(hyper parameter)使得模型能夠較好地?cái)M合存量互聯(lián)網(wǎng)的知識(shí)。 2、訓(xùn)練過程:前饋傳播+反向傳播

如圖5所示,描述了t0、t1、t2、t3、t4時(shí)刻神經(jīng)網(wǎng)絡(luò)所執(zhí)行的動(dòng)作,輸入token為"i":

t0時(shí)刻:經(jīng)過神經(jīng)網(wǎng)絡(luò)計(jì)算,next token預(yù)測了[“am“、”will“、”want“、”like“、”kind“],歸一化后的概率分別為[0.004、0.005、0.003、0.002、0.001],按照概率選擇順序應(yīng)該是"will">"am">"want">"like">"kind",而RL也會(huì)針對結(jié)果進(jìn)行打分并排序,假設(shè)排序結(jié)果是"will">"want">"am">"like">"kind",雖然概率最高選擇結(jié)果相同,但是在"am"和"want"的選擇結(jié)果上并不一致,那么就需要針對此時(shí)刻的權(quán)重參數(shù)進(jìn)行修正,我們計(jì)算出輸出結(jié)果(output)與預(yù)期(expect)的差異(Loss),然后通過反向傳播算法來調(diào)整參數(shù)。

t1時(shí)刻:t0時(shí)刻完成調(diào)整后,t1時(shí)刻繼續(xù)重復(fù)t2的過程,此時(shí)模型的輸入為”I will",繼續(xù)通過前行傳播預(yù)測next token,同樣的將生成結(jié)果(output)與預(yù)期結(jié)果(expect)計(jì)算差異,再進(jìn)行反向傳播調(diào)整參數(shù)。t2時(shí)刻、t3時(shí)刻、t4時(shí)刻:同樣循環(huán)計(jì)算此過程,直到訓(xùn)練結(jié)果與預(yù)期結(jié)果的Loss足夠小。

7dd3cb3c-87be-11f0-9080-92fbcf53809c.png

圖5:前饋計(jì)算預(yù)測下一個(gè)單詞并打分、反向傳播調(diào)整權(quán)重參數(shù)

2.3.3 前饋傳播過程說明

隨機(jī)初始化參數(shù)-》輸入-》前饋傳播-》生成預(yù)測

(1) 隨機(jī)初始化參數(shù):神經(jīng)網(wǎng)絡(luò)初始是沒有默認(rèn)權(quán)重的,一般來說會(huì)賦予隨機(jī)參數(shù),后續(xù)通過持續(xù)多輪的訓(xùn)練來逐步更新權(quán)重參數(shù)等,使得整個(gè)神經(jīng)網(wǎng)絡(luò)達(dá)到最佳的擬合效果。 (2) 輸入token:圖5中的少量token僅用于說明,實(shí)際在訓(xùn)練的時(shí)候會(huì)輸入超長文本,構(gòu)成了訓(xùn)練的上下文,理論上模型看到的越多,它能夠計(jì)算的越精準(zhǔn)。 (3) 前饋傳播(feedforward):在神經(jīng)網(wǎng)絡(luò)中會(huì)利用transformer算法計(jì)算,包括:位置編碼、多頭注意力機(jī)制、FFN等,最終不同神經(jīng)元所產(chǎn)生的不同的預(yù)測token以及它的概率,在訓(xùn)練過程中會(huì)計(jì)算預(yù)測token與預(yù)期token的loss。

2.3.4 反向傳播過程

生成預(yù)測與預(yù)期比較-》反向傳播-》更新參數(shù)

1、生成預(yù)測與預(yù)期比較:模型生成的預(yù)測token歸一化后(normalize)有概率標(biāo)識(shí),那么概率高的會(huì)被選中,但是選中的token并不是期望的,此時(shí)會(huì)存在生成值與預(yù)期值的loss。 2、反向傳播:因?yàn)轭A(yù)測值(output)與預(yù)期值(expect)有l(wèi)oss,所以需要借助于反向傳播算法從最后一層往第一層反向傳播,核心是基于鏈?zhǔn)椒▌t進(jìn)行梯度下降,通過調(diào)整下降的梯度(斜率)和學(xué)習(xí)率來起到逐步收斂的目的。 3、更新參數(shù):1次FW、1次BW,就會(huì)完成一次權(quán)重參數(shù)的更新,這樣的過程要進(jìn)行數(shù)萬輪知道隨機(jī)輸入、隨機(jī)產(chǎn)出的與預(yù)期值的偏差基本收斂。


3、前饋傳播(Feed Forward Propagation)計(jì)算過程演算

3.1 MLP網(wǎng)絡(luò)架構(gòu)multiple layer perceptron

如圖6所示,即給神經(jīng)網(wǎng)絡(luò)一個(gè)輸入,會(huì)讓每一層的每一個(gè)神經(jīng)元對其執(zhí)行計(jì)算,然后將計(jì)算結(jié)果輸出給下一層繼續(xù)計(jì)算直到所有層完成運(yùn)算,最后針對計(jì)算結(jié)果進(jìn)行歸一化,使得每種結(jié)果呈現(xiàn)一種概率分布,并通過Loss函數(shù)將生成結(jié)果與預(yù)期結(jié)果進(jìn)行比較。

7de9e5b6-87be-11f0-9080-92fbcf53809c.png

圖6:輸入層、隱藏層、輸出層、Loss值計(jì)算

① activation function(激活函數(shù)):將輸入按照一定規(guī)則進(jìn)行轉(zhuǎn)換,常見的激活函數(shù):sigmoid、relu、tanh、softmax等,早期的激活函數(shù)主要是用于線性分類的,如圖6所示,hidden layer的每個(gè)神經(jīng)元一般執(zhí)行:H[i]=g(A[i]H[i-1]+b[i]),其中A[i]、B[i]為權(quán)重參數(shù),H[i-1]是上一個(gè)神經(jīng)元的計(jì)算結(jié)果,其目的是向神經(jīng)網(wǎng)絡(luò)引入非線性元素,可以實(shí)現(xiàn)更好的擬合,simoid/tanh是飽和激活函數(shù),而ReLU及其變種為非飽和函數(shù)。

② feedforward(前饋傳播):每個(gè)節(jié)點(diǎn)之間都是全連接,即每個(gè)節(jié)點(diǎn)與下一層的所有節(jié)點(diǎn)都連接,這種特型被稱為fully connected network,從輸入、經(jīng)由hidden layer、產(chǎn)生output的整個(gè)過程,即為前饋傳播。

③ loss function(損失函數(shù)):用來計(jì)算生成結(jié)果與預(yù)期結(jié)果之間的差距,一般分類(classification problem)問題用cross-entropy loss(交叉熵)算法,回歸類(regression)問題使用L1 Loss(mean absolute error、平均絕對誤差)或L2 Loss(mean square error、均方誤差)。

3.2 常見的4種激活函數(shù)

3.2.1 sigmoid

如圖7所示,又稱”壓縮函數(shù)”,輸入為(?∞,∞)輸出為(0,1),屬于非線性函數(shù),在神經(jīng)網(wǎng)絡(luò)中可以實(shí)現(xiàn)非線性分割,且單調(diào)遞增利于反向傳播時(shí)求導(dǎo)。

3.2.2 tanh

如圖7所示,tanh輸入為(-∞,∞)輸出為(-1,1),相較于sigmoid函數(shù)引入了負(fù)數(shù)的輸出,為神經(jīng)網(wǎng)絡(luò)激活過程提供了更多的變量。

3.2.3 ReLU

如圖7所示,ReLU全稱“Rectified Linear Unit”,修正線性單元,相較于sigmoid,relu在反向傳播時(shí)計(jì)算量減少、不容易出現(xiàn)梯度消失的問題、會(huì)造成一定程度網(wǎng)絡(luò)稀疏性,減少過擬合發(fā)生。

3.2.4 softmax

如圖7所示,或稱歸一化指數(shù)函數(shù),能夠?qū)⒍喾诸惖妮敵鲋缔D(zhuǎn)換為范圍在[0, 1]和為1的概率分布,在深度神經(jīng)網(wǎng)絡(luò)中有著非常重要的作用。

7dfe22f6-87be-11f0-9080-92fbcf53809c.png7e162392-87be-11f0-9080-92fbcf53809c.png

圖7:常見激活函數(shù)

3.3 將抽象的前饋傳播轉(zhuǎn)化為GPU可執(zhí)行的矩陣計(jì)算

3.3.1 前饋傳播的基礎(chǔ)參數(shù)說明

如圖8所示是簡化的深度神經(jīng)網(wǎng)絡(luò)的前饋傳播的計(jì)算演示圖,各個(gè)參數(shù)意義如下:

① x1,x2,x3:input layer的輸入?yún)?shù)x,在大語言模型中為輸入的token向量值。

② w1,12:w是指權(quán)重,上標(biāo)2指層數(shù)編號(hào);下標(biāo)”1,1”中靠前的1是指與下一層的第1個(gè)神經(jīng)元的連接權(quán)重,靠后的1是指自身在本層的排列順序。

③ w1,13 : w是指權(quán)重,上標(biāo)3指層數(shù)編號(hào);下標(biāo)”1,1”中靠前的1是指與下一層的第1個(gè)神經(jīng)元的連接權(quán)重,靠后的1是指自身在本層的排列順序。

④ w2,13 : w是指權(quán)重,上標(biāo)3指層數(shù)編號(hào);下標(biāo)”2,1”中靠前的2是指與下一層的第2個(gè)神經(jīng)元相連;下標(biāo)”2,1”中靠后的1是指自身在本層的排列順序。

⑤ w2,33: w是指權(quán)重,上標(biāo)3指層數(shù)編號(hào);下標(biāo)“2,3”中靠前的2是指與下一層第2個(gè)神經(jīng)元相連;下標(biāo)”2,3”中靠后的3是指自身在本層的排列順序。

⑥ z12: z是指上一層計(jì)算結(jié)果(還未經(jīng)過激活函數(shù)),上標(biāo)2指層數(shù)編號(hào),下標(biāo)1是指所在層數(shù)的神經(jīng)元序號(hào)。

⑦ b12:b是指偏移量,上標(biāo)2是指所在層數(shù);下標(biāo)1是指第偏移量要施加的神經(jīng)元的序號(hào)。

⑧ a12:a是指輸入,上標(biāo)2是指所在層數(shù);下標(biāo)1是指神經(jīng)元的序號(hào)。

7e20e1d8-87be-11f0-9080-92fbcf53809c.png

圖8:前饋傳播計(jì)算中過程

3.3.2 前饋傳播中發(fā)生的矩陣計(jì)算

如圖8的計(jì)算邏輯中,Layer1為輸入(x1、x2、x3),需要進(jìn)行兩層計(jì)算,Layer2和Layer3,計(jì)算過程如下,上標(biāo)T為矩陣的轉(zhuǎn)置。

(1)計(jì)算Layer2的過程:a12, a22, a32

a12 = σ(z12)=σ(x1w1,12 + x2w1,22 + x3*w1,32 + b12)

a22 = σ(z22)=σ(x1w2,12 + x2w2,22 + x3*w2,32 + b22)

a32 = σ(z32)=σ(x1w3,12 + x2w3,22 + x3*w3,32 + b32)

其中σ 為激活函數(shù)。Layer2的計(jì)算過程轉(zhuǎn)化為矩陣計(jì)算,σ*(x*w(2)T+b2)=>(a12,a22,a32)

(2)計(jì)算Layer3的過程:a13, a23

a13= σ(z13)=σ(w1,13 *a12+ w1,23 *a22+w1,33 *a32 +b13)

a23= σ(z23)=σ(w2,13 *a12+ w2,23 *a22+w2,33 *a32 +b23)

其中σ 為激活函數(shù)。Layer3的計(jì)算過程轉(zhuǎn)化為矩陣計(jì)算:σ*(a2*w(3)T+b3)=> (a13,a23)

3.3.3 前饋傳播的矩陣表示

上面3.3.2中復(fù)雜的計(jì)算,如果被歸到矩陣計(jì)算,那么過程相對簡單,如下:z、a、W、b均為矩陣。

(1) 乘加計(jì)算結(jié)果:zLayer= aLayer-1 * WLayer+bLayer

(2) 激活函數(shù)處理后結(jié)果:aLayer =σ(zLayer)

使用更加泛化的公式可表示為:

zL=aL-1 * WL + bL

aL=σ(zL)

以上計(jì)算過程轉(zhuǎn)化為GPU的原子計(jì)算”乘加運(yùn)算“和”激活函數(shù)計(jì)算“

(1) GPU的乘加運(yùn)算:矩陣a(上一層的計(jì)算結(jié)果、作為下一層的輸入)* 矩陣W(本層的權(quán)重參數(shù))+ 矩陣b(本層的偏移量)

(2) GPU的激活函數(shù)計(jì)算:針對(1)的結(jié)果進(jìn)行歸一化后再輸送給下一層。

圖8中的層數(shù)和每層權(quán)重計(jì)算單元比較少,當(dāng)層數(shù)大規(guī)模擴(kuò)大、當(dāng)每一層的權(quán)重計(jì)算單元大規(guī)模擴(kuò)大時(shí),會(huì)有超大規(guī)模的矩陣的”乘加運(yùn)算“和”激活函數(shù)“計(jì)算,而矩陣本身的Dot Product運(yùn)算是前面的矩陣某一個(gè)Row乘以后邊的矩陣的某一個(gè)Column,而不需要前面的某一個(gè)Row枚舉與后面矩陣的所有Column相乘,所以可以進(jìn)行拆分計(jì)算然后最終匯合,這也為利用GPU進(jìn)行并行計(jì)算鋪好了理論基礎(chǔ)。

3.4 前饋傳播中的transformer簡介

3.4.1 Transformer簡述

Transformer是一種神經(jīng)網(wǎng)絡(luò)模型,通過追蹤連續(xù)數(shù)據(jù)(例如句子中的單詞)的關(guān)系來理解上下文,進(jìn)而理解每個(gè)token的含義,transformer最核心使用的是自注意力機(jī)制(self-attention)來檢測一些數(shù)據(jù)元素之間微妙影響和依賴關(guān)系,包括距離遙遠(yuǎn)的數(shù)據(jù)元素。Transformer的方法逐步取代了CNN(卷積神經(jīng)網(wǎng)絡(luò))和RNN(遞歸神經(jīng)網(wǎng)絡(luò)),CNN和RNN不得不使用大量帶有標(biāo)記數(shù)據(jù)集來訓(xùn)練神經(jīng)網(wǎng)絡(luò),制作這些數(shù)據(jù)既費(fèi)錢又費(fèi)時(shí)。transformer通過數(shù)學(xué)的方法發(fā)現(xiàn)元素之間的關(guān)系,不需要人工標(biāo)記,使得互聯(lián)網(wǎng)中的數(shù)萬億的圖像和文本有了用武之地;另外transformer還可以使用數(shù)學(xué)的方法并行處理,可以使得模型快速運(yùn)行。

7e3a9042-87be-11f0-9080-92fbcf53809c.png

圖9: transformer結(jié)構(gòu)中的編碼器和解碼器

如圖9所示是Google 2017年”Attention is All you Need”論文中標(biāo)準(zhǔn)的transformer架構(gòu),該架構(gòu)中包含了encoder和decoder:

encoder(圖9左側(cè))

① 由N=6個(gè)layer堆疊組成,每個(gè)layer又分為兩個(gè)sub-layer。 ② 第一個(gè)sub-layer是multi-head attention多頭注意力層。 ③ 第二個(gè)sub-layer是感知位置信息的全連接feed forward 前饋層。 ④ 在MHA和FF層后面各增加了一個(gè)殘差網(wǎng)絡(luò)residual connection和一個(gè)歸一化層normalization ⑤ 輸出的outputs的維度dmodel=512

decoder(圖9右側(cè))

① 由n=6個(gè)相同的layer堆疊組成,和encoder一樣有MHA層(帶mask、遮擋部分信息)和FF前饋層,兩者之間插入了標(biāo)準(zhǔn)的MHA層,用來計(jì)算encoder輸入值與decoder內(nèi)上一層輸出值的self attention. ② 與encoder一樣,在每個(gè)sublayer后增加了殘差網(wǎng)絡(luò)連接和歸一化層。 ③ MHA層增加了mask遮掩:防止當(dāng)前位置關(guān)注后續(xù)后面的位置,確保位置i的預(yù)測僅依賴于小于位置i的信息。

7e4b70ce-87be-11f0-9080-92fbcf53809c.png

圖10 transformer應(yīng)用于語言翻譯場景

如圖10所示是利用transformer架構(gòu)進(jìn)行翻譯,將Input的法語翻譯成英語,建來說是將原始的法文input進(jìn)行編碼,這里編碼帶入了大量的信息,包括:token在句子中的位置信息、token與上下文的自注意力的信息等等,這些信息經(jīng)過相同的6個(gè)layer計(jì)算完成后輸出給decoder模塊,decoder模塊則將編碼所含的位置信息、自主力機(jī)制信息等等按照目標(biāo)語言進(jìn)行預(yù)測,從而產(chǎn)生翻譯的結(jié)果。

3.4.2 Positional Encoding(位置編碼)

單詞在sequence中的出現(xiàn)的位置和順序構(gòu)成了sequence的語義,由于Transformer模型中沒有遞歸和卷積的模塊,為使模型可以利用sequence的順序信息,transformer模型中為每一個(gè)token注入了在sequence的相對信息和絕對信息。如圖11所示模型為每個(gè)輸入的input embedding注入了positional encoding信息,positional encoding與input embedding保持一樣的dmodel維度信息,因此可以直接將input embedding的向量與positional encoding直接求和。

7e62d1e2-87be-11f0-9080-92fbcf53809c.png

圖11 transformer架構(gòu)中的positional encoding的信息插入

positional encoding的計(jì)算:一般可以使用學(xué)習(xí)或者是固定的方法來確定,如圖12所示,采用正余弦函數(shù)的方式進(jìn)行位置編碼。計(jì)算邏輯解析:pos:token的位置;i:token的embedding的dimension維度。

positional encoding的每一個(gè)維度的值對應(yīng)一個(gè)正弦值,其波長呈現(xiàn)從2π到10000*2π的增長。該種算法可以讓模型比較好地學(xué)習(xí)相對位置,因?yàn)閷θ魏喂潭ǖ钠屏縦,PEpos+k都可以被表示為PEpos的線性函數(shù)。另有一個(gè)優(yōu)勢是推理時(shí)可以生成比訓(xùn)練時(shí)遇到序列長度更長的序列。

7e6ea3b4-87be-11f0-9080-92fbcf53809c.png

圖12 基于出現(xiàn)的次序計(jì)算一對編碼,用來表征其位置信息

如圖13所示,針對第k個(gè)input的positional encoding,其位置編碼實(shí)際就是sin(wit)、cos(wit)的交叉出現(xiàn)的向量:

[(sin(w1t),cos(w1t)),(sin(w2t),cos(w2t)),……(sin(Wd/2t),cos(Wd/2t))],其中W也為需要訓(xùn)練得出的參數(shù)。

7e83f2e6-87be-11f0-9080-92fbcf53809c.png

圖13 第k個(gè)位置的token,生成與token的向量表示dimension長度一樣的位置表示

如圖14所示是positional encode的熱力學(xué)度(不同值用不同的顏色表示),向量維度dmodel=128,sequence長度L=50,每一行(row)是某個(gè)位置的positional encode的編碼,呈現(xiàn)交叉豎條狀(sin、cos交叉);每列則是不同的positional encoding在某個(gè)位置(如i)的值??梢园l(fā)現(xiàn)當(dāng)i在(0,50)時(shí),熱力學(xué)表示更加豐富。另外,positional encoding實(shí)際上與input token內(nèi)容無關(guān),當(dāng)條件相同時(shí),不同的input token所在位置相同,那么他們的positional encoding是相同的。

7e8f3ebc-87be-11f0-9080-92fbcf53809c.png

圖14 從0到50的位置的向量表示

3.5 transformer的self attention的計(jì)算過程推演

transformer的注意力過程相當(dāng)復(fù)雜,這里重點(diǎn)參考了參考文獻(xiàn)7.3部分的內(nèi)容。自注意力機(jī)制(self-attention)能夠關(guān)注輸入序列中不同位置的信息,并根據(jù)這些信息來生成當(dāng)前位置的輸出。多頭自注意力機(jī)制(MHA)通過并行處理多個(gè)注意力機(jī)制,能夠更好地捕捉輸入序列中不同維度的信息,增強(qiáng)模型的表達(dá)能力和學(xué)習(xí)效率,從而提高模型在各種任務(wù)中的性能,例如機(jī)器翻譯、文本生成和圖像識(shí)別等。

3.5.1:使用Wq、Wk計(jì)算a1與其他所有a2,a3,a4的關(guān)聯(lián)

如圖15所示,輸入為(a1,a2,a3,a4)的向量,按照傳統(tǒng)遞歸神經(jīng)網(wǎng)絡(luò)或者卷積神經(jīng)網(wǎng)絡(luò)算法,會(huì)依順序計(jì)算關(guān)聯(lián)性,如:(a1->b1),(a1,a2)->b2,(a1,a2,a3)->b3、(a1,a2,a3,a4)->b4,而transformer的self attention方法則在計(jì)算b時(shí)考慮所有的輸入,包括:計(jì)算b1時(shí)考慮 (a1,a2,a3,a4),計(jì)算b2時(shí)考慮(a1,a2,a3,a4)、 計(jì)算b3時(shí)考慮(a1,a2,a3,a4)、 b4時(shí)考慮(a1,a2,a3,a4)。

7eaad974-87be-11f0-9080-92fbcf53809c.png

圖15 從輸入a向量計(jì)算得到輸出b向量

如圖16所示為計(jì)算a1與其他輸入的關(guān)聯(lián)度(即注意力分?jǐn)?shù))的過程:

第①步:假設(shè)輸入sequence共有4個(gè)token,分別是a1,a2,a3,a4,在self-attention中首先會(huì)計(jì)算a1向量與其他token(a2,a3,a4)的關(guān)系,圖15中的Wq與Wk矩陣均是通過學(xué)習(xí)所得,將a1,a2,a3,a4分別乘Wk矩陣得到k1,k2,k3,k4等矩陣,同時(shí)將a1與Wq矩陣相乘得到q1矩陣。

第②步:計(jì)算得到輸入token的a1,a2,a3,a4的K值(k1,k2,k3,k4)和a1所對應(yīng)的q值(q1)后,將每個(gè)k值與q1相乘,得到a1,1,a1,2,a1,3和a1,4,相當(dāng)于a1與其他輸入token的關(guān)聯(lián)權(quán)重。

第③步:a1,1、a1,2、a1,3、a1,4是通過矩陣乘法得到的,通過softmax函數(shù)進(jìn)行歸一化,得到了向量a′ ,共有j項(xiàng)(輸入token數(shù)量),每一項(xiàng) a(1,i)′ 即為a1與其他輸入token的注意力分?jǐn)?shù)。

7ec17d78-87be-11f0-9080-92fbcf53809c.png

圖16 計(jì)算a1 與其他輸入的注意力分?jǐn)?shù)

3.5.2:使用Wv矩陣從Attention Score中提取信息

在上一步中使用了Wq(針對a1)算出了q1矩陣、使用Wk(針對a1,a2,a3,a4)算出了k矩陣(k1,k2,k3,k4),利用q1分別與(k1,k2,k3,k4)并經(jīng)過softmax處理得到Attention score(a’1,1,a’1,2, a’1,3, a’1,4),但信息量過大,通過步驟2的Wv矩陣與(針對a1,a2,a3,a4)相乘得到v矩陣(v1,v2,v3,v4),再將步驟1算得的attention socre與v矩陣一一相乘,并將最后結(jié)果累加得到了b1。其他b2、b3、b4均可以通過此方法運(yùn)算得到。

7edfa7da-87be-11f0-9080-92fbcf53809c.png

圖17 經(jīng)過Wq Wk 矩陣處理得到了注意力分?jǐn)?shù),通過Wv 進(jìn)一步提取分?jǐn)?shù)中有價(jià)值的信息

3.5.3:self-attention機(jī)制的矩陣化表示

前述過程演示了在輸入為(a1,a2,a3,a4)的情況下,如何計(jì)算出a1與其他所有輸入的注意力分?jǐn)?shù)值b1,self attention的優(yōu)勢在于可以同步計(jì)算出a2、a3、a4與其他輸入的注意力分?jǐn)?shù)b2、b3、b4等(這里先假設(shè)Wq、Wk、Wv等參數(shù)已經(jīng)ready(實(shí)際這些參數(shù)通過神經(jīng)網(wǎng)絡(luò)反復(fù)迭代學(xué)習(xí)而來)從而將原來RNN\CNN的序列執(zhí)行提升為并行執(zhí)行,也極大幅度地提升了訓(xùn)練和推理的速度。

① 計(jì)算每個(gè)input的q值(query值)

qi=[q1,q2,q3,q4]=Wq*[a1,a2,a3,a4]

②計(jì)算每個(gè)input的k值(key值)

ki=[k1,k2,k3,k4]=Wk*[a1,a2,a3,a4]

③計(jì)算每個(gè)input的q值與其他所有k值的乘積,該值是未經(jīng)過softmax的attention score,矩陣計(jì)算時(shí)qi的轉(zhuǎn)置與ki矩陣相乘

7f1795f0-87be-11f0-9080-92fbcf53809c.png

④ 針對ai,j計(jì)算softmax(算法如左下圖所示)的概率值得到a’i,j

7f2cfb34-87be-11f0-9080-92fbcf53809c.png

⑤ a’i,j的信息量還是有些大,需要通過另外一個(gè)Wv矩陣進(jìn)一步提取信息,首先將Wv矩陣與原始的輸入矩陣相乘得到vi矩陣

vi=[v1,v2,v3,v4]=Wv*[a1,a2,a3,a4]

⑥將vi矩陣與已經(jīng)算得的softmax的值a’i,j相乘來提取信息,計(jì)算過程如下:

7f365b66-87be-11f0-9080-92fbcf53809c.png

步驟4:self-attention機(jī)制的公式化表示

由于在使用GPU執(zhí)行預(yù)算時(shí),會(huì)有大量的矩陣變換技巧,所以使用了大量的篇幅來解釋矩陣預(yù)算的細(xì)節(jié),回到更高階的視角,可以用少數(shù)幾個(gè)公式來表示以上的運(yùn)算過程,如下:

輸入序列A=[a1,a2,a3,……an],三個(gè)學(xué)習(xí)所得的權(quán)重矩陣Wq、Wk、Wv,對于輸入序列A中的每個(gè)元素ai:

① 公式一:

Qi = Wq * ai

Ki = Wk * ai

Vi = Wv * ai

Q(query):要進(jìn)行查詢的目標(biāo)token,計(jì)算其與其他的token的關(guān)聯(lián)度。

K(key):在上下文中用來計(jì)算與目標(biāo)query token的相關(guān)token,稱之為key。

V(value):計(jì)算query和key后有一系列的結(jié)果,需要從這些結(jié)果中提取有用的信息,稱之為value。

② 公式二:

7f508432-87be-11f0-9080-92fbcf53809c.png

Attention Score計(jì)算:計(jì)算每個(gè)query與上下文中(context)中的每個(gè)key的注意力分?jǐn)?shù)值

dk :由于上述乘法會(huì)得到N2的計(jì)算結(jié)果,通過除√dk來將結(jié)果降低數(shù)量級(jí),dk是Ki鍵向量維度。

③ 公式三:

a’i,j=softmax(score(Qi,Kj))

通過softmax函數(shù)使得注意力分?jǐn)?shù)轉(zhuǎn)為化0和1之前的數(shù)值且和為1,進(jìn)而得出注意力權(quán)重。

④ 公式四:

7f5f7b36-87be-11f0-9080-92fbcf53809c.png

將每個(gè)元素的值向量Vi與其對應(yīng)的注意力權(quán)重向量bi,j相乘, 然后求和, 得到最終的輸出,即每個(gè)query與context內(nèi)每個(gè)key經(jīng)過value提取后的注意力值。

3.6 帶掩碼(MASK)的多頭注意力機(jī)制

3.6.1 帶掩碼(Mask)注意力機(jī)制

在解碼器中每個(gè)token允許看到所有的位置的token,但是在編碼器中為了保持自回歸性,在計(jì)算多頭注意力機(jī)制時(shí)需要遮擋該位置以后位置的信息,即使其只能基于已經(jīng)看到的token來預(yù)測下一個(gè)token,而不能看到全貌,該技術(shù)稱為masking。

7f74b316-87be-11f0-9080-92fbcf53809c.png

圖18 Mask遮擋住后續(xù)信息

(2)多頭(MHA)注意力機(jī)制

多頭注意力機(jī)制允許模型共同關(guān)注來自不同位置的不同表示子空間的信息。

MultiHead(Q, K, V ) = Concat(head1, ..., headh)WO

where headi = Attention(QWiQ , KWiK , V*WiV )

7f813b7c-87be-11f0-9080-92fbcf53809c.png

圖19 多Head計(jì)算不同維度的關(guān)聯(lián)信息

3.6.2 前饋傳播(FFN)中的計(jì)算

在每一個(gè)sublayer中包含1個(gè)注意力層和1個(gè)前饋層(即FFN),該FFN層是一個(gè)全連接的前饋網(wǎng)絡(luò),它由兩個(gè)線性變換以及它們之間的 ReLU 激活函數(shù)組成,在不同的位置執(zhí)行的線性變換是相同的,但它們在不同層使用不同的參數(shù)。

FFN(x) = max(0, x*W1 + b1 )*W2 + b2

其中:

x:attention層算出每個(gè)input的歸一化后的Attention score;W1、b1、W2、b2等:權(quán)重參數(shù)。

7f986f86-87be-11f0-9080-92fbcf53809c.png

圖20 transformer的FFN計(jì)算和殘差連接

3.6.3 殘差連接網(wǎng)絡(luò),減少上一層信息損失

圖20中標(biāo)紫的箭頭為殘差網(wǎng)絡(luò)連接,在transformer模型中,在歸一化前使用ResNet,最終每個(gè)sublayer的輸出為LayerNorm(x + Sublayer(x)),其中Sublayer(x)是經(jīng)過MHA或者FFN計(jì)算后的結(jié)果,然后加上(ADD)通過Residual Network輸送過來的輸入x。Add即為殘差模塊(Residual Block),將本層的輸出和本層的輸入對應(yīng)位置相加(本層的輸出和本層的輸入維度相等)作為最終的輸出。作用是將上一層的輸入傳給本層,避免因?yàn)樯弦粚拥奶幚韺?dǎo)致丟失信息(在反向傳播時(shí)抑制梯度消失)。

7fa6d738-87be-11f0-9080-92fbcf53809c.png

圖21 transformer中也使用了ResNet


4、嘗試?yán)斫夥聪騻鞑ィ˙ack Propagation)

理解反向傳播,首先必須要理解ChainRule,本部分重點(diǎn)引用了參考文獻(xiàn)7.5中內(nèi)容。Back Propagation以網(wǎng)絡(luò)每一層的權(quán)重為變量計(jì)算損失函數(shù)的梯度,以更新權(quán)重從而最小化損失函數(shù)。反向傳播核心目標(biāo)是找到合適的權(quán)重,使得對于訓(xùn)練集中的每個(gè)輸入向量,神經(jīng)網(wǎng)絡(luò)都能產(chǎn)生一個(gè)與預(yù)設(shè)目標(biāo)向量緊密匹配的輸出向量。該方法整體上分為如下步驟:

step1:初始化權(quán)重(weight)并設(shè)置學(xué)習(xí)率(learning rate)和停止條件(stopping criteria)

step2:隨機(jī)選擇一個(gè)輸入(input)及其對應(yīng)的目標(biāo)向量

step3:計(jì)算每一層的輸入和最后一層的輸出

step4:計(jì)算敏感度分量( sensitivity )

step5:計(jì)算梯度分量(gradient)并更新權(quán)重

step6:檢查是否符合停止條件。退出并返回權(quán)重或循環(huán)回到步驟 2。

4.1 前序參數(shù)調(diào)整對預(yù)測結(jié)果的影響的演示

如圖22是簡單的10個(gè)input輸入、4個(gè)output的多層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu);圖中Σ表示求和單元、? (圖中圈里為曲線)代表非線性激活函數(shù),計(jì)算單元之間的連線是權(quán)重。

7fbbf8b6-87be-11f0-9080-92fbcf53809c.png

圖22 神經(jīng)網(wǎng)絡(luò)表示

4.1.1 定義計(jì)算結(jié)果與預(yù)期的目標(biāo)error

在圖23基礎(chǔ)上引入了“Error computing block模塊”,即圖中的三角塊,用來計(jì)算輸出output與預(yù)期的target的差值即Error。訓(xùn)練神經(jīng)網(wǎng)絡(luò)就是通過持續(xù)的迭代來縮小差距。我們通過打包(Boxing)Layer3及其之后所有Layer(圖中的灰底部分),我們稱之為current box,從該box中出來的輸出為e,假設(shè)輸入為{c1,c2,c3,c4,c5,c6},我們的定義輸入與輸出的關(guān)系為:

e = E(c1, c2, c3, c4, c5, c6)

7fcb7804-87be-11f0-9080-92fbcf53809c.png

圖23 Error computing block模塊,計(jì)算輸出output與target的偏差

4.1.2 某一層的輸入所產(chǎn)生的敏感度分量

如圖24展示的是計(jì)算敏感度分量(sensitivity)的過程,每個(gè)input項(xiàng)ci對應(yīng)一個(gè)敏感度分量δci,當(dāng)前box的所有的輸入敏感度分量構(gòu)成了最終的輸出e的敏感度分量,當(dāng)前所有輸入的敏感度分量可以表示成:

{δc1,δc2,δc3,δc4,δc5,δc6}

假設(shè)c4和c6有微小變化Δc4和Δc6 ,那么對最終e帶來的影響為:

δc4* Δc4+δc6* Δc6

在BP算法中,當(dāng)前輸入組件中的微小變化所產(chǎn)生的影響,最終會(huì)在輸出端疊加。

7feaa562-87be-11f0-9080-92fbcf53809c.png

圖24 每個(gè)輸入input對error的影響稱為敏感度分量

4.1.3 往前推計(jì)算前一層(Preceding)的輸入對于當(dāng)前層(Current)的敏感度分量

我們將視野從current box往前看,將前一層稱為Preceding Box(即圖24中的全部內(nèi)容),Preceding Box與Current Input構(gòu)構(gòu)成了圖25中的內(nèi)容,有幾個(gè)重要的概念:

前序Box:Preceding Box Input,即:

p = {p1,p2,p3,p4}

前序Box的輸入的敏感分量,Preceding Box Input Sensitivity,即:

δp={δp1,δp2,δp3,δp4}

可以推斷出, Preceding Box Input Sensitivity必然會(huì)影響到Current Box Input的影響,同時(shí)受兩者之間的相關(guān)元素影響(包括激活函數(shù)、連接權(quán)重、求和單元等)。

7ff5c96a-87be-11f0-9080-92fbcf53809c.png

圖25 Preceding Input對Current層的Error影響

4.1.4 前一層(Preceding)輸入的input對于最終偏差error的影響

如圖26所示,計(jì)算過程展示了Preceding Box的Input p1 的微小變化Δp1,如何影響到最終的偏差Error e,將該過程描述為公式:

?e??p1= δp1,同時(shí)使A′(p1)示激活函數(shù)A(p1)在p1處的導(dǎo)數(shù)。

當(dāng)發(fā)生Δp1變化時(shí):

①第1步會(huì)導(dǎo)致激活函數(shù)發(fā)生變化,帶來的影響是:Δp1?A′(p1)

②第2步由于與下一層的每個(gè)神經(jīng)元互聯(lián),會(huì)影響到每個(gè)ci(當(dāng)然ci并不只受p1的影響,同樣會(huì)受p2,p3,p4等的影響),此時(shí)單分析Δp1的影響,分別為:Δc1=Δp1? A′ (p1)*w11、…… 、Δc6=Δp1? A′ (p1)*w16

③第3步會(huì)進(jìn)入到Current Box,會(huì)遵循本Box的敏感度分量即:Δc1?δc1+?+Δc6?δc6

④ 將Δci逐一代入,得到上圖中右下角的結(jié)果: ?e??p1=δp1=Δp1?A′ (p1)*w11?δc1+?+Δp1?A′ (p1)*w16?δc6

⑤ 前一層的敏感度相較于當(dāng)前層的敏感度,公式化:δpi=A′ (pi)*∑j wij?δcj

8011aec8-87be-11f0-9080-92fbcf53809c.png

圖26 preceding input的p1的變化Δp1 ,帶來最終error的影響

4.1.5 Current Box的輸入權(quán)重W11對于最終error的影響

如圖27演示了權(quán)重(以W11為例)如何影響到最終的error值,當(dāng)W11發(fā)生了ΔW11的變化時(shí):

第1步:會(huì)直觀地影響Current Box的Input輸入,即Δw11?A(p1)

第2步:c1輸入對應(yīng)的Current Box的敏感度單元為δc1,整體對e的影響為:Δw11?A(p1)?δc1

第3步:直觀地,e對于w11的偏導(dǎo)數(shù)(partial derivative)為:?e/?w11=A(p1)?δc1

第4步:泛化地,e對于wij的偏導(dǎo)數(shù)的公式化描述為:?e/?wij=A(pi)?δcj

總結(jié):通過該公式我們可以計(jì)算偏差error與權(quán)重參數(shù)W之間的關(guān)系,可使用最速下降法(steepest descent)最小化誤差,并持續(xù)迭代優(yōu)化權(quán)重。

801dc6fe-87be-11f0-9080-92fbcf53809c.png

圖27 權(quán)重W11 對最終error的影響

4.2 反向傳播利用偏微分調(diào)整參數(shù)

機(jī)器學(xué)習(xí)領(lǐng)域,用來評估兩組數(shù)據(jù)集之間的差異方式有多種,包括:Mean Square Error(均方誤差)、 Cross Entropy(交叉熵)等,整個(gè)神經(jīng)網(wǎng)絡(luò)訓(xùn)練就是不斷調(diào)試參數(shù),使得生成結(jié)果和預(yù)期結(jié)果的差異逐步收斂。

4.2.1 鏈?zhǔn)椒▌t介紹

鏈?zhǔn)椒▌t:也叫“復(fù)合函數(shù)的求導(dǎo)公式”,因?yàn)樵谇梆亗鞑ズ?,如果所產(chǎn)生的結(jié)果與預(yù)期值差距較大,則會(huì)采用反向傳播來調(diào)整參數(shù),而反向傳播一般是運(yùn)行隨機(jī)梯度下降算法,需要通過求導(dǎo)數(shù)的方式來計(jì)算各個(gè)參數(shù)對于輸出結(jié)果的影響,而這里求解不同的參數(shù)對于結(jié)果的影響就會(huì)使用到鏈?zhǔn)椒▌t。

case1:函數(shù):z=h(y),y=g(x),求z對x的導(dǎo)數(shù)。

方法:?x→?y→?z, x影響y,y影響z,所以x會(huì)對z產(chǎn)生影響:

dz/dx=(dz/dy)*(dy/dx)

case2:函數(shù):x=g(s)、y=h(s)、z=k(x,y),求z對s的導(dǎo)數(shù)

方法:s的變化會(huì)同時(shí)影響到x和y,繼而影響到z,?s→{(?x、?y)}→?z,結(jié)果為:

dz/ds=(dz/dx)(dx/ds) + (dz/dy)(dy/ds)

4.2.2 損失函數(shù)與權(quán)重參數(shù)的表示

如圖28所示是一種簡單的神經(jīng)網(wǎng)絡(luò),輸入為x1、x2,神經(jīng)元變化為簡單的:z=x1w1+x2w2+b,激活函數(shù)σ為sigmoid(z),一個(gè)神經(jīng)元的最終輸出為a,整個(gè)計(jì)算過程可以表示為:a = sigmoid(x1w1+x2w2+b)

Back Propagation過程的計(jì)算目標(biāo):找到權(quán)重參數(shù)對于最終的偏差Cost的影響,換一種數(shù)學(xué)表達(dá)“找到損失函數(shù)Cost對于每個(gè)權(quán)重的偏微分(?)”,即:?Cost∕?w,基于鏈?zhǔn)椒▌t往后算一步,得到公式:

?Cost/?w=?C/?z??z/?w

顯而易見,需要計(jì)算?C/?z和?z/?w,其中:

(1) 將計(jì)算?z∕?w的過程稱為“Forward Pass”,由于從w得到z的過程為:x1w1+x2w2+b,所以?z∕?w1=x1,?z∕?w2=x2

(2) 將計(jì)算?C∕?z的過程稱為“Backward Pass”,因?yàn)閦還需要經(jīng)過激活函數(shù)σ的處理,又可以描述為計(jì)算C對激活函數(shù)σ的輸入z的偏微分,過程較復(fù)雜繼續(xù)在下一頁描述。

80381644-87be-11f0-9080-92fbcf53809c.png

圖28 最終偏差Cost對權(quán)重參數(shù)w的影響,ChainRule傳遞

4.2.3 第一層的?C∕?z與第2層網(wǎng)絡(luò)的關(guān)系,繼續(xù)向第2層計(jì)算

如圖29所示,第1層中的?C∕?z,需要繼續(xù)遞歸地通過第2層計(jì)算,計(jì)算邏輯如下:

?C/?z= ?a/?z * ?C/?a

其中:?a/?z=σ′(z), σ′(z)如圖30中sigmoid的導(dǎo)數(shù)所示,易于計(jì)算得到, ?C/?a 則繼續(xù)基于Chain Rule繼續(xù)推演:

?C/?a=?z′/?a??C/?z′+(?z′′)/?a??C/?z′′

其中已知:

?z′/?a=w3、 ?z′′/?a=w4

則:

?C/?z= σ^′ (z)[w3??C/?z′+w4??C/?z′′]

其中?C/?z′、 ?C/?z′′在本步驟中仍然無法計(jì)算得到,仍需依賴下一層的計(jì)算結(jié)果。

8047a91a-87be-11f0-9080-92fbcf53809c.png

圖29 僅計(jì)算第1層,還無法感知Cost和w1、w2的關(guān)系,繼續(xù)計(jì)算第2層

8068bee8-87be-11f0-9080-92fbcf53809c.png8075a824-87be-11f0-9080-92fbcf53809c.png

圖30 涉及到有激活函數(shù)的計(jì)算,其結(jié)果是已知的

4.2.4繼續(xù)計(jì)算?C∕?z′和?C∕?z′′偏微分,繼續(xù)向第3層計(jì)算

如圖31所示,我們在計(jì)算到第2層時(shí),?C/?z′和?C/?z′′無法在本層計(jì)算得到(最終的損失函數(shù)C相較于本層的input的z’和z’’的偏微分),則繼續(xù)向前延伸一層來計(jì)算(遞歸思路),以 ?C/?z′ 為例來描述計(jì)算結(jié)果,它與下一層的關(guān)系如下:

?C/?z′=?a′/?z′(?za/?a′??C/?za+ ?zb/?a′??C/?zb)

?za/?a′與?zb/?a′在就是連接權(quán)重: ?za/?a′=w5, ?zb/?a′= w6

?a′/?z′則是針對激活函數(shù)的求導(dǎo):?a′/?z′= σ(z′)

那么核心需要求解的就是?C/?za和?C/?zb,同樣地需要繼續(xù)向前求解。

808d8dea-87be-11f0-9080-92fbcf53809c.png

圖31 第2層仍然無法得到最終結(jié)果,繼續(xù)向第3層計(jì)算

4.2.5 持續(xù)迭代,直到最后一層output layer

如圖32所示,前面一層的激活函數(shù)的輸入z對最后偏差函數(shù)C的偏微分(partial derivative)與后面的每一層都相關(guān),換言之:

當(dāng)我們算出了最后一層N的權(quán)重參數(shù)與最終偏差C的偏微分,那么我們就可以算出N-1層的權(quán)重參數(shù)與最終偏差C的偏微分,以此類推,直到我們算出該神經(jīng)網(wǎng)絡(luò)所有的權(quán)重相較于最終偏差C的偏微分。

809e4144-87be-11f0-9080-92fbcf53809c.png

圖32 遞歸計(jì)算,一直到output layer

4.3 反向傳播+梯度下降更新參數(shù)

Back Propagation描述了一個(gè)過程,該過程迭代計(jì)算每個(gè)權(quán)重對于最終偏差Cost的影響(即偏微分),那么如何運(yùn)行Back Propagation過程去調(diào)整這些參數(shù)呢?目前較為可行的方式就是隨機(jī)梯度下降方法(Stochastic Gradient Descent),在Forward Propagation和Back Propagation過程中運(yùn)用隨機(jī)梯度下降法及一些優(yōu)化手段,可以自動(dòng)調(diào)整參數(shù)使得神經(jīng)網(wǎng)絡(luò)輸出與預(yù)期結(jié)果收斂。

4.3.1 梯度下降法的數(shù)學(xué)定義

梯度下降法(Gradient Descent)用來找到局部最小值,如圖33所示,必須向函數(shù)上當(dāng)前點(diǎn)對應(yīng)梯度的反方向的規(guī)定步長距離進(jìn)行迭代,直到到達(dá)局部最小值。一般的數(shù)學(xué)定義如下:如果實(shí)值函數(shù)F(x)在a點(diǎn)出可微且有定義,那么函數(shù)F(x)在a點(diǎn)沿著梯度相反的方向 -?F(a)下降最多。

如圖33所示,左F(x)函數(shù)的參數(shù)x0,x1, x2, x3, x4等,輸入到梯度函數(shù):b=a-η?F(a)

那么當(dāng)從函數(shù)F(x)的局部極小值x0出發(fā)時(shí),對應(yīng)參數(shù):

xn+1= xn-ηn*?F(xn),其中n≥0

因此可以得到: F(x0)≥F(x1)≥ F(x2)≥ F(x3)≥ F(x4)

如果順利的話序列(xn)收斂到期望的局部極小值,注意每次迭代步長是可以改變。

80bbbc6a-87be-11f0-9080-92fbcf53809c.png

圖33 梯度下降演示

4.3.2 隨機(jī)梯度下降法定義

本質(zhì)上是對如下問題進(jìn)行求解,即找到合適的參數(shù)θ?,使損失函數(shù)Loss最小。θ?=arg( min( L(θ) ) ),其中θ是參數(shù), L是損失函數(shù)。假設(shè)函數(shù)有2個(gè)參數(shù){θ1, θ2},隨機(jī)選取兩個(gè)初始參數(shù)[θ10,θ20]T,第2組參數(shù)[ θ11,θ21]T ,按照梯度下降的方法:

80cd1c58-87be-11f0-9080-92fbcf53809c.png

計(jì)算梯度(Gradient)的簡單表示:

80e69d04-87be-11f0-9080-92fbcf53809c.png

通過梯度下降法更新參數(shù)簡單數(shù)學(xué)表示:

80f3a120-87be-11f0-9080-92fbcf53809c.png810e4e94-87be-11f0-9080-92fbcf53809c.png

圖34 反向傳播與梯度下降的關(guān)系

4.3.3 逐層反向傳播,累加計(jì)算偏微分

在大語言模型的訓(xùn)練中基礎(chǔ)的計(jì)算邏輯是:a=σ(wx+b),σ如sigmoid

求解權(quán)重w對輸出a的偏微分:

da/dw= da/dσ?dσ/dw=σ′(w)?x

從第n-1層到第n層的正向計(jì)算:

81250bd4-87be-11f0-9080-92fbcf53809c.png

從第n層反向傳播到n-1層的梯度計(jì)算:

8137e358-87be-11f0-9080-92fbcf53809c.png814bdf5c-87be-11f0-9080-92fbcf53809c.png

圖35 梯度表示

同理,從n-1層=>n-2層,n-2層=>n-3層等等,每個(gè)神經(jīng)元的參數(shù)的梯度均可以通過該種方法進(jìn)行計(jì)算可得。

815ace72-87be-11f0-9080-92fbcf53809c.png

圖36 反向傳播計(jì)算梯度,利用梯度更新參數(shù)

4.3.4 如何更新權(quán)重參數(shù)

當(dāng)BP步驟完成每個(gè)參數(shù)對損失函數(shù)的偏微分后,接下來就是通過梯度下降來更新整個(gè)神經(jīng)網(wǎng)絡(luò)的參數(shù),更新方法如下:

8177ab78-87be-11f0-9080-92fbcf53809c.png

其中:η為學(xué)習(xí)率, ?L(w^t )/?(w) 為第t次迭代參數(shù)w對損失函數(shù)L的梯度,t表示迭代版本。

4.3.5 為什么需要調(diào)整學(xué)習(xí)率Learning Rate

學(xué)習(xí)率控制了朝著梯度方向下降的速度或者說步長。如果學(xué)習(xí)率太大,那么可能會(huì)“跳過”最小值,導(dǎo)致模型無法收斂;反之,如果學(xué)習(xí)率太小,那么優(yōu)化過程會(huì)非常慢,甚至可能停留在一個(gè)不理想的局部最小值點(diǎn)。

4.3.6 如何調(diào)整學(xué)習(xí)率

Adaptive Learning Rate(自適應(yīng)Learning Rate),簡稱AdaGrad ,為每個(gè)參數(shù)設(shè)置不同的Learning Rate:

81863ecc-87be-11f0-9080-92fbcf53809c.png

其中t是迭代次數(shù),即learning rate與迭代次數(shù)相關(guān),迭代次數(shù)越多,learning rate會(huì)逐步變小,使其下降速度變得更慢,避免跨過全局極值點(diǎn)。

4.4 反向傳播過程總結(jié)

反向傳播完成了梯度計(jì)算,一般會(huì)通過隨機(jī)梯度下降來更新參數(shù)的權(quán)重,運(yùn)行過程如下:

(1)損失函數(shù)Loss

819509f2-87be-11f0-9080-92fbcf53809c.png

(2)隨機(jī)梯度下降首先會(huì)取一個(gè) 輸入樣例:xn,那么針對這個(gè)輸入的損失函數(shù)為:

81de9374-87be-11f0-9080-92fbcf53809c.png


(3)計(jì)算梯度時(shí),不再考慮對所有的結(jié)果的損失函數(shù),而只針對該example的損失函數(shù),其中?Lnxn的偏微分:

81f039c6-87be-11f0-9080-92fbcf53809c.png

4.5 隨機(jī)梯度下降與標(biāo)準(zhǔn)梯度下降的區(qū)別

如圖37所示,計(jì)算完一個(gè)輸入的偏差函數(shù),即開始更新參數(shù),在等高線圖中出現(xiàn)了很多較小的點(diǎn),代表以較小的步驟朝梯度下降的方向進(jìn)行多次嘗試;右邊則是在計(jì)算所有的輸入與預(yù)期的損失函數(shù)后進(jìn)行一次梯度下降,步長較大,但實(shí)際上離全局最低點(diǎn)距離較遠(yuǎn)。

81feaad8-87be-11f0-9080-92fbcf53809c.png82138e9e-87be-11f0-9080-92fbcf53809c.png

圖37 隨機(jī)梯度下降帶來一定的不確定性,收斂效果有時(shí)更佳


5、大語言模型訓(xùn)練為什么需要超大集群

通過前序介紹,我們了解了大語言模型的原理,即“通過向神經(jīng)網(wǎng)絡(luò)進(jìn)行輸入一組tokens,運(yùn)算預(yù)測下一個(gè)系列的tokens(每個(gè)token使用概率表示),將預(yù)測的tokens的預(yù)期結(jié)果進(jìn)行比較,會(huì)產(chǎn)生偏差,使用損失函數(shù)(Loss Function)來表示,然后通過反向傳播過程計(jì)算整個(gè)神經(jīng)網(wǎng)絡(luò)里每個(gè)權(quán)重相較于損失函數(shù)L的偏微分(即梯度Gradient),再通過梯度下降(Gradient Descent)的方式來持續(xù)刷新參數(shù),直到梯度下降到全局最低點(diǎn),此時(shí)權(quán)重參數(shù)達(dá)到最佳版本?!?/p>


6、如何使用GPU并行訓(xùn)練大語言模型

從以上過程可以看出,需要在一次完整的Feedforward Propagation和Backpropagation中需要保持全量數(shù)據(jù),包括:全量的輸入token、利用transformer計(jì)算的注意力值、反向傳播過程中的梯度、梯度下降過程中的中間值等等;隨著Transformer架構(gòu)將語言類的訓(xùn)練推理的輸入token、權(quán)重參數(shù)、輸出token、優(yōu)化器狀態(tài)( momentums & variations in Adam )等都提升到億級(jí)別,對于每次迭代所要使用的算力和顯存需求也相應(yīng)的呈現(xiàn)指數(shù)級(jí)的放大。單一的GPU已經(jīng)很難完成計(jì)算,因此需要GPU集群來完成運(yùn)算,所以一般采用并行方式來進(jìn)行訓(xùn)練。一般分為數(shù)據(jù)并行、模型并行、流水線并行、張量并行等形式。

6.1 數(shù)據(jù)并行

將相同的模型權(quán)重復(fù)制到多個(gè)工作器(GPU)中,并將一小部分?jǐn)?shù)據(jù)分配給每個(gè)GPU同時(shí)處理,如果模型大小大于單個(gè) GPU 節(jié)點(diǎn)的內(nèi)存,則原始的Data Parallelism無法正常工作。一般采用Distributed Data Parallelism,數(shù)據(jù)交換傳輸應(yīng)在后端進(jìn)行,并且不會(huì)干擾訓(xùn)練計(jì)算。尤其是涉及到整個(gè)網(wǎng)絡(luò)中的Gradient Accumulation(梯度累加,在前述推導(dǎo)中,n-1層的梯度依賴于n層的相連的Sum(梯度*激活函數(shù))),該方案訓(xùn)練效率不高,一般較少采用。

6.2 模型并行

將計(jì)算和模型參數(shù)分配到不同的機(jī)器及GPU上,換言之不同的device承載不同的計(jì)算任務(wù),如圖38所示,當(dāng)Device0完成F0(即第0次FP)后需要等待其他設(shè)備Device1、Device2、Device3、Device4等依次完成1次F0、1次F0、1次F0和一次B0、 B0、 B0、 B0等,會(huì)造成設(shè)備空等情況比較嚴(yán)重,模型并行的方案在訓(xùn)練中也并不常用。

822205aa-87be-11f0-9080-92fbcf53809c.png

圖 38 模型并行(model parallelism)訓(xùn)練示意圖,空等時(shí)間過長

6.3 流水線并行

將模型并行MP與數(shù)據(jù)并行DP相結(jié)合,以減少低效的時(shí)間“泡沫”,具體措施如下:

(1) 1次FP和1次BP,即一次前向傳播和一次反向傳播,視為一個(gè)小批次(minibatch),PP方法核心就是將小批次繼續(xù)分解為微批次(micro batch),使得每一個(gè)設(shè)備在某一時(shí)間不專職于處理某一次迭代FP和BP的任務(wù),而是在同一時(shí)間能夠處理多個(gè)迭代的子任務(wù),這樣設(shè)備空等的時(shí)間就會(huì)變得很小。在該領(lǐng)域較為出眾的方法分別是Gpipe和PipeDream。

6.3.1 GPipe

如圖39中Gpipe流程所示,因?yàn)橐诒綽atch結(jié)束后同步梯度信息以保證全局的Gradient統(tǒng)一的,雖然1個(gè)batch中F0和B0被拆成了4個(gè)微批(F0,0、F0,1、F0,2、F0,3)和(B0,3、 B0,2、 B0,1、 B0,0),但是每個(gè)Device至少有6個(gè)time stage在等待,占總時(shí)間14 stage的42%,較純Model parallelism有所改善,但是利用效率仍然不算高。

82360b54-87be-11f0-9080-92fbcf53809c.png

圖39 Gpipe示意圖:4設(shè)備、4微批次,每個(gè)batch完成后更新梯度,空等時(shí)間至少40%

6.3.2 PipeDream

PipeDream和Gpipe最大的不同是“打破了批次的限制”,可以交替地執(zhí)行FP和BP,得益于其調(diào)度算法能夠記錄好過程中的梯度數(shù)據(jù),不必等待某一次Gradient同步結(jié)束后再執(zhí)行下一個(gè)迭代的運(yùn)算。為了保證數(shù)據(jù)的一致性,采用如下策略:

(1) Weight stashing:每個(gè)worker跟蹤模型版本,確保在給定一個(gè)數(shù)據(jù)批次的前向和后向傳遞中使用相同版本的權(quán)重。

(2) Vertical sync:激活函數(shù)與梯度的版本在各個(gè)worker之間流轉(zhuǎn),計(jì)算時(shí)采用從前一個(gè)worker傳遞過來的版本,確保一致。

衍生版本有: PipeDream-flush和PipeDream-2BW。

82484666-87be-11f0-9080-92fbcf53809c.png

圖40 PipeDream示意圖:雖然交叉處理微批次,但是針對某一微批次的數(shù)據(jù)副本是相同的

6.4 張量并行

模型并行MP和流水行并行PP均采用的是垂直分割模型的方式,即將某幾層神經(jīng)網(wǎng)絡(luò)指定特定的GPU來執(zhí)行計(jì)算,實(shí)際上也可以采用水平分割的方式,即將一層神經(jīng)網(wǎng)絡(luò)一分為N,每一個(gè)小部分分到不同的GPU上執(zhí)行,此類方法一般稱為TP( Tensor Parallelism )。在transformer架構(gòu)中有MLP和Self-attention Block有大量的矩陣的乘法運(yùn)算GEMM,由于矩陣行列相乘特性可以進(jìn)行拆分。

6.4.1 GeLU和DropOut的矩陣拆分并行

如圖41所示,按照如下方案進(jìn)行拆分和合并:

激活函數(shù):Y=GeLU(X*A)

拆分:Split A = [A1,A2]、Split B=[B1,B2]

那么:[Y1,Y2]=[ GeLU(XA1), GeLU(XA2)]

Y1,Y2繼續(xù)執(zhí)行Dropout:[Z1,Z2]=[Dropout(Y1B1), Dropout(Y2B2)]

合并:Z=Merge[Z1,Z2]

A1->Y1->Z1、A2->Y2->Z2,在矩陣運(yùn)算中時(shí)獨(dú)立的,彼此并無依賴,因此可以拆分到不同的計(jì)算worker上執(zhí)行,最后進(jìn)行合并。

825e035c-87be-11f0-9080-92fbcf53809c.png

圖41 矩陣的Dot Product拆開再合并

6.4.2 Self-attention和Dropout的矩陣拆分并行

如圖42所示,為Self-attention的過程,可以針對Q、K、V進(jìn)行拆解

826f9cde-87be-11f0-9080-92fbcf53809c.png

圖42 selft attention本身大量的矩陣乘法,完成可以拆開進(jìn)行

Split V=[V1,V2]、Q=[Q1,Q2]、K=[K1,K2],分別執(zhí)行Self-attention的計(jì)算過程:

Y1=(Softmax(Q1X)(K1X)T/√dk)*(XV1)

Y2=(Softmax(Q2X)(K2X)T/√dk)*(XV2)

同樣的經(jīng)過Dropout過程得到B1和B2,最后機(jī)型合并得到:

Z=Dropout([Y1B1,Y2B2])

所以Self-attention的也可將QKV進(jìn)行拆分與輸入X分別計(jì)算最后合并。

6.4.3 Self-attention和Dropout的矩陣拆分并行

將流水線、張量和數(shù)據(jù)并行相結(jié)合,為每個(gè)worker放置多個(gè)較小的連續(xù)層子集,而不是設(shè)備商放置放連續(xù)的層(“模型塊”),1個(gè)batch里面的微批次按照worker的數(shù)量m進(jìn)行劃分,如圖43所示,上方的圖是每個(gè)worker運(yùn)行連續(xù)的model chunks,下方的圖則進(jìn)一步分拆,每個(gè)device上運(yùn)行更多的micro batches,這樣的效果是其閑置時(shí)間更少,利用率更高。

8280c720-87be-11f0-9080-92fbcf53809c.png

圖43 將一塊Device在單元時(shí)間內(nèi)拆成不同的stage,stage越密,其閑置的概率就越低

6.5 并行訓(xùn)練中的優(yōu)化手段

6.5.1 Activation Recomputation,不存儲(chǔ)激活函數(shù)的結(jié)果而重新計(jì)算

又可以稱為“activation checkpointing”或“gradient checkpointing”,假設(shè)將一個(gè) L 層網(wǎng)絡(luò)均勻地劃分為多個(gè)分區(qū),只有分區(qū)邊界處的激活值會(huì)被保存并在各個(gè)工作器之間傳遞。分區(qū)內(nèi)部各層的中間激活值仍需用于計(jì)算梯度,因此在反向傳播過程中會(huì)重新計(jì)算它們,減少分區(qū)內(nèi)的梯度的存儲(chǔ)需求。

6.5.2 Mixed Precision Training,混合精度計(jì)算

如圖44所示,采用半精度來進(jìn)行訓(xùn)練同時(shí)不損失精度,具體技術(shù)包括:

(1) 累積梯度使用全精度 (FP32) 模型權(quán)重副本,避免過小導(dǎo)致梯度丟失。

(2) 放大損失,可以更好地處理小幅度的梯度值,以此保留原本可能丟失的值。

(3) 更小算術(shù)精度運(yùn)算,包括向量點(diǎn)積等,因?yàn)閿?shù)據(jù)較大,因此采用FP16保存;point-wise類計(jì)算均可以使用半精度,本身每一個(gè)點(diǎn)的精度損失對于累加的結(jié)果影響較小。

82914050-87be-11f0-9080-92fbcf53809c.png

圖44 混合精度計(jì)算常用方案

6.5.3 Memory Efficient Optimizer,內(nèi)存效率優(yōu)化器

在做梯度下降時(shí),需要使用動(dòng)量(類似于球體沿著山坡滾落,動(dòng)量幫助選擇最佳的下降方向)和方差(計(jì)算學(xué)習(xí)率),也會(huì)耗費(fèi)大量的內(nèi)存。包括:

(1)占據(jù)內(nèi)存最多的:梯度、參數(shù)、優(yōu)化器(動(dòng)量和方差)等。

(2)其他包括:激活、臨時(shí)緩沖區(qū)和不可用的碎片內(nèi)存等。

如何進(jìn)行優(yōu)化?ZERO方法,即Zero Redundancy Optimizer(零冗余優(yōu)化器),具體措施包括:

(1)ZERO-DP:通過動(dòng)態(tài)通信調(diào)度將優(yōu)化器狀態(tài)、梯度和參數(shù)劃分到多個(gè)數(shù)據(jù)并行進(jìn)程(ZERO-DP)中,以最大限度地減少通信量。

(2)ZeRO-R:使用分區(qū)激活重新計(jì)算、恒定緩沖區(qū)大小和動(dòng)態(tài)內(nèi)存碎片整理來優(yōu)化殘差狀態(tài)的內(nèi)存消耗。

6.6 并行框架

如果從0到1構(gòu)建以上的并行訓(xùn)練或推理能力實(shí)在太復(fù)雜了,并行訓(xùn)練框架核心解決的是模型的正向和反向計(jì)算與GPU的計(jì)算Stage的匹配問題(減少GPU閑置等待時(shí)間),并行推理框架則架構(gòu)相對簡單,工業(yè)界為了解決并行問題實(shí)際上已經(jīng)歷經(jīng)數(shù)年探索,具體包括:

6.6.1 并行訓(xùn)練框架

1、DeepSpeed:由微軟開發(fā)的開源深度學(xué)習(xí)優(yōu)化庫,支持?jǐn)?shù)據(jù)并行、流水線并行和張量切片模型并行,并可以靈活組合使用,解決顯存效率和計(jì)算效率;支持ZeRO等優(yōu)化手段和混合精度訓(xùn)練;適用于通用的機(jī)器學(xué)習(xí)訓(xùn)練場景,擅長數(shù)據(jù)并行和內(nèi)存優(yōu)化,在業(yè)內(nèi)使用極其廣泛。

2、Megatron-LM:由英偉達(dá)開發(fā)的基于 PyTorch 的分布式訓(xùn)練框架,專注于訓(xùn)練基于Transformer的大型語言類模型。Megatron-LM 綜合應(yīng)用了數(shù)據(jù)并行(Data Parallelism),張量并行(Tensor Parallelism)和流水線并行(Pipeline Parallelism),擅長張量并行。

6.6.2 并行推理框架

1、vLLM:vLLM是伯克利大學(xué)LMSYS組織開源的大語言模型高速推理框架,可以和HuggingFace 無縫集成,vLLM利用了全新的注意力算法"PagedAttention"(允許在不連續(xù)的內(nèi)存空間中存儲(chǔ)連續(xù)的 keys 和 values,可以更加有效地利用GPU現(xiàn)存),有效地管理注意力鍵和值;支持多機(jī)多卡的張量并行、流水線并行等。

2、SGlang:同樣也是開源項(xiàng)目,主要作者來自于加州伯克利,大部分作者也是vLLM的作者,創(chuàng)新之處在于對LLM的多輪對話的良好支持,核心使用RadixAttention和Constrained Decoding可以減少LLM Program的計(jì)算量,也和vLLM的PA、Continous Batching兼容的。

3、TRT-LLM:是一款由 NVIDIA 推出的大語言模型(LLMs)推理加速框架,為用戶提供了一個(gè)易于使用的 Python API,并使用最新的優(yōu)化技術(shù)將大型語言模型構(gòu)建為 TensorRT 引擎文件,以便在 NVIDIA GPU 上高效地進(jìn)行推理。

4、DeepSpeed:Deepspeed 框架添加了 DeepSpeed Inference具有高性能多 GPU 推理功能,允許用戶通過適應(yīng)多GPU 推理的最佳并行策略來有效地服務(wù)大型模型,同時(shí)考慮推理延遲和成本;針對推理優(yōu)化的CUDA 內(nèi)核,通過深度融合和新穎的內(nèi)核調(diào)度充分利用GPU資源,從而提高每個(gè)GPU的效率;有效的量化感知訓(xùn)練,支持量化后的模型推理,如 INT8 推理,模型量化可以節(jié)省內(nèi)存(memory)和減少延遲(latency),同時(shí)不損害準(zhǔn)確性。

5、Caffe:Caffe率先做到了在GPU上高性能運(yùn)行,它寫了大量cuda kernel,比如im2col后調(diào)用cuBLAS來優(yōu)化卷積算子。同時(shí)很早支持?jǐn)?shù)據(jù)并行方式多卡訓(xùn)練。其性能優(yōu)勢讓很多人從Theano切換到Caffe,正如vLLM的Paged Attention打開了吞吐天花板,早期的ImageNet和ResNet均基于Caffe平臺(tái)訓(xùn)練產(chǎn)出。

6.7 補(bǔ)充

截止到25年7月份最強(qiáng)的模型包括GPT4.1(OpenAI)、DeepSeek-R1-0528(DeepSeek)、Claude4(Anthropic)、Gemini2.5 Pro(Google)、Llama4(Meta)、Grok3(xAI)等,當(dāng)模型需要更加智能時(shí)則需要進(jìn)一步提升其參數(shù)量,在了解了大模型的訓(xùn)練原理后,那么就不難理解為何在硬件層面需要持續(xù)進(jìn)行迭代了,一般是兩種思路,采用Sacle UP(如Nvidia的 B200系列GPU,采用堆疊方式),或Sacle Out在集群層面擴(kuò)充(比如Grok3接近使用了20萬張H100/H200訓(xùn)練)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1811

    文章

    49488

    瀏覽量

    258023
  • 語言模型
    +關(guān)注

    關(guān)注

    0

    文章

    566

    瀏覽量

    11172
  • LLM
    LLM
    +關(guān)注

    關(guān)注

    1

    文章

    337

    瀏覽量

    1131
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    探究物聯(lián)網(wǎng)行業(yè)的一線聲音

    在這篇萬字長文中,共有45家企業(yè)說出了關(guān)于物聯(lián)網(wǎng)行業(yè)的,企業(yè)的年度感想。
    的頭像 發(fā)表于 02-05 17:16 ?4732次閱讀

    人工智能300年!LSTM之父萬字長文:詳解現(xiàn)代AI和深度學(xué)習(xí)發(fā)展史

    來源:新智元 編輯:昕朋 好困 導(dǎo)讀 最近,LSTM之父Jürgen Schmidhuber梳理了17世紀(jì)以來人工智能的歷史。在這篇萬字長文中,Schmidhuber為讀者提供了一個(gè)大事年表,其中
    的頭像 發(fā)表于 01-10 12:25 ?941次閱讀

    河套IT TALK 67: (原創(chuàng)) 基于深度學(xué)習(xí)的超分技術(shù)(萬字長文

    的空間感、方位感、高還原度、高沉浸度、臨場感,個(gè)性化的三維聲技術(shù) 。本期,我們就聊聊最近非常火的基于深度學(xué)習(xí)的超分技術(shù)。 關(guān)聯(lián)回顧 全圖說電視 的發(fā)展歷史 全圖說視頻編解碼 的發(fā)展歷史 由淺入深說高清——聊聊高動(dòng)態(tài)范圍(HDR) 由淺入深說高清——HDR的標(biāo)準(zhǔn)之爭
    的頭像 發(fā)表于 04-03 22:25 ?3343次閱讀

    人工智能300年!LSTM之父萬字長文:詳解現(xiàn)代AI和深度學(xué)習(xí)發(fā)展史

    來源:新智元編輯:昕朋好困導(dǎo)讀最近,LSTM之父JürgenSchmidhuber梳理了17世紀(jì)以來人工智能的歷史。在這篇萬字長文中,Schmidhuber為讀者提供了一個(gè)大事年表,其中包括神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 01-13 11:02 ?1527次閱讀
    人工智能300年!LSTM之父<b class='flag-5'>萬字長文</b>:詳解現(xiàn)代AI和<b class='flag-5'>深度</b>學(xué)習(xí)發(fā)展史

    萬字長文盤點(diǎn)!2022十大AR工業(yè)典型案例,不可不看!

    萬字長文盤點(diǎn)!2022十大AR工業(yè)典型案例,不可不看!
    的頭像 發(fā)表于 01-17 14:43 ?3056次閱讀
    近<b class='flag-5'>萬字長文</b>盤點(diǎn)!2022十大AR工業(yè)典型案例,不可不看!

    基于Transformer的大型語言模型LLM)的內(nèi)部機(jī)制

    本文旨在更好地理解基于 Transformer 的大型語言模型LLM)的內(nèi)部機(jī)制,以提高它們的可靠性和可解釋性。 隨著大型語言模型
    的頭像 發(fā)表于 06-25 15:08 ?2199次閱讀
    基于Transformer的大型<b class='flag-5'>語言</b><b class='flag-5'>模型</b>(<b class='flag-5'>LLM</b>)的內(nèi)部機(jī)制

    如何用AI聊天機(jī)器人寫出萬字長文

    如何用AI聊天機(jī)器人寫出萬字長文
    的頭像 發(fā)表于 12-26 16:25 ?2024次閱讀

    阿里通義千問重磅升級(jí),免費(fèi)開放1000萬字長文檔處理功能

    近日,阿里巴巴旗下的人工智能應(yīng)用通義千問迎來重磅升級(jí),宣布向所有人免費(fèi)開放1000萬字長文檔處理功能,這一創(chuàng)新舉措使得通義千問成為全球文檔處理容量第一的AI應(yīng)用。
    的頭像 發(fā)表于 03-26 11:09 ?1386次閱讀

    單日獲客成本超20,國產(chǎn)大模型開卷200萬字以上的長文本處理

    電子發(fā)燒友網(wǎng)報(bào)道(文/周凱揚(yáng))隨著AGI生態(tài)的蓬勃發(fā)展,各種支持多模態(tài)的大模型推陳出新,比如最近比較火的音樂大模型Suno和文生視頻大模型Sora等等。然而在傳統(tǒng)基于文本的大語言
    的頭像 發(fā)表于 03-27 00:53 ?4257次閱讀
    單日獲客成本超20<b class='flag-5'>萬</b>,國產(chǎn)大<b class='flag-5'>模型</b>開卷200<b class='flag-5'>萬字</b>以上的<b class='flag-5'>長文</b>本處理

    語言模型(LLM)快速理解

    自2022年,ChatGPT發(fā)布之后,大語言模型(LargeLanguageModel),簡稱LLM掀起了一波狂潮。作為學(xué)習(xí)理解LLM的開始,先來整體理解一下大
    的頭像 發(fā)表于 06-04 08:27 ?2379次閱讀
    大<b class='flag-5'>語言</b><b class='flag-5'>模型</b>(<b class='flag-5'>LLM</b>)快速理解

    LLM模型的應(yīng)用領(lǐng)域

    在本文中,我們將深入探討LLM(Large Language Model,大型語言模型)的應(yīng)用領(lǐng)域。LLM是一種基于深度學(xué)習(xí)的人工智能技術(shù),
    的頭像 發(fā)表于 07-09 09:52 ?1581次閱讀

    llm模型和chatGPT的區(qū)別

    LLM(Large Language Model)是指大型語言模型,它們是一類使用深度學(xué)習(xí)技術(shù)構(gòu)建的自然語言處理(NLP)
    的頭像 發(fā)表于 07-09 09:55 ?2278次閱讀

    llm模型有哪些格式

    LLM(Large Language Model,大型語言模型)是一種深度學(xué)習(xí)模型,主要用于處理自然語言
    的頭像 發(fā)表于 07-09 09:59 ?1734次閱讀

    新品|LLM Module,離線大語言模型模塊

    LLM,全稱大語言模型(LargeLanguageModel)。是一種基于深度學(xué)習(xí)的人工智能模型。它通過大量文本數(shù)據(jù)進(jìn)行訓(xùn)練,從而能夠進(jìn)行對
    的頭像 發(fā)表于 11-02 08:08 ?1338次閱讀
    新品|<b class='flag-5'>LLM</b> Module,離線大<b class='flag-5'>語言</b><b class='flag-5'>模型</b>模塊

    什么是LLMLLM在自然語言處理中的應(yīng)用

    隨著人工智能技術(shù)的飛速發(fā)展,自然語言處理(NLP)領(lǐng)域迎來了革命性的進(jìn)步。其中,大型語言模型LLM)的出現(xiàn),標(biāo)志著我們對語言理解能力的一次
    的頭像 發(fā)表于 11-19 15:32 ?4213次閱讀