亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

本文轉自:騰訊技術工程

作者:royceshao

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

1、大語言模型簡述

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

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


2、預訓練過程概述

2.1 神經網絡發(fā)展史

神經網絡誕生于20世紀40年代,取得重要突破的節(jié)點在20世紀70年代、20世紀80年代、21世紀初。

20世紀70年代:Paul Werbos博士提出了影響深遠的Back Propagation的神經網絡學習算法,實際上找到了訓練多層神經網絡的方法。

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

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

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

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

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

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

2.1.1 認識單層神經網絡(neural network)

首先建立對神經網絡的基礎認知,如圖1所示,圖中關鍵的概念如下:

① neural network:神經網絡,是函數(shù)的進階形式,能夠更好地擬合計算目標。

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

③ hidden layer:隱藏層,隱藏層的數(shù)量即為該神經網絡的數(shù)量,圖中為單層神經網絡。

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

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

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

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

圖1:單層神經網絡示意圖

2.1.2 認識深度神經網絡(deep neural network)

如圖2所示,為深度神經網絡,重要概念如下:

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

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

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

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

圖2:深度神經網絡

2.2 文本如何在神經網絡中計算

2.2.1 了解單詞向量化(word2vec)

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

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

圖3:單詞向量化算法

2.2.2 將句子分詞為token(Tokenizer)

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

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

圖4:分詞過程示意圖

2.3 大語言模型訓練過程

2.3.1 Pre-Train訓練過程概述

通常生成式大語言模型會歷經如下訓練過程,包括:

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

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

3、RL強化學習及RLHF基于人類反饋強化學習:Reinforcement Learning with Human Feedback,該過程為模型生成的數(shù)據提供一個獎勵分數(shù),幫助模型學習哪些生成符合人類期望,哪些生成不符合人類期望。獎勵模型的數(shù)據通常來自于人工標注的排序數(shù)據,標注員會對多個生成的回答進行排名,獎勵模型基于人類的反饋排名來進行訓練。

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

2.3.2 Pre-Train目標和過程簡述

1、訓練目的:調整權重參數(shù)及超參數(shù)(hyper parameter)使得模型能夠較好地擬合存量互聯(lián)網的知識。 2、訓練過程:前饋傳播+反向傳播

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

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

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

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

圖5:前饋計算預測下一個單詞并打分、反向傳播調整權重參數(shù)

2.3.3 前饋傳播過程說明

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

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

2.3.4 反向傳播過程

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

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


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

3.1 MLP網絡架構multiple layer perceptron

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

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

圖6:輸入層、隱藏層、輸出層、Loss值計算

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

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

③ loss function(損失函數(shù)):用來計算生成結果與預期結果之間的差距,一般分類(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ù),在神經網絡中可以實現(xiàn)非線性分割,且單調遞增利于反向傳播時求導。

3.2.2 tanh

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

3.2.3 ReLU

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

3.2.4 softmax

如圖7所示,或稱歸一化指數(shù)函數(shù),能夠將多分類的輸出值轉換為范圍在[0, 1]和為1的概率分布,在深度神經網絡中有著非常重要的作用。

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

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

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

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

如圖8所示是簡化的深度神經網絡的前饋傳播的計算演示圖,各個參數(shù)意義如下:

① x1,x2,x3:input layer的輸入參數(shù)x,在大語言模型中為輸入的token向量值。

② w1,12:w是指權重,上標2指層數(shù)編號;下標”1,1”中靠前的1是指與下一層的第1個神經元的連接權重,靠后的1是指自身在本層的排列順序。

③ w1,13 : w是指權重,上標3指層數(shù)編號;下標”1,1”中靠前的1是指與下一層的第1個神經元的連接權重,靠后的1是指自身在本層的排列順序。

④ w2,13 : w是指權重,上標3指層數(shù)編號;下標”2,1”中靠前的2是指與下一層的第2個神經元相連;下標”2,1”中靠后的1是指自身在本層的排列順序。

⑤ w2,33: w是指權重,上標3指層數(shù)編號;下標“2,3”中靠前的2是指與下一層第2個神經元相連;下標”2,3”中靠后的3是指自身在本層的排列順序。

⑥ z12: z是指上一層計算結果(還未經過激活函數(shù)),上標2指層數(shù)編號,下標1是指所在層數(shù)的神經元序號。

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

⑧ a12:a是指輸入,上標2是指所在層數(shù);下標1是指神經元的序號。

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

圖8:前饋傳播計算中過程

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

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

(1)計算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的計算過程轉化為矩陣計算,σ*(x*w(2)T+b2)=>(a12,a22,a32)

(2)計算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的計算過程轉化為矩陣計算:σ*(a2*w(3)T+b3)=> (a13,a23)

3.3.3 前饋傳播的矩陣表示

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

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

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

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

zL=aL-1 * WL + bL

