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

news2024/9/23 23:21:34

一、介绍

        在这篇文章中,我们将重点介绍 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.coloradmin.cn/o/1228431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将word中的表格无变形的弄进excel中

在上篇文章中记录了将excel表拷贝到word中来: 记录将excel表无变形的弄进word里面来-CSDN博客 本篇记录:将word中的表格无变形的弄进excel中。 1.按F12,“另存为...”,保存类型:“单个文件页面”,保存。…

Java读写Jar

Java提供了读写jar的类库Java.util.jar,Java获取解析jar包的工具类如下: import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import java.util.HashMap; import …

【C++入门到精通】新的类功能 | 可变参数模板 C++11 [ C++入门 ]

阅读导航 引言一、新的类功能1. 默认成员函数2. 类成员变量初始化3. 强制生成默认函数的关键字default4. 禁止生成默认函数的关键字delete5. override 和 final(1)override(2)final 二、可变参数模板递归函数方式展开参数包逗号表…

C# Winform围棋棋盘

C# Winform简单的围棋棋盘vs2008winform小游戏C#vs2010winform棋盘C#窗体小游戏 这是一个简单的围棋棋盘小游戏,使用C# Winform编写棋盘界面,玩家可以在空白的交叉点上下棋子 项目获取: 项目获取:typora: typora/img (gitee.co…

支付宝沙箱支付

支付宝沙箱支付 支付宝沙箱(Alipay Sandbox)是支付宝提供的一个模拟环境,用于开发者在不影响真实交易的情况下进行支付宝相关功能的测试和调试。在软件开发中,沙箱环境通常指的是一个隔离的测试环境,可以模拟真实环境…

【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…

Python 自动化(十八)admin后台管理

admin后台管理 什么是admin后台管理 django提供了比较完善的后台数据库的接口,可供开发过程中调用和测试使用 django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发使用 admin配置步骤 创建后台管理账号 该账号为管理后…

2023年中职“网络安全“—Web 渗透测试①

2023年中职"网络安全"—Web 渗透测试① Web 渗透测试任务环境说明:1.访问地址http://靶机IP/task1,分析页面内容,获取flag值,Flag格式为flag{xxx};2.访问地址http://靶机IP/task2,访问登录页面。…

【每日一题】三个无重叠子数组的最大和

文章目录 Tag题目来源题目解读解题思路方法一:滑动窗口 写在最后 Tag 【滑动窗口】【数组】【2023-11-19】 题目来源 689. 三个无重叠子数组的最大和 题目解读 解题思路 方法一:滑动窗口 单个子数组的最大和 我们先来考虑一个长度为 k 的子数组的最…

【开源】基于Vue.js的创意工坊双创管理系统

项目编号: S 049 ,文末获取源码。 \color{red}{项目编号:S049,文末获取源码。} 项目编号:S049,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、…

leetcode算法之分治-快排

目录 1.颜色分类2.排序数组3.数组中的第k个最大元素4.最小的k个数 1.颜色分类 颜色分类 class Solution { public:void sortColors(vector<int>& nums) {int n nums.size();int left -1,rightn,i0;while(i<right){if(nums[i] 0) swap(nums[left],nums[i]);e…

力扣 字母异位词分组 哈表 集合

&#x1f468;‍&#x1f3eb; 力扣 字母异位词分组 ⭐ 思路 由于互为字母异位词的两个字符串包含的字母相同&#xff0c;因此对两个字符串分别进行排序之后得到的字符串一定是相同的&#xff0c;故可以将排序之后的字符串作为哈希表的键。 &#x1f351; AC code class Solut…

设计模式-行为型模式-策略模式

一、什么是策略模式 策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法或行为&#xff0c;并将其封装成独立的对象&#xff0c;使得这些算法或行为可以相互替换&#xff0c;而不影响使用它们的客户端。&#xff08;ChatGPT生成&#xff09; 主要组成部分&#xff…

一款实用的.NET Core加密解密工具类库

前言 在我们日常开发工作中&#xff0c;为了数据安全问题对数据加密、解密是必不可少的。加密方式有很多种如常见的AES&#xff0c;RSA&#xff0c;MD5&#xff0c;SAH1&#xff0c;SAH256&#xff0c;DES等&#xff0c;这时候假如我们有一个封装的对应加密解密工具类可以直接…

【STL】:反向迭代器

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关反向迭代器的模拟实现&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

【kafka】使用docker启动kafka

1.环境准备 docker拉取zookeeper镜像 docker pull zookeeper:3.4.14 创建zookeeper容器&#xff0c;默认端口号为2181 docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14 拉取kafka镜像 docker pull wurstmeister/kafka:2.12-2.3.1 创键kafka容器&#xff…

c语言-输入输出详解

文章目录 格式化输入输出占位符printfscanf 字符串输入输出puts&#xff08;&#xff09;gets&#xff08;&#xff09; 字符输入输出putchar&#xff08;&#xff09;getchar&#xff08;&#xff09; 区别 格式化输入输出 输入输出的库函数的头文件&#xff1a; #include<…

2023/11/19总结

项目进度&#xff1a; 地址管理&#xff1a; 显示菜品 购物车相关功能 然后最近在看 支付宝沙盒支付的相关功能&#xff0c;打算把支付给做了 。界面做的不是很好看 &#xff0c;但是后续会改成 手机端的。

WSL 2 更改默认安装的 Linux 发行版

目录 什么是 WSL 2&#xff1f;更改默认安装的 Linux 发行版更改发行版的 WSL 版本 什么是 WSL 2&#xff1f; WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本&#xff0c;它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的…

基于SSM的北海旅游网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…