Transformer 架构详解:自注意力机制

2017 年,Google 的一篇论文《Attention Is All You Need》提出 Transformer,彻底改变了深度学习。今天你用的 ChatGPT、文心一言、Stable Diffusion,底层都站着它。这篇我们把这个”现代 AI 地基”拆开讲清楚。

RNN/LSTM 处理长序列的短板

在 Transformer 之前,序列任务(翻译、对话)主要靠 RNN/LSTM。它们有两个绕不开的毛病:

  • 串行计算:第 t 步必须等第 t-1 步算完,无法并行,训练极慢;
  • 长程依赖衰减:梯度沿时间链一步步回传,越靠前的词对当前的影响越小(梯度消失),记不住远距离信息。

LSTM/GRU 用”门控”机制缓解了遗忘,但没有消除串行瓶颈。据 Vaswani 等人在 2017 年论文中的分析,这类模型在翻译等任务上既慢又难训练,于是他们干脆扔掉循环,只保留注意力。

自注意力:让每个词”直接看”所有词

自注意力(Self-Attention)的核心直觉是:要理解一个词,应该让它同时参考句子里其他所有词,并按相关度加权融合。

实现靠三个向量:

  • Query (Q):当前词”我想找什么信息”;
  • Key (K):每个词”我能提供什么信息”;
  • Value (V):每个词”实际携带的内容”。

每个词用 Q 去和其它词的 K 算相似度,得到注意力权重,再对 V 加权求和。核心公式(缩放点积注意力):

Attention(Q, K, V) = softmax(QKᵀ / √d_k) · V

其中 √d_k 是缩放因子,防止点积数值过大导致 softmax 梯度消失。

import numpy as np

def scaled_dot_product_attention(Q, K, V):
    d_k = Q.shape[-1]
    scores = Q @ K.T / np.sqrt(d_k)              # 算相似度
    weights = np.exp(scores) / np.sum(np.exp(scores), axis=-1, keepdims=True)  # softmax
    return weights @ V                          # 按权重对 V 求和

多头注意力:从多个”视角”看序列

单个注意力只能捕捉一种关系。多头注意力(Multi-Head Attention)把 Q/K/V 投影到 h 个子空间,各自独立算注意力,再把结果拼接:

MultiHead(Q,K,V) = Concat(head₁, ..., head_h) · Wᴼ
head_i = Attention(Q·WᵢQ, K·WᵢK, V·WᵢV)

直觉上:一个头关注语法搭配,一个头关注指代关系,一个头关注语义距离——多头让模型同时捕捉多种关系,表达力更强。

位置编码:给无序的序列”标顺序”

自注意力是一种”集合运算”,本身不在乎词的顺序。但语言里顺序决定意义。解决办法是加入位置编码(Positional Encoding):

  • 正弦/余弦编码(原始论文):用不同频率的 sin/cos 函数生成固定位置向量,加到词向量上,可外推到更长序列;
  • 可学习位置编码:让模型自己训练出位置向量(如 BERT 的做法)。

无论哪种,目标都是把”第几个词”这一信息注入表示,否则”狗咬人”和”人咬狗”对模型就是一回事。

编码器-解码器结构

原始 Transformer 由两部分组成:

  • 编码器(Encoder):多层堆叠,每层 = 多头自注意力 + 前馈网络,把输入序列编码成富含上下文的表示;
  • 解码器(Decoder):在编码器输出基础上,先做”带掩码的自注意力”(只看已生成的部分,防止偷看未来),再做交叉注意力关注编码器输出,逐词生成结果。

残差连接与 LayerNorm:让深层可训练

每个子层都包了残差连接(Residual / Add)和层归一化(LayerNorm):

output = LayerNorm(x + Sublayer(x))
  • 残差连接提供”捷径”,让梯度能直接回传,缓解深层退化(层越深反而更差);
  • LayerNorm 稳定每层输入分布,加速收敛。

这两个组件是训练上百层 Transformer 的关键,也是现代所有大模型的结构标配。

与 RNN / CNN 的对比

维度RNN/LSTMCNNTransformer
并行性串行,慢可并行完全并行
长程依赖易衰减受感受野限制一步直达
计算复杂度O(n) 步O(n·k)O(n²)(注意力)
可解释性注意力权重可可视

从 Transformer 到大模型:BERT 与 GPT

理解了结构,看两个经典用法:

  • BERT(Encoder-only):用双向自注意力把整句话编码成表示,擅长填空、分类等”理解”任务;
  • GPT(Decoder-only):只用解码器做自回归生成,擅长写文章、对话等”生成”任务。

今天绝大多数对话大模型都走 GPT 式的 Decoder-only 路线,只是把层数、维度和数据量放大到极致。Vaswani 的原始论文只解决翻译,却意外成了整个生成式 AI 时代的底座。

为什么它能撑起现代大模型

三点决定一切:

  1. 完全并行,能吃满 GPU,支撑海量数据训练;
  2. 自注意力一步连接任意两个词,长文本记忆不衰减;
  3. 结构统一且可扩展,堆叠到千亿参数仍稳定(靠残差 + LayerNorm)。

从 BERT、GPT 到各类多模态模型,底层都是 Transformer。Jay Alammar 的《The Illustrated Transformer》(jalammar.github.io/illustrated-transformer)用大量图示讲清了上述机制,强烈建议配合阅读。

小结

  • RNN 串行、长程依赖弱;Transformer 用自注意力一步连接全部词。
  • 自注意力公式:softmax(QKᵀ / √d_k) · V,Q/K/V 分别承担”查询/键/值”角色。
  • 多头注意力让模型从多个视角理解序列;位置编码弥补”无序”缺陷。
  • 编码器-解码器分工明确;残差连接 + LayerNorm 是深层可训练的关键。
  • Transformer 并行、长程、可扩展,成为 GPT/BERT 等大模型的统一底座。

参考来源

  1. Vaswani, A., Shazeer, N., Parmar, N., et al. Attention Is All You Need. arXiv:1706.03762, 2017. https://arxiv.org/abs/1706.03762
  2. Jay Alammar. The Illustrated Transformer. https://jalammar.github.io/illustrated-transformer/
  3. Stanford CS231n: Deep Learning for Computer Vision(含序列建模与注意力背景). https://cs231n.stanford.edu
  4. Goodfellow, I., Bengio, Y., Courville, A. Deep Learning(第 10 章序列建模). https://www.deeplearningbook.org
本文累计阅读