transformer架構(gòu)詳解由淺入深-大模型入坑筆記真的很詳細(xì)

1、transformer架構(gòu)
2、transformer架構(gòu)解析

  • 2.1、Tokenization分詞器
  • 2.2、詞嵌入和位置嵌入
  • 2.3、編碼器&解碼器
    • 2.3.1、編碼器
    • 2.3.2、解碼器
  • 2.4、linear & softmax

3、transformer核心解析

  • 3.1、注意力機(jī)制
  • 3.2、自注意力機(jī)制
  • 3.3、多頭自注意力機(jī)制和掩碼多頭自注意力機(jī)制
  • 3.4、交叉注意力層
  • 3.5、前饋網(wǎng)絡(luò)

4、transformer整體執(zhí)行流程


1、transformer架構(gòu):

Transformer是一種深度學(xué)習(xí)模型,這種模型在自然語(yǔ)言處理(NLP)領(lǐng)域特別流行,它引入了一種新的機(jī)制——自注意力(self-attention),使得模型能夠更加高效和有效地處理序列數(shù)據(jù)(序列數(shù)據(jù)可以簡(jiǎn)單的理解為我們說(shuō)的一句語(yǔ)意連貫的話(huà))。

Transformer完全基于注意力機(jī)制,沒(méi)有使用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)或卷積神經(jīng)網(wǎng)絡(luò)(CNN)。核心概念是:

  • 自注意力機(jī)制:這允許模型在序列內(nèi)的任意位置間直接建立依賴(lài),從而更好地理解數(shù)據(jù)的上下文關(guān)系。自注意力機(jī)制可以并行處理所有位置的數(shù)據(jù),這提高了計(jì)算效率。
  • 多頭注意力:模型會(huì)同時(shí)學(xué)習(xí)數(shù)據(jù)的不同表示,每個(gè)“頭”關(guān)注序列的不同部分。這種機(jī)制可以捕獲序列中多種不同級(jí)別的依賴(lài)關(guān)系。
  • 位置編碼:由于Transformer不使用基于順序的結(jié)構(gòu),因此需要通過(guò)位置編碼來(lái)給模型提供關(guān)于單詞在序列中位置的信息。

transformer的架構(gòu)如下:
transformer的本質(zhì)就是由編碼器(encoder)和解碼器(decoder)組成。每個(gè)編碼器可以疊加多個(gè)編碼器一起使用老的transformer架構(gòu)里面疊加了6個(gè),解碼器也是一樣。編碼器和解碼器里面又有對(duì)應(yīng)功能層來(lái)處理對(duì)應(yīng)的業(yè)務(wù)數(shù)據(jù)。


tf-ModalNet-21.png

2、transformer架構(gòu)解析

這里對(duì)transformer的架構(gòu)做一個(gè)簡(jiǎn)單分析,主要是按照輸入和輸出的方向?qū)ransformer的架構(gòu)做一個(gè)簡(jiǎn)單的理解。先讓我們看到transfomer架構(gòu)里面的這些模塊大致都在做什么。

2.1、Tokenization分詞

Tokenization就是把一段文字,變成一組Token,也就是詞元化。子詞詞元化,比如:“subword”這個(gè)詞可以拆分為“sub”和“word”兩個(gè)子詞。比如說(shuō)1000Token大概對(duì)應(yīng)為750個(gè)英文單詞,對(duì)應(yīng)漢字大概為500個(gè)。

下面以O(shè)penAI開(kāi)源的tiktoken工具為例對(duì)輸入的中文進(jìn)行分詞處理:
可以看到輸入的“海南麒麟瓜”5個(gè)漢字被轉(zhuǎn)換為右邊的11個(gè)token,這些token同時(shí)也組成了大模型的字典表。

image.png

2.2、詞嵌入和位置嵌入:

1)、詞嵌入:

詞嵌入就是把輸入的token轉(zhuǎn)化為一個(gè)向量(即數(shù)學(xué)空間坐標(biāo)系),向量可以簡(jiǎn)單的理解為一個(gè)坐標(biāo)點(diǎn),一維向量理解為一個(gè)坐標(biāo)點(diǎn)[1],二維向量理解為兩個(gè)坐標(biāo)點(diǎn)[1,2]即x和y軸上的點(diǎn),三維坐標(biāo)理解為3個(gè)坐標(biāo)點(diǎn)[1,2,3]即一個(gè)空間的x和y和z坐標(biāo)上的一個(gè)點(diǎn),四維、五維。。。512維都可以簡(jiǎn)單的這樣理解。


詞嵌入和位置嵌入_副本.png

經(jīng)過(guò)這樣轉(zhuǎn)換后我們可以用這些向量來(lái)計(jì)算,就可以算出不同詞之間的距離等關(guān)系,從而實(shí)現(xiàn)我們?nèi)祟?lèi)中的語(yǔ)意關(guān)系。

2017年transformer的詞嵌入計(jì)算轉(zhuǎn)化后返回是一個(gè)token對(duì)應(yīng)的512維的向量。2018年的GPT向量的維度是768,2019年的GPT-2的向量維度是1600,2020年的GPT-3的向量維度是12288維度,2024年的Llama 3的向量維度是16384.

2)、位置嵌入:

transformer在輸入的時(shí)候做完詞嵌入處理后,還需要在對(duì)詞嵌入后的向量做這個(gè)詞的位置嵌入處理。因?yàn)橐痪湓?huà)的語(yǔ)意除了文字外還有該文字(詞)在語(yǔ)句中的位置。

整個(gè)過(guò)程就是transformer將每個(gè)詞的位置信息轉(zhuǎn)換為一個(gè)向量,然后將該詞的位置向量和上一步驟處理的詞本身的向量進(jìn)行相加得出一個(gè)新的向量。然后這個(gè)新的向量就包含了這個(gè)詞的意義信息、位置信息等多維度的信息。例如,下面的示例只是用于理解:


image.png
3)、詞表映射:

注意:這里的詞表中的詞表大小乘于向量維度大?。╲ocab_size × d_model)的值就是大模型的參數(shù)的一部分。
上面所說(shuō)的token化->詞嵌入->向量化這些內(nèi)容其實(shí)都在一個(gè)訓(xùn)練好的大模型中的詞表映射中。一個(gè)完整的 Transformer 詞表映射(Vocabulary)通常包括以下幾部分:

(1)、Token ? ID 對(duì)照表:

Token-to-ID 列表:將每個(gè)子詞或標(biāo)記(例如 "apple", "##s", "un", …)對(duì)應(yīng)唯一的整數(shù) ID,從0到詞表大總數(shù)減1(vocab_size-1)。模型使用這些 ID 進(jìn)行后續(xù)的向量查表;

(2)、嵌入矩陣(Embedding Matrix):

