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

news/2024/9/19 7:16:49 标签: transformer, 学习, 深度学习

看苏神的文章提到: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.niftyadmin.cn/n/5665200.html

相关文章

Linux(ubuntu)(c语言程序)

一、Vs设置使用 1.应用程序中打开Vscode,弹出的界面直接划到最后点击mark done 2.更改语言,找最左面扩展,搜索Chinese,给出的第一个安装 3.新建文件,因为c语言开发应该以.c结尾,输入名字main.c&#xff…

10年408考研真题-数据结构

23.[2010统考真题]若元素 a,b,c,d,e,f 依次进栈,允许进栈、退栈操作交替进行,但不允许连续3次进行退栈操作,不可能得到的出栈序列是(D)。 A.dcebfa B.cbdaef C.bcaefd D.afedcb 解析:直接看D选项&#xff0c…

云原生链路观测平台 openobserve + fluent-bit,日志收集

grpc-opentracing https://github.com/grpc-ecosystem/grpc-opentracing openobserve fluent-bit 为啥会选择这个组合 一个 rust 写的一个是c写的,性能和内存方面不用担心,比java 那套好太多了 openobserve 文档 :https://openobserve.ai/…

[语言月赛 202408] 因友情而终结

[语言月赛 202408] 因友情而终结 题目背景 友情是什么? 风不知道。 但当友情让爱情出现猜忌 风选择因爱情而终结友情 题目描述 字符串 S S S 是一个仅由英文小写字母构成的串。现在,你可以对字符串 S S S 执行任意次如下操作: 选择 S S…

深入理解Spring中请求作用域的数据存储:ThreadLocal还是Spring容器?

深入理解Spring中请求作用域的数据存储:ThreadLocal还是Spring容器? 目录 深入理解Spring中请求作用域的数据存储:ThreadLocal还是Spring容器? 一、引言 二、ThreadLocal的作用与原理 三、Spring中的请求作用域 四、ThreadL…

软件编程随想

已经做了16年左右的软件开发,从最初的Delphi开发,到后来的Web开发(.net)再到Java Web(Spring MCV,SpringBoot)开发,以后Python,NodeJS等开发,做了这么多年,全部是以解决单…

Android状态栏StatusBar颜色修改

<!-- 文字及图标颜色&#xff1a;true为深色&#xff0c;false为浅色 --> <item name"android:windowLightStatusBar">true</item> <!-- 背景色 --> <item name"android:statusBarColor">?android:attr/colorPrimary</i…

解密.bixi、.baxia勒索病毒:如何安全恢复被加密数据

导言 在数字化时代&#xff0c;数据安全已成为个人和企业面临的重大挑战之一。随着网络攻击手段的不断演进&#xff0c;勒索病毒的出现尤为引人关注。其中&#xff0c;.bixi、.baxia勒索病毒是一种新型的恶意软件&#xff0c;它通过加密用户的重要文件&#xff0c;迫使受害者支…