Transformer架构的起源与背景
在深度学习领域,序列数据建模长期依赖于循环神经网络(RNN)和长短期记忆网络(LSTM)。这类模型通过循环结构捕捉序列中的时序依赖关系,但存在明显的局限性:一是无法并行计算,训练效率低;二是长距离依赖衰减问题,随着序列长度增加,早期信息难以有效传递。2017年,谷歌研究团队在论文《Attention Is All You Need》中提出了Transformer架构,彻底摒弃了循环和卷积结构,完全基于注意力机制实现序列建模,为自然语言处理(NLP)领域带来了革命性突破,并逐步扩展到计算机视觉、语音处理等多个领域。
核心组件:自注意力机制
Transformer的基石是自注意力机制(Self-Attention),其核心思想是让序列中的每个元素都能直接与其他所有元素交互,动态计算权重以捕捉依赖关系。与传统的注意力机制不同,自注意力机制中的查询(Query)、键(Key)和值(Value)均来自输入序列本身,实现了“对自身的关注”。
自注意力的数学定义
给定输入序列 \( X = \{x_1, x_2, …, x_n\} \),其中 \( x_i \in \mathbb{R}^d \) 为第 \( i \) 个元素的嵌入向量。自注意力机制通过以下步骤计算输出序列:
- 生成查询、键、值矩阵:通过可学习的线性变换将输入投影到不同空间,得到 \( Q = XW_Q \)、\( K = XW_K \)、\( V = XW_V \),其中 \( W_Q \)、\( W_K \)、\( W_V \in \mathbb{R}^{d \times d_k} \) 为投影权重矩阵。
- 计算注意力分数:通过查询与键的点积衡量元素间的相关性,得到注意力分数矩阵 \( S = QK^T \),维度为 \( n \times n \)。
- 缩放与softmax归一化:为了避免点积过大导致梯度消失,对分数进行缩放(除以 \( \sqrt{d_k} \)),并通过softmax函数归一化为概率分布,得到注意力权重矩阵 \( A = \text{softmax}(\frac{QK^T}{\sqrt{d_k}}) \)。
- 加权求和输出:将注意力权重与值矩阵相乘,得到最终输出 \( Z = AV \),维度为 \( n \times d_v \)。
通过上述过程,每个输出元素 \( z_i \) 都是输入序列中所有元素的加权和,权重由当前元素与其他元素的相似度决定,从而实现了长距离依赖的直接建模。
多头注意力机制
自注意力机制虽然能捕捉依赖关系,但单一的注意力头可能只能关注到序列中的某一种模式。多头注意力(Multi-Head Attention)通过并行计算多个注意力头,从不同子空间中学习多样化的依赖关系,增强模型的表达能力。
多头注意力的实现步骤如下:
- 并行投影:将 \( Q \)、\( K \)、\( V \) 分别通过 \( h \) 组不同的线性投影矩阵(\( W_Q^i \)、\( W_K^i \)、\( W_V^i \),\( i=1,…,h \))得到 \( h \) 组子空间的查询、键、值。
- 并行计算:对每组子空间独立执行自注意力计算,得到 \( h \) 个输出头 \( Z^i = \text{softmax}(\frac{Q^i(K^i)^T}{\sqrt{d_k}})V^i \),每个头的维度为 \( n \times \frac{d_v}{h} \)。
- 拼接与线性变换:将所有头的输出拼接起来,通过线性投影矩阵 \( W^O \in \mathbb{R}^{d_v \times d_v} \) 融合,得到最终输出 \( Z = \text{Concat}(Z^1, Z^2, …, Z^h)W^O \)。
多头注意力允许模型同时关注序列中的不同位置和不同表示子空间,例如在一个头中可能关注局部语法结构,在另一个头中关注全局语义信息,从而提升模型对复杂模式的建模能力。
Transformer的整体架构
Transformer采用编码器-解码器(Encoder-Decoder)架构,编码器负责输入序列的表示学习,解码器负责生成输出序列。整体结构包含N个相同的编码器层和N个相同的解码器层,通过残差连接和层归一化稳定训练过程。
编码器结构
编码器由N(通常为6)个相同的层堆叠而成,每层包含两个子层:

- 多头自注意力子层:对输入序列执行多头自注意力计算,捕捉序列内部的依赖关系。
- 前馈神经网络(Feed-Forward Network, FFN)子层:由两个线性变换和ReLU激活函数组成,对每个位置的表示进行非线性变换,增强模型的表达能力。FFN的公式为 \( \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 \),其中 \( W_1 \in \mathbb{R}^{d_{model} \times d_{ff}} \),\( W_2 \in \mathbb{R}^{d_{ff} \times d_{model}} \),\( d_{ff} \) 通常为 \( 4d_{model} \)。
每个子层都采用残差连接(\( \text{LayerNorm}(x + \text{Sublayer}(x)) \)),即输入与子层输出相加后再进行层归一化(Layer Normalization)。残差连接解决了深层网络中的梯度消失问题,层归一化则加速了训练收敛速度。
解码器结构
解码器同样由N个相同的层堆叠而成,每层包含三个子层:
- 掩码多头自注意力子层:与编码器的自注意力类似,但需要添加掩码(Mask)机制,防止当前位置关注到未来的位置信息(在生成任务中,未来位置的元素尚未生成,不应被关注)。掩码操作在softmax之前进行,将未来位置的分数设为负无穷,经过softmax后其权重接近于零。
- 编码器-解码器注意力子层:类似于自注意力,但查询来自解码器上一层的输出,键和值来自编码器的最终输出。这种结构允许解码器在生成每个元素时,关注输入序列中的相关信息,实现跨序列的依赖建模。
- 前馈神经网络子层:与编码器中的FFN结构相同,用于非线性变换。
解码器的每个子层同样采用残差连接和层归一化,最终输出通过线性层和softmax函数转换为词汇表上的概率分布,用于生成下一个元素。
位置编码:捕捉序列顺序信息
Transformer摒弃了循环结构,无法像RNN那样 inherently 捕捉元素的顺序信息。为了解决这一问题,Transformer在输入嵌入(Input Embedding)之后添加了位置编码(Positional Encoding),将位置信息注入到输入表示中。
位置编码采用正弦和余弦函数的组合,公式如下:
对于位置 \( pos \) 和维度 \( i \),位置编码 \( PE_{(pos, i)} \) 的计算方式为:
- 当 \( i \) 为偶数时:\( PE_{(pos, i)} = \sin(\frac{pos}{10000^{2i/d_{model}}}) \)
- 当 \( i \) 为奇数时:\( PE_{(pos, i)} = \cos(\frac{pos}{10000^{2i/d_{model}}}) \)
这种设计具有以下优势:一是对于固定的维度 \( i \),\( PE_{(pos, i)} \) 是 \( pos \) 的周期函数,能够处理任意长度的序列;二是不同维度上的频率不同,可以唯一标识每个位置;三是可以通过公式计算任意位置的位置编码,无需存储,便于并行计算。
输入嵌入与位置编码相加后,得到包含语义和顺序信息的最终输入,送入编码器进行处理:\( X_{\text{final}} = \text{Embedding}(X) + PE \)。
训练技巧与优化策略
掩码机制的应用
在解码器的掩码多头自注意力子层中,掩码机制是确保生成任务正确性的关键。具体而言,对于第 \( t \) 个位置的生成,模型只能关注到 \( 1 \) 到 \( t-1 \) 的位置信息,而不能关注 \( t+1 \) 及之后的位置。实现时,在计算注意力分数后,创建一个掩码矩阵 \( M \),其中 \( M_{ij} = 0 \)(当 \( j \leq i \))或 \( M_{ij} = -\infty \)(当 \( j > i \)),然后将 \( S + M \) 送入softmax函数,从而屏蔽未来位置的影响。

