Transformer是什么:从词向量到位置编码的通俗解析

作者:起个名字好难2026.11.03 22:18浏览量:0

简介:本文系统讲解Transformer的定义、核心组成与工作原理,重点解析单词Embedding、位置编码与自注意力机制的作用与实现方式,对比其与RNN、词袋模型的本质区别,并梳理典型应用场景与工程实践注意事项,帮助读者快速建立对Transformer架构的整体认知。

一、概念定义:Transformer 是什么

Transformer 是一种基于自注意力机制构建的深度神经网络架构,最初为解决序列到序列的自然语言处理任务而提出。它的核心思想可以概括为一句话:完全依靠注意力机制来建模序列中任意两个位置之间的依赖关系,而不再使用循环结构逐步递推地处理序列。

可以从三个视角来理解这个定义:

  • 技术视角:它是一种由注意力模块、前馈网络、残差连接和层归一化堆叠而成的网络结构,输入和输出都是向量序列;
  • 解决问题视角:它解决了传统循环网络无法并行计算、长距离依赖容易衰减两大痛点;
  • 使用视角:对开发者而言,它是一种通用序列建模“骨架”,只要任务能表示为“序列进、序列出”或“序列进、结果出”,都可以基于它来搭建模型。

二、背景与价值:它为什么会出现

在 Transformer 出现之前,序列建模主要依赖循环神经网络及其改进版本。这类结构存在两个根本性限制:

  1. 顺序计算、无法并行:模型必须按时间步逐个处理单词,前一时刻的计算结果是后一时刻的输入,导致训练难以在时间维度上并行,算力利用率低;
  2. 长距离依赖衰减:相隔较远的单词之间,信息需要经过多步传递才能建立联系,路径越长信息越容易丢失。

Transformer 用自注意力机制让序列中每个位置直接与所有其他位置建立连接——任意两个单词之间的信息传递路径长度都是 1,同时整个序列可以一次性并行计算。这两点共同决定了它成为后续大规模预训练语言模型的基础架构。

三、核心组成:从输入表示到注意力计算

3.1 单词 Embedding:让文字变成可计算的向量

计算机无法直接理解文字,第一步是把离散的词(或子词、字符)映射为低维稠密向量,这就是单词 Embedding。获取方式有两类:

  • 预训练词向量:用经典的词向量算法(如基于上下文窗口预测或基于共现统计的方法)在大规模语料上预先训练得到,再作为初始输入;
  • 端到端学习:在 Transformer 内部随机初始化一个 Embedding 矩阵,随任务一起训练得到,实践中这种方式更为常见,因为向量会随下游任务不断调整,更贴合任务语义。

Embedding 的本质作用是让语义相近的词在向量空间中彼此靠近,为后续的注意力计算提供可比较的数学表示。

3.2 位置 Embedding:为什么没有它就退化成词袋模型

这是理解 Transformer 最关键、也最容易被初学者忽略的一环。

问题所在:注意力机制本质上是“集合运算”——它对输入元素的顺序并不敏感。如果只把词向量送入模型,那么“猫追狗”和“狗追猫”经过注意力计算后得到的表示几乎完全相同,模型就退化成了词袋模型,丢失了语序这一对自然语言至关重要的信息。而 Transformer 又不采用循环结构,模型本身天然感知不到单词的先后顺序。

解决方案:在词向量之外,额外引入位置 Embedding(Position Encoding,简称 PE),显式地把“单词出现在句子中的第几个位置”编码进向量。PE 的维度与单词 Embedding 完全相同,两者直接逐位相加后作为模型真正的输入。

位置编码有两种获得方式:一是作为可训练参数学习得到;二是通过固定公式计算得到。经典 Transformer 采用后者,公式如下:

  • PE(pos, 2i) = sin(pos / 10000^(2i/d))
  • PE(pos, 2i+1) = cos(pos / 10000^(2i/d))

参数含义:

  • pos:单词在句子中的位置(第 0 个、第 1 个……);
  • d:位置编码的维度,与词向量维度一致;
  • 2i:偶数维度索引,使用 sin 函数;
  • 2i+1:奇数维度索引,使用 cos 函数。

用如下示意伪代码可以直观理解其计算过程:

  1. import numpy as np
  2. def positional_encoding(max_len, d):
  3. pe = np.zeros((max_len, d))
  4. pos = np.arange(max_len).reshape(-1, 1) # 每个单词的位置索引
  5. i = np.arange(0, d, 2) # 偶数维度索引
  6. div = np.power(10000, i / d) # 不同维度对应的频率
  7. pe[:, 0::2] = np.sin(pos / div) # 偶数维填 sin
  8. pe[:, 1::2] = np.cos(pos / div) # 奇数维填 cos
  9. return pe # 最后与词向量相加

