【學習筆記】Transformer

學習的博客(在此致謝):
初識CV - Transformer模型詳解(圖解最完整版)

1 整體結構

![[Pasted image 20250528161501.png]]

Transformer由Encoder和Decoder組成,分別包含6個block。

Transformer的工作流程大體如下:

  1. 獲取每個單詞的embedding vector X X X X X X由詞嵌入(word embedding)和位置編碼(Positional Encoding)得到。
  2. 將得到的單詞 X X X傳入Encoder中,經過6個Encoder block后可以得到句子所有單詞的編碼信息矩陣 C C C。單詞向量矩陣可以用 X n × d X_{n\times d} Xn×d?表示,其中 n n n為單詞數, d d d為向量維度(論文中為512)。每個Encoder block輸出的矩陣維度與輸入完全一致。
  3. C C C傳遞到Decoder中,Decoder會根據翻譯過的單詞 1 , ? , i 1,\cdots,i 1,?,i翻譯單詞 i + 1 i+1 i+1。翻譯 i + 1 i+1 i+1時需要用mask蓋住 i + 2 , ? , n i+2,\cdots,n i+2,?,n

2 Transformer的輸入

X X X由詞嵌入(word embedding)和位置編碼(Positional Encoding)得到。

2.1 詞嵌入

輸入的是一句話,比如:“我 愛 自然語言處理”,每個詞會被映射成一個向量,叫詞嵌入(word embedding)

“我” → [0.2, 0.5, ..., -0.1] (一個 d_model 維的向量)
“愛” → [...]
“自然語言處理” → [...]

2.2 位置編碼

Transformer除了詞嵌入,還需要位置編碼(Positional Encoding, PE) 來表示單詞在句子中出現的位置。由于Transformer不采用RNN結構,而是使用全局信息,不能利用單詞的順序信息,而這部分信息對于NLP來說非常重要。 所以Transformer中使用位置編碼來保存單詞在序列中的相對/絕對位置。

Transformer中計算PE的公式如下:
PE ( pos , 2 i ) = sin ? ( pos / 10000 2 i / d ) \text{PE}_{(\text{pos},2i)}=\sin(\text{pos}/10000^{2i/d}) PE(pos,2i)?=sin(pos/100002i/d)
PE ( pos , 2 i + 1 ) = cos ? ( pos / 10000 2 i / d ) \text{PE}_{(\text{pos},2i+1)}=\cos(\text{pos}/10000^{2i/d}) PE(pos,2i+1)?=cos(pos/100002i/d)
其中, pos \text{pos} pos表示單詞在句子中的位置, d d d表示PE的維度(與詞嵌入的維度相同)。
對于每個位置 pos \text{pos} pos,我們計算 d d d維向量(其中一半維度是 sin ? \sin sin,另一半是 cos ? \cos cos)。所以每個位置的PE也是長度為 d d d的向量。

2.3 Transformer的輸入

有了詞嵌入 input_embedding \text{input\_embedding} input_embedding和位置編碼 positional_encoding \text{positional\_encoding} positional_encoding(即 PE \text{PE} PE),我們有
X = input_embedding + positional_encoding X=\text{input\_embedding}+\text{positional\_encoding} X=input_embedding+positional_encoding

為什么是相加而不是連接(concat)?

  1. 加法不增加維度,后面的模型結構無需改動。
  2. PE被視為微調詞語的表示,可以看作是在詞向量的基礎上“注入一點位置感知”。比如“I saw a cat.” 中的 “cat” 在句首或句尾含義不同,但你不需要讓兩個“cat”產生完全不同的表示,只需加一點“位置信息”做微調。
  3. Attention中的縮放點積更適合加法式表示。
  4. 原論文實驗驗證:加法的效果已經很好,因此選擇加法方案。

3 Self-Attention 自注意力機制

![[Pasted image 20250528164507.png]]

上圖為論文中Transformer的內部結構圖,左側為Encoder block,右側為Decoder block。紅色圈中的部分為Multi-Head Attention,由多個Self-Attention組成。
還可以發現,Encoder block包含一個Multi-Head Attention,而Decoder block包含兩個,其中一個用到了mask。
還可以發現,Multi-Head Attention上方還包括一個Add & Norm層,Add表示殘差鏈接(Redidual Connection),用于防止網絡退化;Norm表示Layer Normalization,用于對每一層的激活值進行歸一化。

