Transformer 簡介

Transformer 是 Google 在 2017 年底發表的論文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 機制,能夠處理輸入序列中的每個元素,并能計算其與序列中其他元素的交互關系的方法,從而能夠更好地理解序列中的上下文關系。

Transformer 模型能夠處理不同長度的序列,捕捉長距離依賴關系,并在大規模數據上進行高效訓練。這使得它成為自然語言處理領域取得重大突破的關鍵模型之一,逐漸取代了 CNN 和 RNN。

目錄

  • 一. 預備知識
    • 1. Attention 機制
    • 2. Self-Attention 機制
    • 3. Cross-Attention 機制
    • 4. Multi-Head Attention
    • 5. 位置編碼
  • 二. Transformer
    • 1. Input Block
    • 2. Encoder Block
    • 3. Decoder Block
    • 4. Output Block

一. 預備知識

1. Attention 機制

Attention 機制 1 也叫注意力機制,是一種用于改善神經網絡 對輸入序列中不同部分的關注度 的機制。在傳統的神經網絡中,所有輸入信息都被平等對待,無論其在序列中的位置或重要性。而 Attention 機制允許網絡在處理輸入序列時更加關注其中的特定部分,使網絡能夠更靈活地學習輸入之間的關系。

Attention 機制的基本思想是:對于每個輸出位置,網絡都動態地計算一個權重分布,以指示輸入序列中哪些位置更重要。這個權重分布是通過計算 Query(即用戶提出的問題)與 Key(即模型中的知識摘要)之間的關聯度,然后 softmax 歸一化取最大概率的結果,最后查詢得到 Value(即與 Key 相關聯的知識)輸出。
在這里插入圖片描述

Attention 機制解決了先前 RNN 不能并行計算的問題,節省了訓練時間,并且能夠獲取到局部的關鍵信息。但 Attention 機制也有一些缺點:

  1. 只能在 Decoder 階段實現并行運算,Encoder 部分依舊采用的是 RNN、LSTM 等按照順序編碼的模型,無法實現并行運算;
  2. 因為 Encoder 部分仍依賴 RNN,所以中長距離之間的兩個詞相互之間的關系沒有辦法很好的獲取;

為了改進 Attention 機制的缺點,出現了 Self-Attention。

2. Self-Attention 機制

Self-Attention(自注意力)機制是 Attention 的一種特殊形式,它允許一個 序列中的不同位置之間進行交互,而不是像 Attention 機制那樣僅僅對輸入序列的不同部分進行關注。在 Self-Attention 中,對于序列中的每個元素,都會計算該元素與序列中所有其他元素之間的關聯度,然后利用這些關聯度為每個元素分配一個權重。這樣,每個元素都能夠考慮到整個序列的信息,能夠與序列中的所有其他位置進行交互,而不僅僅是局部信息,從而更好地捕捉長距離依賴關系。

Self-Attention 最為突出的應用就是在 Transformer 模型中,它允許模型在處理序列數據時,不受到固定的感受野大小的限制,而能夠根據任務的需要自適應地捕捉不同位置的信息。這使得 Self-Attention 成為了處理序列數據的強大工具,被廣泛用于自然語言處理和其他領域的任務。

在這里插入圖片描述
如圖所示,X 是嵌入了 Positional Encoding 的 Input Embedding,每一行都是一個詞向量;WQ、WK、WV 分別是用于計算 Query、Keys、Values 的權值矩陣;Q、K、V 分別是 Input Embedding 與權值矩陣計算所得的 Query、Keys、Values 向量,用于計算 Attention 值。

3. Cross-Attention 機制

Cross-Attention(交叉注意力)機制是 Attention 機制的一種擴展,它主要應用于 處理兩個不同序列之間的關系,使得模型能夠對一個序列中的元素關注另一個序列中的相關部分,從而更好地捕捉兩個序列之間的關聯信息。

Cross-Attention 機制的引入使得模型能夠在處理兩個序列時,動態地關注源序列的不同部分,從而更好地理解源序列與目標序列之間的關系。這在處理序列對之間的任務時非常有用,比如在問答、機器翻譯等任務中。

Transformer 的 Decoder 部分使用 Cross-Attention 機制來處理輸入序列和輸出序列之間的關系。具體來說,Decoder 在生成目標序列的每個位置時,能夠動態地關注輸入序列的不同部分,更好地對應輸入和輸出之間的對應關系,尤其在翻譯等任務中效果顯著。

4. Multi-Head Attention

