Attention Is All You Need
为什么这篇论文重要
如果 AI 史只能列 10 篇关键论文,这是其中之一。它定义了 2018 年至今所有 LLM 的架构基础。
GPT、BERT、Claude、Gemini、Llama……全部基于 Transformer。
“Attention is all you need.” 标题的张狂程度在 2017 年是少见的。事实证明他们说的是对的。
论文的核心贡献
1. 完全抛弃了 RNN
2017 年之前,序列建模(翻译、语言模型)几乎全用 RNN/LSTM。问题:
- 训练慢(必须串行)
- 长依赖难学(梯度消失)
本文提出:只用 Attention 也行。
2. 提出了 Scaled Dot-Product Attention
公式:
\sqrt{d_k} 这个缩放——是工程小心思但极其重要(详见 L3-05)。
3. 多头注意力(Multi-Head Attention)
不只用一个 attention,并行用 8 个或更多,让模型学到不同的”注意模式”。
4. 位置编码(Positional Encoding)
Attention 本身不知道顺序——他们用正弦/余弦给每个位置编码:
后来 RoPE、ALiBi 等改进的是这一部分。
5. 完整 Encoder-Decoder 架构
原文是机器翻译用的:
- Encoder 看完源句子
- Decoder 用 cross-attention 一边生成一边参考 encoder
2018 年后主流改成 Decoder-only(GPT 风格)或 Encoder-only(BERT 风格)—— 原始 Encoder-Decoder 反而少见了。
论文的实验
在 WMT 英德、英法翻译上:
- BLEU 分数超过之前所有方法
- 训练时间是基于 RNN 模型的 1/4
训练快和效果好——这两点一起达成,让所有人立刻转 Transformer。
一些有趣的细节
为什么叫 “Attention is all you need”
致敬 1964 年披头士的歌《All You Need Is Love》。
8 个作者写的,其中 5 个后来都创办了 AI 公司:
- Ashish Vaswani → Adept AI
- Noam Shazeer → Character.AI, Google
- Llion Jones → Sakana AI
- Aidan N. Gomez → Cohere
- Łukasz Kaiser → OpenAI
这是 AI 史上”最赚钱的论文”之一——8 个作者的初创公司加起来值 100+ 亿美元。
Google 没用好这篇论文
讽刺的是 —— Google 是发明者,但没有第一个做出 ChatGPT。 OpenAI 在 2018 年从这篇论文起跑,2022 年做出了 ChatGPT。
“Google 写论文,OpenAI 改变世界” —— 一个被反复讲的故事。
这篇论文今天还重要吗
仍然重要。但学习时不必逐字读这篇—— 2017 年的原文写法和现代实现已经有差距。
建议路径:
- 先看 L3-05 注意力机制详解 建立直觉
- 再看 L3-08 完整 Transformer 架构 整合
- 再回头读原文(如果你想做研究)
Andrej Karpathy 的视频《Let’s build GPT》比读原文学得快 10 倍——直接代码实现。
复现
最简实现:
import torch
import torch.nn as nn
import torch.nn.functional as F
class MultiHeadAttention(nn.Module):
def __init__(self, d_model=512, n_heads=8):
super().__init__()
self.d_k = d_model // n_heads
self.n_heads = n_heads
self.W_q = nn.Linear(d_model, d_model)
self.W_k = nn.Linear(d_model, d_model)
self.W_v = nn.Linear(d_model, d_model)
self.W_o = nn.Linear(d_model, d_model)
def forward(self, q, k, v, mask=None):
batch = q.size(0)
Q = self.W_q(q).view(batch, -1, self.n_heads, self.d_k).transpose(1, 2)
K = self.W_k(k).view(batch, -1, self.n_heads, self.d_k).transpose(1, 2)
V = self.W_v(v).view(batch, -1, self.n_heads, self.d_k).transpose(1, 2)
scores = (Q @ K.transpose(-2, -1)) / (self.d_k ** 0.5)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
attn = F.softmax(scores, dim=-1)
out = (attn @ V).transpose(1, 2).contiguous().view(batch, -1, self.n_heads * self.d_k)
return self.W_o(out)
不到 30 行,就是 Transformer 的灵魂。
推荐配套阅读
- Karpathy: nanoGPT —— 从零代码实现,约 300 行
- The Illustrated Transformer(Jay Alammar) —— 图解
- The Annotated Transformer —— 论文逐行注释
- HelloAI: L3-05 Attention + L3-08 Transformer 完整架构
这篇论文写的不只是一个模型——是 AI 后续十年的语法。 现在所有大模型都是它的”方言”。
想要更多论文精读
订阅每周精选 —— 下一篇论文笔记直接送邮箱。
讨论区
· 用 GitHub 账号登录评论src/components/Comments.astro 顶部填入
仓库 ID 和分类 ID(见组件注释里的配置步骤)。