当前位置: 首页 > news >正文

常见的位置编码 Positional Encoding

位置编码(Positional Encoding)

——理解序列顺序的关键机制

关键词:Transformer、位置编码、人工智能、自然语言处理、深度学习、序列建模


一、引言

在现代人工智能系统中,Transformer 架构已成为处理序列数据的主流模型。它被广泛应用于自然语言处理(NLP)、语音识别、时间序列预测等多个领域。然而,Transformer 的核心机制——自注意力(Self-Attention)本身不包含序列顺序信息。这就带来了一个关键问题:模型如何感知输入序列中元素的顺序?

为了解决这一问题,研究者引入了位置编码(Positional Encoding)。位置编码的作用是为模型提供输入序列中各个元素的位置信息,使其能够区分“猫追老鼠”和“老鼠追猫”这类语序不同的句子。

本文将详细介绍位置编码的基本原理、常见类型及其在主流模型中的应用,并探讨其未来发展方向。


二、基本概念

1. 什么是位置编码?

位置编码是一种向量化表示方法,用于将序列中每个元素的位置信息嵌入到模型输入中。通常,位置编码与词嵌入(Token Embedding)具有相同的维度,并在输入 Transformer 之前与其相加。

举个例子:

假设我们有两句话:

  1. “猫追老鼠”
  2. “老鼠追猫”

虽然这两个句子包含相同的词,但语义完全不同。如果没有位置信息,模型可能会认为这两个句子是相同的。

因此,位置编码的作用就是赋予模型对顺序的理解能力

公式表示如下:

Input = TokenEmbedding ( x i ) + PositionalEncoding ( p o s i ) \text{Input} = \text{TokenEmbedding}(x_i) + \text{PositionalEncoding}(pos_i) Input=TokenEmbedding(xi)+PositionalEncoding(posi)

其中:

  • x i x_i xi 是第 i i i 个输入元素;
  • p o s i pos_i posi 是其在序列中的位置;
  • TokenEmbedding 是词嵌入函数;
  • PositionalEncoding 是位置编码函数。

三、常见的位置编码类型

1. 正弦/余弦位置编码(Sinusoidal Positional Encoding)

这是 Google 在 2017 年的原始 Transformer 论文中提出的一种固定式位置编码方法。

数学形式:

对于位置 pos 和维度 i,定义如下:

P E ( p o s , 2 i ) = sin ⁡ ( p o s 1000 0 2 i d model ) PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d_{\text{model}}}}}\right) PE(pos,2i)=sin(10000dmodel2ipos)
P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s 1000 0 2 i d model ) PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d_{\text{model}}}}}\right) PE(pos,2i+1)=cos(10000dmodel2ipos)

其中:

  • pos 是元素在序列中的位置;
  • i 是嵌入向量的维度索引;
  • d_model 是模型的输入维度。
优点:
  • 可推广到训练中未见过的序列长度;
  • 有助于模型捕捉相对位置关系。
缺点:
  • 不可学习,无法根据任务优化;
  • 对于某些任务,固定编码可能不如学习型编码表现好。

2. 学习型位置编码(Learned Positional Encoding)

在该方法中,位置编码作为可学习参数,在模型训练过程中不断优化。通常为每个位置分配一个可学习的向量,构成一个大小为 (max_seq_len, d_model) 的矩阵。

实现方式:
  • 初始化一个形状为 (max_seq_len, d_model) 的位置嵌入矩阵;
  • 每个位置对应的向量在训练中通过反向传播更新。
优点:
  • 更适合特定任务;
  • 可以捕捉复杂的模式;
  • 与模型整体联合优化。
缺点:
  • 限制了最大序列长度;
  • 参数量增加;
  • 无法泛化到比训练时更长的序列。

3. 相对位置编码(Relative Positional Encoding)

相对位置编码关注两个元素之间的距离,而非其绝对位置。适用于建模长距离依赖关系。

应用场景:
  • Transformer-XL
  • 改进版 BERT 模型
优点:
  • 更好地建模上下文关系;
  • 有助于捕捉长距离依赖。
缺点:
  • 实现复杂度较高;
  • 需要额外的参数或计算。

4. 旋转位置编码(Rotary Position Embedding, RoPE)

RoPE 通过旋转矩阵将位置信息嵌入查询(Query)和键(Key)向量中,从而实现对位置信息的编码。

