Transformer 是一种基于自注意力机制(Self-Attention)​的深度学习模型架构,最初由 Vaswani 等人在 2017 年的论文《Attention Is All You Need》中提出。它彻底改变了自然语言处理(NLP)领域,并在计算机视觉(CV)、语音处理等领域也得到广泛应用。以下是对 Transformer 的详细介绍:


一、Transformer 的提出背景

在 Transformer 出现之前,主流的序列建模方法(如机器翻译、文本生成)主要依赖循环神经网络(RNN)​长短期记忆网络(LSTM)​。但这些模型存在以下问题:

  1. 难以并行化:RNN 需要按时间步顺序处理序列,无法充分利用 GPU 并行计算能力。

  2. 长距离依赖问题:随着序列长度增加,RNN 难以捕捉远距离词汇之间的关系。

  3. 计算效率低:LSTM 虽然缓解了梯度消失问题,但参数量和计算复杂度较高。

Transformer 通过自注意力机制全连接架构解决了这些问题,实现了高效并行计算和全局依赖建模。


二、Transformer 的核心组件

Transformer 由 ​编码器(Encoder)​ 和 ​解码器(Decoder)​ 堆叠而成,每个编码器和解码器包含多个子层。以下是关键组件:

1. ​自注意力机制(Self-Attention)​

  • 作用:捕捉序列中不同位置之间的依赖关系。

  • 计算步骤

    1. 将输入向量转换为 ​Query(Q)​Key(K)​Value(V)​ 三个矩阵。

    2. 计算注意力分数:Attention(Q,K,V)=softmax(dk​​QKT)V

      • dk 是 Key 向量的维度,用于缩放点积,防止梯度消失。

    3. 通过 Softmax 归一化权重,加权求和 Value 得到输出。

2. ​多头注意力(Multi-Head Attention)​

  • 将 Q、K、V 拆分为多个子空间(即“头”),分别计算注意力后拼接结果。

  • 优势:允许模型关注不同位置的不同语义信息(例如语法、语义、上下文等)。

3. ​位置编码(Positional Encoding)​

  • Transformer 没有循环结构,无法直接感知序列顺序,因此需要显式添加位置信息。

  • 方法:使用正弦和余弦函数生成位置编码向量,与输入向量相加:PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)

    • 其中 pos 是位置,i 是维度索引。

4. ​层归一化(Layer Normalization)和残差连接(Residual Connection)​

  • 残差连接:将子层的输入直接加到输出上(即 x+Sublayer(x)),缓解梯度消失。

  • 层归一化:对每个子层的输出进行归一化,加速训练收敛。

5. ​前馈神经网络(Feed-Forward Network, FFN)​

  • 每个编码器和解码器包含一个全连接前馈网络:FFN(x)=max(0,xW1+b1)W2+b2

    • 使用 ReLU 激活函数,提供非线性变换能力。


三、编码器与解码器的结构

1. ​编码器(Encoder)​

  • N 个相同层堆叠而成(通常 N=6)。

  • 每层包含:

    • 一个 ​多头自注意力层​(关注输入序列内部关系)。

    • 一个 ​前馈神经网络层

2. ​解码器(Decoder)​

  • 同样由 N 个相同层堆叠而成。

  • 每层包含:

    • 一个 ​掩码多头自注意力层​(防止当前位置看到未来信息)。

    • 一个 ​编码器-解码器注意力层​(关注编码器的输出)。

    • 一个 ​前馈神经网络层


四、训练细节

  1. 优化目标:通过交叉熵损失函数进行监督学习。

  2. 优化器:使用 Adam 优化器,结合学习率预热(Warm-up)策略。

  3. 正则化:Dropout 和标签平滑(Label Smoothing)防止过拟合。


五、Transformer 的应用与变体

1. ​经典模型

  • BERT:仅使用编码器的双向预训练模型,适用于文本分类、问答等任务。

  • GPT 系列:仅使用解码器的自回归模型,擅长文本生成。

  • T5:完整的编码器-解码器结构,支持多种文本生成任务。

2. ​跨领域应用

  • 计算机视觉:ViT(Vision Transformer)将图像分块后输入 Transformer。

  • 语音处理:Transformer 用于语音识别和语音合成。

  • 多模态:CLIP、DALL-E 等结合文本和图像的跨模态模型。


六、Transformer 的优势与挑战

优势

  1. 并行计算:自注意力机制允许同时处理整个序列。

  2. 全局依赖建模:直接捕捉长距离依赖关系。

  3. 灵活性:通过调整注意力头数和层数适应不同任务。

挑战

  1. 计算资源需求高:尤其是处理长序列时(序列长度 O(n2) 复杂度)。

  2. 位置编码的局限性:某些任务需要更复杂的位置表示。


七、代码实现示例(PyTorch)​

以下展示自注意力机制的简化实现:

import torch
import torch.nn.functional as F

# 输入序列(3个词,每个词嵌入维度4)
input_sequence = torch.tensor([[0.1, 0.2, 0.3, 0.4], 
                              [0.5, 0.6, 0.7, 0.8], 
                              [0.9, 1.0, 1.1, 1.2]])

# 生成Q/K/V矩阵
W_Q = torch.randn(4, 4)  # 查询权重矩阵
W_K = torch.randn(4, 4)  # 键权重矩阵
W_V = torch.randn(4, 4)  # 值权重矩阵

Q = torch.matmul(input_sequence, W_Q)
K = torch.matmul(input_sequence, W_K)
V = torch.matmul(input_sequence, W_V)

# 计算注意力分数
d_k = Q.size(-1)
attention_scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k))
attention_weights = F.softmax(attention_scores, dim=-1)
output = torch.matmul(attention_weights, V)

print("自注意力输出:\n", output)