找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

260

积分

0

好友

19

主题
发表于 昨天 10:40 | 查看: 4| 回复: 0
本帖最后由 云栈大前端 于 2025-12-11 10:47 编辑

6e483618-df1d-11ed-a649-00163e0b5ff3.webp

在自然语言中,词序直接决定语义:"我打了你"和"你打了我"仅因词序不同,含义完全相反。而 Transformer 的注意力机制采用并行计算方式(同时处理所有词元),天然缺乏对词序的感知能力——如果没有位置编码,模型会把"我打了你"和"你打了我"当作完全相同的输入。位置编码的核心作用,就是为每个词元打上位置标签,让模型明确"谁在前,谁在后"。

理想的位置编码方案需要满足三个关键条件:位置唯一性,即不同位置的编码向量必须互不相同;距离相关性,位置越近的词元,编码向量相似度越高(例如位置 2 和 3 的相似度应高于 2 和 10);长度适应性,能够适配任意长度的序列(训练时使用 100 词,推理时能处理 200 词)。接下来介绍的所有位置编码方案,都围绕这三个条件展开设计。

绝对位置编码:为每个位置分配唯一标识

绝对位置编码的设计思路是:为每个位置分配一个固定的编码向量(如位置 0 对应向量 A,位置 1 对应向量 B),无论输入内容如何变化,位置 n 的编码始终保持不变。这种一一对应的设计能够保证位置唯一性,是早期 Transformer 架构的主流选择。

1. 正余弦位置编码:原始 Transformer 的经典方案

Transformer 原始论文提出的正余弦编码,是最经典的绝对位置编码方案。它通过正弦和余弦函数生成位置向量,公式如下:

3cf8acba-6a25-11f0-a02e-00163e09d72f.webp

其中,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. 可学习位置编码: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(旋转位置编码):LLaMA、GPT-4 等大模型的主流选择

ROPE(Rotary Position Embedding)是目前最成功的相对位置编码方案之一,它通过向量旋转实现相对位置建模,兼顾了计算效率和外推能力。

ROPE 的关键洞察是:两个词元的相对位置可以通过其中一个词元的向量旋转一定角度来表示。具体来说,对位置为 m 的词向量 q_m,用旋转矩阵 R_m 进行旋转;对位置为 n 的词向量 k_n,用旋转矩阵 R_n 进行旋转;旋转后的内积 q_m^T R_m^T R_n k_n = qm^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(线性偏置注意力):简化的相对位置建模

ALiBi 是一种更轻量的相对位置编码方案,它不修改词向量,而是直接给注意力分数添加一个基于相对距离的偏置。

具体来说,当两个词元的相对距离为 k 时,ALiBi 在注意力分数上减去一个与 k 成正比的偏置(如距离 k 的偏置为 -m×|k|,m 是可学习参数)。这种设计的逻辑是:相对距离越远,注意力分数的惩罚越大(符合人类阅读时近邻词关联更强的规律)。

ALiBi 的优势在于极致简洁,无需修改嵌入向量或注意力计算,只需添加一个偏置项,实现成本极低,同时外推性好,相对距离的偏置规则(如距离越远惩罚越大)可直接应用于长序列,而且适合小模型,计算开销比 ROPE 更小,在资源受限的场景(如移动端)表现优异。不过它的精度略低,偏置的线性假设(距离与惩罚成正比)不如 ROPE 的旋转编码精准,在超长文本(如 10 万词)中性能略逊于 ROPE。

长度外推策略:让模型处理超长文本的技巧

即使采用相对位置编码,模型处理远超训练长度的文本(如训练使用 4096 词,推理使用 16384 词)时,仍可能出现性能下降。这是因为长文本会带来新的挑战:注意力计算的噪声累积、长距离依赖的稀释。研究者们为此设计了多种长度外推策略。

1. 位置插值:缩放现有位置编码

位置插值是最常用的外推方法,核心思路是:将超长文本的位置压缩到训练时的位置范围内。例如训练长度为 4096,推理时要处理 16384,则将位置 4096 映射为 1024,位置 8192 映射为 2048(相当于按 1/4 比例缩放)。

这种方法对 ROPE 特别有效:旋转角度与位置成正比,缩放位置等价于缩放旋转角度——模型可通过插值学习长距离的相对位置规律。LLaMA 2 通过位置插值,能将上下文长度从 4096 扩展到 16384,性能仅下降 5% 左右。

2. YARN:动态调整旋转周期

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 能生成万字小说、分析整本书的主题时,不要忽略背后位置编码的贡献——正是这些看不见的向量,让模型能像人类一样按顺序理解语言,最终跨越词的局限,触及语义的本质。

未来,随着长上下文需求的不断提升,位置编码仍将是大模型创新的关键支点——毕竟,理解语言的第一步,是先知道谁在前,谁在后。

原文转自:人人都是产品经理 作者:红岸小兵




上一篇:CSS响应式排版技巧:基于clamp()函数的自适应字距优化
下一篇:大模型RoPE位置编码与外推性:Sinusoidal、PI与NTK全解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-12 08:34 , Processed in 0.085526 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表