简介:本文系统解析Transformer的总体架构原理,从编码器—解码器骨架出发,拆解自注意力、前馈网络、残差连接与位置编码等关键模块的协作方式,说明数据从输入到输出的完整流转链路,并分析其并行计算优势、复杂度边界与常见理解误区,帮助读者建立可迁移的架构级认知。
Transformer 是一种神经网络架构,而非某个具体模型。它最初被提出用于机器翻译任务,其核心目标是解决序列到序列(Seq2Seq)建模问题:给定一个输入序列,生成一个输出序列。在它之前,主流方案依赖循环神经网络(RNN)及其变体,按时间步逐个处理词元,天然存在两个瓶颈:一是难以并行,二是长距离依赖信息在逐级传递中容易衰减。
Transformer 的根本性改变在于:用注意力机制替代循环结构,让序列中任意两个位置可以直接建立联系,并且整个序列可以并行计算。理解这一句话,是理解其总体架构的起点。本文要解释的原理,就是这套架构如何由若干模块拼装而成、数据如何在其中流转、各模块如何协作完成从输入序列到输出序列的映射。
在原理层面,可以把问题拆成三个约束:
Transformer 的设计回应了这三点:注意力让任意位置对之间路径长度为常数级;矩阵运算让序列维度可并行;多头机制让模型在不同子空间捕捉不同类型的关联。
1. 词元与嵌入
输入文本先被切分为词元(token),每个词元映射为一个稠密向量,称为嵌入。嵌入把离散符号转为连续空间中的点,使后续矩阵运算成为可能。
2. 注意力
注意力的本质是“按相关性加权汇总”。给定查询(Query)、键(Key)、值(Value)三组向量,用查询与各键做相似度计算得到权重,再对值加权求和。缩放点积注意力的通用形式为:
Attention(Q, K, V) = softmax(Q·Kᵀ / sqrt(d_k)) · V
其中除以 sqrt(d_k) 是为了控制点积数值范围,避免 softmax 进入饱和区导致梯度过小。
3. 位置信息
注意力本身对顺序不敏感——打乱输入顺序,加权汇总结果不变。因此必须显式注入位置信息,通常采用位置编码,将位置信号加到词元嵌入上,使模型能够区分“谁在前、谁在后”。
总体架构可拆为两大部分:编码器栈与解码器栈,各自由若干结构相同的层堆叠而成。
| 组件 | 角色 | 关键子模块 |
|---|---|---|
| 输入嵌入 + 位置编码 | 将词元转为带位置信息的向量 | 嵌入查表、位置信号叠加 |
| 编码器层 | 把输入序列编码为上下文表示 | 多头自注意力、前馈网络、残差连接、层归一化 |
| 解码器层 | 基于编码结果与已生成部分逐步产出输出 | 掩码多头自注意力、交叉注意力、前馈网络、残差与归一化 |
| 输出投影层 | 将解码器输出映射为词表分布 | 线性变换 + softmax |
从分层视角看,可类比为“接入层—处理层—输出层”:输入嵌入层负责把原始符号接入数值空间;编码器与解码器层负责核心计算;输出投影层负责把隐表示还原为可采样的概率分布。残差连接与层归一化则贯穿各层,承担稳定训练与信息直通的职责。
以机器翻译为例,数据流转可按以下步骤描述:
第一步:输入表示。 源语言句子被切分为词元,经嵌入层转为向量,再叠加位置编码,形成编码器输入矩阵。
第二步:编码器逐层处理。 每一层内先做多头自注意力:每个位置生成 Q、K、V,与序列内所有位置计算相关性并加权汇总,得到融合了全局上下文的表示。随后经过前馈网络做逐位置非线性变换。每个子模块外都有残差连接,并进行层归一化。
第三步:解码器自回归生成。 解码器接收已生成的目标序列前缀,先通过掩码自注意力处理——掩码确保每个位置只能看到它之前的位置,防止“看到未来答案”。然后通过交叉注意力,以解码器当前表示为查询、以编码器输出为键和值,把源语言信息按相关性引入。
第四步:逐位置前馈与输出。 解码器每层同样经过前馈网络、残差与归一化。最后一层输出经线性投影映射到词表维度,softmax 得到概率分布,按解码策略选取下一个词元。
第五步:循环与终止。 将新词元追加到已生成序列,重复第三步至第四步,直到产生结束标记或达到长度上限。
这一流程的关键在于:编码器对源序列只计算一次,解码器逐步复用编码结果,形成“一次编码、多次解码”的非对称结构。
1. 多头注意力:并行捕捉多种关联
单个注意力头只能学到一种相关性模式。多头机制把 Q、K、V 投影到多组低维子空间,各自独立计算注意力后再拼接投影。这样模型可以同时关注语法依存、语义指代、位置邻近等不同关系,相当于在多个“视角”上并行汇总信息。
2. 残差连接:让深层网络可训练
每个子模块的输出与其输入相加。这一机制提供了一条直通路径,使梯度可以跨层回传,缓解深层堆叠时的梯度消失问题;同时让每层只需学习“增量修正”,而非从零重建表示。
3. 层归一化:稳定数值分布
对每个位置的向量做归一化,使各层输入分布保持相对稳定,降低对初始化和学习率的敏感度。它与残差连接配合,是深层栈能够稳定训练的重要前提。
4. 掩码机制:保证自回归的因果性
解码器自注意力使用上三角掩码,把“未来位置”的注意力权重置为极小值,经 softmax 后接近零。这样训练时可以并行喂入整个目标序列,而推理行为仍等价于逐词生成,兼顾了训练效率与生成逻辑。
5. 前馈网络:逐位置的非线性变换
前馈网络对每个位置独立作用,通常由两层线性变换加激活函数构成。它在注意力完成“跨位置汇总”之后,提供“单位置深加工”的能力,二者交替堆叠形成表达能力。
6. 并行与复杂度权衡
注意力让序列维度可并行,但注意力矩阵的计算与存储随序列长度呈平方级增长。这是该架构的固有边界:短中序列效率高,超长序列则需要稀疏化、分块或近似注意力等通用优化思路来缓解。
以下为解码器单层的通用伪代码,用于说明模块协作顺序:
function decoder_layer(x, encoder_out):# 掩码自注意力:只能看已生成部分a = multi_head_attention(query=x, key=x, value=x, mask=causal_mask)x = layer_norm(x + a)# 交叉注意力:查询来自解码器,键值来自编码器c = multi_head_attention(query=x, key=encoder_out, value=encoder_out)x = layer_norm(x + c)# 逐位置前馈f = feed_forward(x)x = layer_norm(x + f)return x
这段伪代码体现了三个要点:子模块顺序固定、每个子模块都包在“残差 + 归一化”中、交叉注意力是连接编码器与解码器的唯一通道。
优势来源:并行计算来自矩阵化的注意力运算;长距离建模来自任意位置直连;表达灵活性来自多头与深层堆叠;训练稳定性来自残差与归一化。
边界条件:注意力复杂度随序列长度平方增长,长序列场景需要额外优化;位置编码方式会影响外推能力,超出训练长度时性能可能下降;自回归解码是逐词进行的,推理延迟与序列长度线性相关,常需缓存已计算的键值来复用历史信息。
Transformer 的总体架构可以概括为:以嵌入与位置编码完成输入表示,以编码器栈构建源序列的上下文表示,以解码器栈在掩码自注意力与交叉注意力的配合下自回归生成输出,并通过残差连接、层归一化与前馈网络保障深层堆叠的可训练性与表达能力。理解这套骨架,重点不在记住模块名称,而在把握三条主线:注意力如何实现全局信息直连、掩码如何保证生成因果性、残差与归一化如何支撑深度。掌握这三条主线,读者在面对各类衍生架构时,便能快速定位其改动点与设计取舍。