NLP:Transformer之self-attention(特別分享3)

本文目錄:

  • 一、核心思想:一句話概括
  • 二、計算流程的直觀比喻
  • 三、分步計算詳解(附數字例子)
    • 第 1 步:創建 Query, Key, Value 向量
    • 第 2 步:計算注意力分數
    • 第 3 步:縮放并應用 Softmax
    • 第 4 步:與 Value 向量加權求和,得到輸出
  • 四、矩陣運算:實際是如何計算的
  • 五、為什么 Self-Attention 如此強大?
      • 總結

在這里插入圖片描述
前言:之前講解了Transformer各部分作用、殘差等,本文分享self-attention。

一、核心思想:一句話概括

Self-Attention 的核心思想是:讓序列中的每一個詞(元素)都能夠“關注”到序列中的所有其他詞(包括它自己),并根據相關性動態地聚合所有詞的信息,從而得到一個新的、融入了全局上下文信息的表示。

簡單比喻:
讀一句話時,為了理解某個詞的含義,你的大腦會自動地回顧句子中的其他詞,并賦予它們不同的重要性。Self-Attention 就是讓機器模擬這個過程。

  • 理解“它”這個詞時,你會更關注句子前面提到的某個名詞(比如“蘋果”)。
  • 理解“好吃”這個詞時,你會更關注“蘋果”而不是“石頭”。

二、計算流程的直觀比喻

我們把 Self-Attention 想象成一個信息檢索系統

  1. 準備階段(Input Processing):每個詞都把自己改造成三份身份:查詢(Query)鍵(Key)值(Value)
  2. 檢索階段(Attention Scoring)
    • 一個詞(通過它的 Query)去“詢問”序列中的所有詞(它們的 Key):“我和你們每個人的相關度是多少?”
    • 通過計算 Q·K 得到一組相關度分數(Attention Scores)。
  3. 加權求和階段(Output)
    • 將這些相關度分數作為權重,對所有詞的 Value(實際攜帶的信息)進行加權求和。
    • 最終輸出:一個融合了全局信息的、新的詞表示。

最終效果:每個詞的新表示,不再是它孤立的嵌入向量,而是一個深知全局上下文的“社交達人”。


三、分步計算詳解(附數字例子)

假設我們有一個簡單的序列:“Thinking Machines”,兩個詞。它們的初始嵌入向量(假設維度為 4)為:
x? = [1, 0, 1, 0] (代表 “Thinking”)
x? = [0, 2, 0, 2] (代表 “Machines”)

第 1 步:創建 Query, Key, Value 向量

每個輸入向量 x_i 會分別乘以三個可訓練的權重矩陣 W^Q, W^K, W^V,從而產生對應的 Q, K, V 向量。

假設我們的權重矩陣是:

W^Q = [[1, 0, 1, 0],[0, 1, 0, 1],[1, 0, 0, 1],[0, 1, 1, 0]]W^K = [[0, 1, 1, 0],[1, 0, 0, 1],[0, 0, 1, 1],[1, 1, 0, 0]]W^V = [[1, 1, 0, 0],[0, 1, 1, 0],[0, 0, 1, 1],[1, 0, 0, 1]]

計算第一個詞 “Thinking” 的 Q, K, V:
q? = x? · W^Q = [1,0,1,0] · W^Q = [2, 0, 2, 0]
k? = x? · W^K = [1,0,1,0] · W^K = [0, 2, 2, 0]
v? = x? · W^V = [1,0,1,0] · W^V = [1, 1, 1, 1]

同理,計算 “Machines” 的 Q, K, V:
q? = x? · W^Q = [0,2,0,2] · W^Q = [0, 4, 0, 4]
k? = x? · W^K = [0,2,0,2] · W^K = [4, 0, 4, 0]
v? = x? · W^V = [0,2,0,2] · W^V = [2, 2, 2, 2]

關鍵W^Q, W^K, W^V 是模型需要學習的參數,它們決定了如何從原始輸入中解讀出“要查詢什么”、“用什么來被查詢”、“實際信息是什么”。

第 2 步:計算注意力分數

我們現在計算 “Thinking” (Query)對序列中每個詞(Key)的注意力分數。分數通過 Query 和 Key 的點積計算。

score?? = q? · k? = [2,0,2,0] · [0,2,2,0] = 0*2 + 2*0 + 2*2 + 0*0 = 4 (Thinking 與自身的相關性)
score?? = q? · k? = [2,0,2,0] · [4,0,4,0] = 2*4 + 0*0 + 2*4 + 0*0 = 16 (Thinking 與 Machines 的相關性)

第 3 步:縮放并應用 Softmax

  1. 縮放(Scale):點積的結果可能很大,導致 Softmax 梯度變小。因此除以 Key 向量維度(d_k)的平方根進行縮放。這里 d_k=4,平方根是 2。
    scale_score?? = 4 / 2 = 2
    scale_score?? = 16 / 2 = 8

  2. Softmax:將分數轉換為概率分布(總和為1),使得大的分數更大,小的分數更小。
    softmax([2, 8]) ≈ [0.012, 0.988]

    解讀:對于 “Thinking” 這個詞來說,它認為 “Machines” 的信息(0.988)遠比它自己的信息(0.012)重要得多!

