第 2 章 AI 算法Transformer大模型

第 2 章 输入与位置编码

第2章 输入与位置编码

2.1 从离散符号到向量

自注意力层只能消费向量序列,而真实世界的信息形态是多样的:文本是离散的符号串,图像是二维像素网格,语音是连 续的声学波形。把各种模态的原始输入转化为 Transformer 可以处理的 token 向量序列,是理解整个架构的第一级台 阶。本节先给出贯穿三模态的统一抽象,再分别展开文本、图像、语音的 token 化方法,最后说明 token 向量如何进入 注意力层;位置编码的各种方案由本章后半部分系统展开。

2.1.1 token 化的统一抽象

无论何种模态,token 化都遵循同一个四段式链路: raw signal -> tokenize/split -> embed vector -> position inject -> self-attention

  1. 离散化或切分:把连续或高维的原始输入切成可独立处理的单元。文本按子词切分,图像按 Patch 切分,语音按帧或码 本离散。
  2. 嵌入向量:每个单元通过查表或线性投影映射为稠密向量。文本用 Embedding 矩阵查表,图像 Patch 用线性投影,语 音特征经编码器或码本映射。
  3. 位置注入:由于自注意力对顺序不敏感,必须显式注入位置信息。
  4. 自注意力:进入 Transformer 主干的起点。 三模态在最后三级(嵌入、位置注入、注意力)上完全统一,差异仅在第一级——如何把原始信号变成 token。理解了三 模态如何各自 token 化,就理解了统一 Transformer 处理多模态输入的机制基础。这一抽象如图2-1 所示。 文本 字符/子词 Token IDs 图像 像素网格 Patch Tokens 嵌入向量 位置注入 自注意力 语音 声学波形 帧特征/离散码 图2-1 三模态输入表示的统一抽象

2.1.2 嵌入层与向量空间

token 一旦确定,第一步是映射为向量。文本的嵌入层是一个可学习的查找表:词表大小为 V 、隐藏维度为 d,则嵌入矩 阵 W ∈ R ,每个 token ID 直接取对应行。图像 Patch 通过线性投影 E ∈ R e V ×d 映射;语音特征经编码器或码本映 (P 2 C)×d 射为 d 维向量。三者的共同点是输出同维度的向量序列,长度等于 token 数。 嵌入向量的语义空间是模型的「原料仓库」。训练前嵌入是随机的,训练后语义相近的 token 在向量空间中彼此靠近—— 这正是模型能进行推理的基础。注意力计算、前馈变换、层归一化等后续操作,都作用在这一向量序列之上。

2.1.3 位置注入的必要性

自注意力本身是置换不变的:交换两个输入 token,输出仅随位置交换而不改变内容。这意味着仅靠嵌入向量,模型无法 区分「A 在 B 前」与「B 在 A 前」。位置编码(Positional Encoding)在嵌入后、进入注意力前注入位置信息,是数据流 水线中嵌入与注意力之间的必经环节。其具体方案(正弦、可学习、RoPE、ALiBi)在本章位置编码部分完整展开,此处 只需记住:位置注入发生在嵌入之后、自注意力之前。

2.2 文本 token 化

上一节给出了贯穿三模态的统一抽象:任何输入都先经过「离散化或切分」,再进入共享的嵌入与注意力链路。对文本而 言,离散化就是分词(Tokenization),把连续字符流切成模型可消费的最小单元。本节把这一级具体化:先讲子词分词 的基本原理与主要算法,再梳理现代大模型的分词器设计,最后分析词表与模型架构之间的参数耦合。分词看似是预处理 细节,实际上它同时决定了序列长度、词表规模、跨语言效率与嵌入参数量,是与架构和数据同级的系统设计决策。

2.2.1 从字符到子词

早期序列模型在字符级与词级之间选择。字符级分词(Character-level)将每个字符作为最小单元,词表极小(几十到几 百),嵌入矩阵紧凑、无未登录词,但文本被拉长为数倍长的序列,注意力与 KV 缓存开销随之膨胀,且丢失了词形与语 义信息——模型必须在序列内部自行重组字符间的关系;词级分词(Word-level)使用完整单词,序列短、语义直接,但 词表膨胀到数十万,且无法处理未登录词(Out-of-Vocabulary),任何语料外的新词、拼写变体都会崩溃为未知符号。子 词分词(Subword Tokenization)介于二者之间:以高频词为整体,将低频词拆为可组合的词缀与片段,兼顾词表规模 与覆盖率,是「文本离散化」的主流实现。 字节对编码(Byte Pair Encoding, BPE, Sennrich et al., 2016)是最经典的方法,灵感源自数据压缩。算法是自底向上的 迭代合并:初始词表为字符集,反复统计语料中相邻符号对的共现频率,将频率最高的对合并为新符号,直至词表达到预 定大小。设字符频率为 f (c),每次合并相邻对 (a, b) 产生新符号 c,其频率为 f (c) = f (a) + f (b),高频对最先合并,保证 词表覆盖最常见的片段。合并的总次数等于目标词表大小减去初始字符数,因此词表大小直接决定了合并深度与分词粒 度:词表越大,合并进行得越深,形成的单元越长。核心循环如下:

 # BPE merge loop (conceptual)
 pairs = count_adjacent_pairs(corpus) # count adjacent symbol co-occurrence
 for _ in range(vocab_size - num_chars):

(a, b), _ = max(pairs.items(), key=lambda x: x[1])

     merged = a + b
     corpus = corpus.replace(a + b, merged)
     pairs = count_adjacent_pairs(corpus)

一个经典示例可以说明合并的语义价值。语料中反复出现的 low 、 lowest 、 newer 等词,其共现统计会让 l 与 o 、 w 优先合并为 lo 、 low ,再与 est 、 er 等后缀合并,最终形成完整的词与词缀组合。合并层数越多,形成的单元越 长,词的边界越接近语言直觉;但若过度合并,低频组合会占用词表席位而收益甚微。词表大小的设定因此是一个明确的 目标函数:更大词表容纳更长单元、缩短序列,却成比例地扩大嵌入矩阵。 BPE 的合并结果天然编码了语料的词频统计:高频词汇(如 the 、 and )成为整体 token,低频词保留为词缀组合(如 un- 、 -ing )。这一性质使分词器成为语料分布的「压缩快照」,也解释了为何分词器必须与模型共享训练语料,若两者 分布不一致,推理时的切分将与训练时的分布发生漂移,模型会在未见过的切分边界上退化为逐 token 猜测。 WordPiece(Schuster & Nakajima, 2012,BERT 采用)从 BPE 演化而来,差别在合并准则:BPE 按共现频率, WordPiece 按合并后语言模型似然增益选择候选对,倾向于生成使训练数据似然提升最大的新词。WordPiece 保留了 [UNK] 、 [CLS] 、 [SEP] 等预留 token,未被词表覆盖的字符统一回退到 [UNK] ,这一设计约束了词表的封闭性。 SentencePiece(Kudo & Richardson, 2018)进一步把分词器从预处理中解放出来:它直接以原始文本为输入,将空白 符编码为元符号 ▁ ,因此天然支持无空格语言(如中文)与多语言,底层既可用 BPE 也可用 Unigram。 Unigram(Kudo, 2018)采取相反的自顶向下路线。它从一个覆盖全部训练数据的种子词表出发,构建概率语言模型, 用 EM 算法估计每个子词的似然,逐步剔除对整体似然贡献最小的子词,直至达到目标词表大小。相比 BPE 的贪心合 并,Unigram 对候选切分求期望,输出最可能的切分而非唯一的贪心切分,鲁棒性更好;配合 SentencePiece 的 ▁ 元符 号,它成为许多多语言模型(如 T5、Gemma)的基础。四种方法的演化关系如图2-2 所示。 Character: tiny vocab, lon g seq Subword: BPE / WordPiec Modern Tokenizers: byte-l e / Unigram evel, 100K+ vocab Word: huge vocab, OOV pr oblem 图2-2 从字符词级到子词的演化路径

2.2.2 现代分词器

