【Transformer深入学习】之一:Sinusoidal位置编码的精妙

看苏神的文章提到:Transformer原论文使用Sinusoidal位置编码,作为位置编码的一个显式解,Google 在原论文中对它的描述寥寥无几,只是简单提及了它可以表达相对位置信息,并未提及这个编码的合理性。
看了几篇文章,做一个笔记。

Sinusoidal位置编码

公式和在模型中的位置
在这里插入图片描述
在这里插入图片描述

为什么需要位置编码

单词的位置和顺序是任何语言的重要组成部分。它们定义了句子的语法,从而定义了句子的实际语义。递归神经网络 (RNN) 本质上会考虑单词的顺序;他们按顺序逐字解析句子。这会将单词的顺序集成到 RNN 的主干中。

但是 Transformer 架构放弃了递归机制,转而采用多头自注意力机制。避免 RNN 的递归方法将导致训练时间的大幅加快。从理论上讲,它可以在句子中捕获更长的依赖项。

由于句子中的每个单词同时流经 Transformer 的编码器/解码器堆栈,因此模型本身对每个单词没有任何位置/顺序感。因此,仍然需要一种方法将单词的顺序合并到模型中。

为模型提供一些顺序感的一种可能解决方案是向每个单词添加一条有关其在句子中的位置的信息。我们称此 “信息片段”为位置编码。

可能想到的第一个想法是为 [0, 1] 范围内的每个时间步长分配一个数字,其中 0 表示第一个单词,1 是最后一个时间步长。您能弄清楚它会导致什么样的问题吗?它将引入的问题之一是您无法弄清楚特定范围内存在多少个单词。换句话说,时间步长 delta 在不同的句子中没有一致的含义。

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

理想情况下,应满足以下条件:

  • 它应该为每个时间步(单词在句子中的位置)输出唯一的编码
  • 任意两个时间步长之间的距离在不同长度的句子中应该是一致的
  • 我们的模型应该可以毫不费力地推广到更长的句子。它的值应该是有界的。
  • 它必须是确定性的。

Sinusoidal位置编码

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

让t是输入句子中所需的位置,d是编码维度,编码定义如下:
在这里插入图片描述
由于可以从函数定义中得出,频率沿着向量维度递减。因此,它在波长上形成了从2π到10000⋅2π的几何级数。
还可以想象位置位置嵌入作为包含每个频率的正弦和余弦对的向量:
在这里插入图片描述

直觉

你可能想知道 sines 和 cosines 的这种组合怎么能代表一个位置/顺序?其实很简单,假设你想用二进制格式表示一个数字,那会怎么样?

在这里插入图片描述
您可以发现不同位之间的变化率。LSB 位在每个数字上交替,第二低位在每两个数字上旋转,依此类推。

但是在浮点数的世界中使用二进制值会浪费空间。因此,我们可以改用它们的 float 连续对应物 - Sinusoidal 函数。事实上,它们相当于交替的位。此外,通过降低它们的频率,我们可以从红色位变为橙色位。
在这里插入图片描述
图: 最大长度为 50 的句子的 128 维正序编码。每行表示嵌入向量

相对位置

正弦位置编码的另一个特点是它允许模型毫不费力地处理相对位置。以下是原始论文中的一段引述:
“我们选择这个函数是因为我们假设它允许模型轻松学习通过相对位置来关注,因为对于任何固定偏移量 k, PEpos+K可以表示为 PE 的线性函数PEpos”(原文:We chose this function because we hypothesized it would allow the model to easily learn to attend by relative positions, since for any fixed offset k, PEpos+kcan be represented as a linear function of PEpos.)

但为什么这种说法成立呢?
简单版本的证明:

