注意力機制中為什么q與k^T相乘是注意力分數

要理解 “q×kT\mathbf{q} \times \mathbf{k}^Tq×kT 是注意力分數”,核心是抓住注意力機制的本質目標 ——量化 “查詢(q)” 與 “鍵(k)” 之間的關聯程度,而向量點積(矩陣相乘的元素本質)恰好是實現這一目標的天然工具。下面分三步拆解:

一、注意力分數的核心使命:找 “查詢與鍵” 的關聯度

注意力機制的核心邏輯是 “按需聚焦”:比如閱讀時,我們會根據當前 “想找的信息(查詢 q)”,去關注文本中 “相關的內容(鍵 k)”。為實現這一邏輯,第一步必須先回答:“每個查詢與每個鍵的相關性有多高?”

這個 “相關性數值”,就是注意力分數。

例如:

  • 若查詢 q 是 “貓的顏色”,鍵 k1 是 “黑色貓咪”、k2 是 “紅色汽車”,則 q 與 k1 的分數應高,與 k2 的分數應低;
  • 若有多個查詢(如 “貓的顏色”“狗的大小”)和多個鍵,則需要一個 “查詢 - 鍵關聯表”,記錄所有查詢對所有鍵的相關性 —— 這正是 q×kT\mathbf{q} \times \mathbf{k}^Tq×kT 矩陣的作用。

二、向量點積:天然的 “關聯度度量工具”

q×kT\mathbf{q} \times \mathbf{k}^Tq×kT 矩陣中,每個元素的本質是 “單個查詢向量 **** **** 與單個鍵向量 **** **** 的點積”(即 qi?kj\mathbf{q}_i \cdot \mathbf{k}_jqi??kj?),而點積的幾何意義恰好能量化 “關聯度”。

回顧向量點積的數學定義與幾何意義:

對兩個維度為 dkd_kdk? 的向量 qi\mathbf{q}_iqi?kj\mathbf{k}_jkj?,點積公式為:

qi?kj=∑t=1dkqi,t×kj,t\mathbf{q}_i \cdot \mathbf{k}_j = \sum_{t=1}^{d_k} q_{i,t} \times k_{j,t}qi??kj?=t=1dk??qi,t?×kj,t?

其幾何等價形式為:

qi?kj=∥qi∥×∥kj∥×cos?θ\mathbf{q}_i \cdot \mathbf{k}_j = \|\mathbf{q}_i\| \times \|\mathbf{k}_j\| \times \cos\thetaqi??kj?=qi?×kj?×cosθ

其中:

  • ∥qi∥\|\mathbf{q}_i\|qi?∥kj∥\|\mathbf{k}_j\|kj? 是向量的模長(可理解為向量的 “信息量大小”);
  • θ\thetaθqi\mathbf{q}_iqi?kj\mathbf{k}_jkj? 的夾角,cos?θ\cos\thetacosθ 是 “方向相似度”——θ\thetaθ 越小(方向越接近),cos?θ\cos\thetacosθ 越接近 1,點積越大;θ\thetaθ 越大(方向越背離),cos?θ\cos\thetacosθ 越接近 - 1,點積越小。

這恰好完美匹配 “關聯度” 的需求:

  • 當查詢 q 與鍵 k “方向相似”(比如 q 是 “貓”,k 是 “貓咪”),cos?θ\cos\thetacosθ 大,點積大→注意力分數高,說明兩者相關;
  • 當查詢 q 與鍵 k “方向無關”(比如 q 是 “貓”,k 是 “汽車”),cos?θ\cos\thetacosθ 接近 0,點積小→注意力分數低,說明兩者無關。

此外,點積還有一個關鍵優勢:計算高效。相比歐氏距離(衡量 “差異”,需開平方)等其他度量方式,點積僅需加法和乘法,適合深度學習中大規模矩陣運算(這也是 Transformer 選擇點積作為分數度量的重要工程原因)。

三、q×kT\mathbf{q} \times \mathbf{k}^Tq×kT:批量計算所有 “查詢 - 鍵” 的關聯度

前面講的是 “單個查詢 vs 單個鍵” 的情況,而實際模型中,我們通常有多個查詢(m 個)和多個鍵(n 個),需要一次性計算 “所有查詢對所有鍵的分數”—— 這就需要通過矩陣相乘 q×kT\mathbf{q} \times \mathbf{k}^Tq×kT 實現,其維度變化和元素含義如下:

