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

news/2024/5/9 4:44:42/文章来源:https://blog.csdn.net/ank1983/article/details/136931724

3.2 注意力机制Attention


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

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

**dot-product点积 通过矩阵乘法实现。

**softmax:在深度学习中,Softmax函数常用于神经网络的输出层,以将原始的输出值转化为概率分布,从而使得每个类别的概率值在0到1之间,并且所有类别的概率之和为1。这使得Softmax函数特别适用于多类分类问题,其中模型需要预测输入样本属于多个可能类别中的哪一个。

我们将我们特定的注意力机制称为“缩放点积注意力”(图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。由于每个头的维度减少,总计算成本与具有完整维度的单头注意力相似。

权重矩阵 (W) 是通过模型训练学习得到的。

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


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

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

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

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

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

在深度学习的领域里,Feed-Forward(前馈)是一个神经网络模块,由全连接层(FC)与激活函数(如ReLu)组成,通常用于处理序列数据或在深度学习模型的前馈过程中。在Transformer这类模型中,前馈全连接层是一个具有两层线性层的全连接网络,其作用是通过增加两层网络来增强模型的能力,以考虑注意力机制可能对复杂过程的拟合程度不够的问题。

除了注意力子层外,编码器和解码器中的每一层都包含一个全连接的前馈网络,该网络分别且相同地应用于每个位置。这包括两个线性变换,中间有一个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.luyixian.cn/news_show_1026182.aspx

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

相关文章

Python——jieba优秀的中文分词库(基础知识+实例)

Hello&#xff0c;World&#xff01; 从去年开始学习Python&#xff0c;在长久的学习过程中&#xff0c;发现了许多有趣的知识&#xff0c;不断充实自己。今天我所写的内容也是极具趣味性&#xff0c;关于优秀的中文分词库——jieba库。 &#x1f3d4;关于Jieba &#x1f412;…

BUG定位---一起学习吧之测试

判断一个BUG是前端还是后端的&#xff0c;通常需要根据BUG的具体表现、发生的环境以及相关的技术栈来进行分析。以下是一些常用的判断方法&#xff1a; 错误发生的位置&#xff1a; 如果BUG涉及的是页面的布局、样式、交互效果等&#xff0c;那么很可能是前端的BUG。如果BUG与…

鸿蒙HarmonyOS应用开发之NDK工程构建概述

OpenHarmony NDK默认使用CMake作为构建系统&#xff0c;随包提供了符合OpenHarmony工具链的基础配置文件 ohos.toolchain.cmake &#xff0c;用于预定义CMake变量来简化开发者配置。 常用的NDK工程构建方式有&#xff1a; 从源码构建 源码构建也有不同方式&#xff1a; 可以使…

29---Nor Flash电路设计

视频链接 Nor Flash硬件电路设计01_哔哩哔哩_bilibili NOR FLASH电路设计 1、NOR FLASH介绍 NOR Flash最早是由Intel公司于1988年开发出的。 NOR Flash虽容量小但速度快,最大特点是支持芯片内执行&#xff08;XIP&#xff09;&#xff0c;即程序可以直接在NOR flash的片内…

Spring Cloud Gateway Server MVC

之前你如果要用spring cloud gateway &#xff0c;就必须是webflux 的&#xff0c;也就是必须是异步响应式编程。不能和spring mvc 一起使用。现在spring cloud 新出了一个可以不用webflux的gateway。 具体使用mvc的gateway步骤如下 普通的Eureka Client的项目 如果你只是想测…

前端Webpack5高级进阶课程

课程介绍 本套视频教程主要内容包含React/Vue最新版本脚手架分析、基于Webpack5编写自己的loader和plugin等&#xff0c;让你开发时选择更多样&#xff0c;最后&#xff0c;用不到一百行的代码实现Webpack打包。通过本套视频教程的学习&#xff0c;可以帮你彻底打通Webpack的任…

CCleaner2024最新版本win系统清理工具功能介绍及下载

CCleaner是一款在计算机领域广受欢迎的系统清理和优化工具。它以其强大的功能、简洁的操作界面和显著的效果&#xff0c;赢得了众多用户的青睐。下面&#xff0c;我将从功能、特点、使用方法以及优势等方面对CCleaner进行详细介绍。 CCleaner下载如下&#xff1a; https://wm.…

一题学会BFS和DFS,手撕不再怕

先复习一下什么是BFS和DFS&#xff0c;各位读者接着往下看就行 BFS算法 BFS类似于树的层次遍历过程,从根节点开始&#xff0c;沿着树的宽度遍历树的节点。如果所有节点均被访问&#xff0c;则算法中止。 舍去空间换时间。 算法思路队列&#xff08;先进先出&#xff09; 1…

红外遥控器的使用和详细解释

infrared.c #include "infrared.h"/* 红外 --- PA8*/void Infrared_Init(void) {GPIO_InitTypeDef GPIO_InitStruct; EXTI_InitTypeDef EXTI_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;//使能SYSCFG时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, E…

如何绕过CDN查真实IP

1.多地ping看是否有cdn 2.邮件订阅或者rss订阅 二级域名可能不会做cdnnslookup http://xxx.com 国外dns查找域名历史解析记录&#xff0c;因为域名在上CDN之前用的IP&#xff0c;很有可能就是CDN的真实源IP地址6.phpinfo上显示的信息 cloudflare github可以获取真实IP一个网站…

JAVA电商平台 免 费 搭 建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

在数字化时代&#xff0c;电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念&#xff0c;为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端&#xff0c;包括平台管理、商家端、买家平台、微服务平台等&#xff0c;涵盖了pc端、…

鸿蒙雄起!风口就在当下,你如何抉择?

近年来&#xff0c;华为自主研发的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;引起了广泛的关注和讨论。鸿蒙系统不仅标志着华为在软件领域的一次重大突破&#xff0c;也预示着全球智能设备市场格局的潜在变化。本文将深入探讨鸿蒙系统的兴起、其在市场上的表现以及对程序员…

【技巧】PyTorch限制GPU显存的可使用上限

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 从 PyTorch 1.4 版本开始&#xff0c;引入了一个新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device)&#xff0c;这个功能允许用户为特定的 GPU 设备设置进程可使用的显存上限比例。 测试代…

第十篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作Excel

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列博文目录 前言一、重要作用解说二、Python操作Excel的常用库介绍三、数据处理和分析示例代码四、自动化报表生成示例代码五、数据导入和导出示例代码六、数据可视化示例代码八、数据校验和清洗示例代码九、…

开源项目ChatGPT-Next-Web的容器化部署(二)-- jenkins CI构建并推送镜像

一、背景 接着上文已制作好了Dockerfile&#xff0c;接下来就是docker build/tag/push等一系列操作了。 不过在这之前&#xff0c;你还必须在jenkins等CI工具中&#xff0c;拉取源码&#xff0c;然后build构建应用。 因为本文的重点不是讲述jenkins ci工具&#xff0c;所以只…

【动手学深度学习】深入浅出深度学习之线性神经网络

目录 &#x1f31e;一、实验目的 &#x1f31e;二、实验准备 &#x1f31e;三、实验内容 &#x1f33c;1. 线性回归 &#x1f33b;1.1 矢量化加速 &#x1f33b;1.2 正态分布与平方损失 &#x1f33c;2. 线性回归的从零开始实现 &#x1f33b;2.1. 生成数据集 &#x…

优酷造车!影视制作车实现片场协同办公、实时粗剪

3月28日&#xff0c;第十一届中国网络视听大会在成都开幕&#xff0c;会场外&#xff0c;一台长12米的“变形金刚”吸引了众多与会嘉宾。这是优酷发布的行业首款影视制作车&#xff0c;该车为导演和后期工种提供一站式软硬件服务和舒适的集体办公环境。优酷工作人员介绍&#x…

centos中安装docker启动chatwoot

安装docker 1.首先&#xff0c;确保系统处于最新状态&#xff1a; yum update2.安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm23.添加 Docker 的官方 GPG 密钥&#xff1a; yum-config-manager --add-repo https://download.docker.com/linux/cent…

OCR研究背景及相关论文分享

光学字符识别&#xff08;Optical Character Recognition&#xff0c;OCR&#xff09;是指使用光学方法将图像中的文字转换为机器可编辑的文本的技术。OCR技术的研究和应用已有数十年的历史&#xff0c;其背景和发展受到多方面因素的影响。 技术需求背景 1.自动化文档处理&am…

数据结构/C++:位图 布隆过滤器

数据结构/C&#xff1a;位图 & 布隆过滤器 位图实现应用 布隆过滤器实现应用 哈希表通过映射关系&#xff0c;实现了O(1)的复杂度来查找数据。相比于其它数据结构&#xff0c;哈希在实践中是一个非常重要的思想&#xff0c;本博客将介绍哈希思想的两大应用&#xff0c;位图…