3.1 Self-Attention結構

![[Pasted image 20250528172649.png]]

上圖為Self-Attention結構,計算時需要用到矩陣Q(Query, 查詢), K(Key, 鍵值), V(Value, 值)。Self-Attention接收的是輸入(第2章中的矩陣 X X X) 或者上一個Encoder block的輸出。
Q,K,V正是通過Self-Attention的輸入進行線性變換得到的。

3.2 Q, K, V

已知 X ∈ R n × d X\in\mathbb{R}^{n\times d} XRn×d。定義三個參數矩陣: W Q ∈ R d × d Q W_Q\in\mathbb{R}^{d\times d_Q} WQ?Rd×dQ? W K ∈ R d × d K W_K\in\mathbb{R}^{d\times d_K} WK?Rd×dK? W V ∈ R d × d V W_V\in\mathbb{R}^{d\times d_V} WV?Rd×dV?。對于每個輸入 X X X
Q = X W Q , K = X W K , V = X W V Q=XW_Q,\ K=XW_K,\ V=XW_V Q=XWQ?,?K=XWK?,?V=XWV?
得到的矩陣: Q ∈ R n × d Q Q\in\mathbb{R}^{n\times d_Q} QRn×dQ? K ∈ R n × d K K\in\mathbb{R}^{n\times d_K} KRn×dK? V ∈ R n × d V V\in\mathbb{R}^{n\times d_V} VRn×dV?。通常, d Q , d K , d V d_Q,d_K,d_V dQ?,dK?,dV?是相同的。
在注意力機制中,每個詞會

  1. Q Q Q詢問別的詞的 K K K,來判斷該關注誰;
  2. V V V提供實際信息,如果我關注你,要拿到你的什么內容。

注意力公式如下:
Attention ( Q , K , V ) = softmax ( Q K ? d K ) V \text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^\top}{\sqrt{d_K}})V Attention(Q,K,V)=softmax(dK? ?QK??)V
最后輸出的矩陣 Z ∈ R n × d V Z\in\mathbb{R}^{n\times d_V} ZRn×dV?

3.3 Multi-head Attention

![[Pasted image 20250528223553.png]]

假設 X X X經過QKV計算后得到 Z Z Z。上圖可以看出Multi-head Attention包含多個Self-Attention層。首先將輸入 X X X分別傳遞到 h h h個不同的Self-Attention中,計算得到 h h h個輸出矩陣 Z = [ Z 1 , ? , Z h ] Z=[Z_1,\cdots,Z_h] Z=[Z1?,?,Zh?]。Multi-head Attention將其連接(concat)起來,得到 Z ′ ∈ R n × ( h ? d K ) Z'\in\mathbb{R}^{n\times (h\cdot d_K)} ZRn×(h?dK?)
最后再經過一層 R ( h ? d K ) × d \mathbb{R}^{(h\cdot d_K)\times d} R(h?dK?)×d的線性層,得到最終的輸出 Z ∈ R n × d Z\in\mathbb{R}^{n\times d} ZRn×d,和輸入 X X X的維度相同。

4 Encoder

![[Pasted image 20250528235507.png]]

上圖紅色部分是Transformer的Encoder block結構,可以看到是由Multi-Head Attention, Add & Norm, Feed Forward, Add & Norm組成的。剛剛已經了解了Multi-Head Attention的計算過程,現在了解一下Add & Norm和Feed Forward部分。

4.1 Add & Norm

Add & Norm層由Add和Norm兩部分組成,其計算公式如下:
LayerNorm ( X + MultiHeadAttention ( X ) ) \text{LayerNorm}(X+\text{MultiHeadAttention}(X)) LayerNorm(X+MultiHeadAttention(X))
LayerNorm ( X + FeedForward ( X ) ) \text{LayerNorm}(X+\text{FeedForward}(X)) LayerNorm(X+FeedForward(X))

其中 X X X表示Multi-Head Attention或者Feed Forward的輸入,MultiHeadAttention(X)和 FeedForward(X) 表示輸出(輸出與輸入X維度是一樣的,所以可以相加)。
AddX+MultiHeadAttention(X),是一種殘差連接,通常用于解決多層網絡訓練的問題,可以讓網絡只關注當前差異的部分,在 ResNet 中經常用到:
![[Pasted image 20250529000354.png]]

