transformer位置编码最详细的解析

news2024/11/29 10:46:41

位置编码positional encoding

    • 1. 位置编码是什么,为什么需要它?
    • 2. transformer提出的位置编码方法
    • 3. 直觉
    • 4. 其他细节
    • 5. 相对位置
    • 6. 常见问题解答

1. 位置编码是什么,为什么需要它?

位置和词语的顺序是任何语言的重要组成部分。它们定义了语法,从而决定了句子的实际语义。循环神经网络(RNN)本质上考虑了词语的顺序;它们按照顺序逐个解析句子中的词语。这样可以将词语的顺序整合到RNN的主干中。

但是Transformer架构放弃了循环机制,转而采用多头自注意机制,避免了RNN的循环方法,大大加快训练时间。从理论上讲,它可以捕捉到句子中更长的依赖关系。

由于句子中的每个词语同时通过Transformer的编码器/解码器堆栈,模型本身对于每个词语的位置/顺序没有任何概念。因此,我们需要一种方法将词语的顺序融入到我们的模型中。

为了使模型具有一定的顺序感,一种可能的解决方案是为每个词语添加关于其在句子中位置的信息。我们称这个“信息片段”为位置编码。

一个方法是为每个时间步分配一个在[0, 1]范围内的数字,其中0表示第一个词,1表示最后一个时间步。它引入的一个问题是无法确定在特定范围内有多少个词。换句话说,时间步的差值在不同句子中没有一致的含义。

另一个方法是线性地为每个时间步分配一个数字。也就是说,第一个词被赋予“1”,第二个词被赋予“2”,依此类推。这种方法的问题是,不仅值可能变得非常大,而且我们的模型可能面临比训练中的句子更长的句子。此外,我们的模型可能不会看到具有特定长度的任何样本,这会影响我们模型的泛化能力。

理想情况下,应满足以下几个条件:
它应为每个时间步(词语在句子中的位置)输出一个唯一的编码。
不同长度的句子之间的任意两个时间步之间的距离应保持一致。
我们的模型应能适应更长的句子而不需要额外的努力。其值应该受到限制。
它必须是确定性的。

2. transformer提出的位置编码方法

作者提出的编码方法是一种简单而巧妙的技术,满足上述所有标准。首先,它不是一个单独的数字,而是一个包含有关句子中特定位置信息的d维向量。其次,这种编码并没有集成到模型本身中。相反,这个向量用于为每个单词提供关于其在句子中位置的信息。换句话说,我们增强了模型的输入,注入了单词的顺序。

假设t是输入句子中的目标位置,在这里插入图片描述是其对应的编码,d是编码的维度(其中 d≡2 0)。那么在这里插入图片描述将是产生输出向量在这里插入图片描述的函数,定义如下:
在这里插入图片描述
其中
在这里插入图片描述

从函数定义中可以得出,频率沿着向量维度递减。因此,它形成了从2
π到的10000⋅2π几何级数。

您还可以将位置嵌入在这里插入图片描述想象为一个包含每个频率的正弦和余弦对的向量(注意d可被2整除):
在这里插入图片描述

3. 直觉

这些正弦和余弦的组合如何表示位置/顺序?实际上非常简单,假设想以二进制格式表示一个数字,那么会是什么样子?
在这里插入图片描述

观察不同位之间的变化率。最低有效位(LSB)在每个数字上交替变化,次低位在每两个数字上旋转,依此类推。

但在浮点数世界中使用二进制值会浪费空间。因此,我们可以使用它们的浮点连续对应物——正弦函数。事实上,它们等同于交替位。而且,通过降低它们的频率,我们可以从红色位过渡到橙色位。
在这里插入图片描述

4. 其他细节

之前提过,位置编码用于为输入的单词提供位置信息。但是它是如何实现的呢?事实上,原始论文在实际嵌入之上添加了位置编码。对于句子[w1,…wn]中的每个单词wt,计算对应的嵌入并馈送给模型的过程如下:
在这里插入图片描述
为了使这个求和过程成立,我们保持位置编码的维度与单词嵌入的维度相等,即dword embedding=dpostional embedding

5. 相对位置

正弦余弦位置编码的另一个特点是它能够轻松地关注相对位置。以下是原始论文中的一句引用:

我们选择这个函数是因为我们假设它能够使模型轻松地学习通过相对位置进行关注,因为对于任何固定的偏移量k,PEpos+k可以表示为PEpos的线性函数。
为什么呢?因为对于每个对应于频率的正弦余弦对,存在一个线性变换在这里插入图片描述(与t无关)满足以下等式:
在这里插入图片描述
证明:
M为 2×2的矩阵,我们想要找到u1,v1,u2和v2使得:
在这里插入图片描述

