Transformer

千伏电压(讨论 | 贡献)2026年7月1日 (三) 19:57的版本 (→‎结果)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

Transformer 是一种基于自注意力机制(Self-Attention)的深度学习模型架构,最初由 Vaswani 等人在 2017 年的论文《Attention is All You Need》中提出。它彻底改变了自然语言处理(NLP)领域,并成为许多现代模型(如BERT、GPT 等)的基础。

Transformer模型的崛起标志着自然语言处理技术的一个重要转折点。自问世以来,Transformer以其卓越的性能迅速成为NLP任务的首选架构。研究者们逐渐认识到,对于大多数语言任务,对模型架构的改进已不再是关键,而是转向了预训练(Pretraining)加上微调(finetune)的策略。这种策略的核心在于,使用大规模数据集训练一个通用的语言模型,然后在此基础上针对特定任务进行微调,预训练与微调的结合可以更有效地提高模型泛化能力和适应性,使模型能够快速适应新的应用场景。

背景

在 Transformer 出现之前,序列建模任务(如机器翻译)主要依赖于循环神经网络(RNN)和卷积神经网络(CNN)。然而,RNN 存在梯度消失和难以并行化的问题,而 CNN 在处理长距离依赖关系时表现不佳。

早期主流的序列建模方法基于RNN/LSTM编码器-解码器架构(如Bahdanau Attention、GNMT)。这类模型通过循环隐藏状态处理序列,理论上可以捕捉任意长度的上下文,但其“固有顺序性”带来明显瓶颈:每一步计算依赖前一步,无法并行,导致训练效率低;同时信息在长序列中逐步传递,路径长度为[math]\displaystyle{ O(n) }[/math],即便有LSTM/GRU门控机制,长程依赖仍难以学习;此外,反向传播需保存所有中间状态,造成显存压力大,限制batch size和训练稳定性。

为缓解这些问题,注意力机制被引入。Bahdanau Attention使解码器在生成每个词时能够“回看”编码器所有位置,并动态分配权重,从而显著提升长句建模能力。但注意力只是RNN框架中的辅助模块,未改变其顺序计算本质,因此并行性和效率问题依旧存在,本质上只是“加速理解”,没有“加速计算”。

随后研究者尝试用CNN替代RNN(如ByteNet、ConvS2S),利用卷积实现并行计算,提高训练速度。然而CNN受限于局部感受野,建模长程依赖需要堆叠多层或使用扩张卷积,导致模型复杂度上升;任意两位置间的信息路径仍随距离增长(尽管为对数级)。因此,一个核心问题浮现:能否仅用注意力机制构建完整序列模型,从而实现更强并行性、更短信息路径和更高训练效率。

ransformer 通过引入自注意力机制,解决了这些问题,并显著提升了模型性能。

整体架构

概览

 
在Transformer的编码器中,每一层都可以拆解为几个紧密协作的核心组成部分。首先是多头自注意力子层,其计算流程可以概括为:输入表示先经过层归一化(LayerNorm),随后进入多头注意力模块进行特征交互,最后通过残差连接将子层输出与原始输入相加,从而保留原始信息并缓解深层网络训练中的梯度问题。

Transformer延续了经典的编码器-解码器框架,但在具体实现上进行了彻底重构。编码器由6个完全相同的层堆叠而成,每一层都包含两个核心子结构:多头自注意力机制和前馈神经网络,同时在每个子层外部都配有残差连接与层归一化,以保证训练的稳定性与深层信息的有效传播。解码器同样由6层组成,其结构与编码器基本一致,但额外引入了一个“编码器-解码器注意力”子层,使其在生成输出时能够利用编码器的全局信息。此外,解码器中的自注意力采用了掩码机制,确保当前位置只能依赖已生成的内容,从而避免未来信息泄露。

在核心计算机制上,Transformer完全依赖注意力来建模序列关系。其中,缩放点积注意力通过查询(Q)、键(K)、值(V)的相似度计算注意力权重,并通过缩放操作稳定梯度,使训练更加高效。而多头注意力机制则将这一过程并行化为多个“头”,使模型能够在不同的表示子空间中同时捕捉多种关系,从而提升表达能力和建模灵活性。