訓(xùn)練好的參數(shù)矩陣:大小為詞表大小乘于向量維度大?。╲ocab_size × d_model),其中 d_model 是隱藏層維度(常見(jiàn)如 512、768、1024 等)。矩陣的第 i 行就是 ID 為 i 的 token 的初始向量表示,訓(xùn)練過(guò)程中該矩陣元素會(huì)被更新;

(3)、子詞單元(Subword Tokens):

Transformer 常用的子詞算法(WordPiece、BPE、SentencePiece)能將少見(jiàn)或新詞拆分成更小單元(例如 "transform" → ["trans", "##form"]),從而減少未登錄詞(OOV)問(wèn)題并提高泛化能力;

(4)、特殊標(biāo)記(Special Tokens):

詞表中會(huì)預(yù)留若干特殊標(biāo)記:

  • [PAD]:填充短句以對(duì)齊長(zhǎng)度。
  • [CLS]:句首分類(lèi)標(biāo)記(BERT 風(fēng)格模型)。
  • [SEP]:句間分隔符,用于下游任務(wù)或雙句輸入。
  • [UNK]:未登錄詞占位符。
  • [MASK]:在 Masked Language Modeling 任務(wù)中使用。
    這些標(biāo)記同樣擁有固定的 ID,并參與嵌入查表
(5)、詞頻或排序信息:

在構(gòu)建詞表時(shí),子詞算法一般會(huì)輸出每個(gè) token 的出現(xiàn)頻率或基于頻率的排序信息,但在模型加載后,這些統(tǒng)計(jì)信息不直接參與計(jì)算,模型只關(guān)心 ID 與向量;

初始化與預(yù)訓(xùn)練:嵌入矩陣可以隨機(jī)初始化,也可以用預(yù)訓(xùn)練好的詞向量(如 GloVe、fastText 或從大型語(yǔ)料上預(yù)訓(xùn)練得到的 Transformer 嵌入)進(jìn)行 warm start,使模型更快收斂。
與位置編碼結(jié)合:在查表拿到 token 向量后,Transformer 還會(huì)加上對(duì)應(yīng)的位置編碼(Positional Encoding)以注入序列順序信息,再送入后續(xù)多頭自注意力層。

2.3、編碼器&解碼器:

2.3.1、編碼器:

編碼器核心的處理流程,就是把上面處理好的所有的詞向量并行計(jì)算,生成新的向量信息,但是新向量的數(shù)量和維度信息都不變,唯一改變的是新向量的值這些值包含了更多的語(yǔ)意信息,每一個(gè)向量都直接或間接包含了所有的語(yǔ)意,所以編碼器一般用來(lái)做分析。

  • 1.比如一段文本“今天是瘋狂星期四吃點(diǎn)啥”這個(gè)11個(gè)漢字,在經(jīng)過(guò)輸入層(Input Embedding)和位置編碼(Positional Embedding)后生成11個(gè)512維度的向量。
  • 2.編碼器接收11個(gè)向量信息,然后通過(guò)內(nèi)部并行計(jì)算,每個(gè)向量(詞)以自己為中心開(kāi)始計(jì)算其余10個(gè)詞和自己的關(guān)系最后生成該詞的新向量(這里是自注意力機(jī)制后面會(huì)解析)。所以經(jīng)過(guò)編碼器編碼輸出后的11個(gè)向量信息已經(jīng)和輸入的不一樣了,具備了更完善的語(yǔ)意信息(簡(jiǎn)單的說(shuō)在沒(méi)編碼之前這11個(gè)向量的每一個(gè)向量就是代表每一個(gè)詞的意義和位置,經(jīng)過(guò)編碼輸出后每一個(gè)向量包含了其余10的詞的內(nèi)容特征,或者說(shuō)可以代表一個(gè)短句子或者一個(gè)詞組或者一個(gè)段落)。
2.3.2、解碼器:

解碼器根據(jù)編碼器的分析內(nèi)容來(lái)預(yù)測(cè)回答的內(nèi)容,所以解碼器一般用來(lái)做生成。解碼器接收兩個(gè)輸入:

  • 一個(gè)是編碼器輸出的所有向量(可以理解為外部輸入的問(wèn)題);
  • 另一個(gè)是解碼器已經(jīng)輸出的一部分內(nèi)容預(yù)測(cè)概率(位于“Output Probabilities”即解碼器生成的文字內(nèi)容)這部分已經(jīng)解碼的內(nèi)容會(huì)“右移”被添加到"Outputs(shifted right)"做為輸入,重新進(jìn)行詞嵌入和位置嵌入處理,然后同時(shí)和還沒(méi)處理的輸入向量一起處理,這樣做是因?yàn)橐鶕?jù)編碼器輸入的分析和解碼器生成的回答做上下文關(guān)聯(lián)去跟精準(zhǔn)的預(yù)測(cè)下一個(gè)輸出的詞、句;

至于解碼器什么時(shí)候開(kāi)始輸出內(nèi)容和結(jié)束輸出是由兩個(gè)特殊的Token來(lái)決定的,這兩個(gè)特殊的Token存在大模型的Token字典表里面。比如上面輸入的"今天是瘋狂星期四吃點(diǎn)啥",解碼器開(kāi)始輸出的時(shí)候設(shè)置一個(gè)特殊的Token作為輸出的標(biāo)識(shí)符,解碼器一個(gè)字一個(gè)字往外吐到最后,如解碼器生成的最終內(nèi)容為"今天應(yīng)該吃葡式蛋撻"解碼器預(yù)測(cè)該句子差不多結(jié)束了就會(huì)在"撻"后面添加結(jié)束符的Token。

1)、Decoder Only模式:

傳統(tǒng)的transformer架構(gòu)中左邊的編碼器可以看作是用來(lái)存放外部輸入(即問(wèn)題)右邊解碼器存輸出(即回答),那么在這樣的架構(gòu)上做簡(jiǎn)化只保留右邊解碼器部分,然后對(duì)這個(gè)解碼器進(jìn)行優(yōu)化后,解碼器的輸入只來(lái)自一個(gè)方向的輸入,那么這一個(gè)方向的輸入包含了用戶(hù)的問(wèn)題和大模型給出的回答內(nèi)容,這部分我們稱(chēng)為“Prompt”,然后將“Prompt”作為輸入到解碼器中解碼器根據(jù)這部已有的文字的上下問(wèn)去預(yù)測(cè)后續(xù)的回答內(nèi)容,這樣的架構(gòu)稱(chēng)為Decoder-Only架構(gòu)(如下圖所示),也被稱(chēng)為生成式架構(gòu),僅包含解碼器部分,沒(méi)有編碼器。這種架構(gòu)通常用于生成任務(wù),如文本生成、對(duì)話(huà)系統(tǒng)等。其代表模型是GPT(Generative Pre-trained Transformer),它通過(guò)預(yù)測(cè)下一個(gè)單詞來(lái)生成文本,具有自回歸生成的特點(diǎn)。