通过应用加法定理,我们可以将右边展开如下:
在这里插入图片描述
从而得到以下两个方程:
在这里插入图片描述
通过解上述方程,我们得到:
在这里插入图片描述

因此,最终的变换矩阵M为:
在这里插入图片描述

可以看到,最终的变换不依赖于t。可以找到与旋转矩阵非常相似的矩阵M

类似地,我们可以找到其他正弦余弦对的M,最终允许我们表示为在这里插入图片描述对于任何固定偏移量ϕ的线性函数在这里插入图片描述。这个特性使得模型能够轻松地学习通过相对位置进行关注。

正弦余弦位置编码的另一个特性是相邻时间步之间的距离是对称的,并且随时间衰减得很好。
在这里插入图片描述

6. 常见问题解答

1. 为什么位置编码与词嵌入相加而不是连接起来?
我没有找到这个问题的理论原因。由于相加(与连接相比)可以节省模型的参数,所以将初始问题改为“将位置编码添加到单词中是否有任何缺点?”是合理的。我会说,不一定!
图2 会发现只有整个嵌入的前几个维度用于存储位置信息(嵌入维度为512,示例很小)。由于Transformer中的嵌入是从头开始训练的,参数可能设置为词的语义不会存储在前几个维度中,以避免干扰位置编码。
出于同样的原因,我认为最终的Transformer可以将词的语义与其位置信息分开。此外,没有理由将可分离性视为优势。也许相加为模型提供了一个良好的特征来源。

2. 位置信息在到达上层后不会消失吗?
Transformer架构配备了残差连接。因此,来自模型输入(包含位置编码)的信息可以有效地传播到处理更复杂交互的更深层。

3. 为什么同时使用正弦和余弦?
就个人而言,我认为只有同时使用正弦和余弦,我们才能将sin(x+k)和cos(x+k)表达为sin(x)和cos(x)的线性变换。似乎无法通过单一的正弦或余弦做到同样的事情。

参考文档:positional_encoding

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

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

相关文章

韩老师java教程

基础知识 进制 进制首位表示方式二进制0B十进制无八进制0十六进制0X 进制转换 x进制转十进制 正常,没什么问题 十进制转x进制 将该数不断除以x,直到商为0为止,然后将每一步得到的余数倒过来,就是对应的x进制 二进制转八进…

MySQL——单行处理函数和多行处理函数

数据处理函数: 单行处理函数:一个输入对应一个输出 多行处理函数:多个输入对应一个输出 单行处理函数: 将大写转换为小写:lower(); select lower(ename) as ename from emp; 将小写转换为大写:upper(); se…

软件测试工作中需要使用的工具

作为一个测试人员在日常工作中会使用到很多的工具,今天给大家分享一下这些工具。对软件测试、接口、自动化、性能测试和日常文档编写办公有帮助的网站。 接口测试大力推荐国产的接口测试工具:apipost,apipost还是一款很不错的接口文档生产工…

本地PC机通过SSH方式远程Jetson

1. 检测电脑是否安装openSSH 以管理员身份运行powershell终端输入以下命令: Get-WindowsCapability -Online | ? Name -like OpenSSH*若没有安装OpenSSH,会出现如下图提示: 输入Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.…

数智化,如何驱动高校的产教融合

高校数智驱动是指通过运用先进的技术和智能化的手段,推动高校的发展和创新。这包括利用大数据分析、人工智能、物联网等技术来提高高校的管理效率、教学质量和科研水平。 高校实施数智驱动考虑的几个方面 (1)建立数据驱动的决策机制&#xf…

计算机网络第三节物理层

一,第二章 物理层(数据通信有关) 1.物理层引入的目的 屏蔽掉传输介质的多样性,导致数据传输方式的不同;物理层的引入使得高层看到的数据都是统一的0,1构成的比特流 2.物理层如何实现屏蔽 物理层靠定义的不同的通信…

Spring系列文章1:Spring入门程序、集成Log4j2⽇志框架

一、什么是spring 一个java框架、java语言开发,轻量级、开源框架、在j2se、j2ee中都可以使用。它是一个管理对象的容器,Spring 容器不装文本,数字。装的是java对象。 核心技术:ioc、aop 官网地址 https://spring.io 项目列表…

山东理工,青岛理工傻傻分不清楚?进来对比考情

