AI 原理 · 2025年4月24日 · 4 分钟

Transformer 详解:从注意力机制到 GPT

从 Self-Attention 出发推导 Transformer 架构设计逻辑,理解 GPT 系列模型背后的核心原理。

过去几年里,以 GPT 为代表的大语言模型彻底改变了 NLP 甚至整个 AI 领域的格局。而所有这些模型背后的核心架构,都来自 Google 2017 年的一篇论文《Attention Is All You Need》。

这篇文章试图从注意力机制出发,一步步推导 Transformer 的设计逻辑。

为什么是 Attention

在 Transformer 出现之前,序列建模的主角是 RNN/LSTM。它们的问题是:处理第 100 个词时需要记住第 1 个词的信息,但信息在长距离传输中会衰减(梯度消失)。

举个例子:

"我去年在北京买的那套房子,今年因为工作调动要去上海,决定把它了。"

要理解"卖"的对象是"房子",模型需要跨越十几个词建立联系。RNN 对此力不从心。

Attention 直接给序列中任意两个位置建立关联通道——不管距离多远,信息传递路径长度恒为 1。

Self-Attention 的数学直觉

输入: X = [x₁, x₂, ..., xₙ]   (每个 x 是一个词的向量表示)

对于每个 xᵢ,计算三个向量:
  Qᵢ = W^Q · xᵢ    (Query: 我在找什么)
  Kᵢ = W^K · xᵢ    (Key:   我是什么)
  Vᵢ = W^V · xᵢ    (Value: 我有什么信息)

W^Q、W^K、W^V 是可学习的参数矩阵,所有位置共享。

Attention 的计算过程:

相似度分数:  scoreᵢⱼ = Qᵢ · Kⱼ
归一化:      weightᵢⱼ = softmax(scoreᵢⱼ / √dₖ)
加权求和:    outputᵢ = Σ weightᵢⱼ · Vⱼ

每个位置的输出是该位置对所有位置的 Value 的加权平均。权重由 Query 和 Key 的相似度决定。

除以 √dₖ 是为了防止向量维度太大时 softmax 梯度消失:维度越大点积值越大,softmax 越接近 one-hot,梯度越小。

Multi-Head Attention

单头注意力可能只关注一种关系(比如语法结构),多头可以同时关注多种不同的关系:

┌──────────────────────────────────────┐
│            Multi-Head                │
│                                      │
│  ┌──────┐ ┌──────┐ ┌──────┐         │
│  │Head 1│ │Head 2│ │Head 8...    │
│  │语法   │ │指代   │ │语义   │        │
│  │关系   │ │关系   │ │相似度 │        │
│  └──┬───┘ └──┬───┘ └──┬───┘         │
│     └────────┼────────┘             │
│              ▼                      │
│         Concat + Linear             │
└──────────────────────────────────────┘

每个 Head 有自己独立的 W^Q、W^K、W^V,在不同子空间学习不同的注意力模式。

完整结构

          ┌─────────────┐
          │    Output    │
          └──────┬──────┘
          ┌──────┴──────┐
          │ Feed Forward │  ← 逐位置的 MLP
          └──────┬──────┘
          ┌──────┴──────┐
          │     Add     │  ← Residual Connection& Norm    │
          └──────┬──────┘
          ┌──────┴──────┐
          │ Multi-Head  │
          │  Attention  │
          └──────┬──────┘
     ┌─────────┴─────────┐
     │     Positional    │
     │     Encoding      │  ← 让模型知道词的顺序
     └─────────┬─────────┘
          ┌──────┴──────┐
          │    Input    │
          └─────────────┘
                × N

三个关键设计

位置编码:Attention 本身不关心位置——它是一种集合操作(set operation),交换两个词的顺序输出也会交换。Positional Encoding 给每个位置注入唯一的位置信号,让模型感知顺序。最经典的正弦位置编码有很好的外推性质——训练时最长 512 个位置,推理时可以稍微超出一些。

残差连接:每个子层都有 x + Sublayer(x) 的跳跃连接,然后 LayerNorm。这让梯度可以直接流过子层,解决深层网络的退化问题。没有残差的 Transformer 堆不深。

Layer Normalization:对每个样本的特征维度做归一化(不同于 Batch Norm 对批次维度)。为什么用 Layer Norm?因为序列长度不固定,batch 维度统计量不稳定,而特征维度是固定的。

从 Encoder-Decoder 到 GPT

原始 Transformer 有 Encoder(编码输入)和 Decoder(生成输出),用于翻译任务。后续的发展出现了两条路线:

  • BERT:只用 Encoder,双向注意力,适合理解任务(分类、实体识别、问答)
  • GPT:只用 Decoder,单向(因果)注意力,适合生成任务

GPT 的核心约束是 Causal Masking——计算第 t 个位置的输出时,只能看到位置 1 到 t,不能偷看后面的词。这保证了训练和推理的行为一致:训练时预测下一个词,推理时生成下一个词。

为什么它能 Scale

Transformer 相比 RNN 最大的工程优势是计算可以并行。RNN 必须等 t-1 算完才能算 t,Transformer 的所有位置可以同时算——这对 GPU 太友好了。

加上结构极度简洁(核心就是矩阵乘法 + softmax),Scaling Law 成立——更大的模型 + 更多的数据 = 持续更好的表现,看不到天花板(至少在当前能做到的规模下)。

从原理到实践的落差

理解了 Transformer 并不等于理解了 GPT。GPT 的能力更多来自于海量数据预训练 + 指令微调 + RLHF 对齐,而非架构本身的创新。论文里的 Transformer 是翻译模型,ChatGPT 是对话模型——中间隔着数据工程、对齐训练、推理优化的巨大鸿沟。

但回到起点,Self-Attention 那一句"让任意两个位置可以直接通信"的直觉,确实是整个时代的起点。

继续阅读

评论