对于对应于频率的每个正弦-余弦对ωk,则存在线性变换M:
在这里插入图片描述
证明:
M是2×2的矩阵,我们想要找到u1,v1,u2和v2,因此
在这里插入图片描述
通过应用加法定理,我们可以按如下方式展开右侧:
在这里插入图片描述
这会产生以下两个方程:
在这里插入图片描述
通过求解上述方程,我们得到:
在这里插入图片描述
所以最终的变换矩阵M是:
在这里插入图片描述
如您所见,最终转换矩阵M不依赖于t。
请注意,可以找到矩阵M与 Rotation Matrix 非常相似。
同样,我们可以找到对于其他正弦-余弦对的M矩阵,这最终允许我们表示pt+φ作为pt对于任何固定偏移量φ。此属性使模型很容易按相对位置进行学习。
正弦位置编码的另一个特性是相邻时间步长之间的距离是对称的,并且会随时间很好地衰减。
在这里插入图片描述
图 所有时间步长的位置嵌入的点积

远程衰减

苏神的文章 ,评估了Sinusoidal位置编码的远程衰减:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
除了θt=t比较异常之外(与横轴有交点),其他很难断定孰优孰劣。

其他总结

这是一个如何破坏轮换对称性,同时给长距离的 token 关联做自动衰减的有效方法。

参考文献

