从零学习大模型(5)——位置编码:让 AI 读懂 “语序” 的关键技术

Wait 5 sec.

在 Transformer 架构中,有一个容易被忽略却至关重要的模块 —— 位置编码(Positional Encoding,PE)。如果说注意力机制让模型能 “理解关联”,前馈神经网络让模型能 “提纯特征”,那么位置编码的作用就是让模型能 “感知顺序”。人类语言中,语序直接决定语义:“我打了你” 和 “你打了我” 仅因语序不同,含义完全相反。而 Transformer 的注意力机制是 “并行计算”(同时处理所有词),天然缺乏对语序的感知 —— 若没有位置编码,模型会把 “我打了你” 和 “你打了我” 视为相同的输入。位置编码的核心功能,就是给每个词 “打上位置标签”,让模型知道 “谁在前,谁在后”。理想的位置编码需要满足三个条件。位置唯一性,即不同位置的编码向量必须不同;距离相关性,位置越近的词,编码向量越相似(如位置 2 和 3 的相似度高于 2 和 10);长度适应性,能适配任意长度的句子(训练时用 100 词,推理时能处理 200 词)。接下来介绍的所有位置编码方案,都是围绕这三个条件设计的。绝对位置编码:给每个位置一个 “唯一身份证”绝对位置编码的核心思路是:为每个位置分配一个固定的编码向量(如位置 0 对应向量 A,位置 1 对应向量 B),无论句子内容如何,位置 n 的编码始终不变。这种 “一一对应” 的设计能保证 “位置唯一性”,是早期 Transformer 的主流选择。1. 正余弦位置编码(Sinusoidal PE):原始 Transformer 的选择Transformer 原始论文提出的正余弦编码,是最经典的绝对位置编码方案。它通过正弦和余弦函数生成位置向量,公式如下:其中,pos 是词的位置(0,1,2,…),i 是向量维度(0 到 d_model-1),d_model 是嵌入维度(如 512)。正余弦编码的设计有其巧妙之处。在位置唯一性上,不同 pos 的正弦 / 余弦值不同(如 pos=0 时 sin (0)=0,pos=1 时 sin (1/10000^…)≠0);距离相关性方面,位置越近的词,编码向量越相似(如位置 2 和 3 的相似度高于 2 和 10);长度适应性上,正弦 / 余弦是周期函数,可无限生成任意 pos 的编码(即使句子长度超过训练时的最大长度)。例如对于 512 维的嵌入向量,位置 0 的编码向量前几个维度为 [sin (0), cos (0), sin (0), cos (0), …] = [0, 1, 0, 1, …],位置 1 的编码向量前几个维度为 [sin (1/10000^0), cos (1/10000^0), sin (1/10000^(2/512)), cos (1/10000^(2/512)), …],这些向量的差异清晰反映了位置差异。不过,绝对位置编码存在共性问题,即外推能力弱 —— 当句子长度超过训练时的最大长度(如训练用 512 词,推理用 1024 词),新增位置(512-1023)的编码向量在训练中从未出现过,模型无法准确理解其位置关系。2. 可学习位置编码(Learned PE):BERT 等模型的选择可学习位置编码的思路更直接:随机初始化一组位置向量(如位置 0 到 511 各对应一个向量),通过训练让模型自动学习最优的位置表示。例如训练时最大句子长度为 512,则初始化一个 512×d_model 的矩阵(每行对应一个位置的编码),这个矩阵会像嵌入层一样参与模型的参数更新 —— 模型在学习 “猫追狗” 的语义时,也会同步学习 “猫在位置 0,狗在位置 2” 的位置关联。可学习位置编码的优势在于灵活性更高,无需人工设计函数,模型可根据任务自动调整位置编码(如在诗歌生成任务中,对押韵位置更敏感),而且在训练长度范围内,可学习编码通常比正余弦编码的效果略优。但它的外推能力极差,训练时未见过的位置(如 512 以上)没有对应的编码向量,无法直接处理长于训练长度的句子,同时泛化性弱,针对特定长度训练的编码,迁移到其他长度时性能下降明显。因此,可学习位置编码更适合 “固定长度任务”(如句子分类,输入长度固定为 512),但不适合需要处理变长文本的场景(如文档生成)。相对位置编码:关注 “相对距离” 而非 “绝对位置”绝对位置编码的 “外推困境” 源于对 “绝对位置” 的依赖 —— 位置 512 的编码对模型而言是全新的。相对位置编码则另辟蹊径:不编码绝对位置,只编码 “词与词之间的相对距离”(如 A 在 B 前面 3 个位置)。这种设计的优势在于:相对距离是 “有限且可复用” 的(如相对距离 -2、-1、0、1、2 覆盖了大部分关联),即使句子长度超过训练范围,相对距离的编码仍能复用训练时学到的规律。1. 自注意力中的相对位置建模:Transformer-XL 的改进Transformer-XL 首次将相对位置信息引入注意力计算。在传统注意力中,分数计算为 Attention (Q, K) = Softmax ((QK^T) / √d_k),而 Transformer-XL 修改为 Attention (Q, K, R) = Softmax ((Q (K^T + R^T)) / √d_k),其中 R 是 “相对位置编码矩阵”(存储相对距离为 -1、-2、…、+2 的编码)。这意味着注意力分数不仅取决于词的内容(Q 和 K),还取决于它们的相对距离(R)。例如计算 “狗” 对 “猫” 的注意力时,若 “猫” 在 “狗” 前面 2 个位置,就会加入 “相对距离 +2” 的编码 —— 这种关联在短句子和长句子中是一致的,因此模型能自然外推到更长文本。2. ROPE(Rotary Position Embedding):LLaMA、GPT-4 等大模型的主流选择ROPE(旋转位置编码)是目前最成功的相对位置编码方案之一,它通过 “向量旋转” 实现相对位置建模,兼顾了计算效率和外推能力。ROPE 的关键 insight 是:两个词的相对位置可以通过 “其中一个词的向量旋转一定角度” 来表示。具体来说,对位置为 m 的词向量 q_m,用旋转矩阵 R_m 进行旋转;对位置为 n 的词向量 k_n,用旋转矩阵 R_n 进行旋转;旋转后的内积 q_m^T R_m^T R_n k_n = q_m^T R_{n-m} k_n(仅与相对距离 n-m 有关)。这意味着:注意力分数只取决于词的内容和相对距离,与绝对位置无关。例如 “猫” 在位置 2,“狗” 在位置 5(相对距离 +3),和 “猫” 在位置 102,“狗” 在位置 105(相对距离 +3)的注意力分数计算方式完全相同。ROPE 的优势在于完美外推,相对距离的编码是固定的(如相对距离 3 的旋转角度固定),无论句子多长,模型都能复用训练时学到的相对位置规律;计算高效,旋转操作可在复数域高效实现(无需额外存储大矩阵),几乎不增加计算开销;而且兼容性强,可无缝集成到现有 Transformer 架构,无需修改注意力机制的核心逻辑。正是这些优势,让 ROPE 成为大模型处理长文本的 “标配”——LLaMA 2 支持 4096 长度,GPT-4 支持 128000 长度,都离不开 ROPE 的贡献。3. ALiBi(Attention with Linear Biases):简化的相对位置建模ALiBi 是一种更轻量的相对位置编码方案,它不修改词向量,而是直接给注意力分数添加一个 “基于相对距离的偏置”。具体来说,当两个词的相对距离为 k 时,ALiBi 在注意力分数上减去一个与 k 成正比的偏置(如距离 k 的偏置为 -m×|k|,m 是可学习参数)。这种设计的逻辑是:相对距离越远,注意力分数的惩罚越大(符合人类阅读时 “近邻词关联更强” 的规律)。ALiBi 的优势在于极致简洁,无需修改嵌入向量或注意力计算,只需添加一个偏置项,实现成本极低,同时外推性好,相对距离的偏置规则(如距离越远惩罚越大)可直接应用于长句子,而且适合小模型,计算开销比 ROPE 更小,在资源受限的场景(如移动端)表现优异。不过它的精度略低,偏置的线性假设(距离与惩罚成正比)不如 ROPE 的旋转编码精准,在超长文本(如 10 万词)中性能略逊于 ROPE。长度外推策略:让模型处理 “超长文本” 的技巧即使采用相对位置编码,模型处理远超训练长度的文本(如训练用 4096 词,推理用 16384 词)时,仍可能出现性能下降。这是因为长文本会带来新的挑战:注意力计算的噪声累积、长距离依赖的稀释。研究者们为此设计了多种 “长度外推策略”。1. 位置插值(Position Interpolation):缩放现有位置编码位置插值是最常用的外推方法,核心思路是:将超长文本的位置 “压缩” 到训练时的位置范围内。例如训练长度为 4096,推理时要处理 16384,则将位置 4096 映射为 1024,位置 8192 映射为 2048(相当于按 1/4 比例缩放)。这种方法对 ROPE 特别有效:旋转角度与位置成正比,缩放位置等价于缩放旋转角度 —— 模型可通过插值学习长距离的相对位置规律。LLaMA 2 通过位置插值,能将上下文长度从 4096 扩展到 16384,性能仅下降 5% 左右。2. YARN(Yet Another Rotation-based Position Embedding):动态调整旋转周期YARN 针对 ROPE 在超长距离(如 10 万词)的性能下降问题,提出 “动态旋转周期”:短距离(如 0-1000 词)使用小周期旋转(角度变化快),保证精细的位置区分;长距离(如 1000-10 万词)使用大周期旋转(角度变化慢),避免旋转过度导致的信息丢失。这种 “远近有别” 的设计,让 ROPE 在兼顾短距离精度的同时,能更好地处理长距离关联。实验显示,YARN 可将 LLaMA 的有效上下文长度扩展到 10 万词以上,且长距离推理性能提升 30%。3. 滑动窗口注意力:牺牲全局关联换取效率当文本长度超过模型设计上限(如 100 万词)时,即使有外推策略,全局注意力的计算量也会爆炸(O (n²) 复杂度)。滑动窗口注意力通过 “限制注意力范围” 降低计算量:每个词只关注前后 k 个词(如窗口大小为 2048);对超长篇文档,按窗口滑动处理(如先处理 1-2048 词,再处理 1025-3072 词)。滑动窗口注意力的优势是计算量从 O (n²) 降至 O (n×k),可处理百万级长度文本,但它无法捕捉窗口外的长距离关联(如文档开头和结尾的呼应),适合对全局关联要求低的任务(如文本摘要)。各大模型的长上下文处理方案:从设计到实践不同模型根据任务需求和计算资源,选择了不同的位置编码和外推策略,形成了各具特色的长上下文能力。GPT-4 采用 ROPE 作为基础位置编码,结合动态窗口和 YARN 改进的长度外推策略,支持 128000 的最大长度,兼顾超长长度和全局关联。LLaMA 2 同样以 ROPE 为基础,使用位置插值的外推策略,基础版支持 4096 长度,扩展版能支持 100000 以上,开源友好且外推成本低。BERT 采用可学习编码,通过截断和 Padding 处理长度,支持 512 的最大长度,适合固定长度理解任务。Transformer-XL 运用相对位置编码,借助片段缓存(Memory)的外推方式,支持 8192 长度,擅长长文档连贯生成。Mixtral 基于 ROPE,结合滑动窗口和分组注意力,支持 32768 长度,效率极高,适合实时对话。这些方案的共同趋势是:以 ROPE 为基础,结合动态外推策略,在效率与长距离关联间找平衡 —— 对需要全局理解的任务(如法律文档分析),牺牲部分效率保留全局注意力;对实时性要求高的任务(如聊天机器人),用滑动窗口换取速度。未来方向:从 “能处理长文本” 到 “能理解长逻辑”当前位置编码的研究已从 “如何处理更长文本” 转向 “如何更好地理解长距离逻辑”。例如逻辑感知位置编码,在编码中融入文本的结构信息(如段落边界、标点符号),让模型区分 “句子内关联” 和 “段落间关联”;动态注意力窗口,根据文本内容自动调整窗口大小(如在逻辑密集段用小窗口聚焦,在叙述段用大窗口捕捉全局);多尺度位置编码,同时编码词级、句级、段落级的位置信息,适配不同粒度的关联学习。这些方向的探索,将让大模型不仅能 “读完” 一本百万字的书,更能 “读懂” 书中的逻辑脉络 —— 这才是长上下文处理的终极目标。结语:位置编码的 “简单与深刻”位置编码的设计看似只是 “给词加位置标签”,却蕴含着深度学习的核心智慧:好的结构设计比单纯增加参数更重要。从正余弦编码的人工设计,到 ROPE 的数学优雅,再到 ALiBi 的极简思路,每一次进步都不是因为更复杂的计算,而是对 “位置信息本质” 的更深刻理解 —— 模型需要的不是 “绝对位置的数值”,而是 “相对关系的规律”。当我们看到 AI 能生成万字小说、分析整本书的主题时,不要忽略背后位置编码的贡献 —— 正是这些 “看不见的向量”,让模型能像人类一样 “按顺序理解语言”,最终跨越 “词” 的局限,触及 “语义” 的本质。未来,随着长上下文需求的不断提升,位置编码仍将是大模型创新的关键支点 —— 毕竟,理解语言的第一步,是先知道 “谁在前,谁在后”。本文由 @红岸小兵 原创发布于人人都是产品经理。未经作者许可,禁止转载题图来自Unsplash,基于CC0协议该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务