Multi-Head Attention 是 Transformer 模型中的一種注意力機制,它是對單一 Attention 頭的擴展。通過使用多個獨立的 Attention 頭,模型能夠并行地學習不同的關注權重,從而更好地捕捉序列中的不同關系。這有助于提高模型的表達能力和學習復雜關系的能力。

Multi-Head Attention 使用多個獨立的 Attention 頭,對于每個Attention頭,學習三個線性變換,分別用于生成各自的 Query、Key 和 Value;然后使用每個頭的 Query、Key 和 Value 并行計算關聯度和權重;再將多個頭的輸出拼接在一起以增加模型對不同關系和特征的表達能力;最后將拼接后的輸出通過線性變換生成最終的 Multi-Head Attention 的輸出。
在這里插入圖片描述

通過使用多個 Attention 頭,模型能夠學習到數據不同方面的表示,從而更全面地捕捉序列中的關系。這種多頭機制在提高模型的性能、泛化能力和處理復雜任務方面都發揮了重要作用。

5. 位置編碼

位置編碼 (Positional Encoding) 2 是為了在 Transformer 等無法處理序列順序信息的模型中引入位置信息而設計的一種技術。由于 Transformer 沒有像循環神經網絡 RNN 那樣的內在順序感知,因此位置編碼的目的是為模型提供有關輸入序列中元素位置的信息。
在這里插入圖片描述

位置編碼的一種常見形式是通過將位置信息嵌入到輸入向量中來實現,這個向量的設計通常基于三角函數或正弦余弦函數,以確保模型能夠學到有關序列位置的有用信息。以正弦余弦函數為例,對 Input Embedding 中每個位于 p o s pos pos 的字符和字符中的位置 i i i,位置編碼的計算方式如下 3
PE ( p o s , 2 i ) = sin ? ( p o s 10000 2 i / d ) PE ( p o s , 2 i + 1 ) = cos ? ( p o s 10000 2 i / d ) \text{PE}(pos, 2i) = \sin\left(\frac{pos}{{10000}^{2i/d}}\right)\\ \text{PE}(pos, 2i+1) = \cos\left(\frac{pos}{{10000}^{2i/d}}\right) PE(pos,2i)=sin(100002i/dpos?)PE(pos,2i+1)=cos(100002i/dpos?)
其中, PE \text{PE} PE 是位置編碼, p o s pos pos 是當前字符在輸入文本中的位置, i i i 是當前字符編碼某一位置的索引, d d d 是 Input Embedding 中每個字符編碼的維度。這種位置編碼的設計允許模型在不同位置和不同維度上學到有關位置的信息。

在訓練過程中,這些位置編碼與輸入嵌入相加,從而將位置信息引入模型。位置編碼的選擇是可學習的,因此模型可以根據任務學到最適合的位置表示。通過引入位置編碼,Transformer 能夠更好地處理序列中元素的順序關系,從而更好地捕捉長距離的依賴關系。

二. Transformer

Transformer4 是一種神經網絡架構,引入了 Self-Attention 機制,允許模型同時處理輸入序列中的所有位置信息,而無需使用循環神經網絡或卷積神經網絡。Transformer 的核心部分是 Encoder 和 Decoder 塊:編碼器接收一段輸入序列,進行一系列的自注意力和全連接網絡操作,并輸出一段連續的表示;解碼器部分接受編碼器的輸出以及之前解碼器的輸出,生成新的輸出。

在這里插入圖片描述

1. Input Block

Transformer 將輸入文本分詞然后編碼為詞向量序列,也就是 Input Embedding。詞向量可以是 word2vec、GloVe、one-hot 等編碼形式,不同詞向量都具有相同的維度。處理好 Input Embedding 后需要給每個詞向量添加位置編碼,來保留輸入文本內部的相對位置信息。以輸入文本 “Tom chase Jerry” 為例,Input Block 內部如下:
在這里插入圖片描述

Input Embedding 和 Output Embedding 都屬于 Input Block,只有在訓練期間才會接收 Output Embedding 輸入,進行預測時 Output Embedding 不接受輸入。

2. Encoder Block

Encoder Block 由多個 Encoder 堆疊而成,每個 Encoder 內部包括 Multi-Head Attention 和 Feed Forward:
在這里插入圖片描述

Multi-Head Attention 就是在 Self-Attention 的基礎上,使用多組 WQ、WK、WV 得到多組 Query、Keys、Values,然后每組分別計算得到一個 Z 矩陣,最后進行拼接。
在這里插入圖片描述

