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

一、介绍

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

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

相关文章

某60区块链安全之不安全的随机数实战一

区块链安全 文章目录 区块链安全不安全的随机数实战一实验目的实验环境实验工具实验原理实验内容攻击过程分析合约源代码漏洞EXP利用 不安全的随机数实战一 实验目的 学会使用python3的web3模块 学会以太坊不安全的随机数漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工…

黑马程序员 计算机网络(笔记)

参考文章:【黑马程序员】计算机网络概述~ 程序员必须掌握的入门基础知识! 参考文章:黑马程序员Linux运维工作场景解决方案零基础到就业 参考文章:网络安全运维进阶教程,运维工程师深度学习教程 文章目录 linux入门到…

GIT无效的源路径/URL

ssh-add /Users/haijunyan/.ssh/id_rsa ssh-add -K /Users/haijunyan/.ssh/id_rsa

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

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

JAVA小游戏拼图

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下: package heima; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import …

SpringCloud 微服务全栈体系(十四)

第十一章 分布式搜索引擎 elasticsearch 四、RestAPI ES 官方提供了各种不同语言的客户端,用来操作 ES。这些客户端的本质就是组装 DSL 语句,通过 http 请求发送给 ES。官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/…

nodejs微信小程序-实验室上机管理系统的设计与实现-安卓-python-PHP-计算机毕业设计

用户:管理员、教师、学生 基础功能:管理课表、管理机房情况、预约机房预约;权限不同,预约类型不同,教师可选课堂预约和个人;课堂预约。 目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 …

nodejs+vue实验室上机管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

用户:管理员、教师、学生 基础功能:管理课表、管理机房情况、预约机房预约;权限不同,预约类型不同,教师可选课堂预约和个人;课堂预约。 在实验室上机前,实验室管理员需要对教务处发来的上机课表…

SpringBoot常见注解

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…

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…

全新云开发工具箱:融合多项功能的微信小程序源码解决方案

全新云开发工具箱&#xff1a;融合多项功能的微信小程序源码解决方案 这款微信小程序源码提供了超过40个功能&#xff0c;集合了各种实用工具&#xff0c;成为一款全能工具箱。这些功能包括证件照制作、垃圾分类查询、个性签名制作、二维码生成、文字九宫格、手持弹幕、照片压…

2023.11.17 关于 Spring Boot 日志文件

目录 日志文件作用 常见的日志框架说明 门面模式 日志的使用 日志的级别 六种级别 日志级别的设置 日志的持久化 使用 Lombok 输出日志 实现原理 普通打印和日志的区别 日志文件作用 记录 错误日志 和 警告日志&#xff08;发现和定位问题&#xff09;记录 用户登录…