最近在做多模态,发现基于 transformer 的多模态,position embedding 是一个非常重要的内容,而且还没有统一方案,先暂做记录,几篇还不错的博客:
Transformer学习笔记一:Positional Encoding(位置编码)
十分钟读懂旋转编码(RoPE)
图解RoPE旋转位置编码及其特性
一文读懂Transformer模型的位置编码
旋转式位置编码 (RoPE) 知识总结
怎么设计位置编码
因此,我们需要这样一种位置表示方式,满足于:
(1)它能用来表示一个token在序列中的绝对位置
(2)在序列长度不同的情况下,不同序列中token的相对位置/距离也要保持一致
(3)可以用来表示模型在训练过程中从来没有看到过的句子长度。
补充:
固定 i ,单从每个 PE(p, i) 看,沿着 i 轴,t 变化,是不断循环的三角函数,像这样:
最终,
下图是一串序列长度为50,位置编码维度为128的位置编码可视化结果:
注意,纵向轴是位置 t,横向轴是 i
,那么,可以发现,由于sin/cos函数的性质,位置向量的每一个值都位于[-1, 1]之间。同时,纵向来看,图的右半边几乎都是蓝色的,这是因为越往后的位置,频率越小,波长越长,所以不同的t对最终的结果影响不大。而越往左边走,颜色交替的频率越频繁。