1. 明確向量 / 矩陣維度(結合文檔假設)

  • 單個查詢向量 qi\mathbf{q}_iqi?:維度為 dkd_kdk?(如文檔中 dk=64d_k=64dk?=64),即形狀為 (1,dk)(1, d_k)(1,dk?)
  • 多個查詢組成的矩陣 Q\mathbf{Q}Q:包含 mmm 個查詢,形狀為 (m,dk)(m, d_k)(m,dk?)(每行是一個查詢);
  • 單個鍵向量 kj\mathbf{k}_jkj?:維度同樣為 dkd_kdk?,形狀為 (1,dk)(1, d_k)(1,dk?)
  • 多個鍵組成的矩陣 K\mathbf{K}K:包含 nnn 個鍵,形狀為 (n,dk)(n, d_k)(n,dk?)(每行是一個鍵);
  • 鍵矩陣的轉置 KT\mathbf{K}^TKT:將 K\mathbf{K}K 的行與列交換,形狀變為 (dk,n)(d_k, n)(dk?,n)(每列是一個鍵)。

2. 矩陣相乘的物理含義:生成 “注意力分數矩陣”

根據矩陣相乘的規則(前矩陣列數 = 后矩陣行數才能相乘),Q×KT\mathbf{Q} \times \mathbf{K}^TQ×KT 的計算過程如下:

  • 輸入維度:Q(m,dk)×KT(dk,n)\mathbf{Q}(m, d_k) \times \mathbf{K}^T(d_k, n)Q(m,dk?)×KT(dk?,n)
  • 輸出維度:(m,n)(m, n)(m,n)(前矩陣行數 × 后矩陣列數);
  • 輸出矩陣的每個元素 (i,j)(i, j)(i,j):第 iii 個查詢向量 qi\mathbf{q}_iqi? 與第 jjj 個鍵向量 kj\mathbf{k}_jkj? 的點積(即 qi?kj\mathbf{q}_i \cdot \mathbf{k}_jqi??kj?)。

這個 (m,n)(m, n)(m,n) 的輸出矩陣,就是注意力分數矩陣—— 它本質是一張 “查詢 - 鍵關聯表”:

  • 行:對應每個查詢(共 mmm 行);
  • 列:對應每個鍵(共 nnn 列);
  • 元素 (i,j)(i,j)(i,j):第 iii 個查詢對第 jjj 個鍵的 “關聯度分數”。

3. 與文檔邏輯的呼應:分數矩陣的后續處理

需要注意的是,Q×KT\mathbf{Q} \times \mathbf{K}^TQ×KT 得到的是 “原始注意力分數”,正如文檔中強調的,由于點積的方差會隨 dkd_kdk? 增長(Var(qi?kj)=dk\text{Var}(\mathbf{q}_i \cdot \mathbf{k}_j) = d_kVar(qi??kj?)=dk?),原始分數會出現數值極端化問題。因此,后續必須除以 dk\sqrt{d_k}dk?? 進行方差歸一化(將方差固定為 1),再通過 softmax 轉化為 “注意力權重”(表示每個鍵對查詢的貢獻占比)—— 這也印證了文檔中 “縮放點積注意力” 的完整流程:

Attention(Q,K,V)=softmax(Q×KTdk)×V\text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left( \frac{\mathbf{Q} \times \mathbf{K}^T}{\sqrt{d_k}} \right) \times \mathbf{V}Attention(Q,K,V)=softmax(dk??Q×KT?)×V

其中 V\mathbf{V}V(值向量)是最終要 “聚焦” 的內容,而 Q×KTdk\frac{\mathbf{Q} \times \mathbf{K}^T}{\sqrt{d_k}}dk??Q×KT? 正是歸一化后的注意力分數矩陣。

四、舉個具體例子:讓抽象矩陣變直觀

假設:

  • 查詢數量 m=2m=2m=2(比如查詢 1:“貓的顏色”,查詢 2:“狗的大小”);
  • 鍵數量 n=3n=3n=3(比如鍵 1:“黑色貓咪”,鍵 2:“棕色小狗”,鍵 3:“紅色汽車”);
  • 維度 dk=2d_k=2dk?=2(簡化計算,實際為 64)。

