深入理解注意力机制(下)——缩放点积注意力及示例

一、介绍

        在这篇文章中,我们将重点介绍 Transformer 背后的 Scaled Dot-Product Attention,并详细解释其计算逻辑和设计原理。

        在文章的最后,我们还会提供一个Attention的使用示例,希望读者看完后能够对Attention有更全面的了解。

二、缩放点积注意力

        现在我们已经了解了注意力机制的原型,但是它未能解决输入处理速度慢的问题。为了提高计算速度并利用并行计算的能力,有必要放弃传统的一次处理一个字符的方法。

论文《Attention Is All You Need》引入了Scaled Dot-Product Attention来克服这一挑战。公式如下:

该公式可能看起来很复杂,但可以分解为更简单的步骤。让我们探索每个步骤以了解其背后的原理。

1.QKᵀ

在此步骤中,我们使用两个矩阵:Q(查询)和 K(键)。假设Q有3条数据,K有4条数据。两个矩阵的维数分别为3 * dₖ4 * dₖ

需要注意的是,两个矩阵需要具有相同的列数。解释是:

  • Q 有 3 条数据,每条数据由一个长度为 dₖ 的向量表示。
  • K有四条数据,每条数据由一个长度为dₖ的向量表示。

如果用于表示 Q 和 K 的输入序列的维度不相同,或者想要指定特殊的 dₖ,则可以使用 和 将Linear(input_q_dim, dₖ)原始Linear(input_k_dim, dₖ)Query 和 Key 线性变换为 dₖ 维度。

这两层的目的是将两个序列变换到相同的向量空间

现在我们有了 Q 和 K 矩阵(假设 dₖ = 4),让我们仔细看看 QKᵀ 正在做什么。

该动画演示了查询矩阵和关键矩阵 QKᵀ 的乘积生成一个 3x4 矩阵。

此阶段对应于点积运算,因为结果矩阵的 (i, j) 项是Q 中的第 i 行和 K 中的第 j 行的点积,这也表示 Kⱼ 对 Qᵢ 的重要性。

总之,到目前为止,缩放点积注意力机制执行以下步骤:

  1. 它将输入查询和键映射到相同的向量空间,其中它们的内积为更相关的对带来更高的值(这种转换是由模型学习的)。
  2. 它通过获取查询矩阵和关键矩阵的内积来计算注意力表 A。

2.softmax(A /√dₖ)

该阶段对应于其名称中的Scaled部分。要理解这一步,首先了解 softmax 函数很重要。

对于 A 中的每一行,softmax 函数将每个元素映射到 0 到 1 之间的值,使得每行中的值之和等于 1。

如果我们固定一个特定的坐标 zᵢ 并仅改变该值,同时保持向量中的其他元素不变,则生成的函数看起来类似于 sigmoid 曲线:

值得注意的是,softmax函数的梯度在极值处几乎为零,使得在训练期间更新相应参数变得困难。

如果将键向量和值向量的维度 dₖ 设置得很大,则注意力矩阵 A 中的点积分数更有可能落入这些区域,因为有 dₖ 项需要相乘和求和。

为了缓解这个问题,引入了缩放因子 √dₖ 来降低分数的大小并减少遇到梯度消失的机会。

该技术有助于提高模型在训练过程中的稳定性和收敛性。

我们将经过softmax的矩阵称为A'。

高级(可选):

假设查询向量和键向量中的每个元素都是从标准正态分布 N(0, 1) 独立采样的,根据下面的点积公式:

q 和 k 的点积服从均值为 0、方差为 dₖ 的正态分布。

将点积除以 √dₖ 将其缩放至方差为 1。

3. AV

在深入研究本节之前,让我们回顾一下 A' 的属性:

  1. A' 的行数与输入查询的数量相同。
  2. A' 的列数与输入键的数量相同。
  3. A' 的每一行中的每个元素都在 0 到 1 的范围内,其中 (i, j) 条目表示第 j 个键对于第 i 个查询的重要性。
  4. A' 的单行中所有元素的总和等于 1。

假设 A' 看起来像这样:

接下来,我们讨论 V,它代表键背后的实际值。

您可以将键视为学生 ID,将值视为姓名、班级和成绩等信息。你用学生证来找人,但相关信息才是其背后的价值。对于模型来说,也是一样的:这些值是它实际用来计算的值。

V的维度由dᵥ表示,可以设置为任何合适的值。您还可以使用Linear(input_k_dim, dᵥ)将输入向量转换为该维度。

注意,我将上述命令的第一个参数设置为input_k_dim,这是因为键和值的来源应该是相同的向量,但一个转换为 Q 的空间进行比较,另一个转换为实际值。