子词分词进入大模型时代后,词表规模从几万扩展到十万乃至二十万,设计也从「纯切分规则」演化为规则、字节与控制 符号的复合工程。GPT-2 的关键创新是字节级 BPE(Byte-level BPE):将合并建立在 UTF-8 字节而非 Unicode 码位上, 词表从 256 个字节开始,通过合并达到 50,257 个 token。字节级设计的最大好处是任何文本(包括生僻字、未知符号、 混合语言)都能被无遗漏地编码,彻底消除了未登录词问题,代价是单个 token 的语义密度略低,且对中文这类字符密 集语言尤为不利,这一点将在词表与架构耦合部分进一步展开。 tiktoken 是 OpenAI 发布的基于 Rust 实现的分词器库,以速度著称(比纯 Python 实现快一个数量级),已成为业界基础 设施。其速度优势来自实现层面:合并逻辑基于前缀树与预编译的字节映射表,避免逐字符正则回溯,可将每秒处理能力 提升到数百万 token,为大规模批处理与在线服务提供支撑。其词表经历了两次重要迭代: cl100k_base 约 100K token,服务 GPT-3.5/GPT-4; o200k_base 约 200K token,服务 GPT-4o 与 o1,以更大的词表显著改善多语言与代码 的 token 效率,尤其对阿拉伯语、印地语等此前效率低下的语言,大词表直接降低了每句的 token 消耗,进而影响上下 文预算与 API 计费。 分词器还包含一套独立的控制 token(Control Token),如 <|end_of_text|> 、指令标记、工具调用标记等。它们在训 练前于词表中预留固定位置,不参与合并规则的演化,也不允许被 BPE 的合并操作覆盖。控制 token 的规划直接影响模 型与下游生态(聊天模板、工具协议)的兼容性:例如工具调用标记必须与函数调用协议一一对应,指令标记须与聊天模 板中的角色字段对齐,一旦规划欠妥,后续对齐与部署都会付出高昂的迁移成本,是分词器设计中常被低估的一环。 LLaMA 与 Qwen 的分词策略呈现两种风格。LLaMA 1/2 使用 SentencePiece BPE,词表 32K,以拉丁语系表现优异; LLaMA 3 转向字节级 BPE,词表扩展至 128K,用 <|begin_of_text|> 等特殊 token 增强可控性,预训练覆盖 30 多种 语言(官方支持 8 种)。Qwen 系列采用字符粒度的中文处理:将 CJK 字符作为基本单位,词表约 151K(Qwen2)并持 续扩充,使中文的 token 效率显著高于通用词表。Qwen 词表的膨胀主要来自中英文混合语料的高频词片段与代码符号, 体现了「词表规模跟随训练语料」的设计逻辑。主要开源模型的分词配置对比如表2-1 所示。 模型 方法 词表大小 基础单位 GPT-2 字节级 BPE 50,257 UTF-8 字节 LLaMA 1/2 SentencePiece BPE 32,000 Unicode 字符 LLaMA 3 字节级 BPE 128,000 UTF-8 字节 Qwen2 字符级 BPE 151,000 CJK 字符 表2-1 主要开源模型的分词配置对比 BPE-dropout(Provilkov et al., 2019)是训练期广泛采用的正则技术:每次前向以概率 p(通常 0.1)随机丢弃部分可用 的合并规则,从而为同一文本生成多种不同的切分。这迫使模型不过度依赖某一种切分结果,增强了模型对分词不一致的 鲁棒性,尤其在微调与推理采用不同分词器(或用户自定义词表)时尤为关键。该技术在数据量充足的生成式模型训练中 已成为默认配置,其本质是以切分多样性换取对固定词表的抗过拟合能力——分词器一旦训练完成便冻结不变,而数据分 布持续演化,dropout 让模型在词表锁定的前提下仍保有一份切分的泛化余量。

2.2.3 词表与架构的耦合

词表大小与模型结构深度耦合。嵌入矩阵与输出头的参数量均为词表大小 V 与隐藏维度 d 的乘积 V × d,当 V 达到 128K–256K 时,仅嵌入参数就可达数百亿量级。以 V = 151,000、d = 4096 为例,嵌入与输出头合计约 1.2 × 10 参数, 占 7B 模型的约 17%。缓解方案包括输入输出权重共享与低秩嵌入分解,后者在现代大模型中已成为标准做法。 权重绑定(Weight Tying)让输入嵌入矩阵与输出头共享同一份参数,将 V × d 的开销从两份压到一份,在参数受限的编 码器模型中尤其常见;代价是嵌入与输出表示被迫对齐,通常需要配合专门的初始化与正则手段稳定训练。低秩嵌入 (Low-rank Embedding)则将高维嵌入先投影到低维子空间再展开,保持容量的同时削减参数量,在大词表、大隐藏维 度的模型中已成为标配。二者并不互斥,可叠加使用。 token 与字节的关系决定了模型的实际上下文与部署成本。英文文本的平均压缩率约为 4 个字符/token(约 0.75 词/token),而中文因字符密集,通用词表下每 token 约承载 1.5–2 个汉字;分词效率低意味着同样的上下文窗口只能容 纳更少语义,推理成本与 KV 缓存开销随之上升。量化来看,KV 缓存按 token 数线性增长,序列长度每缩短一成,单次 生成的内存占用与注意力计算量都同比例下降,长上下文部署尤甚。这解释了为何面向中文与多语言的模型(如 Qwen) 将字符粒度与多语言合并作为分词器设计的核心目标。分词器还影响模型的长度外推与提示词工程:由于不同 token 的 语义承载量不同,相同 token 预算下序列的信息密度在不同语言间差异显著, o200k_base 等大词表正是在这一维度上 的工程优化。词表与模型规模也存在匹配关系——过大的词表在小模型上浪费参数,过小则限制容量,实践中通常按模型 的参数规模与目标语言范围联合设计词表。 中文分词的特殊性值得单独说明。汉字是信息密度极高的独立语义单位,通用字节级 BPE 会在汉字边界产生碎片化切分 (一个字被拆成多个字节 token),而字符级策略(如 Qwen 系列)或针对汉字重新设计合并规则的方案能显著提升中文 的 token 效率。实践中还常为中文补充单字表与常用多字词的直接收录,进一步压低每句的 token 数。分词器因此不是 独立于模型之外的预处理细节,而是与架构、数据共同决定预训练效果的一等公民:词表大小影响参数量与容量,切分粒 度影响序列效率与跨语言能力,控制 token 影响生态兼容性。设计一个分词器,实际是在词表规模、token 效率、语言覆 盖与工程复杂度之间做系统权衡,这一权衡的结果会随模型参数规模与目标语言的演变而持续调整。文本 token 化完成 后,所得 token ID 序列经嵌入矩阵映射为向量,即可进入与图像、语音 token 相同的统一链路。

2.3 图像与视觉 token 化

文本 token 化解决的是「离散符号串到向量序列」,图像 token 化则要回答一个更棘手的问题:如何把二维像素网格变成 Transformer 能消费的序列。像素级输入既不经济也不必要——相邻像素高度冗余,单张 224 × 224 的图像就包含 5 万个 像素点,若每个像素充当一个 token,序列长度将瞬间超出绝大多数模型的设计范围。本节以 Vision Transformer(ViT, Dosovitskiy et al., 2021)的 Patch 化为主线:先给出从图像到 Patch token 序列的完整映射,再分析 Patch 大小的粒度 权衡,最后与其他视觉 token 化方案对比,解释 Patch 化为何在预训练时代胜出。CNN 特征图、VQ-VAE 等方案的训练 细节不在本节展开,仅保留与 token 化相关的对比维度。

2.3.1 从图像到 Patch 序列

Transformer 的设计假设输入是一个 token 序列,而图像是二维像素网格。直接把每个像素当作一个 token 并不现实: 一是相邻像素高度相似,冗余度远超文本符号;二是自注意力复杂度随序列长度二次增长,224 × 224 的输入有 5 万个像 素,即便以单像素为 token 也远超主流模型可处理的序列长度。因此图像 token 化必须先做降采样与语义聚合,把像素 聚合成更高层的语义单元。ViT 的解决方式简洁而直接:将图像切分为固定大小的不重叠 Patch(图像块),每个 Patch 展 平为向量后通过线性投影映射到 Transformer 的嵌入维度。 给定图像 X ∈ R ,将其划分为 N = HW /P 个大小为 P × P 的 Patch。每个 Patch 展平为 P ⋅ C 维向量,通过可 H×W ×C 2 2 学习的线性投影 E ∈ R 嵌入到 D 维空间: (P 2 ⋅C)×D z0 = [xclass ; x1p E; x2p E; … ; xN p E] + Epos 其中 x 是可学习的 [CLS] token(沿用 BERT 的设计,输出端用它汇聚全局信息),E ∈ R class 是位置嵌入。位 pos (N +1)×D 置嵌入在此不是可选项:Patch 切分只保留了每个单元的空间内容,丢弃了它在网格中的位置,而自注意力本身对顺序不 敏感,必须由位置嵌入把二维结构重新注入序列。 [CLS] token 同样来自 BERT 的惯例:分类任务中不直接平均所有 token 的输出,而是让模型在 [CLS] 位置汇聚图像级信息,供输出头读取。这一操作把图像完全转化为与 NLP 任务同构 的序列输入,恰好对应统一抽象的后三级:Patch 切分后的每个单元经线性投影得到 D 维向量,叠加位置信息后进入自 注意力。这一完整映射如图2-3 所示。 Image H×W×C Unfold into P×P Patches Flatten + Linear Projection Prepend CLS Token Add Position Embedding Token Sequence for Transf E ormer 图2-3 图像到 Patch 序列的映射 序列长度的计算由此直接可见。以 224 × 224 × 3 的输入和 16 × 16 的 Patch 为例,Patch 数 N = 224 /16 = 196,加上 2 2 [CLS] token 后序列长度为 197,完全在标准 Transformer 的运算范围内。序列长度公式 N + 1 = HW /P + 1 表明: 2 图像 token 数由 Patch 大小与输入分辨率共同决定,这也是部署时换算视觉部分计算量的基本公式。例如把分辨率提高 到 448 × 448 而 Patch 保持 16 × 16,序列长度会从 197 增至 785;反过来把 Patch 放大到 32 × 32 又可压缩到 50。实际 工程中,改变输入分辨率与调节 Patch 大小是两把作用相反的旋钮,二者配合才能把序列长度控制在目标区间。

2.3.2 Patch 大小与信息粒度