1. 設定具體向量(符合文檔初始化:均值 0、方差 1)

  • 查詢矩陣 Q\mathbf{Q}Q(2×2):

    Q=[0.80.20.10.9]\mathbf{Q} = \begin{bmatrix} 0.8 & 0.2 \\ 0.1 & 0.9 \end{bmatrix}Q=[0.80.1?0.20.9?]

    (第 1 行:查詢 1 “貓的顏色”,第 2 行:查詢 2 “狗的大小”)

  • 鍵矩陣 K\mathbf{K}K(3×2):

    K=[0.70.30.20.80.4?0.5]\mathbf{K} = \begin{bmatrix} 0.7 & 0.3 \\ 0.2 & 0.8 \\ 0.4 & -0.5 \end{bmatrix}K=?0.70.20.4?0.30.8?0.5??

    (第 1 行:鍵 1 “黑色貓咪”,第 2 行:鍵 2 “棕色小狗”,第 3 行:鍵 3 “紅色汽車”)

  • 鍵轉置 KT\mathbf{K}^TKT(2×3):

    KT=[0.70.20.40.30.8?0.5]\mathbf{K}^T = \begin{bmatrix} 0.7 & 0.2 & 0.4 \\ 0.3 & 0.8 & -0.5 \end{bmatrix}KT=[0.70.3?0.20.8?0.4?0.5?]

2. 計算 Q×KT\mathbf{Q} \times \mathbf{K}^TQ×KT(原始注意力分數矩陣)

根據矩陣相乘規則:

  • 元素 (1,1)(1,1)(1,1)(查詢 1× 鍵 1):0.8×0.7+0.2×0.3=0.56+0.06=0.620.8×0.7 + 0.2×0.3 = 0.56 + 0.06 = 0.620.8×0.7+0.2×0.3=0.56+0.06=0.62(分數高,關聯強);
  • 元素 (1,2)(1,2)(1,2)(查詢 1× 鍵 2):0.8×0.2+0.2×0.8=0.16+0.16=0.320.8×0.2 + 0.2×0.8 = 0.16 + 0.16 = 0.320.8×0.2+0.2×0.8=0.16+0.16=0.32(分數中,關聯弱);
  • 元素 (1,3)(1,3)(1,3)(查詢 1× 鍵 3):0.8×0.4+0.2×(?0.5)=0.32?0.1=0.220.8×0.4 + 0.2×(-0.5) = 0.32 - 0.1 = 0.220.8×0.4+0.2×(?0.5)=0.32?0.1=0.22(分數低,關聯弱);
  • 元素 (2,1)(2,1)(2,1)(查詢 2× 鍵 1):0.1×0.7+0.9×0.3=0.07+0.27=0.340.1×0.7 + 0.9×0.3 = 0.07 + 0.27 = 0.340.1×0.7+0.9×0.3=0.07+0.27=0.34(分數中,關聯弱);
  • 元素 (2,2)(2,2)(2,2)(查詢 2× 鍵 2):0.1×0.2+0.9×0.8=0.02+0.72=0.740.1×0.2 + 0.9×0.8 = 0.02 + 0.72 = 0.740.1×0.2+0.9×0.8=0.02+0.72=0.74(分數高,關聯強);
  • 元素 (2,3)(2,3)(2,3)(查詢 2× 鍵 3):0.1×0.4+0.9×(?0.5)=0.04?0.45=?0.410.1×0.4 + 0.9×(-0.5) = 0.04 - 0.45 = -0.410.1×0.4+0.9×(?0.5)=0.04?0.45=?0.41(分數低,關聯弱)。

最終原始分數矩陣為:

Q×KT=[0.620.320.220.340.74?0.41]\mathbf{Q} \times \mathbf{K}^T = \begin{bmatrix} 0.62 & 0.32 & 0.22 \\ 0.34 & 0.74 & -0.41 \end{bmatrix}Q×KT=[0.620.34?0.320.74?0.22?0.41?]

這個矩陣完全符合預期:

  • 查詢 1(貓的顏色)對鍵 1(黑色貓咪)分數最高,對鍵 3(紅色汽車)分數最低;

  • 查詢 2(狗的大小)對鍵 2(棕色小狗)分數最高,對鍵 3(紅色汽車)分數最低。

    后續只需除以 dk=2≈1.414\sqrt{d_k} = \sqrt{2} \approx 1.414dk??=2?1.414 歸一化,再經 softmax 就能得到合理的注意力權重。