《Transformer Architecture: The Positional Encoding
Let’s use sinusoidal functions to inject the order of words in our model》
(https://kazemnejad.com/blog/transformer_architecture_positional_encoding/)

《Transformer升级之路:Sinusoidal位置编码追根溯源》
(https://mp.weixin.qq.com/s/57iu8rPTXXG0jb2xxEVnTw)

《BERT为何使用学习的position embedding而非正弦position encoding?》
(https://www.zhihu.com/question/307293465/answer/1039311514)

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

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

相关文章

云计算实训50——Kubernetes基础命令、常用指令

一、Kubernetes 自动补齐 # 安装自动补齐软件 [rootmaster ~]# yum -y install bash-completion # 临时开启自动补齐功能 [rootmaster ~]# source # 永 久开启自动补齐功能 [rootmaster ~]# echo "source > ~/.bashrc 二、Kubernetes 基础命令 kubectl [command] …

【数据结构】数据结构系列学习笔记——导航篇

一:概述 数据结构是计算机科学中的核心概念之一,是优化算法性能和资源利用率的关键。在软件开发和数据处理中,选择合适的数据结构对于算法的效率至关重要。数据结构的选择通常基于数据的使用模式,包括数据元素之间的关系、数据的存…

【专题】2024中国生物医药出海现状与趋势蓝皮书报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37719 出海已成为中国医药产业实现提速扩容的重要途径。目前,中国医药产业发展态势良好,创新能力不断增强,然而也面临着医保政策改革和带量集采带来的压力。政府积极出台多项政策支持医药企业出海…

Vim编辑器常用命令

目录 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令

我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆

本教程基于自研的AI工具箱Tauri版进行VideoReapeat视频解说复述克隆。 视频解说复述克隆样片 《我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆》样片 进入软件后可以直接搜索 VideoReapeat 或者依次点击 Python音频技术/视频tools 进入该模块。 该模块会消耗TTS文本转语…

【四范式】浅谈NLP发展的四个范式

自然语言处理(Natural Language Processing,NLP)是计算机科学,人工智能,语言学关于计算机和人类自然语言之间的相互作用的领域,是计算机科学领域与人工智能领域中的一个重要方向。NLP发展到今天已经进入到了…

kubernetes架构

kubernetes cluster由master和node组成,节点上运行着若干kubernetes服务Master节点: master是kubernetes cluster的大脑,运行着的Daemon服务包括kube-apiserver,kube-scheduler,kube-controller-manager,etcd和Pod网络…

Dify 中的讯飞星火平台工具源码分析

本文主要对 Dify 中的讯飞星火平台工具 spark 进行了源码分析,该工具可根据用户的输入生成图片,由讯飞星火提供图片生成 API。通过本文学习可自行实现将第三方 API 封装为 Dify 中工具的能力。 源码位置:dify-0.6.14\api\core\tools\provide…

出厂非澎湃OS手机解BL锁

脚本作者:酷安mlgmxyysd 脚本项目链接:https://github.com/MlgmXyysd/Xiaomi-HyperOS-BootLoader-Bypass/ 参考 B站作者:蓝空穹 https://www.bilibili.com/read/cv33210124/ 其他参考:云墨清风、水墨青竹、Magisk中文网 决定解BL…

django学习入门系列之第十点《A 案例: 员工管理系统10》

文章目录 12 管理员操作12.4 密码加密12.5 获取对象(防止id错误--编辑界面等)12.6 编辑管理员12.7 重置密码 往期回顾 12 管理员操作 12.4 密码加密 密码不应该以明文的方式直接存储到数据库,应该加密才放进去 定义一个md5的方法&#xff…

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】 描述 概述 在前端开发中,遇到TypeError: Cannot read properties of null (reading indexOf)这类错误并不罕见。这个错误通常表明你试图在一个null值上调用indexOf方法&#xff0c…

飞睿智能UWB BLE Tag蓝牙防丢器模块,APP测距定位一键绑定,安全守护每一刻

我们总在不经意间与生活中的小物件擦肩而过——钥匙遗忘在咖啡厅的角落,钱包遗失在拥挤的地铁,甚至孩子的书包在人群中悄然消失……每一次的失而复得都是幸运的眷顾,但更多的是遗憾与不便。今天,就让我带你走进一个智能守护的新世…

Linux驱动开发 ——架构体系

只读存储器(ROM) 1.作用 这是一种非易失性存储器,用于永久存储数据和程序。与随机存取存储器(RAM)不同,ROM中的数据在断电后不会丢失,通常用于存储固件和系统启动程序。它的内容在制造时或通过…

【算法】遗传算法

一、引言 遗传算法(Genetic Algorithm, GA)是一种模拟生物进化过程的启发式搜索算法,它通过模拟自然选择、遗传、交叉和突变等生物学机制来优化问题的解决方案。遗传算法因其通用性、高效性和鲁棒性,在多个领域中得到了广泛应用&a…

esp32核心跑分程序

https://github.com/ochrin/coremark/tree/esp32 最近一直捣腾esp32s3 (Sense) 做微型摄像。过程中发现一款不错的跑分软件,特此记一笔。 其中针对esp32s3各类参数设定(用idf.py menuconfig),做个记录。 CPU Frequency去240MHz&#xff08…

C语言 | Leetcode C语言题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; int numberOfArithmeticSlices(int* nums, int numsSize) {if (numsSize 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for (int i 2; i < numsSize; i…

Java | Leetcode Java题解之第415题字符串相加

题目&#xff1a; 题解&#xff1a; class Solution {public String addStrings(String num1, String num2) {int i num1.length() - 1, j num2.length() - 1, add 0;StringBuffer ans new StringBuffer();while (i > 0 || j > 0 || add ! 0) {int x i > 0 ? n…

通用四期ARM架构银河麒麟桌面操作系统V10【安装、配置FTP服务端】

一、操作环境 服务端&#xff1a;银河麒麟桌面操作系统V10SP1 &#xff08;服务端包链接&#xff1a;https://download.csdn.net/download/AirIT/89747026&#xff09; 客户端&#xff1a;银河麒麟桌面操作系统V10SP1 &#xff08;客户端包链接&#xff1a;https://downloa…

keil里sprintf的用法

代码&#xff1a; #include<stdio.h> int main(void) {float i-123.45;char zifu[10];sprintf(zifu,"%f",i);while(1);return 0; } 仿真结果 代码&#xff1a; #include<stdio.h> int main(void) {float i123.45;char zifu[10];sprintf(zifu,"%f…

【网络】传输层协议TCP

TCP协议 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC 793定义。TCP在IP&#xff08;Internet Protocol&#xff0c;互联网协议&#xff09;网络层上提供…