Patch 大小是图像 token 化中唯一的超参数,却同时控制着序列长度、计算量与信息保真度。对同一张 224 × 224 的输 入,不同 Patch 大小的对比见表2-2。 表2-2 224×224 输入下不同 Patch 大小的对比 Patch 大小 Patch 数 token 序列长度 每 token 展平维度 粒度与计算量 8×8 784 785 192 粒度最细,计算量最大 16×16 196 197 768 粒度与计算量的平衡点 32×32 49 50 3072 粒度最粗,计算量最小 表中可见两组权衡。其一,Patch 越小序列越长,自注意力复杂度 O(N ) 随之快速上升,但每个 token 覆盖的像素越 少,能保留的高频纹理细节越多。其二,Patch 越大序列越短,计算友好,但展平过程把 P × P × C 的信息压进单个向 量,局部细节的信息损失随之增加。以 8×8 与 32×32 两个极端对比:前者 token 数是后者的 16 倍,序列维度和注意力 开销远高于后者,但模型能直接观察 8×8 区域内的纹理;后者每个 token 携带的信息更稠密,却被迫在展平中丢失像素 级的空间关系。 这一权衡正是统一抽象中「切分粒度」维度的具体呈现,与文本分词选择词元粒度同构:token 单元越小,保真度越高但 序列越长;越大则相反。有趣的是,两种模态的实践取向并不相同——文本分词倾向把词元切细以控制词表规模,图像则 倾向在算力允许时把 Patch 切小以保留细节。二者共同说明,切分粒度的选择始终是「信息保真与序列成本」之间的折 中,没有放之四海而皆准的默认值。ViT 系列的实际经验是:在计算预算允许的条件下选择较小的 Patch,用更多 token 换取更细的粒度。 层次化设计是对这一困境的直接回应。Swin Transformer 借鉴 CNN 的层次结构,在浅层使用小 Patch 保留细粒度信息, 并在每个阶段合并相邻 Patch、嵌入维度翻倍,使序列长度逐阶段减半。以 224 × 224 输入为例,浅层保持 56×56 个细 粒度 token,随后逐阶段合并为 28×28、14×14,全局注意力只施加在高层。这样既在输入侧保持了信息粒度,又在深 层控制了全局注意力开销,等价于把「切分粒度」从单一固定值升级为随深度变化的策略,让模型在不同抽象层次上分别 处理局部纹理与全局结构。 这种「先细后粗」的层次化思路并非 Swin 独有。CNN 的特征金字塔、S4 类模型的多尺度采样,乃至文本中的层级编 码,都遵循「浅层保细节、深层聚语义」的共同逻辑。Swin 的贡献在于把它移植到纯注意力的框架内:合并操作本身是 一次简单的空间下采样,不引入额外参数,却让窗口注意力与移位窗口机制得以在可控的计算量内覆盖全局。因此在「切 分粒度」这一维度上,Swin 代表的是从静态粒度向自适应粒度演进的中间形态。

2.3.3 对比其他视觉 token 化

Patch 化远非唯一的视觉 token 化方案,主流替代路线各有取舍。 •CNN 特征图展平:CNN 主干输出的特征图(如 7 × 7 × 2048)可展平为 token 序列再送入注意力层。这类方案把 Transformer 当作 CNN 的后端增强模块,特征图分辨率远低于输入,天然丢失空间细节,同时继承卷积的归纳偏置, 不适用于纯 Transformer 体系。DETR 等目标检测器即采用此路线:CNN 抽取语义特征,Transformer 在低分辨率序 列上做全局建模。其定位是「增强」而非「替代」,与 ViT 追求端到端统一的目标不同。 •VQ-VAE 离散码:VQ-VAE 把图像编码为离散码本(Codebook)索引序列,每个码表条目就是一个 token,使视觉表 示与文本的离散 token 形式完全对齐。代价是两阶段训练(先训离散自编码器再训生成模型)和重建误差带来的信息 损失,主要面向图像生成类任务。VQ-GAN、DALL-E 的早期版本都依赖这一离散化路径,把视觉与文本放进同一个自 回归框架。 •原生多模态中的视觉 token 压缩:视觉编码器直接输出的 Patch token 数量可达数百上千,拼接进多模态大模型会显 著拉长序列。LLaVA、Qwen-VL 等模型因此引入跨层注意力池化、再采样(Resampler)等压缩手段,把数百个视觉 token 降到几十个,兼顾多帧图像输入与序列预算。 Patch 化能成为主流,原因有四。其一,实现最简单,token 化仅是一次切分加一次线性投影,无需预训练编码器,参数 开销极低,可随模型端到端联合优化。其二,与文本 token 表示完全统一,二维结构交由位置嵌入表达,跨模态预训练 与微调共用同一套管线,这是多模态 Transformer 得以成立的前提。其三,非重叠的均匀切分让掩码重建类自监督任务 (如 MAE)操作干净,随机掩掉 Patch 不会像像素级遮挡那样留下连续性线索,迫使模型学习高层语义。其四,粒度可 控,通过调节 Patch 大小即可在效率与信息保真度之间取舍,且这一调节与模型结构解耦,工程实现直接。 四条原因共同指向同一结论:Patch 化把「图像如何变成 token」的复杂度降到最低,而把表达能力留给通用的 Transformer 主干去发挥。这与其说是一种精妙的图像先验,不如说是一种务实的缺省设计——它在数据充足、算力充分 的预训练时代,以最简单的结构实现了最高的上限。也正因如此,后续视觉 token 化研究的重心从「怎么表示一张图」 转向「表示多少 token 才够用」,序列长度效率自此成为贯穿后续主题的关键约束。 综上,图像 token 化与文本 token 化在嵌入、位置注入、注意力三级完全统一,差异仅落在「如何切分」这一环节:文 本以子词为粒度,图像以 Patch 为粒度,二者的 token 都是「比原始输入略高一层的语义单元」。语音 token 化遵循同样 的抽象,三种模态在后续小节中汇总如何汇入注意力层,并回到统一视角回答开篇问题:任意模态的输入,都能在切分、 嵌入、位置注入三步内变成 Transformer 可处理的向量序列。

2.4 语音与音频 token 化

语音是人类最自然的交互方式,但 Transformer 消费的是离散符号或固定维度的向量序列,而语音是连续的声学波形。 语音 token 化的核心,就是把声学信号转化为模型可处理的形式——或是连续的特征序列,或是离散的语音 token。与文 本和图像不同,语音具有强时间性:同一句话在语速、口音、噪声环境下差异极大,这决定了模型必须在时间分辨率与语 义抽象之间做取舍。按照统一抽象的视角,语音与文本、图像的差异同样集中在链路第一级「如何把原始信号变成 token」,本节分三步展开:先看连续特征序列的构造,再看离散语音 token 的两类手段,最后比较两条路线在统一 Transformer 中的位置差异。

2.4.1 从声学信号到特征序列

原始音频通常是 16kHz 采样率的单声道波形,逐采样点直接作为序列输入会产生极高的计算量。Whisper(Radford et al., 2022)确立的流程是:先将波形切分为短帧,每帧计算对数梅尔频谱(Log-Mel Spectrogram)。梅尔滤波器组(Mel Filterbank)模仿人耳对频率的非线性感知,将频谱压缩为 80 个通道,既保留语音识别的关键信息,又大幅降低维度。 对数梅尔频谱之所以成为事实标准,在于它把感知相关性与计算可行性统一起来。人耳对频率的感知近似对数刻度,梅尔 滤波器组正是按这一刻度划分频带;80 通道在多数语种与噪声条件下足以承载识别所需的信息。相比直接学习原始波 形,log-mel 前端把频率结构先验固化进特征,显著降低模型需要学习的变换复杂度——这是「特征即先验」在语音侧的 体现。 Whisper 的处理管线是语音理解范式的代表。30 秒的音频窗口按 25ms 窗长、10ms 步长切帧,得到约 3000 帧 log-mel 特征;随后经两层卷积下采样(第二层步长为 2),得到 1500 个特征位置,每个位置对应约 20ms 音频。这一特征序列替 代了词元的位置,直接作为 Transformer 编码器的输入。特征抽取环节不涉及任何词法或语义先验,模型需要从声学底 层自行学习语言结构。下列代码演示了从波形到 log-mel 特征的完整前处理:

 # Requires Python 3.10+ and torchaudio 0.14+
 import torch
 import torchaudio

audio, sr = torchaudio.load("sample.wav")

 resampler = torchaudio.transforms.Resample(sr, 16000)
 audio = resampler(audio)
 mel = torchaudio.transforms.MelSpectrogram(
     sample_rate=16000,
     n_mels=80,
     win_length=400,    # 25 ms window
     hop_length=160,    # 10 ms hop

)(audio) log_mel = torch.log(mel.clamp_min(1e-10)) # shape (80, frames) 代码的要点在于把时间与频率两维组织成帧序列: win_length=400 对应 25ms 窗、 hop_length=160 对应 10ms 步 长,输出形状为(80, 帧数)。帧的方向即时间轴,后续经位置编码注入顺序信息,再进入自注意力,与文本 token 的路 径完全一致,差异仅在「切分」这一级。 窗口长度决定了时间与频率分辨率之间的权衡:窗越长频率分辨越细、时间定位越粗,反之亦然。25ms 窗是语音识别的 经验值,既能分辨辅音过渡等短时事件,又保证基频等低频信息可测。下采样(两层卷积,第二层步长为 2)则把 3000 帧压缩为 1500 个特征位置,既缓解了自注意力的计算量随序列长度平方增长的压力,又不会丢失识别所需的时间精度, 每个位置仍覆盖约 20ms 语音。这一「特征位置」本质上就是语音侧的 token 位置,只是它携带的是声学信息而非符号信 息。

2.4.2 语义 token 与声学 token