aL=σ(zL)

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

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

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

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

3.4 前饋傳播中的transformer簡介

3.4.1 Transformer簡述

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

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

圖9: transformer結構中的編碼器和解碼器

如圖9所示是Google 2017年”Attention is All you Need”論文中標準的transformer架構,該架構中包含了encoder和decoder:

encoder(圖9左側)

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

decoder(圖9右側)

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

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

圖10 transformer應用于語言翻譯場景

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

3.4.2 Positional Encoding(位置編碼)

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

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

圖11 transformer架構中的positional encoding的信息插入

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

positional encoding的每一個維度的值對應一個正弦值,其波長呈現(xiàn)從2π到10000*2π的增長。該種算法可以讓模型比較好地學習相對位置,因為對任何固定的偏移量k,PEpos+k都可以被表示為PEpos的線性函數(shù)。另有一個優(yōu)勢是推理時可以生成比訓練時遇到序列長度更長的序列。

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

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

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

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

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

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

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

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

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

3.5 transformer的self attention的計算過程推演

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

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

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

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

圖15 從輸入a向量計算得到輸出b向量

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

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

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

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

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

圖16 計算a1 與其他輸入的注意力分數(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)并經過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矩陣一一相乘,并將最后結果累加得到了b1。其他b2、b3、b4均可以通過此方法運算得到。

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

圖17 經過Wq Wk 矩陣處理得到了注意力分數(shù),通過Wv 進一步提取分數(shù)中有價值的信息

3.5.3:self-attention機制的矩陣化表示

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

① 計算每個input的q值(query值)

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

②計算每個input的k值(key值)

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

③計算每個input的q值與其他所有k值的乘積,該值是未經過softmax的attention score,矩陣計算時qi的轉置與ki矩陣相乘

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

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

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

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

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

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

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

步驟4:self-attention機制的公式化表示

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

輸入序列A=[a1,a2,a3,……an],三個學習所得的權重矩陣Wq、Wk、Wv,對于輸入序列A中的每個元素ai:

① 公式一:

Qi = Wq * ai

Ki = Wk * ai

Vi = Wv * ai

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

K(key):在上下文中用來計算與目標query token的相關token,稱之為key。

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

② 公式二:

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

Attention Score計算:計算每個query與上下文中(context)中的每個key的注意力分數(shù)值

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

③ 公式三:

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

通過softmax函數(shù)使得注意力分數(shù)轉為化0和1之前的數(shù)值且和為1,進而得出注意力權重。

④ 公式四:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

其中:

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

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

圖20 transformer的FFN計算和殘差連接

3.6.3 殘差連接網絡,減少上一層信息損失

圖20中標紫的箭頭為殘差網絡連接,在transformer模型中,在歸一化前使用ResNet,最終每個sublayer的輸出為LayerNorm(x + Sublayer(x)),其中Sublayer(x)是經過MHA或者FFN計算后的結果,然后加上(ADD)通過Residual Network輸送過來的輸入x。Add即為殘差模塊(Residual Block),將本層的輸出和本層的輸入對應位置相加(本層的輸出和本層的輸入維度相等)作為最終的輸出。作用是將上一層的輸入傳給本層,避免因為上一層的處理導致丟失信息(在反向傳播時抑制梯度消失)。

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

圖21 transformer中也使用了ResNet


4、嘗試理解反向傳播(Back Propagation)

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

step1:初始化權重(weight)并設置學習率(learning rate)和停止條件(stopping criteria)

step2:隨機選擇一個輸入(input)及其對應的目標向量

step3:計算每一層的輸入和最后一層的輸出

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

step5:計算梯度分量(gradient)并更新權重

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

4.1 前序參數(shù)調整對預測結果的影響的演示

如圖22是簡單的10個input輸入、4個output的多層神經網絡結構;圖中Σ表示求和單元、? (圖中圈里為曲線)代表非線性激活函數(shù),計算單元之間的連線是權重。

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

圖22 神經網絡表示

4.1.1 定義計算結果與預期的目標error

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

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

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

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

4.1.2 某一層的輸入所產生的敏感度分量

如圖24展示的是計算敏感度分量(sensitivity)的過程,每個input項ci對應一個敏感度分量δci,當前box的所有的輸入敏感度分量構成了最終的輸出e的敏感度分量,當前所有輸入的敏感度分量可以表示成:

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

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

δc4* Δc4+δc6* Δc6

在BP算法中,當前輸入組件中的微小變化所產生的影響,最終會在輸出端疊加。

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

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

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

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

前序Box:Preceding Box Input,即:

p = {p1,p2,p3,p4}

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

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

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

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

圖25 Preceding Input對Current層的Error影響

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

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

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

當發(fā)生Δp1變化時:

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

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

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

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

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

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

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

4.1.5 Current Box的輸入權重W11對于最終error的影響

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

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

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

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

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

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

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