總結:q×kT\mathbf{q} \times \mathbf{k}^Tq×kT 是注意力分數的本質原因

  1. 目標匹配:注意力需要 “關聯度”,點積的幾何意義(方向相似度 + 信息量)恰好量化了關聯度;
  2. 運算高效:點積計算簡單,適合大規模矩陣運算;
  3. 批量輸出q×kT\mathbf{q} \times \mathbf{k}^Tq×kT 能一次性生成 “所有查詢對所有鍵” 的關聯度,形成結構化的分數矩陣;
  4. 銜接后續流程:原始分數矩陣需經文檔中提到的 “除以 dk\sqrt{d_k}dk?? 歸一化” 和 “softmax 權重轉化”,最終實現 “按需聚焦”—— 這也說明 q×kT\mathbf{q} \times \mathbf{k}^Tq×kT 是注意力機制的核心 “分數來源”。

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

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

相關文章

Krea Video:Krea AI推出的AI視頻生成工具

本文轉載自:Krea Video:Krea AI推出的AI視頻生成工具 - Hello123工具導航 ** 一、平臺定位與技術特性 Krea Video 是 Krea AI 推出的 AI 視頻生成工具,通過結合關鍵幀圖像與文本提示實現精準視頻控制。用戶可自定義視頻首尾幀、為每張圖片設…

C++初階(2)C++入門基礎1

C是在C的基礎之上,容納進去了面向對象編程思想,并增加了許多有用的庫,以及編程范式 等。熟悉C語言之后,對C學習有一定的幫助。 本章節主要目標: 補充C語言語法的不足,以及C是如何對C語言設計不合理的地方…

ANSI終端色彩控制知識散播(II):封裝的層次(Python)——不同的邏輯“一樣”的預期

基礎高階各有色,本原純真動乾坤。 筆記模板由python腳本于2025-08-22 18:05:28創建,本篇筆記適合喜歡終端色彩ansi編碼和python的coder翻閱。 學習的細節是歡悅的歷程 博客的核心價值:在于輸出思考與經驗,而不僅僅是知識的簡單復述…

前端無感刷新 Token 的 Axios 封裝方案

在現代前端應用中,基于 Token 的身份驗證已成為主流方案。然而,Token 過期問題常常困擾開發者 —— 如何在不打斷用戶操作的情況下自動刷新 Token,實現 "無感刷新" 體驗?本文將詳細介紹基于 Axios 的解決方案。什么是無…

【數據結構】線性表——鏈表

