Transformer核心—自注意力機制

Transformer基礎—自注意力機制

當我們處理文本、語音這類序列數據時,總會遇到一個老問題:模型到底該怎么理解“前后文”呢?
RNN 和 LSTM 曾經是熱門的答案,它們沿著時間順序一點點地讀數據,但讀得太慢,還容易忘記前面的信息。后來 CNN 被搬了進來,靠卷積核抓住局部模式,可要想看遠處的信息,就得堆一大堆層,效率也不高。
于是研究者開始換個思路:如果模型能直接跳過中間環節,把注意力放到序列中真正相關的位置,不是更聰明嗎? 這就是注意力機制的出發點。而當這種機制被應用到同一個序列內部時,就誕生了今天大名鼎鼎的——自注意力機制(Self-Attention)

一、基本概念

什么是自注意力機制?

自注意力機制就是找到序列當前詞與序列所有詞之間的關系,也就是說我們的模型要知道這個詞“是誰”、“在哪”。

當我們說“模型要知道這個詞是誰、在哪、該關注誰”時,其實就需要一種可計算的方式來衡量詞和詞之間的關系。

這時候就引出了自注意力的三大主角:Q(查詢向量:Query)、K(鍵向量:Key)、V(值向量:Value)

我們知道:在傳統的 RNN 模型里,每個詞都會被轉化成一個 詞向量(Embedding),這個向量基本上就代表了“這個詞是誰”。RNN 會把這些向量按照順序依次讀入,再結合隱狀態去理解上下文。
但在自注意力機制中,研究者覺得:光有一個詞向量還不夠。如果我們想讓模型判斷“這個詞應該關注誰”,就得從不同角度去看待它。

于是,同一個詞的詞向量會被投影成三份不同的表示:

  • Q(Query):我去發起“提問”,看看我應該關心哪些詞;
  • K(Key):我拿出自己的“身份標簽”,告訴別人“我是什么”;
  • V(Value):我還準備了一份“內容”,如果有人關注我,就把這份內容貢獻出來。

這樣一來,詞嵌入不再只是一個“靜態身份”,而是被拆解成查詢、標識和內容三種角色,從而讓模型能夠靈活地建立聯系。

我們能夠理解為:我們將一個詞最開始的一個詞向量進行了三次線性變換(也就是乘上三個不同的矩陣),得到的結果就是Q、K、V,他們都是這個這個詞得詞向量。

雖然一個詞從最開始的一個詞向量變為了三個詞向量,但是這三個詞向量僅僅只是表示這一個詞,沒有和上下文建立聯系,那么我們是如何實現上下文聯系的呢?

二、實現過程

1.計算注意力得分

我們將序列當前詞的Q向量與序列任何一個詞的K向量做點積,得到的這個值能夠作為當前詞與另外一個詞的相似度判斷依據,值越大,說明這兩個詞越相似,但是數值可能會過大,所以需要引入一個縮放因子限制數值大小,使得梯度能夠穩定更新。因此就有了注意力得分矩陣公式:
Attention(Q,K)=QKTdk \text{Attention}(Q, K) = \frac{QK^T}{\sqrt{d_k}} Attention(Q,K)=dk??QKT?
這個矩陣的形狀為n×nn\times nn×n,其中n表示的是序列的長度,矩陣中的元素(i,j)(i,j)(i,j)表示序列第iii個元素與第jjj個元素的注意力得分,也就是它們的相似度。

圖示:

在這里插入圖片描述
得到QKV向量
在這里插入圖片描述
計算第一個詞和序列中所有詞的每個注意力得分α1,i=q1?kidk\alpha_{1,i} = \frac{q^1 \cdot k^i}{\sqrt{d_k}}α1,i?=dk??q1?ki?

2.歸一化

我們要將得到的注意力得分轉換為概率分布,即將值得范圍控制在[0,1]之間,這個想法我們可以通過softmaxsoftmaxsoftmax函數得到實現,并且它確保了每一行的權重和為1,也就是一個詞對于序列所有詞的注意力權重之和為1。(注意:計算注意力得分和權重的時候,包括詞自己本身,也就是用某個詞的Q向量去乘上自己的V向量
Attention?Weight=softmax(QKTdk) \text{Attention Weight} = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) Attention?Weight=softmax(dk??QKT?)

3.加權求和

得到了每個詞對于序列的注意力權重矩陣之后,接下來就是與V矩陣進行相乘,進行加權求和,最終得到的就是帶有上下文聯系的詞向量。
Output=Attention?Weight×V=softmax(QKTdk)×V \text{Output} =\text{Attention Weight} \times V = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) \times V Output=Attention?Weight×V=softmax(dk??QKT?)×V
計算圖示意:

在這里插入圖片描述
QK計算相似度后,經 softmaxsoftmaxsoftmax 得到注意力,再乘V,最后相加得到包含注意力的輸出

