1. 一句话结论
Transformer 的核心主张是:序列建模不需要「一个字一个字地读」(RNN),也不需要「用滑动窗口看」(CNN),而是让序列里的每个位置直接「抬头看一眼」所有其他位置,用一种叫「自注意力」的机制一次性算出谁和谁相关。 这让它天然可并行、可堆深、可扩展到超长上下文——今天你用的每一个大模型,骨子里都是它。
2. 为什么要换掉 RNN?
在 2017 年之前,处理语言、语音、时间序列的主力是 RNN / LSTM:
- 它像读书一样从左到右逐个 token 处理,第
t步必须等第t-1步算完。 - 这带来两个致命问题:
- 无法并行:一句话 1000 个字,就得串行跑 1000 步,GPU 的千核算力用不上。
- 长程遗忘:信息要从第 1 个字一路传递到第 1000 个字,越往后越稀释(梯度消失/爆炸)。虽然 LSTM 用门控缓解,但本质没变。
CNN(如 PixelCNN / 卷积文本模型)能并行,但感受野受卷积核大小限制,要看远距离依赖得堆很多层。
Transformer 的赌注:直接建模任意两个位置之间的依赖,距离多远都只隔一步计算。
3. 自注意力:每个词「抬头看全场」
自注意力(Self-Attention)的输入是一组向量 X = [x₁, x₂, …, xₙ](每个 token 的嵌入)。它对每个位置算出三个向量:
- Q(Query,我在找什么)
- K(Key,我能提供什么)
- V(Value,我实际携带的信息)
通过一个线性层从 X 投影得到:Q = XW_Q,K = XW_K,V = XW_V。
然后每个位置对其它所有位置算「相关度」:
score(i, j) = Q_i · K_j / √d_k
attention(i) = softmax_j( score(i, j) ) · V_j
直觉:Q_i 和 K_j 越像(点积越大),第 i 个词就越「注意」第 j 个词,最终输出就是把所有位置的 V 按注意力权重加权求和。
√d_k 的作用:当维度
d_k很大时点积容易爆掉,除以它的平方根做缩放,让 softmax 梯度更稳定。这是论文里一个不起眼但很关键的小技巧。
关键点:任意一个词看另一个词,都只经过一次矩阵乘法,和第 j 个字距离多远无关。这就是「一步到位的全局依赖」。
4. 多头注意力:不只看一个角度
单一注意力只能学到一种「关系视角」。Transformer 用了 Multi-Head Attention:把 Q/K/V 切成 h 个头,每个头在各自子空间里独立算注意力,最后把结果拼起来再投影:
head_h = Attention(XW_Q^h, XW_K^h, XW_V^h)
MultiHead = Concat(head₁, …, head_h) · W_O
不同头会自然分工:有的盯语法依存、有的盯指代、有的盯语义相似。论文用 h = 8 个头、每个头维度 64(总维度 512)。
5. 位置编码:注意力本身「不认顺序」
自注意力对输入顺序是排列不变的——把句子打乱,每个词算出的加权求和结果只和「出现了哪些词」有关,和「谁在前」无关。但语言明显有顺序。
解决办法是给每个位置叠加一个位置编码 PE(pos):
- 论文用正弦/余弦固定编码:
PE(pos, 2i) = sin(pos / 10000^(2i/d)),PE(pos, 2i+1) = cos(...)。 - 好处:它能让「位置
pos+k的编码」线性表达为「位置pos编码」的函数,模型容易学会「相对位置」。
后来的模型(如 GPT)大多改用可学习的位置嵌入,思路一致:必须把顺序信息喂进去。
6. 编码器–解码器骨架
原始 Transformer 用于翻译,分两半:
- Encoder(编码器):一堆自注意力 + 前馈层,把源句压成富含上下文的表示。它的自注意力是双向的(看前后文)。
- Decoder(解码器):在自注意力之外,多一层 Masked Self-Attention(只能看已生成的部分,不能偷看未来)和一层 Cross-Attention(Q 来自解码器、K/V 来自编码器),逐词生成译文。
- 每个子层外用 残差连接 + LayerNorm:
output = LayerNorm(x + Sublayer(x)),这是能让深层网络稳定训练的关键。
7. 为什么它成了大模型底座?
| 特性 | RNN/LSTM | Transformer |
|---|---|---|
| 并行度 | 串行,几乎不能并行 | 全序列一次矩阵运算,GPU 友好 |
| 长程依赖 | 路径长、易遗忘 | 任意两点一步直达 |
| 可扩展性 | 堆深困难 | 残差+LayerNorm 支持堆到上百层 |
| 硬件友好 | 不规则循环 | 全是标准矩阵乘(MatMul) |
正因为这些,GPT(只用解码器)、BERT(只用编码器)、ViT(把图当序列)、whisper、Sora 乃至 Diffusion Policy 的动作头,底层都是这套注意力机制。可以说 2017 年这一篇,定义了之后八年深度学习的「通用计算原语」。
8. 小结与延伸
- Transformer = 自注意力 + 多头 + 位置编码 + 残差/LayerNorm。
- 它用「全局一步注意力」换掉了「串行循环」,把序列建模变成可并行、可扩展的矩阵运算。
- 想继续往下读:GPT 系列( decoder-only 如何做生成)、BERT(双向编码做理解)、以及本博客「vLLM 与 SGLang 框架解码手记」里 KV Cache 如何成为注意力的工程瓶颈。
下一篇(pp2)我们聊 Diffusion Policy——它把 Transformer 同款的「注意力范式」之外的另一条线(扩散去噪)搬到了机器人动作生成上,正好和本系列的「VLA 解码手记」衔接。
💬 留言
NaphJohn/LLM-blog尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。