decoder-only-1.png

GPT基于transformer簡(jiǎn)化后的decorder-only整體架構(gòu)的處理流程如下:


transformer-3.png

2.4、linear & softmax:

大模型中有個(gè)稱(chēng)為隱藏層和隱藏狀態(tài)的術(shù)語(yǔ):

  • 隱藏層:該術(shù)語(yǔ)指的是神經(jīng)網(wǎng)絡(luò)中不直接接觸輸入或輸出的中間層,在transformer中每個(gè)編碼器或解碼器層的自注意力層和FFN(前饋神經(jīng)網(wǎng)絡(luò))都屬于隱藏層。
  • 隱藏狀態(tài):指隱藏層輸出的結(jié)果,通常是大模型默認(rèn)的高維向量,F(xiàn)FN層輸出的向量就是隱藏狀態(tài)的一種。
2.4.1、linear層(線(xiàn)性層):

linear層不僅僅出現(xiàn)在上面transformer的架構(gòu)圖的解碼器部分,還出現(xiàn)在編碼器和解碼器的內(nèi)部。許多架構(gòu)圖可能未明確標(biāo)注這些組件,因?yàn)樗鼈冸[藏在自注意力機(jī)制和前饋網(wǎng)絡(luò)(FFN)的內(nèi)部結(jié)構(gòu)中。

1)、編碼器&解碼器:

編碼器的每個(gè)子層(自注意力、前饋網(wǎng)絡(luò))都包含 Linear 層,主要用途如下:

  • 多頭自注意力層:將輸入向量拆分為 Q/K/V 向量(通過(guò)三個(gè)獨(dú)立的 Linear 投影)。如:輸入的向量是512 維 然后將其拆分為 8個(gè)Q、K、V的 64 維向量,這樣處理是為了從8個(gè)方面提取輸入信息的特征(也稱(chēng)為多頭)下文會(huì)有解釋?zhuān)?/li>
  • 前饋網(wǎng)絡(luò)(FFN):通過(guò)兩個(gè) Linear 層(通常中間加激活函數(shù))實(shí)現(xiàn)非線(xiàn)性變換,獲取向量更深層的信息,對(duì)多頭自注意力計(jì)算后的向量先做升維然后在降維度,如:第一個(gè)線(xiàn)性層將維度從d_model(例如512)升到更高的維度(例如2048),第二個(gè)線(xiàn)性層再降回d_model;(下文也會(huì)有解釋?zhuān)?/li>
2)、獨(dú)立Linear層:

因?yàn)榻?jīng)過(guò)FFN的升維操作后豐富了向量的包含的信息含義,然后又降維,就會(huì)導(dǎo)致升維后的那些更深層的信息被隱藏到了降維后的向量值當(dāng)中。當(dāng)我們拿著這些向量到詞匯表中對(duì)應(yīng)的時(shí)候發(fā)現(xiàn)。這些升維處理后的向量仍然是“隱藏狀態(tài)”,無(wú)法直接對(duì)應(yīng)到詞匯表中的具體 token。所以需要在解碼器輸出后在經(jīng)過(guò)Linear層進(jìn)行處理。Linear層將FFN(前饋神經(jīng)網(wǎng)絡(luò))輸出的向量和自己的一個(gè)權(quán)重矩陣進(jìn)行計(jì)算得到詞匯表中每個(gè)token對(duì)應(yīng)的得分,最后在經(jīng)過(guò)“softmax歸一化”得到每個(gè)token的概率。

核心功能:從解碼器輸出的向量到詞匯表的映射,計(jì)算出每個(gè)詞的得分logits。簡(jiǎn)單的說(shuō)就是將FFN輸出的特征向量經(jīng)過(guò)Linear層的權(quán)重矩陣來(lái)學(xué)習(xí)如何將抽象特征(如:“動(dòng)作”、“對(duì)象”)映射到具體詞匯表(如:“吃”、“魚(yú)”等)。

(1)、維度轉(zhuǎn)換:

FFN 的輸出是隱藏空間中的向量(就是模型默認(rèn)的維度如 512 維)專(zhuān)注于向量更深層的特征提取,同時(shí)遠(yuǎn)小于詞匯表大?。ㄈ?50,000),無(wú)法直接生成每個(gè) token 的得分,而linear層需要生成一個(gè)與詞匯表大小(如 50,000)相同的 logits 向量,表示每個(gè) token 的得分,用于最終判斷選擇詞匯表中那個(gè)詞。計(jì)算公式如下:


linear-1.png
  • h是FFN輸出的向量;
  • Woutput是形狀為[d_hidden,vocab_size] 的權(quán)重矩陣,d_hidden是隱藏層輸出的向量維度(即大模型默認(rèn)的向量維度),vocab_size是詞匯表的大小。這里的權(quán)重矩陣在transformer架構(gòu)中就是共享輸入層Embedding詞嵌入的參數(shù)(簡(jiǎn)單的理解為權(quán)重矩陣中每一列就是一個(gè)詞向量);
  • boutput是偏置項(xiàng),是一個(gè)可學(xué)習(xí)的參數(shù);
  • logits是vocab_size 維向量(如 50,000 維);

公式中的偏置量:
它的核心作用是為每個(gè)詞匯表中的詞(token)提供一個(gè)基準(zhǔn)得分,允許模型在計(jì)算 logits 時(shí)動(dòng)態(tài)調(diào)整每個(gè)詞的“天然傾向性”。(例如,某些詞即使特征不匹配,也可能因高頻出現(xiàn)而被默認(rèn)加分)。偏置項(xiàng)的實(shí)際影響如下:
調(diào)整詞頻偏差:

  • 高頻詞偏置:如果某些詞(如“的”“是”)在訓(xùn)練數(shù)據(jù)中頻繁出現(xiàn),模型可以通過(guò)學(xué)習(xí)較大的 bi值,提高它們的基準(zhǔn)得分;
  • 低頻詞懲罰:罕見(jiàn)詞可能被賦予較低的 bi,避免模型過(guò)度生成它們;

補(bǔ)償特征不足,場(chǎng)景示例:
假設(shè)生成句子時(shí),隱藏狀態(tài)的特征未明確指向“蘋(píng)果”,但上下文需要生成水果名稱(chēng)。

  • 若“蘋(píng)果”的bi較高,即使特征匹配度一般,也可能被選中;
  • 若“榴蓮”的bi較低(假設(shè)訓(xùn)練數(shù)據(jù)中較少出現(xiàn)),即使特征匹配,得分也可能偏低;