Feed Forward 是一個普通的全連接網絡,依次做線性、ReLU 非線性等變換。

Multi-Head Attention 和 Feed Forward 后面都加入了 Add 和 Normalize 層:Add 層就是在 Z 的基礎上添加殘差塊 X(其實就是 Multi-Head Attention 的輸入 X),防止在深度神經網絡訓練中發生退化問題;Normalize 層用于對輸入數據 Normalize 歸一化,從而加快訓練速度、提高訓練的穩定性。

3. Decoder Block

Decoder 的輸入分訓練和預測兩種:訓練時的輸入就是已經準備好的 target 數據,例如翻譯任務中 Encoder 輸入"Tom chase Jerry",Decoder 輸入 “湯姆追逐杰瑞”;預測時的輸入則是上一時刻 Transformer 的輸出。

Decoder Block 相較于 Encoder Block 只增加了 Masked Multi-Head Attention:
在這里插入圖片描述
Masked Multi-Head Attention 就是在 Multi-Head Attention 的基礎上多加了一個 mask 碼,對部分值進行掩蓋使其在參數更新時不產生效果。

4. Output Block

Output Block 結構簡單:先經過一次線性變換,然后 Softmax 就可以得到輸出的概率分布。


  1. 史上最小白之Attention詳解 ??

  2. transformer學習筆記:Positional Encoding(位置編碼) ??

  3. Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30. ??

  4. 史上最小白之Transformer詳解 ??

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

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

相關文章

再見了Future,圖解JDK21虛擬線程的結構化并發

Java為我們提供了許多啟動線程和管理線程的方法。在本文中,我們將介紹一些在Java中進行并發編程的選項。我們將介紹結構化并發的概念,然后討論Java 21中一組預覽類——它使將任務拆分為子任務、收集結果并對其進行操作變得非常容易,而且不會不…

Unity中Shader黑白閥值后處理效果

文章目錄 前言一、我們先來PS看一下黑白閥值的效果二、使用step(a,b)函數實現效果三、實現腳本控制黑白閥值1、在Shader屬性面板定義控制閥值變量2、把step的a改為_Value3、在后處理腳本設置公共成員變量,并且設置范圍為(0,1)4、在Graphics.B…

Cocos Creator:創建棋盤

Cocos Creator:創建棋盤 創建地圖三部曲:1. 創建layout組件2. 創建預制體Prefab,做好精靈貼圖:3. 創建腳本LayoutSprite.ts收尾工作: 創建地圖三部曲: 1. 創建layout組件 使用layout進行布局,…

優化瑞芯微rk3566 tf卡速度uhs SDR104

環境 開發板:orangepi3B CPU:rk3566 TF卡速度標識:C10,U3,V30 起因 對于tf卡啟動的系統來說,io會成為一個很關鍵的瓶頸,所以總希望系統能跑得快一點。我手頭用的是一張金士頓的高性能tf卡,開…

四十三、Redis基礎

目錄 一、認識NoSql 1、定義: 2、常見語法 3、與關系型數據庫(SQL)的區別: 二、認識Redis 1、定義: 2、特征: 3、Key的結構: 三、安裝Redis 四、Redis常見命令 1、數據結構介紹 2、…

關于DNS服務器地址總是127.0.0.1且無法解析域名地址

問題 筆者嘗試nslookup解釋域名時,出現服務器變成本地環回口地址,導致無法解析域名 C:\Users\Zsy>nslookup www.baidu.com 服務器: UnKnown Address: 127.0.0.1*** UnKnown 找不到 www.baidu.com: Server failed排查思路 嘗試關閉虛擬網卡&#…

CSS的邏輯組合偽類