自回归生成需要离散 token,而 log-mel 特征是连续值。连续特征无法直接作为自回归的目标:输出空间连续,预测误差 经多步累积会迅速破坏语音内容与音质。离散化把无限连续空间映射为有限码本,生成退化为从有限集合挑选符号,与文 本生成的目标函数同构。语音 token 化(Speech Tokenization)由此通过两类手段将声学信息离散化: •语义 token:用 HuBERT、w2v-BERT 等自监督模型提取语音表示,再经 k-means 聚类映射为离散码。语义 token 约 25Hz,一个 token 覆盖一段音素级信息,语义丰富但难以精确重建波形。 •声学 token:用 SoundStream、EnCodec 等神经编解码器(Neural Codec)对波形直接量化,通过残差向量量化 (Residual Vector Quantization, RVQ)产生多个码本。声学 token 约 50-100Hz 且每层码本叠加,可近乎无损还原语 音,但序列长度是文本的数十倍。 语义 token 的生成分两步。HuBERT 先对连续的语音表示做掩码预测,学习音素乃至词级上下文;w2v-BERT 在此基础上 融合对比学习目标。随后对学到的表示做 k-means 聚类(典型为数百个簇),每帧表示被映射为最近的簇中心编号,即一 个离散码。由于帧率被降采样到 25Hz,语义 token 与音素、音节的时间粒度接近,天然与文本对齐,适合翻译、关键词 检索等语义任务。两类 token 的关键差异如表2-3 所示。 声学 token 的关键在残差量化。RVQ 逐层工作:第一层对原始表示量化,捕获主要声学结构;后续每一层对上一层的残 差再量化,逐级补充细节。典型配置如 EnCodec 用 8 个码本,每层独立一张码表,多个码本可并行地代表同一时段的语 音。解码时逐层相加即可重建波形。序列上多个码本须串行或交织地喂给模型,使声学 token 的有效序列长度成倍放大 ——这是它在统一 Transformer 中序列成本的主要来源。 token 类型 代表模型 频率 特点 语义 token HuBERT + k-means 25Hz 语义强、序列短、不可重建波形 声学 token EnCodec / SoundStream 50-100Hz ×N 码本 可重建波形、序列长、码本多 表2-3 语义 token 与声学 token 的对比 两类 token 的分工构成语音大模型的两种主流路线:以语义 token 为核心的模型侧重理解与跨语言泛化,以声学 token 为核心的模型侧重高质量重建与语音克隆。Whisper 这类识别模型只消费连续特征,而 VALL-E 等生成模型必须依赖离散 声学 token 才能逐码本自回归地合成语音,理解模型与生成模型由此走上不同的输入路线。选择哪一类 token,本质上是 选择抽象层级:语义 token 更接近「说了什么」,声学 token 更接近「怎么说」,两者互补而非互斥。 实践中两者常组合使用:理解侧用语义 token,重建侧用声学 token。TTS 系统先由文本编码器产出语义 token,再经声 学 token 解码器合成波形,两个离散层各司其职。这种分层设计把「内容」与「声学细节」解耦,是语音生成模型普遍 采用的结构,也让 token 化的选择从「二选一」变成「按层分配」。

2.4.3 语音输入的两种范式

特征序列与离散 token 对应语音进入 Transformer 的两种范式: •连续特征直接进入:Whisper 式。log-mel 特征经下采样后直接作为编码器输入,「特征进、文本出」,与机器翻译的 encoder-decoder 同构,只是把词元输入换成了声学特征。该路线不需要训练语音码本,但对文本的交互能力弱,识 别结果以文本形式交还,无法与 LLM 的语义知识在同一序列空间内共同建模。 •离散 token 进入:VALL-E 与原生多模态式。VALL-E 用 EnCodec 声学 token 作自回归生成单元,说话人嵌入注入注意 力层,实现零样本语音克隆;原生多模态模型则将语音 token 与文本 token 放在同一序列空间,共同参与自注意力, 不加区分地理解「图像配语音」「视频配字幕」等组合输入。 两条路线在统一 Transformer 中的位置差异如图2-4 所示:连续特征路线必须经独立的特征抽取器(分帧、滤波、下采 样)与专用编码器,位置注入发生在编码器内,模型整体是「声学到文本」的映射;离散 token 路线则把语音离散成与 文本同构的符号,经同一张嵌入表查表,与文本 token 一起进入主干自注意力——这正是统一抽象中「三模态在嵌入、位 置注入、注意力三级上统一」在语音侧的体现。 路线二 离散 token 16kHz 波形 语义/声学码本 离散 token 序列 嵌入查表 Transformer 主干 路线一 连续特征 16kHz 波形 分帧 + Log-Mel 卷积下采样 特征序列 1500/30s Transformer 编码器 图2-4 语音 token 化的两条路线 离散 token 路线的另一个优势是序列开销可控。语义 token 按 25Hz 采样,30 秒语音约 750 个 token,与文本长度处于 同一量级,可以不加特别处理地进入统一 Transformer;声学 token 因多码本叠加,须按码本分层排列或交织串行化,序 列长度膨胀为语义 token 的数倍,位置编码的设计也随之不同,这部分在后续小节统一展开。连续特征路线则不受码本 规模约束,token 数由下采样倍数决定,工程上更简单,代价是模型结构必须带独立的编码器前缀。 两范式各有适用场景:连续特征路线训练稳定、无需码本工程,适合转写与翻译等识别任务;离散 token 路线语义与文 本同构,适合生成任务与多模态统一建模,代价是序列更长、码本训练成本高。实际系统常混合使用:识别用连续特征, 生成用离散 token,二者在统一 Transformer 中的分工由任务性质决定。无论走哪条路线,语音输入都在第一级完成「连 续波形 → 可处理单元」的转换,后续嵌入与注意力路径与文本完全一致,这正是统一抽象贯穿三模态的落点。 本节把语音输入归结为一条主线:无论连续特征还是离散 token,最终都要变成带位置的向量序列进入自注意力。连续特 征以帧为单位、离散 token 以码本为单位,二者频率不同、语义粒度不同,但在嵌入与注意力两级完全统一。下一节将 汇总三模态的 token 序列如何拼接、如何注入位置、如何送入注意力层,完成多模态输入表示的数据流水线闭环。

2.5 统一进入注意力层

前几节分别完成了文本、图像、语音三种模态的 token 化与嵌入。本节把三条支路汇合为一条主干:说明三者如何进入 同一个向量空间、如何在注意力之前注入位置信息、又如何被投影为查询(Query)、键(Key)、值(Value),最后用一 张完整流水线图收束输入表示这条主线。读完本节,读者应能把「任意模态的输入最终变成注意力层输入矩阵」的完整链 条串起来,完成从输入表示到注意力计算的交接。

2.5.1 统一向量空间

维度一致是三种模态汇合的先决条件。文本经过嵌入矩阵查表、图像 Patch 经过线性投影、语音特征经过编码器或码本映 射,输出的都是 d 维向量。三种模态的 token 数量即序列长度 n 差别很大,但每个 token 的向量维度必须一致,因为注 意力层对序列长度没有假设,却要求特征维度固定。 嵌入完成后,一个模态的输入就成为一个矩阵 X ∈ R 。文本序列可能有数百至数千个 token;一张 224×224 的图像 n×d 按 16×16 的 Patch 切分得到 196 个 token;语音按帧切分得到与时长相关的帧 token。无论 n 是多少,矩阵的列数始终 是 d,这正是统一表示空间(Unified Representation Space)的含义:所有 token 都落到同一个 d 维空间中,只是序列 长度各异。 长度与维度的这一不对称,决定了模型的两类成本:序列长度 n 直接决定自注意力的计算量(随 n 增长),维度 d 决定单2 个 token 的存储与算力开销。统一向量空间把模态差异全部压缩进长度这一个自由度,硬件与算子因此可以用同一套内 核处理文本、图像与语音,无需为每种模态定制计算路径。 特殊 token 在这个统一空间中扮演结构性角色。分类标记 [CLS](Classification Token)聚合整个序列的信息,通常被附 加在序列开头;[SEP](Separator Token)分隔不同片段;图像与语音的模态边界标记(如 [IMG]、[AUD])帮助模型区 分 token 的来源;[PAD](Padding Token)用于把不等长的序列对齐到同一批长度。这些特殊 token 与普通 token 一样 嵌入、一样参与注意力,它们的语义完全由训练决定,其中 [PAD] 的位置通常以掩码方式排除在注意力计算之外。 既然所有 token 都是同维向量,同一个注意力层就可以直接处理混合模态。注意力计算只关心「查询-键-值」之间的交 互,不关心 token 来自文本、图像还是语音。原生多模态(Native Multimodal)模型正是利用这一点:Kimi K3 等模型 不再使用独立的视觉编码器,而是把图像 token 与文本 token 直接拼接进同一个序列,由统一的注意力层一起处理,跨 模态对齐完全在注意力内部完成。 统一向量空间也解释了「早融合」与「晚融合」的分野。早期多模态模型常为每种模态训练独立的编码器,只在最后的表 示层拼接,模态间交互既浅且迟。当所有 token 进入同一向量空间后,融合不再发生在特定阶段,而是发生在每一个注 意力层内部:模型在多层的自注意力中反复比较文本与图像的 token,模态间对齐的深度随层数加深,这是原生多模态设 计优于简单后期拼接的根本原因。

2.5.2 位置编码注入

位置编码发生在嵌入之后、自注意力之前,具体方案在本章位置编码部分完整展开。无论采用加性的正弦或可学习位置编 码,还是 RoPE、ALiBi 等相对位置方案,注入方式都是把位置信息与嵌入向量结合,且要求位置编码与嵌入同维,否则 无法相加。位置信息与 token 内容正交,二者共同构成注意力层的输入。 三种模态的序列结构不同,对位置编码的要求也因此不同: •文本:一维单向序列。token 的读写顺序就是位置顺序,直接用一维位置索引即可表达「谁在谁之前」,位置编码承载 严格的线性次序。 •图像:二维网格结构。Patch 的位置包含行与列两个维度;ViT 把二维网格拉平成 1D 序列后附加一维位置编码,是一 种扁平化近似;显式的二维位置编码(行加列)能更忠实地保留空间邻接关系。 •语音:一维时间轴。帧顺序即时间顺序,位置编码承载时序推进信息;语音帧率高、语义粒度粗,序列通常很长,对位 置编码的长度外推能力要求更高。 位置编码与嵌入同维是统一的硬约束:加法要求两个矩阵形状完全一致,因此位置编码必须生成 d 维向量。文本的单向结 构常与因果掩码配合,位置编码决定「能看多远」,掩码决定「能看哪些位置」,二者协同保证自回归性质;图像 Patch 的 拉平顺序(按行优先扫描)决定一维位置编码的语义映射,若换用二维方案则需同时注入行列索引;语音帧在特征提取时 通常带重叠与下采样,位置编码必须与最终帧率对齐,否则时序被压缩后位置语义失真。 混合模态拼接时,各模态内部沿用各自的位置编码,跨模态 token 之间的相对位置通常没有物理意义——例如第 5 个文本 token 与第 3 个图像 Patch 的距离并不对应真实空间关系。模型需要自行学习跨模态对齐,而 RoPE 等相对位置编码天然 带「近邻更相关」的归纳偏置,对这一学习过程更友好。