控制生成傾向:

  • 抑制無(wú)關(guān)詞:若希望模型避免生成某些詞(如敏感詞),可以固定其bi為極低值(甚至負(fù)無(wú)窮);
  • 鼓勵(lì)特定詞:在微調(diào)時(shí),增大某些詞(如領(lǐng)域術(shù)語(yǔ)的bi,使其更易被生成;
(2)、類(lèi)比解釋?zhuān)?/h6>
  • FFN 的輸出像一份“加密報(bào)告”,包含所有關(guān)鍵信息,但需要翻譯成人類(lèi)可讀的語(yǔ)言(詞匯表 token)。
  • Linear 層的作用是將這份報(bào)告“解碼”成具體的詞匯選擇。
(3)、計(jì)算示例:

假設(shè)我們大模型的向量維度為512維,詞匯表大小vocab_size=50000。那么Linear層就會(huì)有一個(gè)形狀為[512, 50000]的權(quán)重矩陣。然后FFN輸入的是512維的向量,如h = [h?, h?, ..., h???],使用如下矩陣乘法計(jì)算:

linear-2.png

Wj,i是權(quán)重矩陣中第“j”行第 “i”列的值,bi是偏置項(xiàng)(可選)

現(xiàn)在假設(shè)詞匯表為 ["貓", "狗", "蘋(píng)果"](vocab_size=3),貓的詞向量為[0.1,0.3]、狗的詞向量為[0.2,-0.4]、蘋(píng)果的詞向量為[-05,0.6],隱藏向量為 2 維(這里是簡(jiǎn)化示例),那么公式展示如下:

  • 權(quán)重矩陣形狀為[2, 3]:


    linear-3.png
  • FFN輸入的向量為:h=[0.8,0.5]
  • 計(jì)算logits:logits=h?W=[0.8×0.1+0.5×0.3, 0.8×0.2+0.5×(?0.4), 0.8×(?0.5)+0.5×0.6]=[0.23,?0.04,?0.1]

輸出的結(jié)果“貓”得分最高(0.23),模型傾向于選擇“貓”作為下一個(gè)詞,然后在將這個(gè)logits帶入softmax中計(jì)算概率。

2.4.2、softmax層:

softmax層接收l(shuí)inear輸出的值,這個(gè)值的數(shù)量是和大模型中的詞表數(shù)量一致,比如GPT3是5w多個(gè)詞表,那么就會(huì)輸出5w個(gè)logits值,然后計(jì)算這5w個(gè)相關(guān)度對(duì)應(yīng)的概率,比如第一個(gè)值我們命名為a1,第二個(gè)命名為a2等,然后利用類(lèi)似這樣的公式計(jì)算每個(gè)相關(guān)度的概率2.7a1/2.7a1+2.7a2+2.7a3+..2.7^a50000,經(jīng)過(guò)類(lèi)似這樣的計(jì)算后就可以預(yù)測(cè)出對(duì)應(yīng)向量后續(xù)要輸出的具體內(nèi)容是那個(gè)。softmax這層處理的方式就叫"歸一化"。

Softmax 是一種歸一化函數(shù),將任意實(shí)數(shù)向量轉(zhuǎn)換為概率分布,所有值在 [0,1] 范圍內(nèi)且和為 1。給定 logits 向量z=[z1,z 2,...,zK],計(jì)算公式如下:


注意力-函數(shù)-3.png

e^Zi:對(duì) logits 逐個(gè)元素取指數(shù)(確保結(jié)果為正);
分母:所有指數(shù)值的和,用于歸一化;

1)、計(jì)算示例:

假設(shè)詞匯表為 ["貓", "狗", "蘋(píng)果"],經(jīng)過(guò) Linear 層后得到 logits 為 [5.2, 3.8, -1.0],以下是計(jì)算步驟:

(1)、計(jì)算指數(shù):

logits向量([5.2, 3.8, -1.0])中的每個(gè)元素的指數(shù)值為:e5.2≈181.27,e3.8≈44.70,e^?1.0≈0.368

(2)、求指數(shù)和:

Sum=181.27+44.70+0.368≈226.34

(3)、歸一化為概率:

為輸入的logits向量中的每一個(gè)元素計(jì)算分布概率。
P(貓)= 181.27/226.34≈0.80
P(狗)= 44.70/226.34≈0.20
P(蘋(píng)果)= 0.368/226.34≈0.00

最終概率分布為[0.80,0.20,0.00],模型有 80% 的概率選擇“貓”,20% 選擇“狗”,幾乎不選“蘋(píng)果”。

3、transformer核心解析:

上面我們理解了transformer架構(gòu)中的各個(gè)模塊大致都是干什么。這里我們?cè)谏晕⑸钊胍稽c(diǎn)看下編碼器和解碼器當(dāng)中的注意力機(jī)制、自注意力機(jī)制、多頭注意力機(jī)制、前饋網(wǎng)絡(luò)等。

3.1、注意力機(jī)制:

定義:注意力機(jī)制是一種讓模型動(dòng)態(tài)關(guān)注輸入中不同部分的機(jī)制,通過(guò)權(quán)重分配決定哪些信息更重要。主要是處理兩個(gè)不同序列的內(nèi)容(文本內(nèi)容)。
核心思想:模擬人類(lèi)注意力,在大量信息中聚焦關(guān)鍵內(nèi)容。
典型應(yīng)用:最初用于處理輸入序列與輸出序列(seq2seq)之間的關(guān)系(如機(jī)器翻譯中的源語(yǔ)言和目標(biāo)語(yǔ)言對(duì)齊)。

工作原理:
假設(shè)有一個(gè)查詢(xún)(Query)和一組鍵值對(duì)(Key-Value):

  • 計(jì)算相似度:Query 與每個(gè) Key 計(jì)算相關(guān)性(通常用點(diǎn)積或其他相似度函數(shù))。
  • 歸一化權(quán)重:通過(guò) Softmax 將相似度轉(zhuǎn)換為注意力權(quán)重(和為1)。
  • 加權(quán)求和:用權(quán)重對(duì) Value 加權(quán)求和,得到最終注意力輸出。

類(lèi)比翻譯時(shí):

  • Query:譯員當(dāng)前要說(shuō)的內(nèi)容(目標(biāo)語(yǔ)言)。
  • Key:演講者的話(huà)(源語(yǔ)言)可以理解為大模型中的已經(jīng)訓(xùn)練好的內(nèi)容答案。
  • Value:演講者的話(huà),源語(yǔ)言里面的每個(gè)句子意思。
  • 注意力權(quán)重:決定哪些句子與你的問(wèn)題最相關(guān)。

譯員根據(jù)自己當(dāng)前要講的那句話(huà)(Query),回頭在演講稿里掃一眼(計(jì)算哪個(gè)部分最重要),把相關(guān)信息挑出來(lái)(加權(quán)匯總),然后把它融入自己的翻譯里。
這就是注意力機(jī)制在兩個(gè)不同序列之間,根據(jù)一個(gè)序列(Query)去“回頭看”另一個(gè)序列(Key/Value)中最相關(guān)的信息。