這里寫自定義目錄標題線性表鏈表(鏈式存儲)單鏈表的定義單鏈表初始化不帶頭結點的單鏈表初始化帶頭結點的單鏈表初始化單鏈表的插入按位序插入帶頭結點不帶頭結點指定結點的后插操作指定結點的前插操作單鏈表的刪除按位序刪除(帶頭結點&#…

容器安全實踐(三):信任、約定與“安全基線”鏡像庫

容器安全實踐(一):概念篇 - 從“想當然”到“真相” 容器安全實踐(二):實踐篇 - 從 Dockerfile 到 Pod 的權限深耕 在系列的前兩篇文章中,我們探討了容器安全的底層原理,并詳細闡述…

百度面試題:賽馬問題

題目現在有25匹馬和一個賽馬場,賽馬場有5條跑道(即一次只能比較5匹馬),并且沒有秒表等計時工具,因此每次賽馬只能知道這5匹馬的相對時間而非絕對時間。問:如何篩選出跑的最快的3匹馬?需要比賽幾…

centos下安裝Nginx(搭建高可用集群)

CentOS-7下安裝Nginx的詳細過程_centos7安裝nginx-CSDN博客 centos換yum軟件管理包鏡像 CentOS 7.* 更換國內鏡像源完整指南_centos7更換國內源-CSDN博客 VMware虛擬機上CentOS配置nginx后,本機無法訪問 執行命令:/sbin/iptables -I INPUT -p tcp --dport 80 -j…

實時視頻技術選型深度解析:RTSP、RTMP 與 WebRTC 的邊界

引言:WebRTC 的“光環”與現實落差 在實時音視頻領域,WebRTC 常常被貼上“終極解決方案”的標簽:瀏覽器原生支持、無需插件、點對點傳輸、毫秒級延遲,這些特性讓它在媒體和開發者群體中擁有了近乎神話般的地位。許多人甚至認為&a…

基于深度學習的阿爾茨海默癥MRI圖像分類系統

基于深度學習的阿爾茨海默癥MRI圖像分類系統 項目概述 阿爾茨海默癥是一種進行性神經退行性疾病,早期診斷對于患者的治療和生活質量至關重要。本項目利用深度學習技術,基于MRI腦部掃描圖像,構建了一個高精度的阿爾茨海默癥分類系統&#xff0…

54 C++ 現代C++編程藝術3-移動構造函數

C 現代C編程藝術3-移動構造函數 文章目錄C 現代C編程藝術3-移動構造函數場景1&#xff1a;動態數組資源轉移 #include <iostream> #include <vector> class DynamicArray { int* data; size_t size; public: // 移動構造函數&#xff08;關鍵實現&#xf…

Sping Boot + RabbitMQ :如何在Spring Boot中整合RabbitMQ實現消息可靠投遞?

Spring Boot整合RabbitMQ實現消息可靠投遞全解析 在分布式系統中&#xff0c;消息中間件是解耦、異步、流量削峰的核心組件。RabbitMQ作為高可靠、易擴展的AMQP協議實現&#xff0c;被廣泛應用于企業級場景。但消息傳遞過程中可能因網絡波動、服務宕機等問題導致消息丟失&#…

STAR-CCM+|K-epsilon湍流模型溯源

【1】引言 三維CFD仿真經典軟件很多&#xff0c;我接觸過的有Ansys和STAR-CCM兩種。因為一些機緣&#xff0c;我使用STAR-CCM更多&#xff0c;今天就來回顧一下STAR-CCM中K-epsilon湍流模型的基本定義。 【2】學習地址介紹 點擊鏈接User Guide可以到達網頁版本的STAR-CCM 24…

osgEarth 圖像融合正片疊底

* 需求&#xff1a;* 高程渲染圖 RGB.tif、 山體陰影圖 AMP.tif** 高程渲染圖 rgb波段分別 乘以 山體陰影圖r波段&#xff0c; 然后除以255(AI說 讀取的紋理就已經歸一化到了 0~1 范圍&#xff0c;不用除以 255)。本人遙感知識匱乏。問了AI,以上 需求在許多商業軟件上已實現。…

Java接口響應速度優化

在 Java 開發中&#xff0c;接口響應速度直接影響用戶體驗和系統吞吐量。優化接口性能需要從代碼、數據庫、緩存、架構等多個維度綜合考量&#xff0c;以下是具體方案及詳細解析&#xff1a;一、代碼層面優化代碼是接口性能的基礎&#xff0c;低效的代碼會直接導致響應緩慢。1.…

A Large Scale Synthetic Graph Dataset Generation Framework的學習筆記

文章的簡介 作者提出了一個可擴展的合成圖生成框架&#xff0c;能夠從真實圖中學習結構和特征分布&#xff0c;并生成任意規模的圖數據集&#xff0c;支持&#xff1a; 節點和邊的結構生成節點和邊的特征生成特征與結構的對齊&#xff08;Aligner&#xff09; 它區別于GraphWor…

Android12 Framework讀寫prop屬性selinux報錯解決

文章目錄問題描述解決過程相關文章問題描述 Android讀prop值時&#xff0c;就算是system應用&#xff0c; 也需要selinux權限&#xff0c;否則會報錯。 java代碼如下 SystemProperties.get("ro.input.resampling", "")selinux報錯如下 2025-06-28 17:57:…

【圖文版】AIOT 小智 AI 聊天機器人 ESP32 項目源碼圖解

前言 小智 AI 聊天機器人是最近一個很火的開源項目&#xff0c;它借助LLM大模型以及TTS等AI的能力&#xff0c;通過自然語言來與其對話實現交互。它可以回答任何問題、播放音樂、背誦古詩&#xff0c;頗有未來AI機器人的雛形。 因為最近工作上的需要對其進行了研究&#xff0c;…

250821-RHEL9.4上Docker及Docker-Compose的離線安裝

在 離線環境下 在 RHEL (Red Hat Enterprise Linux) 系統上安裝 Docker 和 Docker Compose&#xff0c;需要提前在有網絡的環境中下載相關 RPM 包及依賴&#xff0c;然后在目標機器上進行安裝。以下是比較完整的步驟&#xff1a; 1. Docker及Docker-Compose離線安裝 在 RHEL 9.…

react相關知識

1.類組件和函數組件&#xff08;1&#xff09;類組件import React, { Component } from react;class UserProfile extends Component {constructor(props) {super(props);this.state {userData: null,isLoading: true,};this.timerId null;}componentDidMount() {// 模擬 API…