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/LSTM | CNN | Transformer |
|---|---|---|---|
| 并行性 | 串行,慢 | 可并行 | 完全并行 |
| 长程依赖 | 易衰减 | 受感受野限制 | 一步直达 |
| 计算复杂度 | O(n) 步 | O(n·k) | O(n²)(注意力) |
| 可解释性 | 低 | 中 | 注意力权重可可视 |
从 Transformer 到大模型:BERT 与 GPT
理解了结构,看两个经典用法:
- BERT(Encoder-only):用双向自注意力把整句话编码成表示,擅长填空、分类等”理解”任务;
- GPT(Decoder-only):只用解码器做自回归生成,擅长写文章、对话等”生成”任务。
今天绝大多数对话大模型都走 GPT 式的 Decoder-only 路线,只是把层数、维度和数据量放大到极致。Vaswani 的原始论文只解决翻译,却意外成了整个生成式 AI 时代的底座。
为什么它能撑起现代大模型
三点决定一切:
- 完全并行,能吃满 GPU,支撑海量数据训练;
- 自注意力一步连接任意两个词,长文本记忆不衰减;
- 结构统一且可扩展,堆叠到千亿参数仍稳定(靠残差 + 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 等大模型的统一底座。
参考来源
- Vaswani, A., Shazeer, N., Parmar, N., et al. Attention Is All You Need. arXiv:1706.03762, 2017. https://arxiv.org/abs/1706.03762
- Jay Alammar. The Illustrated Transformer. https://jalammar.github.io/illustrated-transformer/
- Stanford CS231n: Deep Learning for Computer Vision(含序列建模与注意力背景). https://cs231n.stanford.edu
- Goodfellow, I., Bengio, Y., Courville, A. Deep Learning(第 10 章序列建模). https://www.deeplearningbook.org