由于模型摒弃了循环和卷积结构,本身不具备对序列顺序的感知能力,因此需要显式引入位置信息。为此,Transformer使用基于正弦和余弦函数的位置编码,将位置信息注入到输入表示中,使模型能够理解词与词之间的相对和绝对位置关系,从而在完全并行的计算框架下仍然具备处理序列结构的能力。

编码器层解剖

在Transformer的编码器中,每一层都可以拆解为几个紧密协作的核心组成部分。首先是多头自注意力子层,其计算流程可以概括为:输入表示先经过层归一化(LayerNorm),随后进入多头注意力模块进行特征交互,最后通过残差连接将子层输出与原始输入相加,从而保留原始信息并缓解深层网络训练中的梯度问题。

第二个关键组成是前馈神经网络(Feed-Forward Network, FFN)。该子层对每个位置的表示独立地进行非线性变换,其形式可写为:

[math]\displaystyle{ \mathrm{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 }[/math]

这一结构本质上等价于对每个位置分别应用的两层全连接网络,也常被类比为通道维度上的“1×1卷积”,因为它不涉及不同位置之间的信息交互,而是对每个位置的特征进行独立映射与提升。

第三个重要机制是贯穿各子层的残差连接与层归一化,其标准形式为:

[math]\displaystyle{ y = \mathrm{LayerNorm}(x + \mathrm{Sublayer}(x)) }[/math]

这种设计一方面通过残差路径缓解梯度消失问题,使深层模型更易训练;另一方面通过层归一化稳定激活分布,从而提升收敛速度与模型表现。

整体来看,编码器层具有几个鲜明特征:它完全基于注意力机制来建模序列内部关系,不再依赖任何循环结构或卷积操作;同时,其计算过程是纯前馈的,这使得模型可以在所有位置上实现高度并行计算,从而显著提升训练效率。

缩放点积注意力

 
缩放点积注意力是 Transformer 中最核心的计算机制,在这一机制中,查询(Query)、键(Key)和值(Value)分别承担不同角色

缩放点积注意力是 Transformer 中最核心的计算机制,其基本形式可以表示为:

[math]\displaystyle{ \mathrm{Attention}(Q, K, V) = \mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V }[/math]

在这一机制中,查询(Query)、键(Key)和值(Value)分别承担不同角色,可以用一个直观的类比来理解:Query 类似于“检索需求”,即你想寻找什么信息;Key 相当于“索引或标签”,用于描述每个候选信息的特征;Value 则是实际承载的信息内容。通过计算 Query 与 Key 之间的相似度,模型能够为每个 Value 分配不同的权重,从而实现对相关信息的加权聚合。

之所以采用点积(dot-product)来计算相似度,主要是因为其计算形式可以高效地转化为矩阵乘法,从而充分利用现代硬件(如 GPU/TPU)的并行计算能力,相比其他相似度函数具有更高的效率和更好的工程适配性。

然而,当键向量的维度[math]\displaystyle{ d_k }[/math]较大时,点积结果的数值范围会显著增大,从而使[math]\displaystyle{ \mathrm{softmax} }[/math]函数进入梯度极小的区域,影响训练稳定性。为了解决这一问题,引入了缩放因子[math]\displaystyle{ \frac{1}{\sqrt{d_k}} }[/math]。

从数学角度看,若查询向量[math]\displaystyle{ q }[/math]和键向量[math]\displaystyle{ k }[/math]的各分量相互独立且方差为1,则其点积 [math]\displaystyle{ q \cdot k }[/math] 的方差为: [math]\displaystyle{ \mathrm{Var}(q \cdot k) = d_k }[/math]

因此,通过乘以缩放因子: [math]\displaystyle{ \frac{1}{\sqrt{d_k}} }[/math] 可以将结果的方差归一化到稳定范围,从而避免梯度消失问题,并提升模型训练的稳定性与收敛效果。

多头注意力

 
多头注意力通过并行地执行多个注意力机制,使模型能够在不同的表示子空间中同时建模信息。其整体计算流程为:输入首先经过 $h$ 个不同的线性投影,然后进入 $h$ 个并行的注意力头,随后将各个头的输出拼接(Concat),最后再通过一次线性变换得到最终结果。

多头注意力通过并行地执行多个注意力机制,使模型能够在不同的表示子空间中同时建模信息。其整体计算流程为:输入首先经过 $h$ 个不同的线性投影,然后进入 $h$ 个并行的注意力头,随后将各个头的输出拼接(Concat),最后再通过一次线性变换得到最终结果。

其数学形式定义为:

[math]\displaystyle{ \mathrm{MultiHead}(Q, K, V) = \mathrm{Concat}(\mathrm{head}_1, \ldots, \mathrm{head}_h) W^O }[/math]

其中,第[math]\displaystyle{ i }[/math]个注意力头定义为:

[math]\displaystyle{ \mathrm{head}_i = \mathrm{Attention}(Q W_i^Q,\; K W_i^K,\; V W_i^V) }[/math]

这里,[math]\displaystyle{ W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k} }[/math],[math]\displaystyle{ W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k} }[/math],[math]\displaystyle{ W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v} }[/math],以及输出投影矩阵 [math]\displaystyle{ W^O \in \mathbb{R}^{h d_v \times d_{\text{model}}} }[/math]均为可学习参数。