Norm指Layer Normalization,通常用于RNN結構,Layer Normalization會將每一層神經元的輸入都轉成均值方差都一樣的,這樣可以加快收斂。

4.2 Feed Forward

Feed Forward層比較簡單,是一個兩層的全連接層,第一層的激活函數為Relu,第二層不使用激活函數:
max ? ( 0 , X W 1 + b 1 ) W 2 + b 2 \max(0,XW_1+b_1)W_2+b_2 max(0,XW1?+b1?)W2?+b2?
X是輸入,Feed Forward最終得到的輸出矩陣的維度與X一致。

最后, X X X經過一連串Encoder得到編碼信息矩陣 C C C

5 Decoder

![[Pasted image 20250529000555.png]]

上圖紅色部分為Transformer的Decoder block結構,與Encoder block相似,但是存在一些區別:

  • 包含兩個Multi-Head Attention層。
  • 第一個Multi-Head Attention層采用了Masked操作。
  • 第二個Multi-Head Attention層的K, V矩陣使用Encoder的編碼信息矩陣 C C C進行計算,而Q使用上一個Decoder block的輸出計算。
  • 最后有一個Softmax層計算下一個翻譯單詞的概率。

5.1 Masked Multi-Head Attention (1st)

Decoder block 的第一個Multi-Head Attention采用了Masked操作,因為在翻譯的過程中是順序翻譯的,即翻譯完第 i 個單詞,才可以翻譯第i+1個單詞。通過Masked操作可以防止第i個單詞知道i+1個單詞之后的信息。
下面的描述中使用了類似Teacher Forcing的概念。在 Decoder 的時候,是需要根據之前的翻譯,求解當前最有可能的翻譯,如下圖所示。首先根據輸入"Begin"預測出第一個單詞為 “I”,然后根據輸入"Begin I"預測下一個單詞 “have”。
在這里插入圖片描述
**第一步:**是 Decoder 的輸入矩陣和 Mask 矩陣,輸入矩陣包含 “(begin) I have a cat” (0, 1, 2, 3, 4) 五個單詞的表示向量,Mask 是一個 5×5 的矩陣。在 Mask 可以發現單詞 0 只能使用單詞 0 的信息,而單詞 1 可以使用單詞 0, 1 的信息,即只能使用之前的信息。
![[Pasted image 20250529001717.png]]

第二步:接下來的操作和之前的 Self-Attention 一樣,通過輸入矩陣 X X X計算得到 Q , K , V Q,K,V Q,K,V矩陣。然后計算 Q Q Q K ? K^\top K?的乘積 Q K ? QK^\top QK?
![[Pasted image 20250529001815.png]]

第三步:在得到 Q K ? QK^\top QK?之后需要進行 Softmax,計算 attention score,我們在 Softmax 之前需要使用Mask矩陣遮擋住每一個單詞之后的信息,遮擋操作如下:
![[Pasted image 20250529001838.png]]

得到Mask Q K ? QK^\top QK?之后在Mask Q K ? QK^\top QK?上進行Softmax,每一行的和都是1,但是單詞0在單詞1,2,3,4上的attention score都為0。

第四步:使用Mask Q K ? QK^\top QK?與矩陣 V V V相乘得到 Z Z Z,則單詞1的輸出向量 Z 1 Z_1 Z1?是只包含單詞1的信息的。
![[Pasted image 20250529002009.png]]

第五步:通過上述步驟就可以得到一個Masked Self-Attention的輸出矩陣 Z i Z_i Zi?,然后和Encoder類似,通過Multi-Head Attention拼接多個輸出 Z i Z_i Zi?,然后計算得到第一個Multi-Head Attention的輸出 Z Z Z Z Z Z與輸入 X X X的維度相同。

5.2 Multi-Head Attention (2nd)

Decoder block 第二個 Multi-Head Attention 變化不大, 主要的區別在于其中 Self-Attention 的 K, V矩陣不是使用 上一個Decoder block的輸出計算的,而是使用Encoder 的編碼信息矩陣C計算的。

根據Encoder的輸出 C C C計算得到 K , V K, V K,V,根據上一個Decoder block的輸出 Z Z Z計算 Q Q Q (如果是第一個Decoder block則使用輸入矩陣 X 進行計算),后續的計算方法與之前描述的一致。

這樣做的好處是在Decoder的時候,每一位單詞都可以利用到Encoder所有單詞的信息 (這些信息無需Mask)。

5.3 Softmax預測輸出單詞

