学习人工智能:Attention Is All You Need-2-Transformer模型;Attention机制;位置编码

3.2 注意力机制Attention


注意力函数可以描述为将查询和一组键值对映射到输出的过程,其中查询、键、值和输出都是向量。输出被计算为值的加权和,其中每个值的权重由查询与相应键的兼容性函数计算得出。

3.2.1 缩放点积注意力 Scaled Dot-Product Attention


我们将我们特定的注意力机制称为“缩放点积注意力”(图2)。输入包括维度为dk的查询和键,以及维度为dv的值。我们计算查询与所有键的点积,每个都除以√dk,然后应用softmax函数来获得值上的权重。

在实践中,我们同时对一组查询计算注意力函数,并将它们打包成矩阵Q。键和值也打包成矩阵K和V。我们计算输出的矩阵为:

最常用的两种注意力函数是加性注意力[2]和点积(乘性)注意力。点积注意力与我们的算法相同,除了缩放因子1/√dk。加性注意力使用一个具有单个隐藏层的前馈网络来计算兼容性函数。虽然这两种注意力函数在理论复杂度上相似,但点积注意力在实践中更快且空间效率更高,因为它可以使用高度优化的矩阵乘法代码实现。

对于较小的dk值,这两种机制的表现相似,但对于较大的dk值,没有缩放的加性注意力表现优于点积注意力[3]。我们怀疑对于较大的dk值,点积的幅度会变得很大,将softmax函数推向梯度极小的区域4。为了抵消这种影响,我们将点积缩放了1/√dk。

3.2.2 多头注意力Multi-Head Attention

与其使用具有dmodel维度的键、值和查询来执行单一的注意力函数,我们发现将查询、键和值分别通过h次不同的学习线性投影,线性投影到dk、dk和dv维度上是有益的。然后,我们在这些投影后的查询、键和值的每个版本上并行执行注意力函数,得到dv维度的输出值。这些输出值被拼接起来,并再次进行投影,得到最终的值,如图2所示。

多头注意力允许模型在不同的位置同时关注来自不同表示子空间的信息。使用单个注意力头时,平均值会抑制这种效果。

其中,投影是参数矩阵Wi^Q ∈ R^(dmodel×dk)、Wi^K ∈ R^(dmodel×dk)、Wi^V ∈ R^(dmodel×dv) 和 WO ∈ R^(hdv×dmodel)。

在这项工作中,我们使用了h = 8个并行的注意力层,或称为“头”。对于每一个头,我们使用dk = dv = dmodel/h = 64。由于每个头的维度减少,总计算成本与具有完整维度的单头注意力相似。

3.2.3 注意力机制在模型中的应用


Transformer以三种不同的方式使用多头注意力:

• 在“编码器-解码器注意力”层中,查询来自上一解码器层,而记忆键和值则来自编码器的输出。这使得解码器中的每个位置都可以关注输入序列中的所有位置。这模仿了序列到序列模型(如[31, 2, 8])中的典型编码器-解码器注意力机制。

• 编码器包含自注意力层。在自注意力层中,所有的键、值和查询都来自同一位置,在这种情况下,它们来自编码器中前一层的输出。编码器中的每个位置都可以关注编码器中前一层中的所有位置。

• 类似地,解码器中的自注意力层允许解码器中的每个位置关注解码器中直到并包括该位置的所有位置。我们需要防止解码器中的信息向左流动,以保持自回归属性。我们在缩放点积注意力内部通过屏蔽(设置为−∞)softmax输入中对应于非法连接的所有值来实现这一点。请参阅图2。

3.3 位置前馈网络Position-wise Feed-Forward Networks

除了注意力子层外,编码器和解码器中的每一层都包含一个全连接的前馈网络,该网络分别且相同地应用于每个位置。这包括两个线性变换,中间有一个ReLU激活函数。