CSS 的邏輯組合偽類有 4 種,分別是::not()、:is()、:where()和:has()。 否定偽類:not() :not 偽類選擇器用來匹配不符合一組選擇器的元素。由于它的作用是防止特定的元素被選中,它也被稱為反選偽類(negation pseudo-…

Torch2TRT編譯和使用踩坑

前言 Torch2TRT是英偉達提供的開源Pytorch到TensorRT模型的轉化工具。相對于其他Pytorch模型轉TensorRT的方式,我認為這是最簡單和容易上手的方式。但是該工具并不成熟,在安裝和使用過程中有一些坑。 遇到的問題 1. fatal error: xxxxxx.h: No such f…

自動化測試框架 —— pytest框架入門篇

今天就給大家說一說pytest框架。 今天這篇文章呢,會從以下幾個方面來介紹: 01、pytest框架介紹 pytest 是 python 的第三方單元測試框架,比自帶 unittest 更簡潔和高效,支持非常豐富的插件,同時兼容 unittest 框架。…

【C++】:AVL樹

朋友們、伙計們,我們又見面了,本期來給大家解讀一下有關多態的知識點,如果看完之后對你有一定的啟發,那么請留下你的三連,祝大家心想事成! C 語 言 專 欄:C語言:從入門到精通 數據結…

用python 網絡自動化統計交換機有多少端口UP

用python統計交換機有多少端口UP 用python統計交換機有多少端口UP,可以間接的反饋有多少個用戶在線。我們使用上次的腳本將可達的網絡設備ip統計到reachable_ip.txt中,這次我們使用reachable_ip.txt來登陸設備來統計多少端口是UP的 云配置 拓撲 交換機…

使用fcl庫做碰撞檢測

fcl庫是真難用,導入自己的項目的時候遇到各種坑。 第一個坑就是git clone并build fcl庫后生成的fcl-config.cmake里面有問題,需要在這里進行相應修改 set_and_check(FCL_INCLUDE_DIRS "/home/xxxx/fcl/build/include") set(FCL_LIBRARIES fc…

【Cisco Packet Tracer】VLAN通信 多臂/單臂路由/三層交換機

在進行本文的實驗之前,請確保掌握以下內容: 【Cisco Packet Tracer】交換機 學習/更新/泛洪/VLAN實驗 【Cisco Packet Tracer】路由器實驗 靜態路由/RIP/OSPF/BGP 【Cisco Packet Tracer】路由器 NAT實驗 本文介紹VLAN間的通信方法, 包括…

FreeRTOS的任務優先級、Tick以及狀態講解(尊敬的嵌入式工程師,不妨進來喝杯茶)

任務優先級和Tick 在FreeRTOS中,任務的優先級和Tick是兩個關鍵的概念,它們直接影響任務的調度和執行。 任務優先級 每個任務都被分配一個優先級,用于決定任務在系統中的調度順序。 優先級是一個無符號整數,通常從0開始&#xff0…

Mysql- 流程函數-(If, CASE WHEN)的使用及練習

目錄 4.1 If函數語法格式 4.2 CASE WHEN 條件表達式格式 4.3 update與 case when 4.4 練習題1 4.5 練習題2 4.6 練習題3-行轉列 4.7 牛客練習題 4.8 LeetCode練習題 4.1 If函數語法格式 IF(expr1,expr2,expr3) 解釋&#xff1a; 如果表達式expr1true(expr1 <>…

力扣第 119 場雙周賽(Java)

文章目錄 T1 找到兩個數組中的公共元素代碼解釋 T2 消除相鄰近似相等字符代碼解釋 T3 最多 K 個重復元素的最長子數組代碼解釋 T4 關閉分部的可行集合數目代碼解釋 鏈接&#xff1a;第 119 場雙周賽 - 力扣&#xff08;LeetCode&#xff09; T1 找到兩個數組中的公共元素 給你…

Xcode doesn’t support iOS 16.6

xocde版本低&#xff0c;手動放入16.6的依賴文件 https://gitee.com/qiu1993/iOSDeviceSupport/blob/master/iOS16/16.6.zip 路徑 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport

JAVA全棧開發 day21_JDBC與反射結合、設計模式

一、總結 一階段 day01 java 發展&#xff0c;java 環境( path, java_home, class_path)&#xff0c;java 原理&#xff0c; java 執行 &#xff0c; jvm , jre , jdk day02 變量 標識符命名規則 數據類型 數據類型的轉換 運算符 day03 選擇結構 if , switch day04 循環結…

分割回文串

分割回文串 描述 : 給你一個字符串 s&#xff0c;請你將 s 分割成一些子串&#xff0c;使每個子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正著讀和反著讀都一樣的字符串。 題目 : LeetCode 131.分割回文串 : 131. 分割回文串 分析 : 字符串如何判斷回文本…

20 Redis進階 - 運維監控

1、理解Redis監控 Redis運維和監控的意義不言而喻&#xff0c;可以以下三個方面入手 1.首先是Redis自身提供了哪些狀態信息&#xff0c;以及有哪些常見的命令可以獲取Redis的監控信息; 2.一些常見的UI工具可以可視化的監控Redis; 3.理解Redis的監控體系;2、Redis自身狀態及命…