文章目录
- 位置编码
- 引出
- Transformer中位置编码方法:Sinusoidal functions
- 两个重要性质
位置编码
最近在学习位置编码,想找一个讲的比较透彻的文章或视频,找了半天,满意的一个也没有,所以自己记录一下。
注意,本篇笔记只作为自己的学习记录用,更好的讲解的内容请看链接:位置编码
引出
我们首先来理解下什么是位置编码?在Transformer架构中,由于自注意力机制固有的特性,某一个token计算和其他token之间的注意力权重时,是不受距离限制的,也就是说他是一视同仁的,比如,我吃饭了和吃饭了我,这两句话中我这个token的表示是一样的。这个并不符合现实的情况,因为实际情况是我们会考虑距离,一般距离越远,它的重要性就变弱了。所以我们还需要加入有关位置的信息,再来计算注意力分数,更为合理。
那应该怎么表示位置信息呢?transformer中token是按顺序输入的,一种最直观的想法就是我们将第一个token的位置表示为1,第二个的表示为2,一次类推,但是这样表示会有什么问题呢?首先,这个的表示是在一个离散的空间内表示,如果训练是在有限的长度下训练,再扩展到训练以外的长度时性能会大幅下降,也就是外推性很差。另一个原因是,当token数量变得很多的时候,其值会变得非常大。
那有没有更好的方法来表示呢?我们想想,位置编码,我们想让他具备什么性质:
第一个:能够表示绝对的位置信息
第二个,能够表示不同token之间的相对的位置信息