尽管线性变换在不同位置上是相同的,但它们从一层到另一层使用不同的参数。另一种描述方式是将其视为两个核大小为1的卷积。输入和输出的维度是dmodel = 512,而中间层的维度是dff = 2048。

3.4 嵌入和Softmax Embeddings and Softmax

与其他序列转换模型类似,我们使用学习的嵌入来将输入标记和输出标记转换为dmodel维度的向量。我们还使用通常的线性变换和softmax函数来将解码器输出转换为预测的下一个标记概率。在我们的模型中,我们在两个嵌入层和pre-softmax线性变换之间共享相同的权重矩阵。在嵌入层中,我们将这些权重乘以√dmodel。

3.5 位置编码Positional Encoding

由于我们的模型不包含循环和卷积,为了让模型能够利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈的底部向输入嵌入添加“位置编码”。位置编码与嵌入具有相同的维度dmodel,因此可以将两者相加。位置编码有很多选择,可以是学习的也可以是固定的[8]。

在这项工作中,我们使用不同频率的正弦和余弦函数作为位置编码:

其中,pos表示位置,i表示维度。也就是说,位置编码的每个维度都对应一个正弦波。这些正弦波的波长从2π到10000 · 2π形成几何级数。

我们选择这个函数是因为我们假设它能使模型更容易地学会根据相对位置进行关注,因为对于任何固定的偏移量k,P Epos+k都可以表示为P Epos的线性函数。

我们还尝试使用学习的位置嵌入[8]进行实验,发现这两种版本产生了几乎相同的结果(参见表3第(E)行)。我们选择正弦波版本是因为它可能允许模型外推到比训练过程中遇到的序列更长的长度。

4 为什么是自注意力Why Self-Attention

在本节中,我们将从多个方面比较自注意力层与常用于将一个可变长度的符号表示序列(x1, ..., xn)映射到另一个等长序列(z1, ..., zn)的循环和卷积层,其中xi, zi ∈ Rd,如典型序列转换编码器或解码器中的隐藏层。为了说明我们使用自注意力的原因,我们考虑了三个要求。

一个是每层的总计算复杂度。

另一个是可以并行化的计算量,这通过所需的最少顺序操作数来衡量。

第三个是网络中长期依赖关系的路径长度。学习长期依赖关系在许多序列转换任务中是一个关键挑战。影响学习这种依赖关系能力的一个关键因素是前向和后向信号在网络中必须遍历的路径长度。输入和输出序列中任意位置组合之间的这些路径越短,学习长期依赖关系就越容易。因此,我们还将比较由不同类型层组成的网络中任意两个输入和输出位置之间的最大路径长度。

如表1所示,自注意力层通过固定数量的顺序执行操作连接所有位置,而循环层则需要O(n)个顺序操作。在计算复杂度方面,当序列长度n小于表示维度d时,自注意力层比循环层更快。这在机器翻译中最先进的模型所使用的句子表示中通常是这种情况,例如单词片段和字节对表示。为了提高涉及非常长序列的任务的计算性能,自注意力可以限制为仅考虑以相应输出位置为中心的输入序列大小为r的邻域。这将使最大路径长度增加到O(n/r)。我们计划在未来的工作中进一步研究这种方法。

具有核宽度k < n的单个卷积层不会连接所有输入和输出位置对。在连续核的情况下,要这样做需要堆叠O(n/k)个卷积层,或在扩张卷积[15]的情况下需要O(logk(n))个,这会增加网络中任意两个位置之间的最长路径长度。卷积层通常比循环层贵k倍。然而,可分离卷积[6]大大降低了复杂性,变为O(k · n · d + n · d^2)。即使k = n,可分离卷积的复杂性也等于我们模型中采用的自注意力层和逐点前馈层的组合。

作为附带的好处,自注意力可能会产生更具可解释性的模型。我们检查模型中的注意力分布,并在附录中呈现和讨论示例。不仅单个注意力头显然学会了执行不同的任务,而且许多注意力头似乎表现出与句子的句法和语义结构相关的行为。