第 4 步:與 Value 向量加權求和,得到輸出

將 Softmax 得到的權重作用在所有詞的 Value 向量上,并求和,得到 “Thinking” 位置的新表示 z?

z? = 0.012 * v? + 0.988 * v? ≈ 0.012*[1,1,1,1] + 0.988*[2,2,2,2] ≈ [1.97, 1.97, 1.97, 1.97]

這個新的 z? 向量就是 “Thinking” 經過自注意力機制處理后的輸出。它幾乎完全由 “Machines” 的信息構成,這非常合理,因為 “Thinking Machines” 是一個整體概念。

對 “Machines” 重復步驟 2-4,可以計算出 z?


四、矩陣運算:實際是如何計算的

上述過程是為了理解,實際代碼中是用矩陣一次算完的,極其高效。

  1. 將所有輸入詞向量堆疊成矩陣 X
  2. 計算 Q, K, V 矩陣:
    Q = X · W^Q
    K = X · W^K
    V = X · W^V
  3. 計算注意力分數矩陣:Scores = Q · K^T / sqrt(d_k)
  4. 對 Scores 矩陣的每一行應用 Softmax。
  5. 計算輸出矩陣 ZZ = Softmax(Scores) · V

整個過程可以封裝為一個漂亮的公式:
Attention(Q, K, V) = softmax(QK^T / √d?) V


五、為什么 Self-Attention 如此強大?

  1. 全局依賴性:一步直接捕獲序列中任意兩個位置之間的關系,不受距離限制。解決了 RNN 的長程依賴問題。
  2. 并行化:巨大的矩陣乘法可以完全并行計算,訓練速度遠快于必須順序計算的 RNN。
  3. 可解釋性:通過分析注意力權重(softmax(QK^T)),我們可以直觀地看到模型在做決策時關注了哪些詞,如圖:

總結

Self-Attention 是一個精巧的“信息檢索與聚合”系統。它通過 Query、Key、Value 的抽象,讓模型能夠動態地、有選擇地融合序列的全局信息,從而為每個位置生成一個上下文感知的強大表示。它是 Transformer 能夠統治 NLP 乃至整個深度學習領域的基石。

本文分享到此結束。

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

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

相關文章

25、優化算法與正則化技術:深度學習的調優藝術

學習目標:深入理解各種優化算法的原理和適用場景,掌握學習率調度的方法和策略,學會使用Dropout、批歸一化等正則化技術,理解早停和驗證策略,建立深度學習調優的系統性知識。 深度學習的成功不僅依賴于精巧的模型架構,更在于巧妙的訓練策略。如果說網絡架構是房屋的設計圖…

Netty-01-NIO前置知識

目錄 NIO三大組件 一. ByteBuffer 基本用法 DirectByteBuffer與HeapByteBuffer對比 字符串轉ByteBuffer ByteBuffer.wrap(byte[] ) 粘包與拆包 文件編程 零拷貝transferTo 二. 阻塞與非阻塞Channel 三. Selector SelectionKey(重點) Select…

知識點17:多Agent系統架構設計模式

知識點17:多Agent系統架構設計模式 核心概念 掌握系統架構思維,理解多Agent系統的設計原則和模式 架構設計核心概念 在構建多Agent系統時,良好的架構設計是系統成功的關鍵。本節將介紹多Agent系統架構設計中的核心概念,包括單點瓶…

數據庫造神計劃第五天---增刪改查(CRUD)(1)

🔥個人主頁:尋星探路 🎬作者簡介:Java研發方向學習者 📖個人專欄:《從青銅到王者,就差這講數據結構!!!》、 《JAVA(SE)----如此簡單&a…

基于Vue3的人工智能生成內容標識服務平臺前端頁面設計

效果圖&#xff1a;素材庫&#xff1a;App.vue<template><div id"app"><!-- 頭部導航 --><Header /><!-- 主要內容區域 --><main class"main-content"><div class"container"><!-- 強制性國家標準…

使用 MyCat 實現 MySQL 主從讀寫分離

文章目錄使用 MyCat 實現 MySQL 主從讀寫分離完整指南一、MySQL 讀寫分離基礎概述1.1 讀寫分離工作原理1.2 為什么需要讀寫分離1.3 讀寫分離的兩種實現方式主流讀寫分離中間件對比二、MyCat 中間件簡介2.1 MyCat 核心功能2.2 MyCat 適用場景三、環境準備與 MyCat 安裝3.1 前提&…

物聯網傳感器檢測實驗