三、多頭注意力

現在我們已經知道了什么是自注意力機制,那么接下來介紹以下自注意力機制的拓展,也就是transformer所真正運用到的注意力機制——多頭注意力機制

多頭注意力機制顧名思義,將注意力機制中的Q、K、VQ、K、VQKV向量分成了多個“頭”,也就是分成了nnn個組,每個組算出各自的注意力結果,然后將每組的輸出進行拼接,最后再通過線性變換(乘上一個權重矩陣做特征融合)得到最終的輸出。

【這種思路類似于CNN中的分組卷積】

比如將一個512維度的詞分為2個組(也就是兩個頭),那么每組QKV向量的維度就應該是256維度,一共有兩組QKV。

在這里插入圖片描述
aia^iaiaja^jaj為兩個不同的詞,他們分別有兩組QKV向量

多頭注意力的目的

總的來說,多頭注意力的目的就是為了提高模型的表達能力。我們可以用多組注意力去關注這個詞的不同特征,比如一個詞有32組注意力,那么一組可以是表示這個詞的情感特征、一組表示這個詞的詞法特征、一組表示這個詞的詞性特征等等…

這就讓我們的模型學習到了更多的上下文信息,能夠在不同場景下表達合適的意思,也就是更有語境。

PyTorch封裝好的多頭注意力層nn.MultiheadAttention

import torch
import torch.nn as nnmultihead_atten_layer = nn.MultiheadAttention(embed_dim=512,num_heads=8,batch_first=True
)
embedding_layer = nn.Embedding(10, 512)
X = torch.randint(0, 10, (1, 10))X = embedding_layer(X)atten_out, atten_weights = multihead_atten_layer(# 內部自動用可學習的 W^Q, W^K, W^V 把 X 投影成 QKVquery=X,key=X,value=X,
)# 打印注意力得分以及權重矩陣
print(atten_out.shape, atten_weights.shape)# torch.Size([1, 10, 512]) torch.Size([1, 10, 10])

以上是博主對transformer注意力機制的一些總結筆記,若文章中出現錯誤請及時指正博主,感謝瀏覽☆嚕~☆

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

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

相關文章

分片上傳-

分片上傳原理:客戶端將選擇的文件進行切分,每一個分片都單獨發送請求到服務端;斷點續傳 & 秒傳原理:客戶端 發送請求詢問服務端某文件的上傳狀態 ,服務端響應該文件已上傳分片,客戶端再將未上傳分片上傳…

零知開源——基于STM32F103RBT6的智能風扇控制系統設計與實現

?零知IDE 是一個真正屬于國人自己的開源軟件平臺,在開發效率上超越了Arduino平臺并且更加容易上手,大大降低了開發難度。零知開源在軟件方面提供了完整的學習教程和豐富示例代碼,讓不懂程序的工程師也能非常輕而易舉的搭建電路來創作產品&am…

ReACT Agent概述

目錄 1. 核心思想:解決傳統方法的局限性 2. ReACT 的工作原理:一個循環過程 3. 技術實現的關鍵要素 4. ReACTAgent 在任務中的具體工作流程 5. 優勢與重要性 6. 挑戰與局限性 總結 ReACT 是一個非常重要的框架,它代表了構建能夠推理&a…

必知!機器人的分類與應用:RPA、人形與工業機器人

每當提及“機器人”這三個字,許多人的第一反應或許仍是科幻電影中那種具備人類外形、可自由行走與對話的仿生裝置。然而,一個值得深入探討的科技現實是:我們對于人形機器人的迷戀,更多源自文化敘事與情感投射,而非真實…

最快的 C 語言 JSON 庫 - yyjson

文章目錄DOM 模式下的性能比對一、AWS EC2 (AMD EPYC 7R32, gcc 9.3)二、iPhone (Apple A14, clang 12)持續更新中 持續更新中 持續更新中一個用 ANSI C(C89) 編寫的高性能 JSON 庫 API.md DOM 模式下的性能比對 DOM 模式,即構建完整 JSON 內存結構后訪問數據的模…

TP8 模型save更新不成功

