趋近智
在上一节中,我们已经定义了正弦位置编码的数学结构,具体为:
正弦位置编码的数学结构定义如下:
现在,我们来分析为何这种特殊的公式有效且常用。这些固定的、非学习的编码具有几个理想的特性,与Transformer架构良好匹配。
与需要训练的学习型位置嵌入不同,正弦编码由固定函数生成。这意味着它们是确定性的:对于给定的位置 pos 和维度索引 i,其值始终相同。这也不需要专门针对位置信息的额外可训练参数。
此外,正弦和余弦函数在不同频率(由 100002i/dmodel 项确定)上的组合,确保在合理的序列长度内,每个位置 pos 获得唯一的编码向量 PEpos∈Rdmodel。虽然在极长序列中理论上可能发生冲突,但在典型的模型限制下,这种情况实际上不存在。
正弦和余弦函数自然生成值在固定范围 [−1,1] 内。当这些位置编码添加到词元嵌入中(词元嵌入通常也在可控范围内,通常通过归一化或初始化)时,这种有界性可以避免位置信息大幅改变组合嵌入的幅度。与可能无界的位置信号相比,这有助于更稳定的训练过程。
正弦编码最重要的优点,或许是其固有的通过线性变换表示相对位置的能力。考虑位置 pos+k 的编码。使用三角函数和角公式:
sin(a+b)=sin(a)cos(b)+cos(a)sin(b) cos(a+b)=cos(a)cos(b)−sin(a)sin(b)
令 ωi=1/100002i/dmodel。PEpos+k 的分量可以表示为 PEpos 的形式:
PE(pos+k,2i)=sin((pos+k)ωi)=sin(pos⋅ωi)cos(k⋅ωi)+cos(pos⋅ωi)sin(k⋅ωi) =PE(pos,2i)cos(k⋅ωi)+PE(pos,2i+1)sin(k⋅ωi)
PE(pos+k,2i+1)=cos((pos+k)ωi)=cos(pos⋅ωi)cos(k⋅ωi)−sin(pos⋅ωi)sin(k⋅ωi) =PE(pos,2i+1)cos(k⋅ωi)−PE(pos,2i)sin(k⋅ωi)
这可以表示为每对维度 (2i,2i+1) 的矩阵乘法:
(PE(pos+k,2i)PE(pos+k,2i+1))=(cos(kωi)−sin(kωi)sin(kωi)cos(kωi))(PE(pos,2i)PE(pos,2i+1))这表明 PEpos+k 的位置编码是 PEpos 的一个线性函数(具体来说,是一个旋转)。变换矩阵仅取决于偏移量 k,而不是绝对位置 pos。这个特性使得自注意力机制(它涉及线性投影(查询、键、值)和点积)更容易学习根据词元之间的相对距离进行注意力计算。模型不需要为位置 5 上的 +2 偏移量和位置 50 上的 +2 偏移量学习单独的规则;这种关系被一致地编码。
正弦函数随位置平滑变化。这意味着相邻位置 pos 和 pos+1 的位置编码是相似的,这体现了相邻词语通常具有紧密相关的上下文作用的直觉。这种平滑变化与结构性较差的编码方案可能发生的突变形成对比。
由于正弦编码由固定函数生成,而非从固定序列长度范围内的数据中学习,它们在处理比训练期间遇到的更长序列时提供了优势。该函数可以为任何位置 pos 生成编码。虽然模型在处理更长序列时的整体性能可能仍会因其他因素(如注意力模式无法泛化)而下降,但位置编码机制本身不会出现固有故障,也不会为未见过的位置产生未定义的值,这与学习型嵌入不同,后者会缺乏超出训练最大值的位置的表示。
频率选择(ωi=1/100002i/dmodel)产生的信号从高频(对于小 i,随位置快速变化)到极低频(对于大 i,在整个序列中缓慢变化)不等。这使得模型能够以不同粒度捕捉位置信息。
热力图显示了128维嵌入(
d_model=128)中,前30个位置(pos)和前6个维度(d=0到d=5)的正弦位置编码值。请注意,较低维度(顶部行)的振荡速度更快,而较高维度(底部行)的振荡速度更慢。
总而言之,正弦位置编码提供了一种简单而有效的无参数方法,可将序列顺序信息注入Transformer。它们的数学特性与注意力机制在词元间建模关系的能力良好匹配,尤其是在相对位置方面,同时保持稳定性并为泛化到更长序列提供了可能。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造