在论文的典型设置中: [math]\displaystyle{ h = 8, \quad d_k = d_v = \frac{d_{\text{model}}}{h} = \frac{512}{8} = 64 }[/math]

这种设计使得每个注意力头在较低维度子空间中进行计算,从而在保持总计算量与单头全维度注意力大致相当的前提下,显著提升了模型的表达能力与学习多样关系的能力。

解码器的特殊设计

与编码器相比,解码器在结构上具有若干关键差异。首先,解码器在每一层中额外引入了一个编码器-解码器注意力子层(encoder-decoder attention)。在该子层中,查询([math]\displaystyle{ Q }[/math])来自解码器前一子层的输出,而键([math]\displaystyle{ K }[/math])和值([math]\displaystyle{ V }[/math])则来自编码器的输出表示,从而使解码器能够在生成序列时利用输入序列的全局信息。

其次,解码器中的自注意力采用了掩码机制(masked self-attention),以保证自回归生成过程的正确性。具体而言,对于位置[math]\displaystyle{ i }[/math],模型仅允许其关注位置小于或等于[math]\displaystyle{ i }[/math]的信息,而对所有位置[math]\displaystyle{ j \gt i }[/math]的注意力权重在[math]\displaystyle{ \mathrm{softmax} }[/math]之前被置为[math]\displaystyle{ -\infty }[/math],从而在归一化后对应概率为零。

此外,在训练阶段,目标序列会整体向右平移一位作为解码器输入,即: [math]\displaystyle{ y_i \text{ 仅依赖于 } y_{\lt i} }[/math] 这种“输出偏移”策略确保了模型在位置 $i$ 的预测只依赖于先前已生成的内容,从而与推理阶段的自回归生成方式保持一致。

位置编码

由于 Transformer 结构本身不包含循环或卷积操作,无法显式建模序列中的位置信息,因此需要引入位置编码以注入序列顺序。论文中采用基于正弦和余弦函数的固定位置编码,其定义为:

[math]\displaystyle{ \mathrm{PE}(pos, 2i) = \sin\left(\frac{pos}{10000^{\frac{2i}{d_{\text{model}}}}}\right) }[/math]

[math]\displaystyle{ \mathrm{PE}(pos, 2i+1) = \cos\left(\frac{pos}{10000^{\frac{2i}{d_{\text{model}}}}}\right) }[/math]

该设计具有多方面优势。首先,不同维度对应不同频率的周期函数,使模型能够在多个尺度上感知位置信息。其次,这种编码方式使得任意相对位置偏移[math]\displaystyle{ k }[/math]满足[math]\displaystyle{ \mathrm{PE}(pos + k) }[/math]可以表示为[math]\displaystyle{ \mathrm{PE}(pos) }[/math]的线性函数,从而有助于模型学习相对位置关系。最后,由于位置编码是确定性函数而非学习参数,它天然具备良好的外推能力,可以推广到比训练时更长的序列长度。

结果分析

自注意力、RNN 与 CNN 的比较

与循环神经网络(RNN)和卷积神经网络(CNN)相比,自注意力机制在多个维度上具有显著优势。在复杂度方面,当序列长度[math]\displaystyle{ n \lt d }[/math](这一情况在自然语言处理任务中较为常见)时,自注意力的计算效率更具优势。此外,自注意力机制可以在所有位置上并行计算,而 RNN 必须按照时间步顺序执行,从而限制了训练速度。

