为什么需要位置编码
自注意力机制没有顺序感知:Transformer 模型中的自注意力(Self-Attention)机制计算的是输入序列中所有位置的元素之间的关系,而这些关系仅仅依赖于元素的内容,而不考虑它们在序列中的顺序。例如,模型并不能自动地识别“第一个词”和“最后一个词”之间的顺序关系。这意味着,如果没有额外的信息,模型不能知道一个词在句子中的位置。
需要显式的位置信息:为了让 Transformer 理解序列中的顺序,必须通过引入位置编码将位置信息显式地注入到模型的输入中。位置编码为每个输入的词或标记添加一个表示其在序列中位置的向量,从而使模型能够在计算注意力时考虑到词语之间的相对顺序。
相对位置编码
相对位置编码是为了克服绝对位置编码的一些不足之处,特别是在处理长序列时,绝对位置编码可能难以有效捕捉序列中不同位置元素之间的相对依赖关系。
相对位置编码不仅考虑元素的绝对位置,还考虑元素之间的相对位置。它描述的是两个词之间的距离或相对位置,而不仅仅是它们在序列中的具体位置。
相对位置编码的特点
- 相对位置编码关注的是元素之间的相对距离。例如,模型需要知道词 A 和词 B 之间的距离是多少,而不是它们在序列中的具体位置。
- 在实现中,相对位置编码通常会影响自注意力机制中的查询、键值对(Query, Key, Value)之间的关系,使得模型能在计算注意力时考虑到两个词之间的相对距离。
绝对位置编码
绝对位置编码的目标是为每个位置生成一个固定的向量,这个向量是与位置本身直接相关的,表示序列中每个元素的具体位置。绝对位置编码通常是与词嵌入(Word Embedding)相加的,形成输入到 Transformer 模型中的最终向量。
绝对位置编码的特点
- 每一个位置都有一个唯一的编码,表示该位置在整个序列中的绝对位置
- 它不表示相对位置,仅仅表示单个词的位置
训练式
直接将位置编码当成是可学习参数,不用刻意去设计什么。
这种方法的缺点是没有外推性,即如果训练的序列长度最大是512的话,那么最多就只能处理512的句子,因为其他的模型没有学过。
三角式
旋转位置编码RoPE
RoPE是通过绝对位置编码的方式实现相对位置编码。
旋转位置编码(RoPE)利用旋转矩阵的两个性质:加法性质 和对称性质 ,并将旋转矩阵扩展到高维空间。在注意力(attention)计算阶段,RoPE 根据每个位置的位置信息,对 Query 和 Key 向量进行旋转,从而将相对位置关系嵌入到注意力机制中。
旋转矩阵的性质:
将旋转矩阵的性质扩展到高维空间,每一个位置都会对应一个这样的矩阵:
RoPE使用的是基于正弦和余弦函数的旋转矩阵,这些旋转矩阵是确定性的,m是位置,d是位置编码向量的维度,一般也就是词嵌入的维度,f是频率。这里不涉及任何需要训练的参数,只是与位置相关的数学函数。因此,RoPE并不引入任何新的可学习参数 。
计算过程可以参考:你还不懂旋转位置编码吗?_哔哩哔哩_bilibili
外推性
上文中经常提到外推性,这里解释一下,外推性指的是位置编码在超出训练时序长度的数据时,是否能够有效地适应和推断新的、未知的序列长度或位置关系。
上文中提到的训练式就基本没有外推性,一旦超过最长的位置编码,模型就不知道这些位置的编码形式,可能会进行随机初始化。
三角式和RoPE编码方式外推性则比较好,因为这两个编码方式都只依赖正余弦函数,序列变长也更容易做扩展。
参考
https://spaces.ac.cn/archives/8130
https://zhuanlan.zhihu.com/p/359502624
标签:编码,模型,位置,RoPE,序列,相对,组件 From: https://blog.csdn.net/weixin_41931540/article/details/144859442