也就是说,键和值是一一对应的,第一个值对应第一个键,第二个值对应第二个键,以此类推。

V的外观是这样的:

让我们看看 A'V 做了什么:

从上式中,我们可以观察到 A'V 将:

  1. 生成一个矩阵,其中行数等于查询数。
  2. 对于每个查询,其最终值是 V 中行的加权平均值。
  3. 权重基于查询及其相应键的内积。

三、缩放点积注意力的结论

        事实上,有两件事正在做:

  1. 创建查找表(Q 和 K 的内积、缩放、softmax)。
  2. 根据注意力表对 V 中的行进行加权平均,计算最终输出。

        你也可以把键和值想象成一种数据库,注意力实际上就是根据数据库中的内容找到一个合适的向量来表示每个查询。

在前面的解释中,Query和Key-Value是两个不同的序列,但实际上,它们的输入可以是相同的序列,这种情况称为Self-Attention。

自注意力在自然语言处理中特别有用,其中输出可以被视为考虑上下文的​​每个查询的词嵌入

四、例子

        最后,提供了一个使用注意力的实际例子来加深您的理解。假设我们要将计算机科学系和哲学系(两个查询)转换为模型可以理解的向量,并且数据库中有四个科目(四个键值对):英语、社会研究、数学、和物理。模型计算出的注意力表可能如下所示:

解读如下:对于XX系来说,这四门科目的重要性是……

        接下来,我们需要V的值。这里,我设置dᵥ = 3,其中V中的三个值分别代表记忆力、语言能力和逻辑推理能力。

        (注意:实际上,我们无法知道 Value 的列代表什么,模型会自己找出它们应该代表什么。)

        解读如下:对于XX科目,要做好的记忆力、语言、逻辑推理成绩分别是……

(分数纯属虚构。)

两个矩阵相乘:

最终结果如下:在XX系取得好成绩所需的记忆力、语言力、逻辑推理分数分别为……

该模型还将使用两个向量6.9 7.5 10.18.3 8.7 7.3分别代表两个部门。

我希望这个例子能让你清楚地理解注意力是如何运作的以及如何建立注意力维度。

五、结论

        本文详细介绍了Scaled Dot-Product Attention的计算细节和设计逻辑,以及Attention的使用示例。如果我们仔细对比上一篇文章介绍的模型,我们会发现,虽然两种架构看起来差别很大,但整体逻辑却相当相似。

        除了注意力之外,Transformer 架构还包含其他几个关键元素,例如编码器和解码器结构、MultiHead 和位置编码。尽管本文无法深入讨论这些方面,但我们希望在以后的文章中更详细地探讨它们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/198107.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gRPC 四模式之 双向流RPC模式

双向流RPC模式 在双向流 RPC 模式中,客户端以消息流的形式发送请求到服务器端,服务器端也以消息流的形式进行响应。调用必须由客户端发起,但在此之后,通信完全基于 gRPC 客户端和服务器端的应用程序逻辑。 为什么有了双向流模式…

Windows安装Vmware 虚拟机

目录 一、Vmware 虚拟机介绍 二、Vmware 虚拟机的三种网络模式 2.1桥接模式 2.2仅主机模式 2.3NAT 网络地址转换模式 三、Vmware 虚拟机的安装 一、Vmware 虚拟机介绍 VMware Workstation Pro 是一款可以在个人电脑的操作系统上创建一个完全与主机操作系统隔离的 虚拟机&…

Vite - 静态资源处理 - json文件导入

直接就说明白了 vite 中对json 文件直接当作一个模块来解析。 可以直接导入使用! 可以直接导入使用! 可以直接导入使用!json文件中的key,直接被作为一个属性,可以单独被导入。 因此,导入json文件有两种方式…

特效!视频里的特效在哪制作——Adobe After Effects

今天,我们来谈谈一款在Adobe系列中推出的一款图形视频处理软件,适用于从事设计和视频特技的机构,包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室的属于层类型后期软件——Adobe After Effects。 Adobe After Effects&#xf…

WPF中行为与触发器的概念及用法

完全来源于十月的寒流&#xff0c;感谢大佬讲解 一、行为 (Behaviors) behaviors的简单测试 <Window x:Class"Test_05.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winf…

nodejs+vue慢性胃炎健康管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于慢性胃炎健康管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了慢性胃炎健康管理系统&#xff0c; 系统首页、个…

蓝桥杯单片机综合练习——工厂灯光控制