Ankie的评论:

相比较之前RNN等方案,attention机制非常善于处理token之间的关系。而且运算量比RNN小很多。最终实验结果证明 transformer明显提高了机器翻译的准确率。

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

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

相关文章

鸿蒙Harmony应用开发—ArkTS-@AnimatableExtend装饰器:定义可动画属性

AnimatableExtend装饰器用于自定义可动画的属性方法&#xff0c;在这个属性方法中修改组件不可动画的属性。在动画执行过程时&#xff0c;通过逐帧回调函数修改不可动画属性值&#xff0c;让不可动画属性也能实现动画效果。 可动画属性&#xff1a;如果一个属性方法在animation…

无插件网页视频播放器,支持图像绘制(包含方格子、方框等),支持音视频播放、支持录像截图,提供源码下载

前言 本播放器内部采用jessibuca插件接口&#xff0c;支持录像、截图、音视频播放等功能。播放器播放基于ws流&#xff0c;图像绘制操作&#xff1a;1&#xff09;支持绘制方格子&#xff0c;用于监控移动检测画框&#xff1b;2&#xff09;支持绘制不透明方框&#xff0c;用于…

macOS下Java应用的打包和安装程序制作

文章目录 macOS应用程序结构Java应用打包JavaAppLauncherjpackage其它相关JDK命令附录JavaAppLauncher源码链接macOS应用程序结构 macOS通常以dmg或pkg作为软件发行包,安装到/Applications下后,结构比较统一。 info.plist里的CFBundleExecutable字段可以指定入口,如果不指定…

基于JavaWeb+BS架构+SpringBoot+Vue+O2O生鲜食品订购小程序系统的设计和实现

基于JavaWebBS架构SpringBootVueO2O生鲜食品订购小程序系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图 文末获取源码 Lun文目录 目 录 摘 要 I Abstract II 1 绪 论 1 1.1课题研究背景及意义 1 1.2研究现状 1 1.3本论文的主要论文结构 3 2系统相关技术…

【工具使用】VScode如何设置中文环境

操作步骤 1.1 安装中文插件 1.2 设置为中文&#xff0c;然后重启 按照插件的使用方法介绍设置中文&#xff1a; 按下“CtrlShiftP”组合键以显示“命令面板”&#xff1a; 输入“dispaly”&#xff0c;选择“Configure Display Language”&#xff1a; 选择“中文简体” …

使用Python和OpenFOAM进行流体力学模拟的基础示例

流体力学模拟通常涉及复杂的数学方程和数值方法&#xff0c;例如计算流体动力学(CFD)。OpenFOAM是一个开源的CFD工具箱&#xff0c;它使用C编写&#xff0c;但可以通过Python脚本进行自动化和定制。 以下是一个简单的示例&#xff0c;展示如何使用Python和OpenFOAM进行流体力学…

【练习】双指针算法思想

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Java算法&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1. 移动零 1.1 题目描述 1.2 讲解算法原理 1.3 编…

代码随想录 动态规划-子序列问题-子序列(连续)

目录 674.最长连续递增序列 718.最长重复子数组 53.最大子数组和 674.最长连续递增序列 674. 最长连续递增序列 简单 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&…

数字孪生底层技术框架

数字孪生是一种将现实世界中的物理实体、过程或系统数字化并映射到计算机模型中的方法。它在数学建模与仿真方面具有重要作用&#xff0c;为了实现数字孪生&#xff0c;以下是一些底层技术框架和方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业…

企业网络基础设施物理安全面临全新挑战

企业网络基础设施的物理安全是确保业务连续性和数据完整性的关键组成部分。随着技术的发展和环境的变化&#xff0c;这些基础设施面临着新的挑战。以下是一些主要的挑战和的解决方案 一、机房、仓库、档案馆物理安全事件频发的挑战&#xff1a; 1.电力安全事件&#xff1a;市…

