自注意力机制(Self-Attention)中的位置信息编码(Position Information Encoding)详解
知识点描述
在标准的自注意力机制中,注意力权重的计算基于输入元素之间的相似性,但这一过程本身不具备感知元素顺序(如序列中位置顺序、图像中空间位置、图中节点位置)的能力。然而,绝大多数数据(如文本、图像、图)的内在语义与其位置/结构信息紧密相关。为了赋予自注意力模型感知位置信息的能力,需要在模型中显式地引入位置编码。这是Transformer及其变体模型能够有效处理序列、图像、图等结构化数据的核心基础之一。本知识点将详细讲解位置信息编码的动机、主流方法及其实现原理。
解题与讲解过程
第一步:理解核心问题——为什么自注意力需要位置编码?
- 自注意力的排列不变性:假设输入是一个包含N个元素的集合 {x₁, x₂, ..., xₙ}。自注意力计算每个元素与所有元素(包括自身)的注意力权重,其输出是这些值的加权和。这个计算过程与输入元素的输入顺序无关。无论你如何打乱输入序列的顺序,只要元素间的两两相似度不变,自注意力的输出(不考虑位置编码时)的集合就是不改变的。这被称为排列不变性。
- 现实任务对顺序的依赖:在自然语言中,“猫追老鼠”和“老鼠追猫”含义完全不同。在图像中,一个位于左上角的物体和一个位于右下角的物体代表不同的空间关系。在图数据中,节点的邻接结构定义了其位置角色。因此,元素的绝对位置以及它们之间的相对位置关系对理解数据至关重要。
- 结论:自注意力机制本身缺乏对位置信息的建模能力,必须通过外部方式注入位置信息,才能应用于对顺序或结构敏感的任务。
第二步:绝对位置编码(Absolute Positional Encoding)
这是最经典的位置编码方式,为序列中的每个位置分配一个独特的编码向量,然后将其加到对应的输入元素嵌入向量上。
-
可学习的位置编码(Learnable Positional Encoding):
- 思想:将位置编码视为可学习的模型参数。初始化一个维度为
[最大序列长度, 模型维度]的矩阵P。P[i]就代表位置i的编码向量。 - 过程:对于输入序列
X(形状为[批大小, 序列长度, 模型维度]),我们取出位置编码矩阵P的前序列长度行,将其加到X上:X' = X + P[:序列长度]。在训练过程中,P会像其他参数一样通过梯度下降被优化。 - 优点:简单、灵活,不引入强先验假设。
- 缺点:无法泛化到训练时未见过的更长序列(因为
P的大小是固定的);可解释性较弱。
- 思想:将位置编码视为可学习的模型参数。初始化一个维度为
-
正弦/余弦位置编码(Sinusoidal Positional Encoding):
- 思想:使用一组具有不同频率的正弦和余弦函数来生成位置编码,这是Transformer原论文提出的方法。其设计目标是让模型能够轻松地学习到相对位置信息。
- 公式:对于位置
pos和模型维度的第i个分量,其编码值计算如下:- 如果
i是偶数:PE(pos, i) = sin(pos / 10000^{2i/d_model}) - 如果
i是奇数:PE(pos, i) = cos(pos / 10000^{2i/d_model})
其中d_model是模型维度。
- 如果
- 特性与优点:
- 确定性:编码是确定的函数,不是学来的,因此可以处理任意长度的序列(泛化性好)。
- 相对位置可学习:对于一个固定的偏移量
k,PE(pos+k)可以被表示为PE(pos)的线性函数。这意味着模型理论上可以通过学习,利用PE(pos)的信息来推断PE(pos+k),从而捕捉相对位置。 - 周期性:不同维度对应不同的波长(从2π到10000·2π),形成了一个从高频到低频的变化,让模型能捕获不同尺度的位置模式。
- 实现:计算一个位置编码矩阵
PE,然后与输入相加:X' = X + PE。
第三步:相对位置编码(Relative Positional Encoding)
绝对位置编码为每个位置赋予一个独立的编码。但在很多任务中,元素之间的相对关系(例如,一个词在前一个词之后2个位置)比绝对位置更重要。相对位置编码直接建模这种关系。
- 核心思想:修改注意力计算过程,使其不仅依赖于内容(查询Q和键K),还依赖于元素间的相对位置偏移。
- 一种经典实现(Shaw et al., 2018):
- 我们定义一组可学习的嵌入向量
a_{k}^{K}和a_{k}^{V},其中k表示相对位置距离(例如,k ∈ [-max_rel_dist, max_rel_dist])。 - 修改键和值的计算:在计算注意力时,将相对位置信息融入键和值中。
- 注意力分数计算:原始的注意力分数是
QK^T。引入相对位置编码后,变为(Q_i * (K_j + a_{i-j}^{K}))^T。这意味着,键K_j的内容会根据其与查询Q_i的相对距离(i-j)进行微调。 - 注意力加权和计算:原始输出是
Attention * V。引入相对位置编码后,变为Attention * (V_j + a_{i-j}^{V}),值也根据相对位置进行了调整。
- 我们定义一组可学习的嵌入向量
- 优势:更直接地建模了相对位置关系,在许多任务上(如机器翻译、音乐生成)表现出比正弦编码更好的性能。并且由于其关注相对距离,对序列长度的外推性通常更好。
第四步:其他变体与应用扩展
- 旋转位置编码(RoPE, Rotary Position Embedding):
- 思想:通过在查询向量
Q和键向量K中注入绝对位置信息,并使注意力分数仅依赖于它们之间的相对位置。它通过旋转矩阵来实现。 - 优点:形式上保持了相对位置的可推导性,在长文本建模(如LLaMA、ChatGLM等大模型)中展现出优越的外推能力和稳定性。
- 思想:通过在查询向量
- 二维与多维位置编码:
- 应用场景:图像、视频等数据具有二维或多维结构。
- 方法:可以将一维的正弦编码分别应用于行坐标和列坐标,然后将它们拼接或相加,得到每个像素点的二维位置编码。对于图数据,可能需要考虑节点在图中的结构角色(如随机游走距离、中心性等)来定义位置。
总结
位置信息编码是弥补自注意力机制“位置盲”缺陷的关键技术。绝对位置编码(如正弦编码、可学习编码)直接为每个位置赋予标识,简单有效。相对位置编码更深入地建模了元素间的关系,性能往往更优。旋转位置编码等新方法则在长序列建模上展现了优势。选择哪种编码方式,取决于具体任务、数据特性以及对长度外推能力的要求。理解其原理,有助于在构建或使用基于Transformer的模型时做出合理的设计选择。