山东理工大学 考研难度(☆☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文991字,预计阅读:3分钟 2023考情概况 山东理工…

【代码实现】DETR原文解读及代码实现细节

1 模型总览 宏观上来说,DETR主要包含三部分:以卷积神经网络为主的骨干网(CNN Backbone)、以TRM(Transformer)为主的特征抽取及交互器以及以FFN为主的分类和回归头,如DETR中build()函数所示。DETR最出彩的地方在于&…

看了字节跳动月薪25K+测试岗面试题,让我这个工作2年的测试工程师,直冒冷汗....

朋友入职字节已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我整理了这份面试宝典,而我把它分享给伙伴们,面试&入职的经验! 大概是在8月中的时候他告诉我投递了字节跳动并且简历已通过,8月…

JavaScript - 一个好玩的打字动画

效果预览&#xff1a; <!DOCTYPE html> <html> <head><title>打字动画示例</title><style>.typewriter {color: #000;overflow: hidden; /* 隐藏溢出的文本 */white-space: nowrap; /* 不换行 */border-right: .15em solid #000; /* 添加…

IDEA中debug调试模拟时显示不全(不显示null)的解决

IDEA中debug调试模拟时显示不全&#xff08;不显示null&#xff09;的解决 1、在IDEA中找到File&#xff08;文件&#xff09;->Settings&#xff08;设置&#xff09; 2、依次找到以下内容进行设置&#xff08;原版、汉化版&#xff09;&#xff1a; 打开Build, Executio…

STL常用容器 (C++核心基础教程之STL容器详解)String的API

在C的标准模板库&#xff08;STL&#xff09;中&#xff0c;有多种容器可供使用。以下是一些常见的容器类型&#xff1a; 序列容器&#xff08;Sequential Containers&#xff09;&#xff1a; std::vector&#xff1a;动态数组&#xff0c;支持快速随机访问。 std::list&…

LLM大模型推理加速 vLLM;Qwen vLLM使用案例

参考&#xff1a; https://github.com/vllm-project/vllm https://zhuanlan.zhihu.com/p/645732302 https://vllm.readthedocs.io/en/latest/getting_started/quickstart.html ##文档 1、vLLM 这里使用的cuda版本是11.4&#xff0c;tesla T4卡 加速原理&#xff1a; Paged…

项目招标投标公众号小程序开源版开发

项目招标投标公众号小程序开源版开发 以下是一个招标投标公众号小程序的功能列表&#xff1a; 用户注册与登录&#xff1a;用户可以注册账号并登录公众号小程序。项目发布&#xff1a;用户可以发布招标项目的详细信息&#xff0c;包括项目名称、招标单位、项目描述、招标要求…

巨人互动|游戏出海H5游戏出海规模如何?

H5游戏出海是指将H5游戏推广和运营扩展到国外市场的行为&#xff0c;它的规模受到多个因素的影响。本文小编讲一些关于H5游戏出海规模的详细介绍。 1、市场规模 H5游戏出海的规模首先取决于目标市场的规模。不同国家和地区的游戏市场规模差异很大&#xff0c;有些市场庞大而成…

error:03000086:digital envelope routines::initialization error

项目背景 前端vue项目启动突然报错error:03000086:digital envelope routines::initialization error 我用的开发工具是vscode&#xff0c;node版本是v18.17.0 前端项目版本如下↓ 具体报错如下↓ 报错原因 node版本过高 解决方法 1输入命令 $env:NODE_OPTIONS"--op…

cron介绍

cron表达式在线生成 在使用定时调度任务的时候&#xff0c;我们最常用的&#xff0c;就是cron表达式了。通过cron表达式来指定任务在某个时间点或者周期性的执行。 cron表达式的组成 cron表达式是一个字符串&#xff0c;由6到7个字段组成&#xff0c;用空格分隔。其中前6个字…

融云观察:国内外社交应用差异分析,如何更快补齐功能和切换交互?

9 月 21 日&#xff0c;融云直播课 社交泛娱乐出海最短变现路径如何快速实现一款 1V1 视频社交应用&#xff1f; 欢迎点击上方小程序报名~ 本文中&#xff0c;我们将通过对 WhatsApp、微信、Telegram、Discord 几大社交软件的主要功能和交互体验对比&#xff0c;解析社交软件…

【AIGC专题】Stable Diffusion 从入门到企业级应用0414

一、前言 本文是《Stable Diffusion 从入门到企业级应用实战》系列的第四部分能力进阶篇《Stable Diffusion ControlNet v1.1 图像精准控制》的第0414篇 利用Stable Diffusion ControlNet 法线贴图模型精准控制图像生成。本部分内容&#xff0c;位于整个Stable Diffusion生态体…