如果你关注 AI 领域,"Transformer" 和 "Attention" 这两个词肯定见过无数次了。几乎所有主流大模型——ChatGPT、LLaMA、Qwen、DeepSeek——都是基于 Transformer 架构。但市面上的解释要么太浅("就是注意力机制嘛"),要么太深(满屏数学公式),很少有中间路线。
这篇文章的目标很明确:让你从门外汉变成能给被人讲清楚的人。不需要你有技术背景,我用做菜、配菜、翻译的比喻,把这个概念讲透。
Transformer 的核心是自注意力机制(Self-Attention),它的作用是:让模型在处理每个词的时候,能"看到"上下文中的其他词,从而理解词语之间的关系。
举个例子:当模型读到"它喜欢吃苹果"的时候,"它"是指猫还是指人?Attention 能让模型知道"它"应该和"猫"关联在一起,而不是和"苹果"关联在一起。
讲 Transformer 之前,必须先说它的"前辈"——RNN(循环神经网络)。理解了 RNN 的问题,才能理解 Transformer 为什么要出现。
RNN 处理句子,就像食堂排队打饭:
输入: "我 爱 吃 苹 果"
↓
第1步: 处理"我" → 输出[0.2, 0.1, ...]
↓
第2步: 处理"爱" + 第1步的结果 → 输出[0.1, 0.8, ...]
↓
第3步: 处理"吃" + 第2步的结果 → 输出[0.7, 0.2, ...]
↓
... 一步一步来,不能并行
看到了吗?每个词的计算都依赖上一步的结果,就像流水线作业,一步一步来,不能并行。
问题一:太慢 — 因为必须排队,GPU 的并行计算能力完全浪费了。100 个词就要等 100 步。
问题二:记不住 — 如果句子很长,开头的信息会随着传递被稀释。RNN 天然"喜新厌旧"。
问题三:断层理解 — "她穿了件和服,发现手机落在上面了"中,"上面"到底指什么?RNN 很难处理这种跨长距离的依赖关系。
举个例子:假设你要翻译这个句子:
The cat, which already ate a big mouse, jumped onto the table.
RNN 处理 "ate" 的时候,最早的信息 "cat" 已经传了很多步,早就"稀释"了。模型很难记住 "ate" 的主语是 "cat"。
Transformer 解决 RNN 三个问题的方式很简单——让所有词同时"围坐一桌",直接对话。
想象一下,一桌人围在一起吃饭:
Transformer 的 Attention 就是这个逻辑:每个词在计算时,可以同时关注句子中所有其他词,而不是只能看相邻的词。
围桌吃饭 vs 排队打饭:
这是最核心、也是最常被搞混的部分。我会尽量用最直观的方式讲清楚。
每个词进入 Attention 层之后,会被"复制"成三份,分别扮演不同的角色:
想象你去相亲大会:
Attention 的计算过程,就是拿你的择偶标准(Q),去和每个人的简历标签(K)做匹配——匹配度越高,就越应该参考那个人的资料(V)。
再举一个翻译的例子。中译英:
输入:"我喜欢猫"输出:"I like cats"
当模型翻译到 "like" 的时候:
"like" 的 Q 会和"我"的 K 做匹配(因为"like"需要知道谁在喜欢),匹配度很高,所以"我"的 V 会被大量读取,最终体现在输出里。
每个词进入 Transformer 之前,会先通过一个Embedding层变成一个向量。Attention 层对这个向量做三次不同的线性变换,得到 Q、K、V:
Q = 输入向量 × Wq(权重矩阵)
K = 输入向量 × Wk(权重矩阵)
V = 输入向量 × Wv(权重矩阵)
Wq、Wk、Wv 是模型在训练过程中学到的参数。也就是说,模型自己学会了:什么样的 Query 应该匹配什么样的 Key。训练数据越多,模型匹配得越准。
Attention 的完整公式是:
Attention(Q, K, V) = softmax(Q × K^T / √d) × V
听起来复杂,但我们一步一步拆解:
Q × K^T 是两个矩阵相乘。
直观理解:Q 是一组问题,K 是一组答案标签。Q × K^T 就是拿每个问题去和每个答案做匹配打分。
比如有 3 个词:["我", "喜欢", "猫"]
3×3 相关度矩阵(举例):
找"我" 找"喜欢" 找"猫"
问"我" 9.2 7.1 3.4
问"喜欢" 8.8 6.5 7.3 (喜欢和猫相关性也挺高)
问"猫" 4.1 7.9 9.1 (猫和自己的 K 最匹配)
除以 √d 中的 d 是 Q(和 K)向量的维度,通常是 768 或 4096。
为什么要除?因为如果不做缩放,两个向量点积的值会随着维度增大而变大,softmax 之后梯度会变得非常小,模型就学不动了(梯度消失)。
简单理解:考试满分从 100 分变成 10000 分,大家都得接近满分,就区分不出来了。除以 √d 就是把满分重新拉回合理区间。
softmax 把相关度分数转成概率分布——每个词"应该被关注多少":
softmax 前后对比:
softmax 前(相关度分数):
[9.2, 7.1, 3.4] ← 数字大小不一
softmax 后(关注权重):
[0.82, 0.14, 0.04] ← 加起来=1,变成概率分布
比如上面这个例子,"我"这个词在处理自己([0.82])的时候,82% 的注意力放在自己身上,14% 放在"喜欢"身上,4% 放在"猫"身上。
最后一步,把关注权重和 V 相乘:
最终得到一个"加权求和"的结果向量,这个向量就是 Attention 层的输出——它融合了上下文中所有相关词的信息。
实际应用中,每个词的关系是多维度的:
每种关系可能需要不同的"匹配方式"。所以 Transformer 实际用了多个 Attention 同时工作——每个头有自己独立的 Wq、Wk、Wv:
MultiHead = Concat(head_1, head_2, ..., head_h) × Wo
其中每个 head_i = Attention(Q_i, K_i, V_i)
每个头负责捕捉一种语义关系,最后把结果拼接(Concat)起来,再做一个线性变换(Wo)。
研究显示,Transformer 的不同注意力头确实会学到不同的语义关系:
这意味着 Attention 不是单一逻辑,而是多个子逻辑并行工作,这大大增强了模型的表达能力。
了解了 Attention,再看完整的一层就清晰多了:
输入向量 [batch_size, seq_len, hidden_size]
↓
Layer Norm(标准化,稳定计算)
↓
Multi-Head Self-Attention(Q/K/V 自注意力)
↓
残差连接
↓
Layer Norm
↓
Feed-Forward(FFN,前馈网络,非线性变换)
↓
残差连接
↓
输出向量 [batch_size, seq_len, hidden_size]
↓
重复 N 次(28层/32层/40层...)
1. 并行计算:所有词同时处理,不依赖顺序 → 训练和推理都快,GPU 利用率高
2. 直接长距离依赖:任意两个词之间可以"直接对话" → 能处理长文本,理解跨句关系
3. 可扩展性:堆更多层、扩大维度,模型就变强 → Scaling Law:模型越大,数据越多,效果越好
Transformer 有一个重要特性:规模越大,效果越好。这被称为 Scaling Law(扩展定律)。
2020 年 OpenAI 的研究显示:
这就是为什么 GPT-2 → GPT-3 → GPT-4 每一代都有质的飞跃。这也是为什么全球都在卷大模型——Transformer 架构提供了"大力出奇迹"的基础。
回到最初的问题:Attention 到底是什么?
用一句话总结:Attention 是一种让模型在处理每个词的时候,能同时考虑上下文中所有其他词、并根据相关性动态分配注意力的机制。
它的核心价值在于:打破了 RNN 的"排队困境",让模型能够并行计算、直接捕捉长距离依赖关系。这是 Transformer 架构的基石,也是大模型能够"暴力出奇迹"的底层原因。
本篇核心要点:
下篇预告: 大模型不是黑箱:拆开模型看里面有什么(hidden_size、参数计算、层结构)
如果你觉得这篇文章有帮助,欢迎转发给需要的朋友。