2.5.3 从嵌入到 QKV 投影

位置注入完成后,输入序列以矩阵 X ∈ R 的形式原样送入自注意力层。注意力层的第一步,是把 X 通过三个线性投影 n×d 分别变换为查询、键和值: Q = XWQ , K = XWK , V = XWV 其中 W , W ∈ R ,W ∈ R 。多头注意力中 d = d = d/h,h 为头数。投影后 Q 与 K 的形状为 n × d ,V 为 Q K d×dk V d×dv n × d 。序列长度 n 在两个方向上自由变化,这正是注意力层能处理任意数量、任意来源 token 的体现。 k v k v 三个投影是注意力层引入的第一组可学习参数,合并参数量为 3d ,是整个自注意力参数的主体。投影本身不引入任何长 2 度假设,也不感知模态;对模型而言,输入只是一个形状为 n × d 的矩阵。批维度上的多条序列可以并行通过同一组投 影,批内既可有纯文本序列,也可有纯图像序列,统一向量空间在批处理层面同样成立。 投影是逐 token 的线性变换,不改变序列长度,也不在 token 之间建立交互;跨 token 的交互完全由随后的注意力计算 完成。因此这一投影正是「输入表示」与「注意力计算」的交接点:QKV 之后的缩放点积与多头机制已在原理与架构一 章详细阐述。三种模态共享同一组投影参数 W , W , W ,跨模态共享注意力参数也是原生多模态模型的标准做法。用 Q K V 代码表达这一交接点:

 import torch
 import torch.nn as nn
 # X: unified token matrix, (batch, n_tokens, d_model)
 X = torch.randn(2, 512, 768) # any modality, length may vary
 proj_q = nn.Linear(768, 768)
 proj_k = nn.Linear(768, 768)
 proj_v = nn.Linear(768, 768)
 Q = proj_q(X)      # (2, 512, 768)
 K = proj_k(X)
 V = proj_v(X)

无论输入来自文本、图像还是语音,走到这里时都只剩一个共同的形态:被三组投影矩阵处理过的 d 维向量序列。注意力 计算正是从这三组投影的结果出发,计算它们之间的匹配得分。

2.5.4 完整数据流水线回顾

把前三节的各个环节串起来,就得到从原始输入到自注意力的完整数据流水线,如图2-5 所示。图中上半部分对应三模态 各自的差异阶段:三种模态各自完成切分与离散化;下半部分从嵌入开始进入统一阶段,三种模态的 token 汇合成同维 向量序列,再依次经过位置注入与 QKV 投影,最终抵达自注意力层。全图只有两个分岔口,且都发生在 Token 化阶段。 三模态原始输入 文本符号序列 图像像素网格 语音波形 Token 化 子词 Token 图像 Patch 语音帧 嵌入向量 位置编码注入 QKV 线性投影 自注意力 图2-5 从原始输入到自注意力的完整流水线 全流水线可压缩为一张对照表,如表2-4 所示: 阶段 关键操作 输出形状 Token 化 切分与离散化 token 序列,长度 n 嵌入 查表或线性投影 Rn×d 位置注入 位置编码叠加 Rn×d QKV 投影 三个线性变换 Rn×dk 与R n×dv 表2-4 从原始输入到注意力层的处理流水线 Token 化、嵌入、位置注入三个阶段属于输入表示,最后进入注意力层完成 QKV 投影。从嵌入开始,文本、图像、语音 三种模态在形状上完全一致,唯一的自由度是序列长度 n。 这张表也解释了此前各节反复强调的「token 化是第一级差异化」:一旦完成离散化,后续每一步都对三种模态一视同 仁。这也意味着 token 化的质量直接决定模型能接触到的信息粒度——文本切分过粗会丢失语义边界,图像 Patch 过大会 丢失细节,语音量化过粗会丢失音素信息。输入表示的全部功夫,最终都落在这第一级环节上。 至此,输入表示这条主线收束完成。本章余下部分转向位置编码:从置换不变性问题出发,沿绝对编码、相对编码、旋转 编码的脉络,一直讲到无编码方案与位置信息内化的前沿。带着「任意模态 → 同维向量 → 位置注入 → QKV 投影」这一 心智模型进入位置编码部分,「顺序如何被感知」就不再有任何悬念。

2.6 经典位置编码

Transformer 的核心自注意力机制在计算上具有置换不变性:任意打乱输入序列的顺序,注意力输出(在忽略位置信息 时)保持不变。本节系统分析为什么需要位置编码,以及各类编码方案的数学原理与工程实践。

2.6.1 位置信息的必要性

  1. 置换不变性的问题 考虑一个长度为 n 的序列 X = (x , x , …, x )。自注意力的核心计算为: n QK T Attention(Q, K, V ) = softmax ( )V dk 其中 Q = XW , K = XW , V = XW 均来自同一输入的线性投影。若对 X 的行(即 token 顺序)施加任意置换 π, Q K V 则 QK 的结果只经历行列的对应置换,softmax 后每一行依然是同样的一组注意力权重,只是被重新排列。最终,输出 T 矩阵只是 V 的一个行置换,语义完全等价。
 # Self-attention is permutation invariant
 import torch
 import torch.nn.functional as F
 def self_attention(X, W_q, W_k, W_v):
     Q = X @ W_q
     K = X @ W_k
     V = X @ W_v
     scores = Q @ K.T / (K.shape[-1] ** 0.5)
     attn = F.softmax(scores, dim=-1)
     return attn @ V
 # Permuted input yields row-permuted output
 X = torch.randn(4, 64)          # sequence of 4 tokens
 perm = torch.tensor([2, 0, 3, 1])
 X_permuted = X[perm]
 # self_attention(X_permuted) is a row permutation of self_attention(X)
 # self-attention is permutation invariant

这意味着模型无法区分 “狗咬人” 与 “人咬狗”:两者的 token 集合相同,仅顺序不同,但语义完全相反。自然语言 中,词序承载了句法角色与语义关系,丢失词序等于丢失理解的基础。 2) 词袋模型的局限 传统词袋模型(Bag-of-Words)将文本视为词频向量,完全忽略词序。对于短文本分类任务,词袋模型尚可奏效,但以 下场景中词序信息不可或缺: •句法歧义:“The dog chased the cat” 与 “The cat chased the dog” 的 unigram 表示完全相同。 •依存关系:主语-谓语-宾语的句法结构依赖位置区分,位置交换导致语义反转。 •长距离依赖:“The woman who lives next door to us is a doctor” 中,“woman” 与 “is” 之间相距 7 个 token, 位置关系决定了一致性。 两类方案在信息保留上的差异如图2-6 所示: Word frequency vector Loses: word order info Bag-of-Words model Loses: syntactic structure Loses: long-range depend encies Injects word order Position encoding Preserves syntax Supports long-range mode ling 图2-6 词袋模型与位置编码的信息对比 3) RNN 的隐式位置建模 循环神经网络(RNN)通过递推结构隐式地编码位置信息。在第 t 步,隐藏状态 h = f (x , h ) 天然包含前 t 个 token 的 顺序信息。位置靠前的 token 经过更多次非线性变换,其信息在递推中逐渐衰减;位置靠后的 token 则施加更大的即时 t t t−1 影响。这种隐式位置编码的局限在于: •顺序依赖:h 的计算必须等待 h 完成,无法并行。 t t−1 •非对称性:位置 i 和 j 的关系不等价于 j 和 i 的关系,但这是计算过程的副作用,非显式表达。 •长程衰减:梯度在 BPTT 中沿时间步展开,远距离位置的信号在反向传播中指数衰减。 4) Transformer 中的显式位置编码 Transformer 抛弃了 RNN 的递推结构,用自注意力实现全局并行计算。这一设计消除了顺序依赖,同时也移除了 RNN 天 然的隐式位置建模能力。因此,显式位置编码成为必要组件:必须在 token 嵌入进入注意力计算前,向其中注入位置信 息。 注入方式有两类:将位置向量直接与 token 嵌入相加,或作为偏置项加入注意力分数。前者发展为正弦编码与可学习编 码(本节主题),后者在 ALiBi 中走向极致;在两者之间,业界又发展出相对编码、旋转编码等分支。各方案的核心目标 一致:以最小的计算代价,将位置结构强加于置换不变的注意力计算之上。

2.6.2 正弦位置编码

  1. 三角函数的设计思路 正弦编码是所有位置编码方案的起点。Vaswani 等人在原始 Transformer 论文中提出使用固定频率的正弦和余弦函数生 成位置编码,无需训练即可直接使用。 对于位置 pos 和维度索引 i(0 ≤ i < d /2),正弦位置编码定义为: model pos PE(pos, 2i) = sin ( )