采用这种公式计算的优点非常明确:

  1. 无需训练、不占参数,位置信息“免费”获得;
  2. 取值范围在 -1 到 1 之间,数值稳定,不会干扰训练;
  3. 不同维度对应不同频率的正弦波,相当于用多把“快慢不同的时钟”共同标记位置——低维变化快、捕捉细粒度位置差异,高维变化慢、捕捉粗粒度位置关系;
  4. 对任意固定偏移量 k,PE(pos+k) 都可以表示为 PE(pos) 的线性变换,这让模型很容易学习“相对位置”关系;
  5. 理论上对训练时未见过更长位置也有一定的外推能力。

3.3 自注意力与多头注意力

自注意力机制可以类比为一次“模糊检索”:序列中的每个单词会生成三个向量——Query(查询)、Key(键)、Value(值)。当前单词用自己的 Query 去和所有单词的 Key 做相似度匹配,匹配得分经过 softmax 归一化后作为权重,对所有单词的 Value 加权求和,得到融合了全局上下文的新表示。核心公式为:

Attention(Q, K, V) = softmax(QK^T / √d_k) · V

其中 √d_k 是缩放因子,用于防止点积过大导致 softmax 输出趋于极端、梯度消失。多头注意力则把向量切分为多份,在多个子空间中并行计算注意力再拼接,让不同“头”分别关注语法关系、语义关联、位置邻近等不同模式的信息。

3.4 前馈网络、残差连接与层归一化

每一层还包含一个对每个位置独立作用的前馈网络,负责对注意力聚合后的信息做非线性变换;残差连接把子层输入直接加到输出上,缓解深层网络的梯度问题;层归一化稳定各层输出的数值分布。这些组件共同保证了模型可以堆叠得很深而训练依然稳定。

3.5 编码器与解码器

经典 Transformer 分为两部分:编码器负责对输入序列做双向的全局理解;解码器负责自回归地生成输出序列,其中使用了带掩码的注意力,保证生成第 t 个词时只能看到前 t-1 个位置,避免“偷看”未来信息。

四、工作原理:一个完整处理流程

以文本生成任务为例,整体流程如下:

  1. 文本经过分词转为词元序列;
  2. 查词向量矩阵得到每个词元的 Embedding,并与位置 Embedding 相加;
  3. 向量序列经过多层编码器,通过自注意力建立全句依赖,形成上下文语义表示;
  4. 解码器结合编码器输出与已生成的历史内容,逐词预测下一个词,直到生成结束符号。

五、典型应用场景

  • 自然语言处理:机器翻译、文本摘要、阅读理解、情感分析等经典任务;
  • 预训练语言模型:作为大规模预训练模型的基础骨架,支撑文本理解、内容生成、智能问答等能力;
  • 代码任务:代码补全、代码解释、缺陷检测等把代码视为序列的任务;
  • 跨领域扩展:图像分块后可视为“视觉词序列”,Transformer 同样适用于图像识别、语音识别及多模态理解;
  • 其他序列建模:推荐系统中的行为序列建模、时序预测等。

在工程实践中,开发者既可以基于开源深度学习框架自行实现,也可以借助主流云平台提供的机器学习服务(例如百度智能云面向模型训练与推理的通用平台类服务)来获取大规模算力并完成部署。

六、容易混淆的概念辨析

  • Transformer vs RNN/LSTM:RNN 沿时间递推、天然携带顺序信息但无法并行;Transformer 靠位置编码补足顺序信息,换取了完全并行与更短的依赖路径。
  • Transformer vs 词袋模型:词袋模型完全忽略词序;Transformer 若去掉位置编码,确实会退化成类似词袋的表示,因此位置编码不是可选项,而是必需组件。
  • 词向量 vs 位置编码:前者回答“这个词是什么意思”,后者回答“这个词在句子中的什么位置”,二者相加才是完整输入。

七、使用注意事项

  1. 计算复杂度:自注意力的计算和显存开销随序列长度平方增长,处理长文本时需采用截断、滑窗或稀疏注意力等策略;
  2. 位置编码选型:固定公式编码外推性较好,可学习编码更灵活但受预设最大长度限制,需结合任务的最大序列长度权衡;
  3. 训练成本:从零训练 Transformer 需要大量数据与算力,一般业务建议复用预训练模型再做微调;
  4. 输入一致性:训练与推理阶段的分词方式、最大长度、填充与掩码处理必须保持一致,否则效果会明显下降;
  5. 部署与安全:上线前需评估推理延迟与批处理大小,敏感数据应做好脱敏与权限控制。

八、总结

Transformer 是一种以自注意力为核心的序列建模架构:单词 Embedding 把文字转化为语义向量,位置 Embedding 用公式或训练的方式把词序信息注入模型,弥补了注意力机制对顺序不敏感的天然缺陷;自注意力与多头机制则让每个位置都能直接获取全局上下文。正是“全局依赖建模 + 完全并行计算”这两大特性,使它成为当今自然语言处理乃至更广泛序列建模任务的基础性技术。理解了词向量与位置编码这两个输入端组件,也就掌握了读懂 Transformer 的第一把钥匙。