transformer位置编码最详细的解析

位置编码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.mzph.cn/news/68208.shtml

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

相关文章

STM32f103入门(4)对射式红外传感器计次(外部中断)

中断:在主程序运行过程中,出现了特定的中断触发条件 (中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进…

useRef 定义的 ref 在控制台可以打印但是页面不生效?

useRef 是一个 React Hook,它能让你引用一个不需要渲染的值。 点击计时器 点击按钮后在控制台可以打印但是页面不生效。 useRef 返回的值在函数组件中不会自动触发重新渲染,所以控制台可以显示变化而按钮上无法显示 ref.current的变化。 import { use…

孙哥Spring源码第14集

第14集 BeanDefintion的创建方式 【视频来源于:B站up主孙帅suns Spring源码视频】 1、注册BeanDefintion的方式如何根据情况进行选择呢? xml 注解 扫描 import 2、为什么没有人用Import 可以通过注解的方式进行对应类型的注册。 3、ImportSelector和…

Lesson4-3:OpenCV图像特征提取与描述---SIFT/SURF算法

学习目标 理解 S I F T / S U R F SIFT/SURF SIFT/SURF算法的原理,能够使用 S I F T / S U R F SIFT/SURF SIFT/SURF进行关键点的检测 SIFT/SURF算法 1.1 SIFT原理 前面两节我们介绍了 H a r r i s Harris Harris和 S h i − T o m a s i Shi-Tomasi Shi−Tomasi…

Mac下使用Homebrew安装MySQL5.7

Mac下使用Homebrew安装MySQL5.7 1. 安装Homebrew & Oh-My-Zsh2. 查询软件信息3. 执行安装命令4. 开机启动5. 服务状态查询6. 初始化配置7. 登录测试7.1 终端登录7.2 客户端登录 参考 1. 安装Homebrew & Oh-My-Zsh mac下如何安装homebrew MacOS安装Homebrew与Oh-My-Zsh…

港陆证券:服装家纺公司上半年投资并购力度加大

9月1日,嘉曼服饰发布公告,为完善多品牌差异化开展战略,将以自有资金收买暇步士(Hush Puppies)品牌我国内地及香港、澳门区域IP财物。 面对服饰市场的激烈竞争,本年以来一些服饰类A股公司开启了“买买买”形…

SSRF服务端请求伪造

服务端请求伪造,其实就是攻击者构造恶意请求,服务端发起恶意请求,如果服务端不对用户传递的参数进行严格的过滤和限制,就可能导致服务端请求伪造 上面是百度识图,我们可以传递图片地址,百度识图向图片发起…

哈夫曼编码实现文件的压缩和解压

程序示例精选 哈夫曼编码实现文件的压缩和解压 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《哈夫曼编码实现文件的压缩和解压》编写代码,代码整洁,规则&#xff0…

C语言:字符函数和字符串函数(一篇拿捏字符串函数!)

目录 求字符串长度: 1. strlen(字符串长度) 长度不受限制函数: 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数: 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字…

【GAMES202】Real-Time Global Illumination(in 3D)—实时全局光照(3D空间)

一、SH for Glossy transport 1.Diffuse PRT回顾 上篇我们介绍了PRT,并以Diffuse的BRDF作为例子分析了预计算的部分,包括Lighting和Light transport,如上图所示。 包括我们还提到了SH,可以用SH的有限阶近似拟合球面函数&#xff…

购物商场项目实践

1.项目开始 1)此项目为在线电商项目 2)包含首页,搜索列表,商品详情,购物车,订单,支付,用户登录/注册等多个子模块 3)使用Vue全家桶ES6webpackAxios等前端技术 4&…

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()

文章目录 前言一、Series数据处理1、map()方法2、apply()方法3、applymap()方法总结 二、DataFrame数据处理1、map()方法2、apply()方法3、applymap()方法总结 三、map、apply、applymap三个函数区别 前言 在进行数据处理时,经常会对一个DataFrame展开逐行、逐列、…

【AI】机器学习——绪论

文章目录 1.1 机器学习概念1.1.1 定义统计机器学习与数据挖掘区别机器学习前提 1.1.2 术语1.1.3 特点以数据为研究对象目标方法——基于数据构建模型SML三要素SML步骤 1.2 分类1.2.1 参数化/非参数化方法1.2.2 按算法分类1.2.3 按模型分类概率模型非概率模型逻辑斯蒂回归 1.2.4…

redis 数据结构(二)

整数集合 整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不时,就会使用整数集这个数据结构作为底层实现。 整数集合结构设计 整数集合本质上是一块连续内存空间,它的结构定义如下: typed…

避雷,软件测试常见的误区之一

随着软件规模的不断扩大,软件设计的复杂程度不断提高,软件开发中出现错误或缺陷的机会越来越多。同时,市场对软件质量重要性的认识逐渐增强。所以,软件测试在软件项目实施过程中的重要性日益突出。但是,现实情况是&…

喜讯 | 数智经营新典范,体验家XMPlus荣获「年度数智经营服务商」

7月27日,“助力运营知识与创新传播”的内容服务平台——运营研究社举行了「2023数字化运营生态大会」,会上正式揭晓了「2023数字化运营生态大奖」的四大榜单,体验家XMPlus荣获「年度数智经营服务商」!现场有800运营伙伴齐聚&#…

python 笔记(3)——request、爬虫、socket、多线程

目录 1、使用requests发送http请求 1-1)发送get请求 1-2)发送 post 请求 1-3)发送 get 请求下载网络图片 1-4)使用 post 上传文件 1-5)自动维护 session 的方式 2、使用 os.popen 执行cmd命令 3、基于 beautif…

【微服务部署】五、Jenkins+Docker一键打包部署NodeJS(Vue)项目的Docker镜像步骤详解

NodeJS(Vue)项目也可以通过打包成Docker镜像的方式进行部署,原理是先将项目打包成静态页面,然后再将静态页面直接copy到Nginx镜像中运行。 一、服务器环境配置 前面说明了服务器Nginx的安装和配置,这里稍微有些不同&a…

mysql Index

创建索引 方法1 create table 表( col1 int, col2 int, … index | key index_name (列名) 方法2 alter table 表名 ADD index alter table student_table add index index_name(stu_id); 方法3 create index index_name on 表名(列) 删除索引 方式1 alter table xx drop prima…

革命性的电子元件:RAD继电器 | 百能云芯

在现代电子和通信系统中,RAD继电器是一种关键的电子元件,它在各种应用中发挥着重要作用。RAD继电器(Reed-relay Actuated Device)是一种基于磁性原理的电子开关,其特点是极其高速、可靠、低功耗和长寿命。下面云芯将为…