100002i/dmodel PE(pos, 2i + 1) = cos ( ) pos 100002i/dmodel 每个维度对应一个特定频率的三角函数。低维度索引 i 对应高频(波长短,变化快),捕捉局部位置差异;高维度索引对 应低频(波长长,变化慢),捕捉全局位置趋势。波长范围从 2π 到约 2π × 10000,覆盖了短程到长程的完整频谱。

 import numpy as np
 def sinusoidal_position_encoding(max_len, d_model):
          pe = np.zeros((max_len, d_model))
          position = np.arange(max_len)[:, np.newaxis]
          div_term = np.exp(
              np.arange(0, d_model, 2) * -(np.log(10000.0) / d_model)

) pe[:, 0::2] = np.sin(position * div_term) pe[:, 1::2] = np.cos(position * div_term) return pe 2) 频率的几何解释 将不同维度的正弦波绘制出来,可以直观理解频率分布,如图2-7 所示。低维度的波形在几个 token 内就完成一个周期; 高维度的波形在 pos 从 0 到 d 的范围内几乎线性增长。这种多分辨率特性使得模型能从多个尺度同时感知位置。 model d=0: sin(pos) d=64: sin(pos/100) d=256: sin(pos/10000) High freq: large gaps betw Mid freq: locally smooth, d Low freq: slow variation ov een neighbors istinguishes farther er distance Captures local word orde Captures phrase-level posi Captures paragraph-level r: 'a' vs 'the' tions position trends 图2-7 正弦编码中频率与位置感知尺度的关系 3) 相对位置的可线性表示 正弦编码最优雅的性质是:任意固定偏移量 k 对应的相对位置关系 PE(pos + k),可以被 PE(pos) 通过一个线性变换表 达。具体而言,存在一个与 pos 无关的旋转矩阵 R ,使得: k PE(pos + k, 2i) cos(kωi ) sin(kωi ) PE(pos, 2i) [ ]=[ ][ ] PE(pos + k, 2i + 1) − sin(kωi ) cos(kωi ) PE(pos, 2i + 1) 其中 ω = 1/10000 2i/dmodel 。这暗示模型可以通过学习适当的注意权重矩阵,隐式地利用相对位置信息,无需显式计算 pos − pos 。 i j i

 # Relative position via rotation matrix
 # For any fixed offset k, PE(pos+k) = M_k @ PE(pos)
 # M_k = [[cos(k*w_i), sin(k*w_i)], [-sin(k*w_i), cos(k*w_i)]]
 # lets attention implicitly use relative positions
  1. 实验中的外推表现 正弦编码在训练长度内的表现与可学习编码相当,但在训练长度以外的外推表现有限。原始 Transformer 在 WMT 英德翻 译任务中训练于最长约 100 个 token 的序列,测试时若序列显著超过这一长度,性能会明显下降。原因在于:训练过程 中模型从未见过 pos > max_len 的编码值,无法将学到的位置映射泛化到不可见的位置。 尽管如此,正弦编码的线性相对位置性质为后续研究提供了关键启示。旋转位置编码(RoPE)正是由此出发,将相对位 置编码直接嵌入注意力计算中,实现了更优的长度外推能力。

2.6.3 实现与对比

  1. BERT/GPT 中的实现 将位置编码从固定的三角函数改为可训练参数,曾是 BERT 和 GPT 系列模型的主流实践。这种方法将位置视为与词嵌入 并列的参数,通过梯度下降学习最优的位置表示。 在实现层面,可学习位置嵌入是一个形状为 (max_position_embeddings, hidden_size) 的参数矩阵。BERT 使用 max_position_embeddings=512 ,GPT-2 将其扩展到 1024。每个位置的嵌入向量独立参与训练,与对应的 token 嵌入 按元素相加后输入 Transformer 层。
 # Learnable position embedding in BERT
 import torch.nn as nn
 class LearnablePositionEmbedding(nn.Module):
     def __init__(self, max_len, d_model):
         super().__init__()
         self.pe = nn.Embedding(max_len, d_model)
     def forward(self, x):
         # x: (batch, seq_len, d_model)
         seq_len = x.size(1)
         positions = torch.arange(seq_len, device=x.device)
         return x + self.pe(positions)

与正弦编码的加法方式相同:h = token_emb(x ) + pos_emb(i)。两个嵌入空间通过共享的加法操作对齐,模型在训练中 自行发现最优的位置-语义交互模式。 i i 2) 绝对位置嵌入的学习 训练初期,位置嵌入矩阵随机初始化;随着训练推进,梯度通过 x + pos_emb 的加法反传到嵌入矩阵,更新每个位置的 向量。位置 0(通常是 [CLS] 或 [BOS] )会学到独特的表示模式,因为它在分类任务或序列起始中扮演特殊角色。 不同位置学会的嵌入具有以下特性: •相邻位置的嵌入相似:pos = i 和 pos = i + 1 的嵌入向量余弦相似度较高,反映局部连续性。 •距离衰减:嵌入相似度随位置距离增大而逐渐降低。 •层次结构:通过 PCA 降维后,位置嵌入在主成分空间中呈现从左到右的平滑轨迹,而非随机散点。 3) 位置嵌入的可视化 将学习后的位置嵌入矩阵通过 PCA 降维至二维空间,可以观察其几何结构,如图2-8 所示: pos=0 pos=1 pos=2 pos=3 ... pos=511 Smooth trajectory: neighb ors cluster together pos=0 (CLS) Cluster separation: special tokens 图2-8 可学习位置嵌入的 PCA 可视化趋势 4) 与正弦编码的性能对比 在相同模型规模和训练数据上,可学习编码与正弦编码的最终性能差异通常很小(BLEU 分差 < 0.3)。两者各有优劣,如 表2-5 所示: 特性 正弦编码 可学习编码 参数数量 0(无训练参数) max_len × d_model 训练长度限制 可外推(但效果有限) 严格限制在 max_len 内 实现复杂度 低 低 微调灵活性 固定不变 可继续学习新位置 主要使用者 原始 Transformer BERT、GPT、ViT 表2-5 正弦编码与可学习编码对比 可学习编码的优势在于工程便利性:一行 nn.Embedding 即可实现,且微调阶段可自然扩展位置数(通过插值或直接扩 大嵌入矩阵)。劣势是在推理时若输入长度超过训练时的 max_len ,模型完全无法处理。这一限制催生了相对位置编码和 旋转位置编码的研究。

2.7 相对与旋转位置编码

绝对位置编码为每个位置分配独立的向量,无法自然地表达位置之间的相对关系。相对位置编码(Relative Position Encoding)将注意力建模从“位置 i 关注位置 j 的 token”转变为“token i 关注与其相距 k 的 token”,更贴近语言中词 与词之间的相对关系。

2.7.1 Shaw 等人的相对位置编码

Shaw、Uszkoreit 和 Vaswani 在 2018 年首次提出将相对位置信息注入 Transformer 的注意力计算。核心思路是在注意 力分数中引入两项与位置相关的偏置: (xi W Q )(xj W K )T + (xi W Q )(aK ij ) T eij = dk 其中 a 是与相对位置 j − i 关联的可学习向量。相对位置被裁剪到窗口 [−k, k] 内,超出窗口的位置共享同一表示。Shaw K 等人的实验表明,引入相对位置后 WMT 英德翻译的 BLEU 分数提升约 0.5 至 1.0 分,尤其对长句翻译改进更为显著。 ij

2.7.2 Transformer-XL 的改进

Dai 等人 2019 年在 Transformer-XL 中重新设计了相对位置编码,将其应用于段级循环机制。Transformer-XL 将注意力 分数分解为四项: Arel Q ij = Ei W W K,E T Ej + Ei W Q W K,R Ri−j T + uW K,E EjT + vW K,R Ri−j T 内容-内容 内容-位置 全局内容偏置 全局位置偏置 其中 R 是相对位置 i − j 的正弦编码,u 和 v 是可学习的全局偏置向量。这一分解使得模型能够在跨段注意力中复用相 对位置信息,是 Transformer-XL 实现超长上下文建模的关键技术。 i−j

2.7.3 T5 的相对位置偏置

Raffel 等人在 T5 模型中采用了更简化的相对位置方案:直接将相对位置映射为标量偏置,加到注意力 logits 上,不参与 query-key 的内积计算。每个相对位置 i − j 被映射到一个桶(bucket),桶内的位置共享同一标量参数。

 # T5-style relative position
 def compute_bias(num_buckets, relative_positions):
     # relative_positions: (seq_len, seq_len), values in [-seq_len+1, seq_len-1]
     # Each relative distance maps to a bucket, each bucket has a learnable scalar
     bias = nn.Embedding(num_buckets, num_heads)
     bucket_ids = bucket_assignment(relative_positions, num_buckets)
     return bias(bucket_ids) # (seq_len, seq_len, num_heads)

T5 将对数分桶策略用于相对位置:近距离(0, 1, 2, …, n)使用精确分桶,远距离使用对数间隔分桶。这保证了模型对局 部位置差异的敏感度,同时以紧凑的参数预算覆盖长距离依赖。

2.7.4 DeBERTa 的解耦位置注意力

He 等人在 DeBERTa 中将注意力分解为内容注意力和位置注意力两个独立流: Aij = Hi HjT + Hi (Pj∣i )T + Pi∣j HjT + Pi∣j (Pj∣i )T 前三项分别对应内容-内容、内容-位置、位置-内容的交互,第四项位置-位置在标准注意力中通常被省略。DeBERTa 的核 心创新在于位置-内容的交互:不仅考虑 j 相对 i 的位置,也考虑 i 相对 j 的位置,实现更精细的相对位置建模。从绝对方 案到四种相对方案的演进路径如图2-9 所示。 Absolute position encodin Relative position encoding g One vector per position Models relations between pairs Shaw: added to key/value Transformer-XL: four-term T5: scalar bias bucketing DeBERTa: decoupled conte decomposition nt and position 图2-9 相对位置编码方案的演进路径 相对位置编码的共同优势是长度外推能力:模型学到的是相对距离关系(如“前一个词”“后三个词”),而非绝对坐标 (如“第 37 个位置”),因此比绝对位置编码更易泛化到训练时未见过的序列长度。旋转位置编码和 ALiBi 即沿着这一方 向进一步深化。

