Transformer模型与Attention机制是什么
Transformer 的核心设计
Transformer 是一种基于自注意力机制(Self-Attention) 的深度学习模型架构,由 Google 团队在 2017 年提出(论文《Attention Is All You Need》)。它彻底改变了传统的序列建模方式(如 RNN 和 CNN),成为现代大语言模型(如 GPT、BERT)和跨模态模型(如 Vision Transformer)的核心基础。
Transformer模型架构
📖 Transformer模型的核心组件及其作用如下:
-
编码器-解码器架构(Encoder-Decoder)
- 编码器:将输入序列(如文本、图像块)转换为高维语义表示。
对文本的实现:使用词嵌入矩阵(如 Word2Vec 或可学习的嵌入层);
对图像的实现:将图像切分为块(Patch),线性投影为向量(Vision Transformer)。 - 解码器:基于编码器的输出生成目标序列(如翻译结果、文本续写)。
- 某些模型(如 BERT)仅使用编码器,GPT 仅使用解码器。
- 编码器:将输入序列(如文本、图像块)转换为高维语义表示。
-
自注意力机制(Self-Attention)
- 通过计算序列中每个位置与其他位置的关联权重,动态捕捉全局依赖关系。
例如:在句子The cat didn't eat because it was hungry
中,模型通过自注意力直接关联it
和cat
,无需逐步传递信息。
- 通过计算序列中每个位置与其他位置的关联权重,动态捕捉全局依赖关系。
-
多头注意力(Multi-Head Attention)
- 并行使用多个独立的注意力头,捕获不同维度的语义关联(如语法、指代、情感)。
-
位置编码(Positional Encoding)
为输入序列添加位置信息(如正弦函数或可学习的嵌入向量),弥补自注意力机制对顺序不敏感的特性。- 绝对位置编码:使用正弦/余弦函数(原始论文)或可学习的嵌入向量。
- 相对位置编码:通过注意力计算中的偏置项隐式建模位置关系(如 T5 模型)。
- 公式(以正弦编码为例):
P E ( p o s , 2 i ) = sin ( p o s 1000 0 2 i / d model ) , P E ( p o s , 2 i + 1 ) = cos ( p o s 1000 0 2 i / d model ) PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PE(pos,2i)=sin(100002i/dmodelpos),PE(pos,2i+1)=cos(100002i/dmodelpos)
其中, p o s pos pos:位置序号, i i i:维度序号, d model d_{\text{model}} dmodel:模型维度。
-
前馈网络(Feed-Forward Network, FFN)
- 每个位置的输出经过全连接层和非线性激活(如 ReLU),增强模型表达能力。
FFN ( x ) = max ( 0 , x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 FFN(x)=max(0,xW1+b1)W2+b2
- 每个位置的输出经过全连接层和非线性激活(如 ReLU),增强模型表达能力。
-
残差连接与层归一化
- 残差连接:将模块的输入与输出相加,缓解梯度消失问题。
x out = x in + Sublayer ( x in ) x_{\text{out}} = x_{\text{in}} + \text{Sublayer}(x_{\text{in}}) xout=xin+Sublayer(xin) - 层归一化:对每个样本的特征维度进行归一化,加速训练收敛。
- 残差连接:将模块的输入与输出相加,缓解梯度消失问题。
-
掩码注意力(Masked Attention,仅解码器)
- 作用:在解码器中,确保生成第
t
个词时仅关注前t-1
个词(防止未来信息泄露)。 - 实现:在注意力权重矩阵的上三角区域(未来位置)填充负无穷(softmax 后变为 0)。
- 作用:在解码器中,确保生成第
Transformer的优势与局限
-
优势:
- 并行计算能力强,适合 GPU 加速。
- 长距离依赖建模能力优异(如段落级指代消解)。
- 架构灵活,可扩展至多模态任务(如文本+图像)。
-
局限:
- 自注意力计算复杂度为 O ( n 2 ) O(n^2) O(n2),长序列处理成本高(需稀疏注意力优化)。
- 位置编码对绝对/相对位置的建模仍有改进空间。
- 小数据场景下容易过拟合(需大规模预训练)。
注意力机制(Attention Mechanism)
基本概念与分类
注意力机制是一种让模型动态聚焦于输入中重要部分的技术,灵感来源于人类视觉和语言理解中的选择性关注。其核心思想是:根据当前任务需求,为不同输入分配不同的权重。
📖 常见的注意力机制有以下几种:
-
软性注意力(Soft Attention)
- 权重通过概率分布表示(如 0.7 关注词 A,0.3 关注词 B),可微分,适合端到端训练。
- 示例:在机器翻译中,生成目标词时,模型可能更关注源句子中的特定词。
-
硬性注意力(Hard Attention)
- 权重为 0 或 1(非此即彼),不可微分,需强化学习优化(应用较少)。
-
自注意力(Self-Attention)
- 同一序列内部的注意力,用于捕捉序列内元素的依赖关系(如 Transformer 中的核心机制)。
-
交叉注意力(Cross-Attention)
- 不同序列之间的注意力,例如解码器在生成目标词时关注编码器的输出。
Transformer中的Self-attention机制
🐱 以单头自注意力为例,其计算过程为:
- 将输入转换为 Query(Q)、Key(K)、Value(V)矩阵。
- 计算单头注意力权重:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
其中 d k d_k dk 为 Key 的维度,用于缩放防止梯度爆炸。
- 输出为加权后的 Value 向量之和。
🦁 计算多头注意力的过程如下:
- 将 Q、K、V 拆分为 h 个头(如 8 头)。
- 每个头独立计算自注意力。
- 拼接所有头的输出并通过线性层融合。
MultiHead
(
Q
,
K
,
V
)
=
Concat
(
head
1
,
.
.
.
,
head
h
)
W
O
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O
MultiHead(Q,K,V)=Concat(head1,...,headh)WO
其中
W
O
W^O
WO 为输出投影矩阵。
Transformer与注意力机制的关系
1. 注意力机制是 Transformer 的核心组件
- Transformer 完全依赖注意力机制(尤其是自注意力和交叉注意力)来建模序列内和序列间的依赖关系,摒弃了传统的循环(RNN)或卷积(CNN)结构。
- 自注意力机制的优势:
- 并行计算:所有位置同时计算,大幅提升训练速度(对比 RNN 的时序依赖)。
- 全局依赖:直接捕捉任意距离的关联,解决 RNN 的长程依赖问题。
- 可解释性:注意力权重可视化可解释模型的关注点(如情感分析中关注关键词)。
2. Transformer 是对注意力机制的扩展与优化
- 多头注意力:通过并行多个注意力头,捕获多样化的语义关联(如同时关注句法结构和语义角色)。
- 位置编码:弥补纯注意力机制对位置信息的忽略,使模型理解顺序。
- 残差连接与层归一化:解决深层网络训练中的梯度问题,使模型更易优化。
Transformer与RNN模型的对比
对比维度 | Transformer | RNN(含 LSTM/GRU) |
---|---|---|
核心结构 | 基于自注意力机制的编码器-解码器架构,无循环结构。 | 基于循环单元(如简单 RNN、LSTM、GRU)的链式结构,按时间步处理序列。 |
并行计算能力 | 高:自注意力可同时计算序列所有位置的关联,充分利用 GPU 并行性。 | 低:必须按时间步顺序计算,无法并行处理序列。 |
长距离依赖处理 | 优:自注意力直接建模任意距离的依赖关系,无信息衰减。 | 差:依赖时间步传递,长距离易出现梯度消失/爆炸(LSTM/GRU 部分缓解)。 |
计算复杂度 | O ( n 2 ) O(n^2) O(n2)(n 为序列长度),长序列计算成本高。 | O ( n ) O(n) O(n)(线性复杂度),但无法并行导致实际训练时间更长。 |
位置信息处理 | 显式位置编码(如正弦函数、可学习向量)注入位置信息。 | 隐式通过时间步顺序处理位置,无显式编码。 |
训练效率 | 高:并行计算大幅缩短训练时间(如 GPT-3 训练需数千 GPU 天)。 | 低:时间步串行导致训练慢,尤其对长序列。 |
内存消耗 | 高:需存储所有位置的注意力矩阵(显存占用随序列长度平方增长)。 | 低:仅需存储当前时间步的隐状态(内存占用线性增长)。 |
模型深度支持 | 强:残差连接 + 层归一化支持数百层深度(如 GPT-4)。 | 弱:深层 RNN 易梯度消失,通常不超过 10 层。 |
动态权重分配 | 通过自注意力权重动态聚焦关键位置(如关键词、图像区域)。 | 固定权重:循环单元参数在时间步间共享,无法动态调整关注点。 |
典型变体 | BERT(仅编码器)、GPT(仅解码器)、ViT(视觉 Transformer)、T5(编码器-解码器)。 | LSTM(长短期记忆)、GRU(门控循环单元)、BiRNN(双向 RNN)。 |
训练数据需求 | 高:依赖大规模预训练数据(如千亿 token)才能发挥优势。 | 低:小规模数据下可能表现更好(尤其任务数据有限时)。 |
推理延迟 | 高:解码时需计算完整注意力矩阵(可通过 KV 缓存优化)。 | 低:逐时间步生成,内存占用稳定。 |
应用场景 | 文本生成(GPT)、翻译(Transformer)、图像分类(ViT)、语音识别(Conformer)等。 | 时间序列预测、短文本分类、早期机器翻译、简单对话系统(如 ELMo)。 |
可解释性 | 中:注意力权重可可视化(如显示模型关注哪些词)。 | 低:隐状态含义难以直接解释。 |
硬件适配 | 依赖高性能 GPU/TPU(需大显存和并行计算能力)。 | 可在低端设备运行(计算需求较低)。 |
GPT-3 模型参数量一窥
GPT-3模型中的权重参数量超过1750亿个。
- Embedding组件:
12288 d_embed * 50257 n_vocab
- Key组件:
128 d_query * 12288 d_embed * 96 n_heads * 96 n_layers
- Query组件:
128 d_query * 12288 d_embed * 96 n_heads * 96 n_layers
- Value组件:
128 d_value * 12288 d_embed * 96 n_heads * 96 n_layers
- Output组件:
12288 d_embed * 128 d_value * 96 n_heads * 96 n_layers
- Up-projection组件:
49152 neurons * 12288 d_embed * 96 n_layers
- Down-projection组件:
12288 d_embed * 49152 neurons * 96 n_layers
- Unembedding组件*:
50257 n_vocab * 12288 d_embed
推荐延伸阅读
【1】Attention Is All You Need, https://arxiv.org/abs/1706.03762
【2】Transformers (how LLMs work) explained visually | DL5, https://www.youtube.com/watch?v=wjZofJX0v4M
【3】Attention in transformers, step-by-step | DL6, https://www.youtube.com/watch?v=eMlx5fFNoYc
【4】What does it mean for computers to understand language? | LM1, https://www.youtube.com/watch?v=1il-s4mgNdI
【5】The History of ChatGPT, https://www.youtube.com/watch?v=OFS90-FX6pg
【6】Let’s build GPT: from scratch, in code, spelled out., https://www.youtube.com/watch?v=kCc8FmEb1nY
【7】A Mathematical Framework for Transformer Circuits, https://transformer-circuits.pub/2021/framework/index.html
【8】Efficient Estimation of Word Representations in Vector Space, https://arxiv.org/abs/1301.3781