圖27 權重W11 對最終error的影響

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

機器學習領域,用來評估兩組數(shù)據集之間的差異方式有多種,包括:Mean Square Error(均方誤差)、 Cross Entropy(交叉熵)等,整個神經網絡訓練就是不斷調試參數(shù),使得生成結果和預期結果的差異逐步收斂。

4.2.1 鏈式法則介紹

鏈式法則:也叫“復合函數(shù)的求導公式”,因為在前饋傳播后,如果所產生的結果與預期值差距較大,則會采用反向傳播來調整參數(shù),而反向傳播一般是運行隨機梯度下降算法,需要通過求導數(shù)的方式來計算各個參數(shù)對于輸出結果的影響,而這里求解不同的參數(shù)對于結果的影響就會使用到鏈式法則。

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

方法:?x→?y→?z, x影響y,y影響z,所以x會對z產生影響:

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

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

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

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

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

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

Back Propagation過程的計算目標:找到權重參數(shù)對于最終的偏差Cost的影響,換一種數(shù)學表達“找到損失函數(shù)Cost對于每個權重的偏微分(?)”,即:?Cost∕?w,基于鏈式法則往后算一步,得到公式:

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

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

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

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

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

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

4.2.3 第一層的?C∕?z與第2層網絡的關系,繼續(xù)向第2層計算

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

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

其中:?a/?z=σ′(z), σ′(z)如圖30中sigmoid的導數(shù)所示,易于計算得到, ?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′′在本步驟中仍然無法計算得到,仍需依賴下一層的計算結果。

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

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

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

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

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

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

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

?za/?a′與?zb/?a′在就是連接權重: ?za/?a′=w5, ?zb/?a′= w6

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

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

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

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

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

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

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

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

圖32 遞歸計算,一直到output layer

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

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

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

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

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

那么當從函數(shù)F(x)的局部極小值x0出發(fā)時,對應參數(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 隨機梯度下降法定義

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

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

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

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

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

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

圖34 反向傳播與梯度下降的關系

4.3.3 逐層反向傳播,累加計算偏微分

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

求解權重w對輸出a的偏微分:

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

從第n-1層到第n層的正向計算:

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

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

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

圖35 梯度表示

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

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

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

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

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

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

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

4.3.5 為什么需要調整學習率Learning Rate

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

4.3.6 如何調整學習率

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

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

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

4.4 反向傳播過程總結

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

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

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

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

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


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

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

4.5 隨機梯度下降與標準梯度下降的區(qū)別

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

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

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


5、大語言模型訓練為什么需要超大集群

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


6、如何使用GPU并行訓練大語言模型

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

6.1 數(shù)據并行

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

6.2 模型并行

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

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

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

6.3 流水線并行

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

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

6.3.1 GPipe

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

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

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

6.3.2 PipeDream

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

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

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

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

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

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

6.4 張量并行

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

6.4.1 GeLU和DropOut的矩陣拆分并行

如圖41所示,按照如下方案進行拆分和合并:

激活函數(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,在矩陣運算中時獨立的,彼此并無依賴,因此可以拆分到不同的計算worker上執(zhí)行,最后進行合并。

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

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

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

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

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

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

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

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

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

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

Z=Dropout([Y1B1,Y2B2])

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

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

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

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

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

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

6.5.1 Activation Recomputation,不存儲激活函數(shù)的結果而重新計算

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

6.5.2 Mixed Precision Training,混合精度計算

如圖44所示,采用半精度來進行訓練同時不損失精度,具體技術包括:

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

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

(3) 更小算術精度運算,包括向量點積等,因為數(shù)據較大,因此采用FP16保存;point-wise類計算均可以使用半精度,本身每一個點的精度損失對于累加的結果影響較小。

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

圖44 混合精度計算常用方案

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

在做梯度下降時,需要使用動量(類似于球體沿著山坡滾落,動量幫助選擇最佳的下降方向)和方差(計算學習率),也會耗費大量的內存。包括:

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

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

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

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

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

6.6 并行框架

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

6.6.1 并行訓練框架

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

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

6.6.2 并行推理框架

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

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

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

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

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

6.7 補充

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

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

    關注

    1813

    文章

    49573

    瀏覽量

    259850
  • 語言模型
    +關注

    關注

    0

    文章

    567

    瀏覽量

    11232
  • LLM
    LLM
    +關注

    關注

    1

    文章

    340

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

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

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

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

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

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

    基于Transformer的大型語言模型LLM)的內部機制

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

    如何用AI聊天機器人寫出萬字長文

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

    阿里通義千問重磅升級,免費開放1000萬字長文檔處理功能

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

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

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

    語言模型(LLM)快速理解

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

    LLM模型的應用領域

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

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

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

    llm模型有哪些格式

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

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

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

    什么是LLM?LLM在自然語言處理中的應用

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