2.7.5 复数空间中的旋转操作

旋转位置编码(Rotary Position Embedding,RoPE)由 Su 等人于 2021 年提出(arXiv:2104.09864)。与在输入层添加 位置嵌入不同,RoPE 通过旋转矩阵将位置信息直接注入 query 和 key 向量,使得注意力内积天然编码相对位置。 RoPE 的数学直觉源于复数乘法:在二维平面上,将向量乘以 e 等效于旋转角度 θ。将 query 和 key 向量的每个维度对 iθ 视为一个二维子空间,对第 m 个位置的向量按 mθ 进行旋转。 定义维度对 (2i, 2i + 1) 上的旋转操作: (2i) ] [ (2i+1) ] cos mθi − sin mθi f{q,k} (xm , m) = [ xm sin mθi cos mθi xm 其中 θ = 10000 与正弦编码中的频率参数相同。这一操作的几何意义是:位置 m 越大,旋转角度越大;维度索引 i 越 −2i/d 大,旋转越慢(对应低频)。 i

 # RoPE: apply rotary embedding
 def apply_rotary_pos_emb(x, cos, sin):
     # x: (batch, seq_len, n_heads, head_dim)
     # cos, sin: (seq_len, head_dim)
     x_even = x[..., 0::2]
     x_odd = x[..., 1::2]
     rotated = torch.cat([
         x_even * cos[:, None, :] - x_odd * sin[:, None, :],
         x_odd * cos[:, None, :] + x_even * sin[:, None, :]

], dim=-1)

2.7.6 RoPE 的数学推导

 return rotated

RoPE 的核心性质在于注意力的内积可以表达为相对位置的函数。设 q 和 k 分别为位置 m 和 n 的 query 和 key 向量, 经 RoPE 编码后: m n T qm kn = (RΘ,m d q )T (RΘ,n d k ) = q T RΘ,n−m d k 其中 R 是 d 维分块对角旋转矩阵。关键在于,旋转矩阵满足 R d Θ,m RΘ,n = RΘ,n−m T ,因此内积结果仅依赖于相对位置 n − m,如下所示: Θ,m d/2−1 T qm kn = ∑ (q (2i) k (2i) + q (2i+1) k (2i+1) ) cos(m − n)θi + (q (2i) k (2i+1) − q (2i+1) k (2i) ) sin(m − n)θi i=0 公式表明,注意力分数是相对位置 m − n 的函数,且 q 和 k 的原始内容向量与位置旋转项通过加法和乘法解耦。

2.7.7 长距离衰减性质

相比绝对位置编码,RoPE 具有天然的长距离衰减性质:随着相对距离 ∣m − n∣ 的增加,位置编码项的值呈有界振荡,不 随距离增大而发散或衰减至零。但配合 softmax 归一化后,训练过程中模型会学到对距离较远的 token 分配较小的注意 力权重,从而实现软性的距离衰减。 Su 等人的实验表明,RoPE 对训练长度的外推能力显著优于正弦编码:在训练序列长度为 512 时,RoPE 在 2048 长度上 的困惑度增加量远小于绝对位置编码。这一性质使 RoPE 成为长上下文模型的首选方案。

2.7.8 LLaMA 等模型中的实际应用

LLaMA(Touvron et al., 2023)、LLaMA 2、Qwen、ChatGLM 等主流开源大语言模型均采用 RoPE。LLaMA 的默认设置 中,RoPE 仅应用于每层的 query 和 key 向量,value 向量不参与旋转:

 # LLaMA-style RoPE: rotate q and k, not v
 class LLaMAAttention(nn.Module):
     def forward(self, x, freqs_cis):

q, k, v = self.q_proj(x), self.k_proj(x), self.v_proj(x) q, k = apply_rotary_emb(q, k, freqs_cis=freqs_cis)

         # v is NOT rotated
         scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.head_dim)
         attn = F.softmax(scores, dim=-1)
         return torch.matmul(attn, v)

RoPE 在注意力计算中的注入位置如图2-10 所示: Q projection RoPE rotate Q Input x (pos=m) K projection RoPE rotate K Attention inner product Output: with relative positi on (m-n) V projection 图2-10 RoPE 在注意力计算中的注入位置 截至 2026 年,RoPE 已取代正弦编码与可学习位置编码,成为大语言模型的主流位置编码方案:LLaMA、Qwen、 DeepSeek、Kimi、Mistral 等系列模型全部采用,覆盖从 0.6B 到 600B+ 的参数区间。长上下文场景下,NTK-aware 插 值、YaRN 等频率缩放方法将 RoPE 的有效上下文窗口扩展至 128K–1M token,已成为标准训练实践。

2.7.9 RoPE 的长上下文扩展

RoPE 的频率分布由基频 Θ = 10000 决定。当推理长度 L 远大于训练长度 L 时,模型会遇到训练中从未见过的旋转 test train 角度,注意力分布随之失准;同时高频分量不足,无法区分近距离的精细位置差异。围绕这一问题发展出的频率缩放方 法,构成了长上下文扩展的核心技术栈。 线性插值(Position Interpolation, PI)(Chen et al. 2023):全局缩放位置索引,pos = pos ⋅ (L /L )。简单但会挤 ′ train test 压所有频率,导致近距离区分能力退化。支持约 4× 扩展。 NTK-aware 插值(bloc97 2023):仅缩放低频,保留高频精细化能力: 2i θi′ = θi ⋅ s d 其中 s 为缩放因子。指数 2i/d 使缩放幅度随维度索引增大而增大,低频大幅拉伸、高频几乎不变。无需额外训练即可支 持 4-8× 扩展。 YaRN(Yet another RoPE extensioN)(Peng et al. 2023):在 NTK-aware 基础上添加温度调节: q⊤rot krot Attention(q, k) = softmax ( ) t ⋅ dk 其中 t = 0.1 ⋅ ln(s) + 1.0。YaRN 包含分段频率缩放(“NTK-by-parts”):超高频(> 1)不做修改以防止局部损坏,极低 频(< 1/s)做线性插值以确保充分拉伸,中间频率做 NTK-aware 插值。辅以 0.1% 数据的少量微调,YaRN 使 LLaMA 2 7B 可稳定拓展至 128K 上下文,扩展比高达 64×。 各方法的对比如表2-6 所示。 扩展方法 额外训练 最大扩展比 核心原理 代表工作 线性插值(PI) 可选 ≈ 4× 全局位置缩放 Chen et al. 2023 NTK-aware 否 ≈ 4-8× 仅缩放低频 bloc97 2023 YaRN 少量(0.1%) 64× NTK + 分段频率 + 温度 Peng et al. 2023 ReRoPE 否 ≈ 16× 局部窗口 + 全局 RoPE Su 2023 Self-Extend 否 ≈ 8× 自注意力扩展感知 Jin et al. 2024 表2-6 位置编码长度外推方法对比 Self-Extend(Jin et al. 2024)不修改 RoPE 本身,而是利用模型对大相对距离和小相对距离的不同学习模式,近距离使 用精确 RoPE、远距离使用分组注意力模拟,在无需任何微调的情况下实现有效扩展。 这些方法已在主流模型中广泛落地:LLaMA 2 Long 采用 YaRN 缩放结合微调扩展到 32K,CodeLLaMA 将基频提高到 1000000 以支持 16K 上下文,这些都是 NTK-aware 插值思路的工程化应用。它们的共同哲学是:RoPE 的外推瓶颈不在 编码形式本身,而在频率谱与序列长度之间的匹配——只要让旋转角度的分布适配目标长度,无需改动注意力结构即可大 幅扩展有效上下文。

2.8 ALiBi、NoPE 与位置编码前沿

绝对编码、相对编码与旋转编码构成了位置编码的主流谱系。本节介绍与之形成对照的极简路线:ALiBi 用一个不含参数 的线性偏置取代全部位置表示,NoPE 则完全不注入位置信息;在此之上,梳理位置编码从必需组件走向可选组件的演化 谱系,并给出面向工程实践的选型方法论。

2.8.1 ALiBi 的线性偏置设计

ALiBi(Attention with Linear Biases)由 Press 等人于 2022 年提出,代表了位置编码的极简方向:不在输入或注意力计 算中引入任何可学习的位置参数,仅通过一个预设的线性惩罚项使模型隐式关注邻近 token。 ALiBi 的核心操作为:在 softmax 之前,向注意力分数矩阵加一个固定的线性偏置矩阵,其中第 i 行第 j 列的偏置为 m ⋅ (j − i)(m 为每个注意力头的斜率)。由于在因果(自回归)掩码下 j ≤ i,该项始终为负值,且距离越远惩罚越大。

2.0 ** (-2 ** -(math.log2(num_heads) - 3) * h)

 # ALiBi: static linear bias per head (conceptual)
 import math
 import torch
 def alibi_slopes(num_heads):
     # Geometrically spaced slopes, one per head
     return torch.tensor([
         for h in range(1, num_heads + 1)

])

 def alibi_bias(num_heads, seq_len):
     slopes = alibi_slopes(num_heads)           # (num_heads,)
     i = torch.arange(seq_len).unsqueeze(1)     # query positions
     j = torch.arange(seq_len).unsqueeze(0)     # key positions
     dist = (i - j).clamp_min(0).float()        # causal distance i - j >= 0
     return -slopes.view(-1, 1, 1) * dist       # (num_heads, seq_len, seq_len)

斜率 m 的选择遵循几何级数:对于 H 个头,斜率取 2 −8/H , 2−16/H , …, 2−8 。小斜率适用于远距离建模的注意力头,大斜率 使某些头专注于最近的几个 token。