一、题目 二、代码 #include <reg52.h>sfr AUXR 0x8e; //定义辅助寄存器sbit S5 P3^2; //定义S5按键引脚 sbit S4 P3^3; //定义S4按键引脚unsigned char led_stat 0xff; //定义LED当前状态 unsigned char count 0; //定义50ms定时中断累…

GitHub如何删除仓库

GitHub如何删除仓库 删除方法第一步第二步第三步 删除方法 第一步 在仓库的界面选择Settings 第二步 选择General,页面拉到最后。 第三步 后续按照导向删除仓库即可。

C++ Qt 学习(十):Qt 其他技巧

1. 带参数启动外部进程 QProcess 用于启动外部进程int QProcess::execute(const QString &program, const QStringList &arguments);QObject *parent; ... QString program "./path/to/Qt/examples/widgets/analogclock"; QStringList arguments; argument…

论文阅读——DiffusionDet

在目标检测上使用扩散模型 前向过程&#xff1a;真实框-->随机框 后向过程&#xff1a;随机框-->真实框 前向过程&#xff1a; 一般一张图片真实框的数目不同&#xff0c;填补到同一的N个框&#xff0c;填补方法可以是重复真实框&#xff0c;填补和图片大小一样的框&a…

教程:使用 Keras 优化神经网络

一、介绍 在 我 之前的文章中&#xff0c;我讨论了使用 TensorFlow 实现神经网络。继续有关神经网络库的系列文章&#xff0c;我决定重点介绍 Keras——据说是迄今为止最好的深度学习库。 我 从事深度学习已经有一段时间了&#xff0c;据我所知&#xff0c;处理…

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如&#xff0c;下面的类RegisterResponse 使用了XmlRootElement注解&#xff0c;同时也使用XmlType注解&#xff0c;并用XmlType注解的propOrder属性&#xff0c;指定了两个用XmlElement注解的元素出现的顺序&#xff0c;先出现flag&#xff0c;后出现enterpriseId&#xff0…

python趣味编程-5分钟实现一个蛇梯游戏(含源码、步骤讲解)

蛇梯游戏是用Python编程语言开发的,它是一个桌面应用程序。 这个Python蛇梯游戏可以免费下载开源代码,它是为想要学习Python的初学者创建的。 该项目系统使用了 Pygame 和 Random 模块。 Pygame 是一组跨平台的 Python 模块,专为编写视频游戏而设计。 此游戏包含 Python …

度加创作工具 演示

度加创作工具 功能图功能测试文比润色测试经验分享测试测试输出测试输出工具地址功能图 功能测试 文比润色测试 经验分享测试 测试输出 在人工智能领域,我们一直在追求一个终极目标:让机器能够像人类一样,能够理解、学习和解决各种复杂问题。而要实现这个目标,我们需要将…

torch_cluster、torch_scatter、torch_sparse三个包的安装

涉及到下面几个包安装的时候经常会出现问题&#xff0c;这里我使用先下载然后再安装的办法&#xff1a; pip install torch_cluster pip install torch_scatter pip install torch_sparse 1、选择你对应的torch版本&#xff1a;https://data.pyg.org/whl/ 2、点进去然后&…

【Java 进阶篇】JQuery 事件绑定:`on` 与 `off` 的奇妙舞曲

在前端开发的舞台上&#xff0c;用户与页面的互动是一场精彩的表演。而 JQuery&#xff0c;作为 JavaScript 的一种封装库&#xff0c;为这场表演提供了更为便捷和优雅的事件绑定方式。其中&#xff0c;on 和 off 两位主角&#xff0c;正是这场奇妙舞曲中的核心演员。在这篇博客…

Smart Tomcat的使用

文章目录 Smart Tomcat的作用Smart Tomcat的安装Smart Tomcat的配置Smart Tomcat的启动 Smart Tomcat的作用 我们知道使用Servlet来完成一个项目一共需要七个步骤&#xff0c;即创建maven项目、添加依赖、创建目录结构、编写代码、打包程序、部署程序、验证程序。这样的确是完…

AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

【LeetCode刷题-树】-- 572.另一棵树的子树

572.另一棵树的子树 方法&#xff1a;深度优先搜索暴力匹配 深度优先搜索枚举root中的每一个节点&#xff0c;判断这个点的子树是否与subroot相等 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right…

Oracle如何快速删除表中重复的数据

方法一&#xff1a; 在Oracle中&#xff0c;你可以使用DELETE语句结合ROWID和子查询来删除重复的记录。以下是一个示例&#xff1a; DELETE FROM your_table WHERE ROWID NOT IN (SELECT MAX(ROWID)FROM your_tableGROUP BY column1, column2, ... -- 列出用于判断重复的列 )…