核心思想:

对于每个位置,定义一个旋转矩阵,作用于 Q 和 K 向量:

Q i ′ = rotate ( Q i , θ i ) Q_i' = \text{rotate}(Q_i, \theta_i) Qi=rotate(Qi,θi)
K j ′ = rotate ( K j , θ j ) K_j' = \text{rotate}(K_j, \theta_j) Kj=rotate(Kj,θj)

其中旋转角度与位置相关。

优点:
  • 支持任意长度的序列;
  • 保持相对位置信息;
  • 不需要额外参数;
  • 推理效率高。
缺点:
  • 实现较为复杂;
  • 需要一定的数学基础理解其原理。
应用模型:
  • LLaMA 系列(Meta)
  • ChatGLM(智谱 AI)
  • Phi-2(Microsoft)

5. ALiBi(Attention with Linear Biases)

ALiBi 方法通过在注意力分数中加入基于位置的线性偏置项来建模位置信息,而不需要显式的嵌入层。

原理公式:

Attention ( Q , K , V ) = softmax ( Q K T d k + bias ( p o s ) ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} + \text{bias}(pos)\right)V Attention(Q,K,V)=softmax(dk QKT+bias(pos))V

其中 bias(pos) 是一个基于位置的线性项。

优点:
  • 无需额外参数;
  • 支持非常长的上下文;
  • 推理效率高;
  • 可用于训练和推理阶段。
缺点:
  • 可能不如其他方法表达能力强;
  • 对位置信息的建模较为简单。
应用模型:
  • BLOOM(BigScience)
  • MPT(MosaicML)
  • Falcon(TII)

四、位置编码在主流模型中的应用

模型位置编码类型特点
Transformer (2017)Sinusoidal最早提出,不可学习
BERTLearned可学习,固定长度
Transformer-XLRelative支持跨段落建模
LLaMA / LLaMA2 / LLaMA3RoPE支持长上下文,无长度限制
ChatGLM / GLM-130BRoPE高效建模长文本
Phi-2 (Microsoft)RoPE小模型大能力
GPT-Neo / GPT-JRotary / Learned多种变体
ALiBi-Enabled 模型ALiBi无显式位置编码

五、位置编码的演进趋势

时间方法特点
2017Sinusoidal最初版本,不可学习
2018-2020Learned更灵活,但受长度限制
2020-2022Relative支持长程依赖
2021-现在RoPE & ALiBi更高效、支持无限长度、无需额外参数

六、如何选择合适的位置编码?

使用场景推荐方法
短文本任务(如分类)Learned
长文本生成RoPE 或 ALiBi
需要相对位置建模Relative
想要轻量化设计ALiBi
兼容性要求高Sinusoidal(通用性强)

相关文章:

  • 1. std::result_of是什么?为什么它出现?
  • c++存储持续性和链接性
  • Netty的内存池机制怎样设计的?
  • Webug4.0靶场通关笔记15- 第19关文件上传(畸形文件)
  • 服务器端的准备工作
  • 求解器介绍之gurobi
  • Linux电源管理(6)_Generic PM之挂起功能
  • 【自然语言处理与大模型】LlamaIndex的数据连接器和对话引擎
  • 二、Python变量基础(2)
  • 30天开发操作系统 第27天 -- LDT与库
  • 工业主义与民主的兴衰:历史逻辑与未来危机
  • uniswap v4 合约解析1 pool初始化
  • VTK 数据结构和算法类介绍
  • pyqt写一个单片机配置界面
  • 基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计
  • java单元测试代码
  • Python中的JSON库,详细介绍与代码示例
  • 《RESTful API版本控制的哲学思辨:稳定性与创新性的终极平衡》
  • Node.js 是什么?
  • 深入理解 TensorFlow 的模型保存与加载机制(SavedModel vs H5)
  • 2025五一档电影票房破6亿
  • 抗战回望15︱《五月国耻纪念专号》:“不堪回首”
  • 澳大利亚大选今日投票:聚焦生活成本与“特朗普问题”
  • 讲座预告|政府在人工智能研究和应用领域的作用
  • 长江财险一季度净亏1449.81万元,去年曾实现扭亏为盈
  • 魔都眼|石库门里看车展,五一来张园体验城市“漫时光”