注意力机制中为什么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}_jqikj),而点积的几何意义恰好能量化 “关联度”。

回顾向量点积的数学定义与几何意义:

对两个维度为 dkd_kdk 的向量 qi\mathbf{q}_iqikj\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}qikj=t=1dkqi,t×kj,t

其几何等价形式为:

qi⋅kj=∥qi∥×∥kj∥×cos⁡θ\mathbf{q}_i \cdot \mathbf{k}_j = \|\mathbf{q}_i\| \times \|\mathbf{k}_j\| \times \cos\thetaqikj=qi×kj×cosθ

其中:

  • ∥qi∥\|\mathbf{q}_i\|qi∥kj∥\|\mathbf{k}_j\|kj 是向量的模长(可理解为向量的 “信息量大小”);
  • θ\thetaθqi\mathbf{q}_iqikj\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}_jqikj)。

这个 (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(qikj)=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(dkQ×KT)×V

其中 V\mathbf{V}V(值向量)是最终要 “聚焦” 的内容,而 Q×KTdk\frac{\mathbf{Q} \times \mathbf{K}^T}{\sqrt{d_k}}dkQ×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.10.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.40.30.80.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.30.20.80.40.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.320.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.040.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.340.320.740.220.41]

这个矩阵完全符合预期:

  • 查询 1(猫的颜色)对键 1(黑色猫咪)分数最高,对键 3(红色汽车)分数最低;

  • 查询 2(狗的大小)对键 2(棕色小狗)分数最高,对键 3(红色汽车)分数最低。

    后续只需除以 dk=2≈1.414\sqrt{d_k} = \sqrt{2} \approx 1.414dk=21.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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…