Transformer

千伏电压(讨论 | 贡献)2026年7月1日 (三) 19:46的版本 (→‎概览)

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),最后再通过一次线性变换得到最终结果。

其数学形式定义为:

[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]

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