60 秒回答模板

Transformer 的 self-attention 本身对顺序不敏感,所以必须显式加入位置信息。绝对位置编码的做法是给每个位置一个向量,和 token embedding 相加或拼接,让模型知道这是第几个 token。这个向量可以是固定正弦余弦,也可以是可学习 embedding。它实现简单、计算便宜,适合固定最大长度、分类、编码器或 ViT patch 这类场景,但 learned absolute embedding 往往强绑定训练长度,外推到更长序列时不稳定。相对位置编码不只告诉模型 token 在第几个位置,而是告诉注意力里两个 token 相隔多远、方向如何。实现可以是在 attention score 上加相对距离 bias,也可以用相对位置向量参与 Q/K 计算,或者用 RoPE 这类把相对位置信息融入 Q/K 点积的变体。相对位置更适合关注局部距离、平移不变模式、长序列和生成模型,因为很多语言关系取决于相对间隔而不是绝对下标。代价是实现更复杂,长距离通常要 bucket、截断或缩放,并不意味着无限长度都能泛化。面试中要从实现位置、表达内容、长度泛化、计算成本和适用场景五点比较。

考点 绝对表示下标
难度 真实面经题
回答目标 讲清机制、训练与评估取舍

深入解析

01

先说明为什么需要位置编码

Self-attention 会基于 token 间相似度做加权,但如果没有位置输入,交换两个 token 的顺序对注意力结构并没有天然区别。位置编码就是把顺序信息注入模型,让它区分前后、距离和结构。

02

绝对位置编码表示当前位置

绝对位置编码给序列中第 i 个位置分配一个向量,并与 token embedding 相加或作为额外输入。正弦余弦编码是固定函数,可学习位置 embedding 则通过训练学到每个位置的表示。实现上最简单,工程成本低。

03

绝对方式的限制是长度绑定

可学习绝对位置通常只训练到某个最大长度,超过训练长度后没有直接学过的位置向量。即便用固定正弦编码能计算更长位置,模型是否真的会长序列泛化还取决于训练长度、注意力分布和任务。

04

相对位置编码表示两两关系

相对位置编码关注的是 query 位置和 key 位置之间的距离和方向,比如前一个 token、后五个 token、同一窗口内相隔多少。它常在 attention score 中加入相对距离 bias,或让 Q/K 与相对位置表示发生交互。

05

相对方式更贴近很多语言模式

语言和代码里很多依赖是相对的:邻近词、括号匹配、局部短语、前文引用和一定距离内的上下文。相对编码能让模型更自然地学习距离模式,也更容易在不同起始位置复用同一种关系。

06

场景选择要讲取舍

绝对位置编码适合实现简单、长度固定或位置本身有明确含义的任务;相对位置编码适合长序列、生成、局部结构和需要更好长度泛化的任务。RoPE 可作为相关变体提到,但不要把所有相对位置方法都等同于 RoPE。

易错点

  • 说 Transformer 自带顺序感,忽略 self-attention 本身对 token 顺序不敏感。
  • 把绝对位置编码只等同于正弦编码,忘记也可以是 learned embedding。
  • 把相对位置编码只等同于 RoPE,忽略 attention bias 等其他实现方式。
  • 认为相对位置编码能无限长度泛化,忽略训练长度、bucket、缩放和注意力退化。
  • 只讲概念,不说明绝对编码通常加在输入层,相对编码常进入 attention 计算。
  • 不结合场景选择,机械地说相对位置一定更先进。

面试官追问

正弦位置编码属于绝对还是相对?

它作为输入位置向量时属于绝对位置编码,但由于正弦函数性质,模型可以从组合中推断一定相对距离关系。分类时仍可把它放在绝对位置编码范畴。

相对位置编码一定比绝对位置编码好吗?

不一定。相对位置在长序列和局部关系上有优势,但实现更复杂,具体效果取决于任务、训练长度、模型结构和推理成本。固定长度任务用绝对编码也可能足够。

RoPE 和相对位置编码是什么关系?

RoPE 可以看作把位置信息通过旋转注入 Q/K,使注意力点积天然依赖相对位置的一类方法。它是相关变体,不等于所有相对位置编码。

ViT 中 patch 位置常怎么处理?

ViT 常用可学习绝对位置 embedding 或二维位置插值,让模型知道 patch 在图像中的空间位置。若输入分辨率变化,需要插值或采用更适合空间关系的位置设计。