Decoder block 最后的部分是利用 Softmax 預測下一個單詞,在之前的網絡層我們可以得到一個最終的輸出 Z Z Z,因為 Mask 的存在,使得單詞0的輸出 Z 0 Z_0 Z0? 只包含單詞0的信息,如下:
![[Pasted image 20250529002358.png]]

Softmax 根據輸出矩陣的每一行預測下一個單詞:
![[Pasted image 20250529002410.png]]

這就是Decoder block的定義,與Encoder一樣,Decoder是由多個Decoder block組合而成。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907394.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907394.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907394.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[MMU]IOMMU的主要職能及詳細的驗證方案

IOMMU的主要職能及詳細的驗證方案 摘要:IOMMU(Input/Output Memory Management Unit)是一種硬件組件,負責管理I/O設備對內存的直接訪問(DMA,Direct Memory Access),其主要作用是提供…

動物類 如何使用Yolov11訓練使用牛羊數據集 實現對牛羊進行檢測數據集

牛羊檢測數據集 3700張 平視視角牛羊檢測 帶標注 voc yolo 牛羊檢測數據集 3700張 牛羊檢測平視 帶標注 voc yolo 分類名: (圖片張數,標注個數) cattle: (1395,4309) sheep: (2393,1 1205) 總數: (3791, 15514) 總類(nc): 2類 以…

搭建frp內網穿透

前言 內網穿透的原理我就不多說了哈,既然會看到我這篇文章,想必都知道內網穿透是做什么的吧 frp分為服務端和客戶端,服務端一般是搭在公網服務器中,客戶端一般搭在本地或者局域網,需要提前在服務端搭好ftp server&am…

Tailwind CSS 實戰,基于 Kooboo 構建 AI 對話框頁面(四):語音識別輸入功能

基于前三章的內容,開發AI 對話框語音識別輸入功能: Tailwind css實戰,基于Kooboo構建AI對話框頁面(一)-CSDN博客 Tailwind css實戰,基于Kooboo構建AI對話框頁面(二):實…

ollama list模型列表獲取 接口代碼

ollama list模型列表獲取 接口代碼 curl http://localhost:11434/v1/modelscoding package hcx.ollama;/*** ClassName DockerOllamaList* Description TODO* Author dell* Date 2025/5/26 11:31* Version 1.0**/import java.io.BufferedReader; import java.io.InputStreamR…

ISOLAR軟件生成報錯處理(五)

錯誤1 An error has occurred. See error log for more details. java.lang.NullPointerException 這東西不用管&#xff0c;不影響生成 錯誤2 Description Resource Path Location Type Target ARObject: <xxxx> CompuMethod used for floating-point data conversi…

前端開發定時,ES學習,java集合

1.前端vue3加入定時任務&#xff1a; import { onMounted, ref,onUnmounted } from vue;//初始化&#xff0c;結束調用部分引用let timer: any;//定時器onMounted(async () > {timer setInterval(() > {open()//需要定時的任務}, 60000)//一分鐘調用一次}); onUnmounte…

Photoshop2025(PS2025)軟件及安裝教程

在數字圖像編輯領域&#xff0c;Adobe Photoshop 一直是無可爭議的王者。如今&#xff0c;Photoshop 2025 重磅登場&#xff0c;再次為我們帶來了驚喜與變革&#xff0c;進一步鞏固了它在行業中的領先地位。 Photoshop 2025 在人工智能方面的升級令人矚目。其全新的 “Magic Se…

【SQL Server Management Studio 連接時遇到的一個錯誤】

第一次用SQL Server Management Studio啟動之后第一步就是要建立連接 但是不知道Server Name要填什么&#xff0c;看了網上的教程說是要找到下面這個注冊表中對應的實例名稱填上去&#xff0c;或者前面加localhost 但是好像都沒有用&#xff0c;一直遇到報錯如下&#xff1a;…

高等數學基礎(向量矩陣及其創建和特殊的矩陣)

向量 向量是機器學習最底層的組成部分, 也是基礎數據的表示形式, 線性代數通過將研究對象拓展到向量, 對多維數據進行統一研究, 而進化出的方法方便我們可以研究和解決真實世界中的問題 標量 標量也稱為"無向量", 使用一個單獨的數表示數值大小, 可以有正負之分, …

IBM DB2數據庫管理工具IBM Data Studio