注意力機(jī)制關(guān)注兩個(gè)不同序列之間的交互(如編碼器輸出與解碼器輸入)。注意力機(jī)制計(jì)算公式(跨序列)如下:


注意力-函數(shù)-1.png
1)、計(jì)算示例:

注意力機(jī)制計(jì)算公式中的Q、K、V理解。比如我們一個(gè)班級(jí)里面有很多同學(xué)了,然后我們有每個(gè)同學(xué)的身高、體重、胸圍、腿長(zhǎng)等信息,這里我們把每個(gè)同學(xué)我們都有身高、胸圍、腿長(zhǎng)這樣3個(gè)值看作一個(gè)3維向量(這里就是對(duì)應(yīng)公式里面的K),而體重對(duì)應(yīng)公式里面的V。最后我們需要對(duì)新同學(xué)來(lái)預(yù)測(cè)他的體重是多少。

  • 這時(shí)候新來(lái)一位身高為178、胸圍為36、腿長(zhǎng)為90(可以看作一個(gè)3維向量,對(duì)應(yīng)公式中的Q)的同學(xué)讓我們來(lái)預(yù)測(cè)他的體重是多少,我們首先需要將該同學(xué)的身體數(shù)值和班級(jí)里每個(gè)同學(xué)做一個(gè)相關(guān)度的計(jì)算再用softmax進(jìn)行歸一化計(jì)算得到的值用于表示可參考度意義(即用新同學(xué)的Q和每個(gè)同學(xué)的K進(jìn)行點(diǎn)積計(jì)算即公式中的QK^T得到相關(guān)度系數(shù),然后除以一個(gè)維度的平方根來(lái)保持梯度的穩(wěn)定性,最后對(duì)該值進(jìn)行softmax進(jìn)行歸一化計(jì)算得到一個(gè)相關(guān)度概率/權(quán)值)。
  • 然后將獲取到的每個(gè)權(quán)值和每個(gè)V向量里面的每個(gè)值進(jìn)行相乘的結(jié)果進(jìn)行匯總加合。這樣就大概能預(yù)測(cè)新來(lái)同學(xué)的體重是多少了。
注意力計(jì)算示例-1.png

3.2、自注意力機(jī)制:

定義:自注意力機(jī)制是注意力機(jī)制的一種特殊形式,輸入序列中的每個(gè)元素創(chuàng)建出 Query、Key 和 Value,這三個(gè)向量,用于捕捉序列內(nèi)部的長(zhǎng)距離依賴(lài)關(guān)系(簡(jiǎn)單的說(shuō)對(duì)比注意力機(jī)制,自注意力機(jī)制主要關(guān)注輸入內(nèi)容之間的每個(gè)元素與元素之間的關(guān)系、意義等,即Q、K、V都來(lái)自同一個(gè)輸入的文本內(nèi)容之間的向量計(jì)算)。
核心思想:讓序列中的每個(gè)詞與其他所有詞交互,動(dòng)態(tài)學(xué)習(xí)詞與詞之間的關(guān)聯(lián)。
典型應(yīng)用:Transformer 模型中處理單一序列(如文本編碼或解碼)。

工作原理:
輸入序列中的每個(gè)詞生成三個(gè)向量:

  • Query(Q):當(dāng)前詞關(guān)注的“問(wèn)題”。
  • Key(K):其他詞作為被匹配的“標(biāo)識(shí)”。
  • Value(V):其他詞的實(shí)際信息。
    通過(guò)計(jì)算每個(gè)詞與其他所有詞的 Q-K 相關(guān)性,加權(quán)聚合 V 得到輸出。

類(lèi)比
假設(shè)你在整理會(huì)議紀(jì)要:

  • Query:“當(dāng)前討論的議題是什么?”
  • Key:會(huì)議中每個(gè)人的發(fā)言主題。
  • Value:發(fā)言的具體內(nèi)容。
    自注意力權(quán)重:自動(dòng)發(fā)現(xiàn)議題之間的關(guān)聯(lián)(如“A提到的預(yù)算問(wèn)題”與“B提到的成本控制”高度相關(guān))。

自注意力機(jī)制關(guān)注同一序列內(nèi)部的交互(如文本中詞與詞的關(guān)系)。自注意力機(jī)制(同一序列)的計(jì)算公式如下:

注意力-函數(shù)-2.png
1)、自注意力Wq、Wk、Wv三個(gè)矩陣:

從自注意力機(jī)制的定義可以發(fā)現(xiàn)Q、K、V的創(chuàng)建來(lái)源同一個(gè)數(shù)據(jù)源即通過(guò)Embedding處理的向量數(shù)據(jù),而自注意力機(jī)制的運(yùn)算是在輸入序列中做每個(gè)詞之間的相關(guān)度計(jì)算,同時(shí)Q、K、V差別都不大都只包含詞和位置信息且都是在做一個(gè)固定的數(shù)學(xué)公式的計(jì)算,那么整個(gè)模型向量計(jì)算對(duì)輸入的Embedding處理的依賴(lài)性越大,最后輸出的誤差也可能受到影響。所以在這方面上引入一個(gè)Wq、Wk、Wv的三個(gè)神經(jīng)網(wǎng)絡(luò)(維度和輸入的Embedding處理后的詞向量維度一致),然后對(duì)詞嵌入和位置嵌入處理好后的向量分別和這三個(gè)神經(jīng)網(wǎng)絡(luò)做一次計(jì)算得到同樣數(shù)量和維度大小的三個(gè)Q、K、V新向量,然后在用這三個(gè)新的向量去做輸入序列(如:文本內(nèi)容)之間的自注意力的計(jì)算,從而減少模型整體輸出的誤差。(注意這里引入的Wq、Wk、Wv三個(gè)矩陣也是大模型的參數(shù)的一部分)

作用:引入的Wq、Wk、Wv三個(gè)矩是我們?cè)谀P陀?xùn)練的時(shí)候得到的,核心作用就是用于提取輸入的初始向量的特征,從而減少模型在做自注意力計(jì)算的時(shí)候的誤差。

示例:


自注意力-1.png
2)、計(jì)算示例:

注意力機(jī)制的計(jì)算公流程如下,比如我們輸入一段序列文本為“Action gets results”。為了計(jì)算第一個(gè)單詞“Action”的自注意力,我們將計(jì)算短語(yǔ)中與“Action”相關(guān)的所有單詞的得分。我們先獲取“Action”單詞的初始向量,然后將該向量和Wq、Wk、Wv三個(gè)特征提取的向量做一次計(jì)算得到Q1、K1、V1。通過(guò)將查詢(xún)向量(q1)的與所有單詞的鍵向量(k1,k2,k3) 的點(diǎn)積來(lái)計(jì)算第一個(gè)單詞的得分:


注意力-1.png

然后,將這些得分除以 8(或者其它值也就是大模型中一個(gè)向量維數(shù)的平方根):


注意力-2.png

接下來(lái),使用 softmax 激活函數(shù)對(duì)這些得分進(jìn)行歸一化的到一個(gè)相關(guān)概率值或者稱(chēng)為權(quán)值:
注意力-3.png

然后將這些經(jīng)過(guò)歸一化的得分乘以值向量(v1,v2,v3),并將得到的向量求和,得到最終向量(z1)。這是自注意力層的輸出。然后將其作為輸入傳遞給前饋網(wǎng)絡(luò):


注意力-4.png

因此,z1 是輸入序列“Action gets results”的第一個(gè)單詞的自注意力向量。我們可以用同樣的方式得到輸入序列中其余單詞的向量:


注意力-5.png

我們看到自注意力機(jī)制核心是做輸入序列的信息聚合,輸入序列信息越多那么計(jì)算的量就越大。

3.3、多頭自注意力機(jī)制和掩碼多頭自注意力機(jī)制:

3.3.1、多頭自注意力機(jī)制:

把上面的自注意力機(jī)制計(jì)算過(guò)程重復(fù)經(jīng)過(guò)96層,我們發(fā)現(xiàn)越往后面計(jì)算的時(shí)候Q、K的相關(guān)度系數(shù)就越疏遠(yuǎn)。因?yàn)樵酵竺娴膶訑?shù)比如第30層中的向量,每個(gè)向量基本上可以包含了當(dāng)前段落的信息,這時(shí)候再在第30層做每個(gè)向量的自注意力計(jì)算的時(shí)候,就會(huì)出現(xiàn)比如第一個(gè)向量(是一個(gè)大段落中的一個(gè)小段落)應(yīng)該和第二個(gè)向量(是一個(gè)大段落中的另一個(gè)小段落)的語(yǔ)意上有關(guān)系那么相關(guān)度系數(shù)因該是較大值,但實(shí)際計(jì)算發(fā)現(xiàn)這個(gè)值比較小。

什么是多頭:
為了解決上面的問(wèn)題,transformer通過(guò)引入多組不同的Wq、Wk、Wv矩陣,通過(guò)多組不同三個(gè)矩陣對(duì)每個(gè)層級(jí)向量做細(xì)化特征提取。至于引入多少組看模型決定,這個(gè)“組”就就稱(chēng)為“多頭”,比如在GPT-3中引入了96組也稱(chēng)為“96頭”。

作用:
多頭自注意力機(jī)制(Multi-Head Self-Attention)。這是自注意力的擴(kuò)展,通過(guò)將輸入分成多個(gè)頭(head),每個(gè)頭在不同的子空間學(xué)習(xí)不同的注意力模式,最后將結(jié)果合并。這樣可以讓模型同時(shí)關(guān)注來(lái)自不同位置的不同信息,增強(qiáng)模型的表達(dá)能力。例如,一個(gè)頭可能關(guān)注句法結(jié)構(gòu),另一個(gè)頭關(guān)注語(yǔ)義關(guān)系。

  • 細(xì)化一個(gè)向量特征提?。阂攵嘟M不同的Wq、Wk、Wv矩陣,替換掉上面自注意力學(xué)習(xí)中提到的三個(gè)單一特征的矩陣,主要就是為了更加細(xì)化的特征提取,比如在GPT-3中引入了96組也稱(chēng)為“96頭”那么就可以對(duì)一個(gè)向量進(jìn)行提取96個(gè)特征,即創(chuàng)建96組Q、K、V向量;
  • 對(duì)向量進(jìn)行降維減少計(jì)算量:如果我們引入的多組特征提取矩陣維度還是模型默認(rèn)的維度,如GPT3的12288維度,那么一個(gè)向量在面對(duì)多組矩陣計(jì)算的時(shí)候?qū)?huì)非常消耗計(jì)算量。所以這里引入的多組矩陣的維度要小于模型默認(rèn)的向量維度。如GPT3是12288維度,那么引入的多組的Wq、Wk、Wv矩陣的維度為128維(12288/96=128,GPT3中引入了96組特征矩陣),最后是需要把這96組特征矩陣重新合并為一個(gè)向量12288的矩陣。

工作原理:

  • 降維:引入96組也就是說(shuō)每個(gè)向量要和這96組128維的Wq、Wk、Wv矩陣做計(jì)算得到該向量的96組不同特征的Q、K、V向量,這里新創(chuàng)建的Q、K、V向量屬于低維的向量(128維)。;
  • 計(jì)算相似度:然后對(duì)這96組Q、K進(jìn)行計(jì)算相似度,計(jì)算出每組Q與每個(gè) Key 計(jì)算相關(guān)性;
  • 歸一化權(quán)重:通過(guò) Softmax 將每一組的相似度轉(zhuǎn)換為注意力權(quán)重;
  • 加權(quán)求和:用權(quán)重對(duì)每一組的 Value 加權(quán)求和,得到該組的注意力值;
  • 升維:最后將新得到的96組128維的向量首尾相接,輸入神經(jīng)網(wǎng)絡(luò)W0(注意該W0也是大模型的參數(shù)之一)升維到12288維的向量(GPT3模型的一個(gè)向量大小);
多頭自注意力-1.png

3.3.2、掩碼多頭自注意力機(jī)制:

掩碼自注意力層或者說(shuō)因果自注意力層(Causal attention layer)可以在解碼階段捕獲當(dāng)前詞與已經(jīng)解碼的詞之間的關(guān)聯(lián)。在解碼器中的掩碼多頭自注意力層對(duì)輸入序列執(zhí)行類(lèi)似多頭自注意力層的處理方式,但是又有不同之處。

Transformer是自回歸模型,即模型它是逐個(gè)生成文本,在推理階段的時(shí)候?qū)?dāng)前輸出文本附加到之前輸入上變成新的輸入,后續(xù)的輸出依賴(lài)于前面的輸出詞,具備因果關(guān)系。但是在訓(xùn)練階段的時(shí)候解碼器的輸入是一個(gè)完整的預(yù)測(cè)的目標(biāo)序列(如翻譯結(jié)果“我愛(ài)機(jī)器學(xué)習(xí)”),那么就會(huì)導(dǎo)致模型在訓(xùn)練階段已經(jīng)看到未來(lái)要輸出的結(jié)果最終會(huì)導(dǎo)致模型訓(xùn)練好后在推理的時(shí)候出現(xiàn)偏差。所以引入了掩碼多頭自注意力機(jī)制,在訓(xùn)練階段的時(shí)候掩蓋住不需要知道的內(nèi)容。