在建模依赖关系方面,自注意力允许任意两个位置之间通过一次注意力计算直接建立联系,其路径长度为[math]\displaystyle{ O(1) }[/math];相比之下,RNN 的路径长度为[math]\displaystyle{ O(n) }[/math],而 CNN 即使采用膨胀卷积,其路径长度也为[math]\displaystyle{ O(\log_k n) }[/math]。因此,自注意力在捕获长距离依赖时更加高效且稳定。

计算复杂度分析

设序列长度为[math]\displaystyle{ n }[/math],表示维度为[math]\displaystyle{ d=512 }[/math],卷积核大小为[math]\displaystyle{ k }[/math]。

对于自注意力机制,其主要计算开销来自于矩阵乘法:

[math]\displaystyle{ QK^\top \in \mathbb{R}^{n \times n}, \quad (n \times d)(d \times n) = O(n^2 d) }[/math]

例如,当[math]\displaystyle{ n = 50\lt math\gt 时,有: \lt math\gt n^2 = 2500, \quad d = 512 \;\Rightarrow\; 2500 \times 512 \approx 1.28 \times 10^6 }[/math]

对于 RNN,其递推形式为:

[math]\displaystyle{ h_t = f(h_{t-1}, x_t) }[/math]

该结构必须按时间步顺序执行[math]\displaystyle{ n }[/math]次,无法进行并行计算。

对于卷积神经网络(尤其是膨胀卷积),为了覆盖整个序列,需要:

[math]\displaystyle{ O(\log_k n) }[/math]

层,每一层的计算复杂度为:

[math]\displaystyle{ O(n \cdot d^2) }[/math]

因此总体计算复杂度为: [math]\displaystyle{ O(n \cdot d^2 \cdot \log_k n) }[/math]

可解释性

多头注意力机制使得模型能够在不同子空间中学习多样化的表示。不同的注意力头往往会关注不同类型的语言模式,例如:

一些注意力头主要捕捉句法结构关系(如主谓一致),一些关注语义关系(如指代消解),还有一些则对特定位置模式(如句首或句尾)表现出较强关注。

注意力权重的分布在一定程度上反映了语言的内在结构,在实际可视化中,常可以观察到类似句法树的模式。这种特性为模型的决策过程提供了重要的可解释性依据,使研究者能够更直观地理解模型的行为。

总结

Transformer 的提出标志着序列建模范式的根本性转变。该模型首次完全基于注意力机制构建,彻底摆脱了对循环神经网络(RNN)和卷积神经网络(CNN)的依赖,从而消除了序列计算中的结构性约束。在这一架构下,各位置之间的依赖关系可以通过注意力机制直接建模,使得模型在保持表达能力的同时实现了高度并行化计算,训练速度相较传统方法获得数量级提升。同时,在典型自然语言处理任务中,其计算复杂度也更具优势。

在性能方面,Transformer 在机器翻译等任务上取得了当时的最优结果(state-of-the-art),显著提升了翻译质量。与此同时,由于其并行化特性,模型训练时间大幅缩短,在相同甚至更低的计算资源下即可获得更优表现。这种性能与效率的双重提升,使其迅速成为序列建模任务中的主流架构。

相较于传统深度学习模型,Transformer 在可解释性方面也具有重要优势。通过对注意力权重的可视化分析,可以直观观察模型在不同位置之间建立的依赖关系。这些注意力分布往往能够反映出类似句法结构或语义关联的模式,从而为理解模型内部的工作机制提供了新的视角,也为神经网络的可解释性研究提供了重要工具。

在后续发展中,Transformer 架构不断向更广泛的领域扩展,包括图像、音频和视频等多模态任务,并逐步形成统一的跨模态表示框架。同时,为了应对长序列建模的计算瓶颈,研究者提出了局部注意力、稀疏注意力等多种高效变体,并结合模型压缩与加速技术进一步提升实用性。在生成建模方面,非自回归生成方法被引入以加快推理速度,并增强生成过程的可控性。此外,围绕注意力机制与 Transformer 的理论分析也在不断深入,为理解其归纳偏置和表达能力提供了更坚实的理论基础。