一、User文件頭部代碼class User extends Model {const TITLE_NAME 用戶;//名稱//不能刪除protected $name user_; //表名 protected $connection \app\services\database\model\DbConnModel::CONN_DB_SITE; //數據庫的連接二、更新部分我要更新user_1用戶表中的用戶信息$se…

中囯移動電視盒子(魔百和)B860AV2.1-A2和CM311-5-zg刷機手記

文章目錄B860AV2.1-A2電視盒子情況打開隱藏或屏蔽的功能進入Recovery模式打開WiFi(如果被隱藏)打開運維調試打開ADB調試安裝第三方應用、設置第三方桌面等(Fiddler抓包替換官方App安裝包)開啟ADB和使用ADB禁止“首次啟動設置”刷機…

【系統架構設計(14)】項目管理下:軟件質量與配置管理:構建可靠軟件的基礎保障

文章目錄一、核心思想二、軟件質量屬性:定義"好軟件"的標準三、質量保證與控制:實現質量標準的方法四、CMMI模型:組織質量能力的演進路徑五、軟件配置管理:質量成果的保護機制六、軟件工具:質量管理的技術支…

碼農的“必修課”:深度解析Rust的所有權系統(與C++內存模型對比)

在軟件開發的世界里,內存管理是至關重要的一個環節。它是程序運行的基礎,直接關系到程序的性能、穩定性和安全性。一個糟糕的內存管理策略,可能導致內存泄漏、野指針、緩沖區溢出等一系列令人頭疼的問題,甚至帶來災難性的安全漏洞…

Java全棧學習筆記30

# MySQL 卸載安裝版電腦管家/360/控制面板卸載mysql服務即可刪除ProgramData中的MySQL目錄解壓版winr 輸入 services.msc 打開服務管理。查看是否存在MySQL,如果存在則刪除注冊表 winR regedit 打開注冊表計算機\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Servic…

Transformers 學習入門:前置知識補漏

在學習 Transformers 之前,打好神經網絡和自然語言處理的基礎至關重要。本文整理了需要掌握的核心前置知識,用通俗的例子幫你快速理解復雜概念,為后續學習鋪平道路。? 一、神經網絡基礎? 1. 多層感知機(MLP)&#xf…

雙攝工業相機的主要特點和應用場景

雙攝工業相機(雙目攝像頭)在工業領域中的應用非常廣泛,其核心優勢在于通過雙鏡頭模擬人眼立體視覺,能夠獲取深度信息并實現高精度三維重建。 一、雙攝工業相機的核心優勢 深度感知與三維重建 雙目攝像頭通過兩個鏡頭從不同角度拍…

YOLOv11改進:FocalModulation替換SPPF(精度更高的空間金字塔池化)

YOLOv11:FocalModulation替換SPPF(精度更高的空間金字塔池化) 引言 在目標檢測領域,YOLO系列算法以其高效性和準確性廣受歡迎。作為YOLO系列的最新成員之一,YOLOv11在多個方面進行了優化和改進。其中,空間金…

LLM與數據工程的融合:衡石Data Agent的語義層與Agent框架設計

在數字經濟浪潮中,企業數據智能正經歷從"工具輔助"到"智能協同"的范式躍遷。傳統BI系統受限于靜態報表與預設指標,難以應對動態業務場景的復雜需求。衡石科技發布的HENGSHI SENSE 6.0通過"Data AI Agent"架構創新&#x…

假設一個算術表達式中包含圓括號、方括號和花括號3種類型的括號,編寫一個算法來判別,表達式中的括號是否配對,以字符“\0“作為算術表達式的結束符

思想:這道題是棧的應用類型,我們可以建立一個棧來保存(,[,{,通過遍歷字符串如果是三個左括號其中一個則入棧,當遇到)]}則出棧配對,如果左右匹配,則遍歷下一個元素,如果不匹配直接返回,如果遍歷字符串結束&a…

鴻蒙Next的UI國際化與無障礙適老化實踐:構建全球包容的數字世界

科技不應讓任何人掉隊,鴻蒙Next正將這一理念變為現實在全球化日益深入的今天,應用的國際化與無障礙設計不再是"錦上添花",而是不可或缺的核心競爭力。華為鴻蒙Next系統從設計之初就深入考慮了這些需求,為開發者提供了完…

深度學習——遷移學習

遷移學習作為深度學習領域的一項革命性技術,正在重塑我們構建和部署AI模型的方式。本文將帶您深入探索遷移學習的核心原理、詳細實施步驟以及實際應用中的關鍵技巧,幫助您全面掌握這一強大工具。遷移學習的本質與價值遷移學習的核心思想是"站在巨人…

RAG|| LangChain || LlamaIndex || RAGflow

大模型:預訓練模型 外掛知識庫:知識庫->向量數據庫 輸入-》預處理成向量 提示詞-》llm歸納總結 離線:企業原文本存到向量數據庫 向量: 同一個向量模型(第二代檢索,推薦,個人助理,…

mcp_clickhouse代碼學習

引言:當ClickHouse遇上MCP 作為一個基于Model Context Protocol(MCP)框架的ClickHouse查詢服務器,mcp_clickhouse不僅在技術實現上展現了優雅的設計思路,更在架構層面提供了許多值得借鑒的解決方案。 一、項目概覽:架構初探 mcp_clickhouse是一個專為ClickHouse數據庫設計…

前端三件套+springboot后端連通嘗試

本文承接自跨域請求問題淺解-CSDN博客 后端: //主啟動類 SpringBootApplication public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}} //控制類 RestController RequestMapping(&quo…