下面以“我愛(ài)機(jī)器學(xué)習(xí)”為例簡(jiǎn)單介紹:

1)、推理階段:

編碼器輸入方式:逐步生成,每次只能看到已生成的詞。

  • 生成“我”時(shí),輸入只有 <sos>(起始符)。
  • 生成“愛(ài)”時(shí),輸入是 <sos> 我。
  • 生成“機(jī)器”時(shí),輸入是 <sos> 我 愛(ài),依此類(lèi)推。
    無(wú)需掩碼:因?yàn)槟P妥匀豢床坏轿磥?lái)詞(未來(lái)詞尚未生成)。
2)、訓(xùn)練階段:
  • 輸入方式:一次性輸入完整目標(biāo)序列(如 <sos> 我 愛(ài) 機(jī)器 學(xué)習(xí) <eos>),但需要模擬逐步生成的過(guò)程。模型需要從 "<sos>" 預(yù)測(cè)“我”,從"<sos> 我" 預(yù)測(cè)“愛(ài)”,依此類(lèi)推。
  • 核心問(wèn)題:如果直接輸入完整序列且不加掩碼,模型在預(yù)測(cè)第 t個(gè)詞時(shí),會(huì)看到第 t+1到 TT 個(gè)詞(未來(lái)詞),導(dǎo)致訓(xùn)練與推理不一致。

所以模型在訓(xùn)練階段的時(shí)候?qū)τ诮獯a器輸入的一次性目標(biāo)序列內(nèi)容采用掩蓋的方式來(lái)模擬真實(shí)推理使用的過(guò)程,雖然輸入的是完成的目標(biāo)序列,但是掩碼矩陣會(huì)屏蔽位置2之后的所有詞,如只關(guān)注"<sos>我”的詞向量的注意力計(jì)算,忽略后面剩余的詞向量的相關(guān)度系數(shù)計(jì)算。示例如下:

  • 輸入序列:<sos> 我 愛(ài) 機(jī)器 學(xué)習(xí) <eos>(完整序列);
  • 掩碼處理后的有效輸入:<sos> 我 [MASK] [MASK] [MASK];
  • 模型行為:只能基于 <sos> 我 預(yù)測(cè)“愛(ài)”,無(wú)法利用“機(jī)器”“學(xué)習(xí)”的信息;
(1)、掩碼在數(shù)學(xué)上的表示:

實(shí)現(xiàn)方式:
1.在注意力得分矩陣中,將未來(lái)位置(上三角區(qū)域)的值替換為一個(gè)極小的負(fù)數(shù)(如?∞);
2.經(jīng)過(guò) Softmax 后,這些位置的權(quán)重趨近于 0,模型無(wú)法關(guān)注未來(lái)詞;

假設(shè)目標(biāo)序列長(zhǎng)度為 4(“我”、“愛(ài)”、“機(jī)”、“器”)這四個(gè)詞:
掩碼矩陣(4x4,0 表示允許關(guān)注,-∞ 表示屏蔽),并不是詞向量或詞向量的相關(guān)度系數(shù),而是一個(gè)固定的二進(jìn)制矩陣(或由 0 和 ?∞ 組成的矩陣),用于控制自注意力機(jī)制中每個(gè)詞能關(guān)注到哪些位置。它的核心作用是 限制模型在生成當(dāng)前詞時(shí)僅關(guān)注已生成的詞,避免“偷看”未來(lái)詞。矩陣中行表示當(dāng)前正在生成的第i個(gè)詞的位置,列表示可以關(guān)注到的第j個(gè)詞的位置:


掩碼自注意力-1.png

第 1 行:生成第 1 個(gè)詞時(shí),只能關(guān)注位置 1(自身)也就是"我"這個(gè)詞。計(jì)算流程大致如下:
1.將"我"這個(gè)詞向量通過(guò)掩碼自注意力層當(dāng)中的linear投影到 Query、Key、Value 向量;
2.計(jì)算注意力得分,將Q和K進(jìn)行點(diǎn)積計(jì)算得到輸入序列的一個(gè)相關(guān)度系數(shù)矩陣(也是每個(gè)向量的相關(guān)度得分):


掩碼自注意力-2.png

3.應(yīng)用掩碼遮蓋:將 Scores 矩陣的上三角區(qū)域(未來(lái)位置)設(shè)為 ?∞(注意:這里是給相關(guān)度系數(shù)矩陣用?∞掩蓋,和上面給出的掩碼矩陣不是同一個(gè));
4.Softmax 歸一化:在進(jìn)行歸一化計(jì)算概率的時(shí)候,由于未來(lái)位置的權(quán)重趨近于 0(即公式中的QK^T值越小導(dǎo)致經(jīng)過(guò)softmax計(jì)算后的權(quán)重越小),所以就會(huì)讓模型僅關(guān)注歷史詞即當(dāng)前位置之前的詞;

3.4、交叉注意力層:

交叉注意力層也稱(chēng)為"encoder-decoder attention",主要用于處理兩個(gè)不同序列之間的關(guān)系。看transformer架構(gòu)圖中就是位于編碼器的輸出->解碼器的輸入的交互地方。對(duì)于交叉注意力層來(lái)說(shuō)它的輸入的Q、K、V來(lái)自如下:

  • Q來(lái)自前一個(gè)解碼器層,是因果注意力層(或者說(shuō)是掩碼多頭自注意力層)的輸出向量,這些向量包含了之前預(yù)測(cè)出的token對(duì)應(yīng)的向量信息;
  • K和V來(lái)自編碼器輸出的注意力向量;

這使得解碼器中的每個(gè)位置都能關(guān)注輸入序列中的所有位置。另外,編碼器并非只傳遞最后一步的隱狀態(tài),而是把所有時(shí)刻(對(duì)應(yīng)每個(gè)位置)產(chǎn)生的所有隱狀態(tài)都傳給解碼器,這就解決了中間語(yǔ)義編碼上下文的長(zhǎng)度是固定的問(wèn)題。我們?nèi)粘Uf(shuō)的對(duì)齊指的就是這里。


交叉注意力層.jpg

通過(guò)編碼器內(nèi)部多頭自注意力、交叉層注意力等方式實(shí)現(xiàn)了輸入序列內(nèi)部之間和不同序列之間的關(guān)聯(lián)關(guān)系。

3.5、前饋神經(jīng)網(wǎng)絡(luò):

前饋神經(jīng)網(wǎng)絡(luò)也稱(chēng)為MLP全連接神經(jīng)網(wǎng)絡(luò)。FNN網(wǎng)絡(luò)主要是通過(guò)兩個(gè) Linear 層(通常中間加激活函數(shù))實(shí)現(xiàn)非線(xiàn)性變換,增強(qiáng)整個(gè)向量的表達(dá)能力。對(duì)多頭自注意力計(jì)算后的向量先做升維然后在降維度,如:第一個(gè)線(xiàn)性層將維度從d_model(例如512)升到更高的維度(例如2048),第二個(gè)線(xiàn)性層再降回d_model(如 512維度);