2.8.2 注意力偏置的数学形式

加入 ALiBi 偏置后的注意力计算为: QK T Attention(Q, K, V ) = softmax ( + B) V dk 其中 B = m ⋅ (j − i)(因果掩码下)。由于 softmax 的指数性质,e 等效于对注意力权重施加乘法衰减因子 e Bij m(j−i) 。对 于负的 j − i,该因子随距离增大指数减小,迫使模型将注意力集中在近邻 token。 ij 不同斜率的注意力头在局部与全局建模上的分工如图2-11 所示: ALiBi bias design head 0: slope = 1/2^1 head 4: slope = 1/2^5 head 7: slope = 1/2^8 Strongly penalizes far dista Mild penalty Tiny penalty, close to glob nces al attention Focus on local context Balance local and global Cover long-range depende ncies 图2-11 不同注意力头中 ALiBi 斜率的差异化作用

2.8.3 长度外推能力分析

ALiBi 最突出的优势是无训练外推:模型在 L 长度上训练后,无需任何微调即可在 2 × L 甚至 10 × L 长度上保 持稳定性能。Press 等人的实验表明,在 WikiText-103 上训练于 1024 长度的 Transformer,RoPE 外推到 2048 时困惑度 train train train 上升约 15%,而 ALiBi 仅上升约 1%。 外推能力来源于两个属性:偏置矩阵不含可学习参数,因此不存在未见过的位置参数问题;线性偏置的单调性确保更近的 token 始终获得更多注意力,这一规律在任意长度下持续成立。 权衡之下,ALiBi 以零参数成本实现了领先的长度外推性能,尤其适合需要灵活推理长度的部署场景;其局限在于无法像 RoPE 那样通过频率调整微调位置行为,在需要精细位置控制的预训练-微调范式中不如 RoPE 灵活。截至 2026 年,ALiBi 仍被部分模型采用,MosaicML 的 MPT 系列、Falcon 与 BLOOM 即以其无训练外推能力为卖点;但主流趋势已转向 RoPE 加频率缩放(NTK/YaRN),后者既能外推长上下文,又保留可学习的频率控制。ALiBi 更多作为零参数外推的对照 基准存在。

2.8.4 无位置编码的探索

ALiBi 已把位置表示压缩到零个可学习参数,更进一步的问题是:能否完全不注入任何位置信息?Haviv 等人 2022 年的 研究表明,即使在因果语言模型中完全移除位置编码,Transformer 仍然可以通过注意力掩码隐式地学习位置信息:因果 掩码本身提供了序列的方向性(左侧为过去,右侧为未来),而层的深度叠加提供了类似「计算时间步」的替代位置信 号。

 # NoPE: causal language model
 # Relies solely on causal mask
 class NoPEAttention(nn.Module):
     def forward(self, x, causal_mask):

q, k, v = self.qkv_proj(x).chunk(3, dim=-1)

         scores = q @ k.transpose(-2, -1) / math.sqrt(self.head_dim)
         scores = scores + causal_mask # Only causal mask, no position bias
         attn = F.softmax(scores, dim=-1)
         return attn @ v

Kazemnejad 等人(2024)在 “The Impact of Positional Encoding on Length Generalization in Transformers” 中系 统比较了各种位置编码方案的长度泛化能力,得出反直觉结论:完全移除位置编码的模型(No Positional Encoding, NoPE)在训练长度内的性能与带位置编码的模型相当,且在短序列训练后能泛化到更长序列。 NoPE 的生效机制是因果掩码的非对称性——第 t 个位置只能关注前 t 个位置,「注意力分布的有效宽度」成为位置 t 的单 调函数,构成位置的统计指纹: •早期位置:注意力分布集中在前几步,历史窗口短; •中期位置:注意力分布逐渐扩散,历史窗口持续增长; •晚期位置:注意力分布趋于稳定但宽泛,历史窗口饱和。 模型可以学习通过注意力权重的分布形状来推断当前位置,而无需外部编码。 NoPE 成功的条件有四: •多层传递的必要性:单层 Transformer 的 NoPE 能力弱(位置指纹信号弱),多层堆叠时各层的隐式位置信号通过残差 连接相互强化,形成可辨识的位置表示; •注意力头的多样性:更多头提供更多样的注意力模式(有些关注全部历史,有些关注最近邻),使位置指纹更加丰富; •数据中的长度多样性:训练数据包含多样的序列长度和结构(而非全固定长度),有助于模型学习长度不变的位置推 理; •足够的嵌入维度:d 越大,隐式位置编码的容量越大,NoPE 的效果越好。 需要指出的是,后续研究发现 NoPE 在较长序列与更大规模下编码位置信息的能力减弱,难以替代显式位置编码在长上下 文中的稳定表现。2025 年以来的实践采取折中的「可选 RoPE」策略:短至中等序列(≤ 32K)不注入位置编码,仅在 极长上下文启用 RoPE/YaRN,节省常见长度推理中 1-3% 的 RoPE 计算开销。

2.8.5 位置编码的演化谱系

从 2017 年的正弦编码到 2026 年的位置信息内化,位置编码经历了三重转变:从固定函数到可学习参数,从绝对编码到 相对编码,从必需组件到可选组件。完整演化路径如图2-12 所示。 Evolution of Position Encoding 2017 2018-2019 2020-2022 2023 2024 2025-2026 图2-12 位置编码从必需到可选的演化谱系 这条谱系的终点尚未到来。NoPE 的发现提示了一种可能性:随着模型规模与数据规模的持续增长,显式的位置编码可能 像早期神经网络中的手工特征(Handcrafted Features)一样,最终被端到端学习所替代;但 RoPE 生态的成熟度与长上 下文的稳定需求,决定了显式方案在未来数年内仍是工程的默认选择。无论最终走向如何,这一演化历程已经深刻重塑了 我们对 Transformer 内部表征的理解。

2.8.6 几何潜在推理

2026 年,位置编码研究进入全新阶段——几何潜在推理(Geometric Latent Reasoning)。该方法将位置信息建模为模型 内部高维表征空间中的潜在几何结构,而非外部注入。 核心假设:经过充分训练的 LLM 在其隐藏层中形成了与序列结构相关的几何形态,位置信息可以通过这些几何形态的传 播和变换自然产生。 方法框架包含两个核心机制。 表征空间的黎曼度量学习:在训练中引入辅助目标,鼓励隐藏表示 h 按序列顺序沿隐藏空间平滑测地线(Geodesic)分 布: t T −1 Lgeo = ∑ dM (ht , ht+1 ) t=1 其中 d 为通过可学习黎曼度量张量定义的测地距离。这鼓励了“相邻位置 = 相邻表征”的几何先验。 M 拓扑序约束:在注意力 softmax 中引入基于拓扑序列序数的偏置项,使模型不依赖外部 PE 也能感知前后关系。与 ALiBi 的简单线性偏置不同,几何潜在推理的偏置由表征空间的局部曲率决定:高曲率区域(信息密度高)偏置更强,低曲率区 域偏置更弱。 实验结果:在需要理解序列结构层次深度的任务上(长代码嵌套结构理解、长文本段落边界检测),几何潜在推理相比 NoPE 提升 4-6% 准确率,同时保持了 NoPE 的所有优点(无长度上限、推理时零额外计算)。

2.8.7 位置编码与架构的交互

位置编码的选择并非孤立决策,它与注意力压缩、线性注意力、SSM、MoE 等架构创新存在深层交互: •MLA 与 RoPE 的解耦:MLA 的低秩键值压缩排斥全维度 RoPE,迫使 DeepSeek 设计了「解耦 RoPE」,这是位置编码 与注意力压缩之间的设计张力; •线性注意力与位置编码:去除 softmax 核后失去了隐含的近距离偏好(locality bias),对显式 PE 的依赖比标准注意力 更强,例如线性 Transformer 的 ϕ(x) = ELU(x) + 1 完全不含位置信息; •SSM 与位置编码:SSM 通过序列递推自然携带位置信息(状态 h 是位置 t 的函数),对显式 PE 需求最低,与 NoPE 的 发现形成跨架构呼应; t •MoE 与位置编码:不同专家可能需要不同的位置信息粒度(如语法专家关注局部位置,语义专家关注全局位置),这为 位置编码与路由的联合设计开辟了空间。

2.8.8 位置编码选型方法论

工程实践中的选型决策可归纳为五条: •训练长度等于推理长度:RoPE 是最安全的选择,LLaMA/Qwen/DeepSeek 全系列验证了其鲁棒性; •需要长上下文外推:推理长度超过训练长度 4 倍时,YaRN 加 0.1% 数据微调是当前最优方案;如能接受少量精度损 失,NTK-aware(无需训练)可作为快速原型方案; •推理性能优先:NoPE 可节省 RoPE 的 1-3% 计算开销,当前最佳实践是「≤ 32K 用 NoPE,> 32K 启用 RoPE/YaRN」 的动态切换; •与其他架构创新的兼容性:使用 MLA 时必须采用解耦 RoPE(Decoupled RoPE);使用线性注意力时需要显式 PE,因 为线性注意力丧失了 softmax 隐含的近距离偏好; •前沿探索:几何潜在推理等新型方案值得跟踪,但生产环境应保守——RoPE 的生态成熟度 (FlashAttention/RingAttention 均已适配)在 2026 年仍有压倒性优势。 「位置编码」的概念正在被重新定义:2026 年的观点认为,位置信息不应被视为输入的一个外加特征,而应被视为序列 模型内部状态空间的自然几何属性。RoPE 的方向旋转、NoPE 的因果掩码指纹、几何潜在推理的测地线,这些看似不同 的方法本质上都在回答同一个问题:如何在神经网络的隐藏空间中组织序的结构?