一、介紹 IBM Data Studio 是 IBM 提供的一個集成開發環境&#xff08;IDE&#xff09;&#xff0c;用于支持數據管理、開發、優化和管理數據庫應用程序&#xff0c;特別是在 IBM Db2 和其他數據庫平臺上。它提供了許多功能&#xff0c;以幫助開發人員和數據庫管理員提高生產力…

Java異常處理的全面指南

Java異常處理的全面指南 一、Java異常的基礎概念1.1 什么是異常1.2 異常類的層次結構 二、Java異常的處理方式2.1 try-catch塊2.2 throws關鍵字2.3 throw關鍵字 三、自定義異常3.1 自定義受檢異常3.2 自定義非受檢異常 四、Java異常處理的最佳實踐4.1 捕獲合適粒度的異常4.2 避…

MediaMtx開源項目學習

這個博客主要記錄MediaMtx開源項目學習記錄,主要包括下載、推流(攝像頭,MP4)、MediaMtx如何使用api去添加推流,最后自定義播放器,播放推流后的視頻流,自定義Video播放器博客地址 1 下載 MediaMTX MediaMTX 提供了預編譯的二進制文件,您可以從其 GitHub 頁面下載: Gi…

【unity游戲開發——編輯器擴展】EditorApplication公共類處理編輯器生命周期事件、播放模式控制以及各種編輯器狀態查詢

注意&#xff1a;考慮到編輯器擴展的內容比較多&#xff0c;我將編輯器擴展的內容分開&#xff0c;并全部整合放在【unity游戲開發——編輯器擴展】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言一、監聽編輯器事件1、常用編輯器事件2、示例監聽播放模…

Spring Boot+Activiti7入坑指南初階版

介紹  Activiti 是一個輕量級工作流程和業務流程管理 (BPM) 平臺,面向業務人員、開發人員和系統管理員。其核心是一個超快且堅如磐石的 Java BPMN 2 流程引擎。它是開源的,并根據 Apache 許可證分發。Activiti 可以在任何 Java 應用程序、服務器、集群或云中運行。它與 Spri…

VoltAgent 是一個開源 TypeScript 框架,用于構建和編排 AI 代理

?一、軟件介紹 文末提供程序和源碼下載 VoltAgent 是一個開源 TypeScript 框架&#xff0c;用于構建和編排 AI 代理 二、什么是 VoltAgent&#xff1f; AI 代理框架提供了構建由自主代理提供支持的應用程序所需的基礎結構和工具。這些代理通常由大型語言模型 &#xff08;&am…

《仿盒馬》app開發技術分享-- 訂單詳情頁(端云一體)

開發準備 在之前的章節中我們實現了訂單的提交&#xff0c;以及提交之后跳轉到確認訂單頁面&#xff0c;在確認訂單頁面我們添加了一個入口&#xff0c;這個入口是查詢訂單&#xff0c;當我們點擊入口時&#xff0c;我們需要跳轉到一個新的界面&#xff0c;這個界面通過接收上…

傳統項目管理總拖延?Scrum敏捷全流程拆解

在互聯網高速發展的時代&#xff0c;企業競爭的核心要素正逐漸向 "速度" 傾斜。市場環境瞬息萬變&#xff0c;用戶需求呈現出多元化、動態化的顯著特征&#xff0c;而傳統管理模式固有的滯后性與僵化性&#xff0c;已難以匹配快速迭代的市場需求。在此背景下&#xf…

GelSight Mini觸覺傳感器:7μm精度+3D 映射,賦能具身智能精密操作

GelSight Mini 高分辨率視觸覺傳感器采用先進的光學成像與觸覺感知技術&#xff0c;賦予機器人接近人類的觸覺能力。該設備可捕捉物體表面微觀細節&#xff0c;并生成高精度的2D/3D數字映射&#xff0c;幫助機器人識別形狀、紋理及接觸力&#xff0c;從而執行更復雜、精準的操作…

【電路筆記 TMS320F28335DSP】McBSP 從源時鐘得到 生成時鐘 CLKG 幀同步信號 FSG

對應于原文 Multichannel Buffered Serial Port (McBSP)的 2.5.3 Data Clock Generation。 CLKG Figure 2-4. Sample Rate Generator Block Diagram CLKG 是采樣率發生器輸出的數據位時鐘&#xff08;Data Bit Clock&#xff09;&#xff0c;它被用來控制&#xff1a; 數據發…