/*------------------------------------------------------------------------------ * @文件名 : handle * @描述 : 用戶處理函數 * @作者 : 物聯網項目組 * @日期 : 2023/04/01 * @版本 : V0.0.2 *****************************…

什么是dirsearch、xray、durpsuite、sqlmap?

你提到的 dirsearch、xray、durpsuite&#xff08;可能為筆誤&#xff0c;推測是 ??Burp Suite??&#xff09;和 sqlmap 均為網絡安全領域中常用的工具&#xff0c;主要用于 Web 應用的安全測試、漏洞檢測或滲透測試。以下分別詳細說明&#xff1a;??1. dirsearch????…

lamp腳本部署

#!/bin/bash #關閉防火墻和selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 #配置yum網絡源 echo “正在配置yum倉庫” rm -rf /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &am…

Redis Hash數據類型深度解析:從命令、原理到實戰場景

前言 在Redis的眾多數據結構中&#xff0c;Hash&#xff08;哈希&#xff09;類型占據著至關重要的地位。Redis本身就是一個高性能的鍵值&#xff08;Key-Value&#xff09;數據庫&#xff0c;其底層的鍵值對便是通過哈希方式組織的。而Hash數據類型則更進一步&#xff0c;它允…

【C++實戰?】解鎖C++文件操作:從基礎到實戰的進階之路

目錄一、文件操作的基本概念1.1 文件的分類與打開方式1.2 文件流的概念與相關類&#xff08;ifstream、ofstream、fstream&#xff09;1.3 文件操作的基本流程二、文本文件的讀寫實戰2.1 文本文件的打開與關閉2.2 文本文件的寫入操作&#xff08;<< 運算符、write 函數&a…

從C++開始的編程生活(9)——模板初階

前言 本系列文章承接C語言的學習&#xff0c;需要有C語言的基礎才能學會哦~ 第8篇主要講的是有關于C的模板初階。 C才起步&#xff0c;都很簡單&#xff01;&#xff01; 目錄 前言 模板初階 基本語法 函數模板的實例化 顯式實例化的作用 類模板 基本語法 模板初階 模板…

計算機網絡——傳輸層(25王道最新版)

傳輸層傳輸層提供的服務進程 端口號 傳輸層協議之間的關系socket套接字有鏈接 VS 無連接 | 可靠 VS 不可靠UDP數據報及檢驗數據報格式檢驗方法TCPTCP協議的三大階段TCP報文段格式&#xff08;很重要&#xff09;建立連接&#xff08;三次握手&#xff09;&#xff08;超級超級重…

羽毛球地板:從專業運動場景到全民健身市場的技術躍遷與產業重構

在全球體育產業向“專業化大眾化”雙軌并行的趨勢下&#xff0c;羽毛球地板作為運動場景的核心基礎設施&#xff0c;正經歷從單一功能型產品向“性能優化場景適配智能管理”一體化解決方案的轉型。據QYResearch統計&#xff0c;2031年全球羽毛球地板市場規模將達15.95億元&…

R 語言查看類庫源碼的方法

你想查看 getGEO&#xff08;來自 R 語言 GEOquery 包&#xff09;的源碼&#xff0c;這能幫你更好理解其工作原理和數據處理細節。由于 getGEO 是 R 函數&#xff0c;查看方法與 Python 有所不同。下面為你提供幾種主要方法。 方法 適用場景 關鍵命令/操作 在 R 控制臺直接查看…

SQL,posexplode 用法示例

示例1 -- 創建測試數據 WITH test_data AS (SELECT array(apple, banana, cherry) as fruits ) SELECT pos, col FROM test_data LATERAL VIEW posexplode(fruits) t AS pos, col;結果 pos | col ----|------- 0 | apple 1 | banana 2 | cherry示例2 -- 假設有一個用戶表…

數據庫造神計劃第十天---數據庫約束(1)

&#x1f525;個人主頁&#xff1a;尋星探路 &#x1f3ac;作者簡介&#xff1a;Java研發方向學習者 &#x1f4d6;個人專欄&#xff1a;《從青銅到王者&#xff0c;就差這講數據結構&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此簡單&a…

知微傳感Dkam系列3D相機SDK例程篇:CSharp連接相機及保存數據

序言 寫在前面 本人從事機器視覺細分的3D相機行業。編寫此系列文章主要目的有&#xff1a; 1、便利他人應用相機&#xff0c;本系列文章包含公司所出售相機的SDK的使用例程及詳細注釋&#xff1b;2、促進行業發展及交流。 知微傳感Dkam系列3D相機可以應用于定位分揀、焊接焊縫提…

[筆記] 系統分析師 第十二章 軟件架構設計(分析師主要工作)

文章目錄前言12.1 軟件架構概述12.1.1 軟件架構的意義12.1.2 軟件架構的發展史12.2 軟件架構建模12.3 軟件架構風格12.3.1 軟件架構風格概述12.3.2 數據流體系結構風格1.批處理體系結構風格2.管道-過濾體系結構風格12.3.3 調用/返回體系結構風格1.主程序/子程序風格2.面向對象體…

C++---存儲周期,作用域,鏈接性

在C程序設計中&#xff0c;變量的行為不僅由其類型決定&#xff0c;還由存儲周期&#xff08;變量在內存中存在的時間&#xff09;、作用域&#xff08;變量可被訪問的代碼范圍&#xff09;和鏈接性&#xff08;變量在多文件程序中的可見性&#xff09;共同約束。 一、存儲周期…