AI智能分析网关V4在养老院视频智能监控场景中的应用

随着科技的快速发展&#xff0c;智能监控技术已经广泛应用于各个领域&#xff0c;尤其在养老院这一特定场景中&#xff0c;智能监控方案更是发挥着不可或缺的作用。尤其是伴随着社会老龄化趋势的加剧&#xff0c;养老院的安全管理问题也日益凸显。为了确保老人的生活安全&#…

没有磁盘整列下的多机分布式存储:使用rysnc+多服务器文件/文件夹内容同步

目录 0.为什么要定时同步 1.程序安装 2.文件夹设置rsync使用 3.使用cron进行定时任务 0.为什么要定时同步 作为科研党&#xff0c;实验室有多个服务器&#xff0c;但是都是分批买的没有上磁盘整列&#xff0c;所以一个服务器上跑的东西并不能同步&#xff0c;有时候挂任务要…

第十二届蓝桥杯省赛CC++ 研究生组-异或数列

solution1&#xff08;通过0%&#xff09; 没看懂怎么是必胜或必败局面(˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ ) #include<iostream> typedef long long ll; const int maxn 200010; ll x[maxn]; int main(){int t, n;ll a, b, turn;scanf("%d", &t);while(t--){…

vue的优缺点有那些 组件常用的有那些?

优点&#xff1a; 组件化开发&#xff0c;提升效率&#xff0c;方便复用&#xff0c;便于协同开发单页面路由易于结合其他的第三方库丰富的api方法轻量高效,虚拟DOMMVVM&#xff0c;数据驱动视图轻量级的框架 缺点&#xff1a; 缺少高阶教程和文档生态环境不如angular和re…

Vscode初建Vue时几个需要注意的问题

首先放图 注意点1.打开文件夹时&#xff0c;可以是VUE2 或者其他&#xff0c;但不能是VUE&#xff0c;会报错 注意点2.终端输入命令“npm init -y" npm init -y -y 的含义&#xff1a;yes的意思&#xff0c;在init的时候省去了敲回车的步骤&#xff0c;生成的默认的packag…

AI智能分析网关V4在非煤矿山安全生产视频智能监管场景中的应用

近年来&#xff0c;全国非煤矿山&#xff08;&#xff08;含金属非金属矿山、尾矿库&#xff0c;以及矿泉水等其他矿山&#xff09;安全生产工作取得明显成效&#xff0c;但安全基础仍然薄弱&#xff0c;事故总量仍然较大&#xff0c;重特大事故尚未得到根本遏制&#xff0c;安…

linux之sed编辑器指令练习

目录 一、sed编辑器 二、sed使用案例 1.1 s命令&#xff08;substitute替换&#xff09; 一、sed编辑器 sed编辑器比交互式编辑器快的多&#xff0c;可以简化数据处理任务,sed编辑器并不会修改文件&#xff0c;只会将修改后的数据&#xff0c;输出。 二、sed使用案例 首先…

Carla 自动驾驶挑战赛 搭建环境

1. 系统设置 1.1 下载CARLA排行榜包 下载打包的CARLA 排行榜版本。 将包解压到一个文件夹中&#xff0c;例如 CARLA。 在以下命令中&#xff0c;更改${CARLA_ROOT}变量以对应于您的 CARLA 根文件夹。 为了使用 CARLA Python API&#xff0c;您需要在您喜欢的环境中安装一些…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十二&#xff09; 43、sqlite3_reset sqlite3_reset 函数用于重置已经编…

uniapp安装axios

先npm安装 npm i axios然后在项目里面建一个utils文件&#xff0c;再建一个index.js 以下是index.js代码&#xff1a; import axios from axios; const service axios.create({baseURL: //xxxx.xxxxx.com///你的请求接口域名, timeout: 6000, // request timeoutcrossDomai…