动态填充与批量处理
在实际应用中,输入序列的长度通常是可变的。为了高效利用GPU并行计算能力,需要对不同长度的序列进行填充(Padding),使其长度统一。Transformer通过掩码填充位置(Padding Mask)来避免模型关注填充的无意义信息。具体而言,在计算注意力权重时,将填充位置的注意力分数设为负无穷,确保其在softmax后的权重接近于零。
学习率调度与权重衰减
Transformer的训练通常采用带有预热(Warmup)的学习率调度策略。训练初期,学习率从零线性增加到预设值,稳定后再按步数的平方根倒数衰减。这种策略能有效缓解训练初期的梯度爆炸问题,加速模型收敛。此外,权重衰减(Weight Decay)被用于防止过拟合,通过在损失函数中添加 \( L2 \) 正则化项约束模型参数的大小。
Transformer的变体与应用
BERT:基于编码器的双向表示模型
BERT(Bidirectional Encoder Representations from Transformers)由Google提出,完全基于Transformer编码器架构,通过双向自注意力学习上下文相关的表示。其核心训练任务包括掩码语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)。MLM随机掩盖输入序列中15%的词,通过上下文预测被掩盖的词,迫使模型学习双向语义信息;NSP判断两个句子是否为上下文关系,增强模型对句间关系的理解。BERT的出现极大地提升了NLP任务的性能,成为预训练语言模型的里程碑。
GPT:基于解码器的自回归生成模型
GPT(Generative Pre-trained Transformer)由OpenAI提出,完全基于Transformer解码器架构,采用自回归(Autoregressive)方式生成文本。其核心特点是单向注意力,即生成第 \( t \) 个词时只能关注到 \( 1 \) 到 \( t-1 \) 的词,无法利用未来信息。GPT通过大规模无监督预训练(如预测下一个词)学习通用语言知识,再通过有监督微调适应下游任务。GPT系列模型(如GPT-3、GPT-4)在文本生成、对话系统等任务中展现出强大的能力,推动了生成式AI的发展。
T5:统一的文本到文本框架
T5(Text-to-Text Transfer Transformer)由Google提出,将所有NLP任务统一为“文本到文本”的格式,例如机器翻译、文本摘要、问答等任务均表示为“输入文本前缀 + 原始输入 → 目标文本”。T5采用编码器-解码器架构,编码器处理输入文本,解码器生成目标文本。其创新点在于通过任务前缀(如“translate English to German: ”)指导模型理解任务类型,实现多任务的统一建模。T5在大规模多任务训练中表现出色,证明了Transformer架构的通用性。
Vision Transformer(ViT):Transformer在计算机视觉中的应用
传统计算机视觉任务主要依赖卷积神经网络(CNN),但Transformer架构的突破也推动了其在视觉领域的应用。Vision Transformer(ViT)将图像分割成固定大小的图像块(Patches),将每个图像块线性投影为向量,并添加位置编码后送入Transformer编码器进行处理。通过预训练和微调,ViT在图像分类等任务上达到了甚至超越了CNN的性能,证明了Transformer对视觉数据的有效性,为视觉任务提供了新的范式。
总结与展望
Transformer架构通过自注意力机制实现了高效的序列建模,摒弃了循环结构的局限性,成为深度学习领域最重要的模型之一。其核心优势包括并行计算能力、长距离依赖建模能力和强大的表达能力,不仅在NLP领域取得了突破性进展,还逐步扩展到计算机视觉、语音处理、多模态学习等多个领域。

尽管Transformer取得了巨大成功,但仍存在一些挑战:一是计算复杂度随序列长度平方增长,处理长序列时效率较低;二是对大规模数据和高算力的依赖,限制了其在资源受限场景的应用;三是可解释性较差,注意力权重的含义仍需进一步探索。未来,Transformer的研究可能聚焦于降低计算复杂度(如稀疏注意力、线性注意力)、提升模型效率(如模型压缩、知识蒸馏)、增强可解释性以及跨模态融合等方面,推动人工智能技术的进一步发展。
发表回复