前饋神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)表示如下:
其中,Linear? 是升維層,Linear? 是降維層。注意這里使用的兩個(gè)變化也涉及到神經(jīng)網(wǎng)絡(luò)的參數(shù),這些參數(shù)也是組成大模型的參數(shù)之一。


Fnn計(jì)算.png

為什么要先升維再降維?

1)、 核心目的:增強(qiáng)非線(xiàn)性表達(dá)能力

存在的問(wèn)題:自注意力機(jī)制本質(zhì)是線(xiàn)性變換(矩陣乘法)的加權(quán)和,缺乏對(duì)復(fù)雜非線(xiàn)性關(guān)系的建模能力。
解決方案:通過(guò) FFN 的升維和非線(xiàn)性激活函數(shù),引入更強(qiáng)的非線(xiàn)性變換。假設(shè)輸入向量是“吃”的 512 維表示:

  • 升維(如 512 → 2048):通過(guò) Linear? 將其映射到 2048 維,在高維空間中,模型可以學(xué)習(xí)更復(fù)雜的特征組合。這相當(dāng)于將“吃”的語(yǔ)義拆解成 2048 種更細(xì)粒度的特征(如“動(dòng)作強(qiáng)度”“涉及的身體部位”“時(shí)間持續(xù)性”等);
  • 非線(xiàn)性激活(如 ReLU):打破線(xiàn)性限制,使模型能擬合更復(fù)雜的函數(shù);
  • 降維(如 2048 → 512):通過(guò) Linear? 將 2048 維重新壓縮回 512 維,但此時(shí)的特征已融合了更復(fù)雜的語(yǔ)義,除此之外降維的意義還能節(jié)省后續(xù)的計(jì)算量以及保持輸入輸出維度一致,這是因?yàn)槎鄠€(gè)編碼器的堆疊的時(shí)候前一個(gè)編碼器的輸出是下一個(gè)編碼器的輸入;
2)、 數(shù)學(xué)視角:擴(kuò)展模型的假設(shè)空間

假設(shè)輸入是 512 維向量,直接使用單層線(xiàn)性變換(512 → 512)的表達(dá)能力有限。通過(guò)升維到 2048 維:

  • 參數(shù)矩陣從 512×512 增加到 512×2048,大幅擴(kuò)展了模型的假設(shè)空間。
  • 結(jié)合 ReLU 的稀疏激活特性,模型可以更靈活地組合特征。
3)、類(lèi)比解釋?zhuān)?/h5>

想象你要畫(huà)一幅復(fù)雜的畫(huà):

  • 自注意力機(jī)制:確定畫(huà)中不同元素的位置關(guān)系(如“貓?jiān)谧筮?,魚(yú)在右邊,貓準(zhǔn)備想吃魚(yú)”);
  • FFN 的升維:將上面自注意力機(jī)制運(yùn)算后的向量投射到更大的維度空間,即可以用更豐富的顏料和筆觸細(xì)化貓咪、魚(yú)以及貓想吃魚(yú)時(shí)候表情等元素的細(xì)節(jié)(如“貓的毛發(fā)紋理”“魚(yú)的光澤”);
  • 降維:將細(xì)節(jié)整合回原畫(huà)尺寸,保持畫(huà)面整體協(xié)調(diào);

4、transformer整體執(zhí)行流程:

我們?cè)賮?lái)結(jié)合模型結(jié)構(gòu)圖來(lái)簡(jiǎn)述推理階段的計(jì)算流程,具體如下圖所示。


transformer推理流程-1.jpg

假設(shè)我們進(jìn)行機(jī)器翻譯工作,把中文”我吃了一個(gè)蘋(píng)果“翻譯成英文”I ate an apple“,在假設(shè)模型只有一層,執(zhí)行步驟如下:

  • 1.處理輸入。用戶(hù)輸入自然語(yǔ)言句子”我吃了一個(gè)蘋(píng)果“;tokenizer先把序列轉(zhuǎn)換成token序列;然后Input Embedding層對(duì)每個(gè)token進(jìn)行embedding編碼,再加入Positional Encoding(位置編碼),最終形成帶有位置信息的embedding編碼矩陣。編碼矩陣用 Xn?d 表示, n 是句子中單詞個(gè)數(shù),d 是表示向量的維度(論文中 d=512)。注:原論文圖上的輸入是token,本篇為了更好的說(shuō)明,把輸入設(shè)置為自然語(yǔ)言句子。
  • 2.編碼器進(jìn)行編碼。編碼矩陣首先進(jìn)入MHA(Multi-Head Attention,多頭注意力)模塊,在這里每個(gè)token會(huì)依據(jù)一定權(quán)重把自己的信息和其它token的信息進(jìn)行交換融合;融合結(jié)果會(huì)進(jìn)入FFN(Feed Forward Network)模塊做進(jìn)一步處理,最終得到整個(gè)句子的數(shù)學(xué)表示,句子中每個(gè)字都會(huì)帶上其它字的信息。整個(gè)句子的數(shù)學(xué)表示就是Encoder的輸出。
  • 3.通過(guò)輸入翻譯開(kāi)始符來(lái)啟動(dòng)解碼器。
  • 4.解碼器進(jìn)行解碼。解碼器首先進(jìn)入Masked Multi-Head Attention模塊,在這里解碼器的輸入序列會(huì)進(jìn)行內(nèi)部信息交換;然后在Multi-Head Attention模塊中,解碼器把自己的輸入序列和編碼器的輸出進(jìn)行融合轉(zhuǎn)換,最終輸出一個(gè)概率分布,表示詞表中每個(gè)單詞作為下一個(gè)輸出單詞的概率;最終依據(jù)某種策略輸出一個(gè)最可能的單詞。這里會(huì)預(yù)測(cè)出第一個(gè)單詞”I“。
  • 5.把預(yù)測(cè)出的第一個(gè)單詞”I“和一起作為解碼器開(kāi)始特殊字符輸入,進(jìn)行再次解碼。
  • 6.解碼器預(yù)測(cè)出第二個(gè)單詞”ate“。

針對(duì)本例,解碼器的每一步輸入和輸出具體如下表所示。


transformer推理流程-2.jpg

參考:

一文理解 Transformer 的工作原理

https://www.infoq.cn/article/qbloqm0rf*sv6v0jmulf

吳恩達(dá)《深度學(xué)習(xí)專(zhuān)項(xiàng)》筆記(十七):Transformer

https://zhouyifan.net/2022/09/21/DLS-note-17/

探秘Transformer系列之(2)---總體架構(gòu)

https://www.cnblogs.com/rossiXYZ/p/18706134

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容