对Positional Embedding的sin-cos对的解释

文章讲述了Transformer中使用PositionalEmbedding处理词向量位置信息的重要性,介绍了两种早期方法的局限性,重点介绍了Sincospositionalencoding的原理和其在表示位置关系和适应长句子方面的优势。作者还解释了为何使用sin和cos组合以及它如何支持相对位置转换。
摘要由CSDN通过智能技术生成

Positional Embedding(Transformer中有用到)PE

transformer的输入要么是词向量或是块状处理了的图像,分别用于自然语言处理和计算机视觉领域。

词向量之间需要有一个相对位置关系,如果全部不分序输入那处理肯定不方便,不同词之间组合意思也会发生变化于是就要给词向量加位置信息。 (你喜欢我,我喜欢你)

transformer里面用了一种位置编码方式,把位置信息作为词向量的一部分输入信息一起送入网络进行处理

首先因为transformer中,不像RNN,他并不会学习句子的顺序,所以说这里要用一个Positional Embedding来作为输入的一个特征,来输入到Transformer的Encoder层去

所以我们第一种最简单的想法,是用一个[0,1]范围的数字去限制句子的长度,比如我们现在有一个句子,让第一个单词用0来约束,最后一个单词用1来约束,这样子的话一个句子就变成了一个0-1的一个数字序列

但是这种方法呢,不能计算出在特定的范围内有多少个单词,因为每个句子的长度不同,没有一个定的标准去比较不同句子所含的单词。

(比如说同样一个句子 : 哈哈哈哈哈哈哈哈哈哈 和 哈哈哈哈哈,我想截取3个字,那么第一个就是从[0,0.3] 第二个就是从[0,0.6] )

第二种想法呢,我们不用[0,1]了,我们直接让第一个单词为1,第二个单词为2,这样线性递增过去,但是这种方法,如果遇到一个单词数超多的句子,甚至这个句子超过了我们训练时的句子长度,那模型就不能很好的预测了,而且这样子的话对不同长度的句子,也不方便进行模型的推广!

所以一个好的positional encoding,需要满足:

1、要能够表示词的位置关系

2、要能够表示两个词之间的距离(能够表示有多少个词)

3、要能够可以适配超长的句子,尽管咱们的训练集并没有训练这些超长的句子

Transformer PE:

所以这时候Attention is all you need 的作者提出了一个全新的Positional Embedding的方法。他用一个d维度的向量来表示位置信息:

首先,我们用 t来表示词的位置,pt表示他的位置编码。d表示编码的维度,f表示映射的函数,他的输出是pt这个位置编码的d维度的向量,

在这里插入图片描述
在这里插入图片描述

可以从公式中看出,频率w会随着维度d减少

wk表示 frequency 频率

这里举一个pt的例子,他是一个d维度的向量,他包含了从w1wd/2的向量,注意了,d是一个能被2整除的维度!

在这里插入图片描述

为什么sin cos的组合能表示位置信息?

我从评论中找到一个最简单最直白的表示方式:

对sin cos对的理解,可以把他比喻成一个时钟的分针和时针(因为sin cos是一个单位元的概念,两个构成了一个单位元) Positonal Embedding 是在每两个维度中指定了一个时钟指针,然后呢如果想要另一个的Positional Embedding信息的话,我们可以去调这个时钟的指针,让他调整到下一个位置去

这个解释我觉得很生动,如果你想要了解更多的话,请继续往下看吧

首先我们先引入一个例子

比如说我们要表示二进制数字,

在这里插入图片描述

这些二进制数字,你可以看出来他们是有规律的,最低位会随着每一个数字变化而变化,第二低的位会随着每两个数的变化而变化,如此类推

但是二进制对表示无穷无尽的浮点数不是很好表示,所以我们这里使用了 正弦函数!

这里使用二进制函数的交替信息,其实这里用正弦函数也是用了这种二进制的思想,正弦函数是有一定的规律性的,有周期性的,这正好符合了二进制数字表示方式这种的规律性,**二进制数字,相当于把一个连续的数字变为了有规律的离散的量!**所以我们这边用正弦函数来表示距离也是一个模仿二进制表示法的方式;

在这里插入图片描述

以上图为例,这个是一个长度为50的句子,pt向量的维度是128维度,所以x方向表示的是数字,y方向表示的是位置,比如说第48行,就是表示48行的pt信息,可以通过这个来表示位置

**此外,我们这里所得到的positional encoding pt,加上原来的字向量的word embedding,就得到了positional embedding,**将这个作为输入输入到transformer里面,就会带着输入信息进入到transformer中了 这里的wt表示在句子中的 word

在这里插入图片描述

此外,用正弦函数作为这种位置信息的表示,可以让模型快速的学习到 相对位置 这一特征!

为什么sin cos 的组合能方便表示相对位置?

怎么理解相对位置这一概念,按原文中的说法,如果说,你已知一个位置的Positional Embedding,想要知道这个位置之后的第k个位置的positional Embedding,可以通过原位置的一个线性函数来求出原位置+k个位置的Positional Encoding

在这里插入图片描述

这个M 就是表示线性函数,[sin(wk,t),cos(wk,t)] 表示的是一个sin-cos 对,表示的是第wk个频率所对应的对,可以推广到一个多维度的情况,这里先用低维度的情况来进行证明

证明:

首先让M作为一个2×2的矩阵,

在这里插入图片描述

我们要找到u,v,使得上面这个式子成立

我们将等式右边的式子展开;

在这里插入图片描述

所以得到了这个多项式:

在这里插入图片描述

通过解这个多项式,可以得到:

在这里插入图片描述

所以M为在这里插入图片描述

所以说呢,这个M矩阵是和t是无关的,而且这个矩阵有点类似于旋转矩阵

在这里插入图片描述

所以,从一个键值对的情况,我们可以推导到多个键值对的情况,为每个不同的wk键值对找到对应的M,最终我们就可以用一个线性函数来从原来第t个的Positional encoding 转换到第t+Φ个的的positional encoding

一些小问题:

1、Positional Embedding方法不会因为随着transformer的层数上升最后使得位置信息消失掉,因为Transformer是带着残差链接的(我Transformer还没学这里先不看)

2、为什么既要用sin 又要用cos 来作为一个pair 来表示位置信息呢?

这里作者认为,是通过sin 和cos 的组合来方便进行相对位置的转换

如果只用sin或者只用cos的话,就不好直接进行相对位置的转换了

最后我的疑问:

用sin 又要用cos 来作为一个pair 来表示位置信息呢?

这里作者认为,是通过sin 和cos 的组合来方便进行相对位置的转换

如果只用sin或者只用cos的话,就不好直接进行相对位置的转换了

最后我的疑问:

有没有可能两个Positional Encoding是一样的?毕竟是用sin cos来表示,他是有周期的,也就说明是有概率是一样的吧?
(已解决)因为Position Encoding 的公式中,频率wk的 10000, 就是表示了重复,当这个句子,大于5000个词的时候,就会导致重复,当然这是不可能发生的啦,一个句子怎么会超过5000个词呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值