ChatGPT为什么能对话——一篇引用17万次的论文
这是 「AI是怎么回事」 系列的第
6篇。我一直很好奇 AI 到底是怎么工作的,于是花了很长时间去拆这个东西——手机为什么换了发型还能认出你,ChatGPT 回答你的那三秒钟里究竟在算什么,AI 为什么能通过律师考试却会一本正经地撒谎。这个系列就是我的探索笔记,发现了很多有意思的东西,想分享给你。觉得不错的话,欢迎分享+关注。

2017 年,Google 的一个团队发表了一篇论文。
标题很朴素:Attention Is All You Need(你只需要注意力)。
八个作者,名字的排列顺序是随机的——因为他们认为每个人的贡献同样重要。论文发表在机器学习领域最顶级的会议 NeurIPS 上。
当时没有太多人注意到。
但后来发生的事情,让所有人始料未及。
这篇论文的被引用次数,截至 2025 年,超过了 17 万次——排进了 21 世纪被引用 最多的论文前十名。ChatGPT、GPT-4、Claude、Gemini、Midjourney——今天你能叫得上名字的 AI,几乎全部建立在这篇论文的基础上。
它到底讲了什么?
在这篇论文之前,AI 是怎么读文字的?
要理解这篇论文为什么重要,我们得先看看在它出现之前,AI 处理语言的方式有什么问题。
前面几篇文章里,我们知道了:文字在 AI 眼里就是一串数字(第 2 篇讲的 Token 和词向量),AI 的”学习”就是调整神经网络里几百万、几千万个参数(第 4 篇和第 5 篇)。
但有一个关键的问题我们还没聊过:AI 是按什么顺序读这些词的?
在 2017 年之前,AI 处理语言最主要的方法叫 RNN——全名是 Recurrent Neural Network,翻译过来叫”循环神经网络”。”循环”这个名字来自它的工作方式:它把处理上一个词的结果”循环”传给下一个词,一个接一个地读。
这个名字很形象。RNN 读文字的方式,就像你用手指着书、一个字一个字往下读。
让我用一个具体的例子来展示它的工作过程。
假设 AI 要理解这句话:”小明喜欢吃苹果”。
RNN 会这样处理:
第 1 步:读"小明" → 记住"小明"
第 2 步:读"喜欢" → 记住"小明 + 喜欢"
第 3 步:读"吃" → 记住"小明 + 喜欢 + 吃"
第 4 步:读"苹果" → 记住"小明 + 喜欢 + 吃 + 苹果"

看起来挺合理的,对吧?
但这里有一个致命的问题。
RNN 的致命弱点:读到后面,忘了前面
想象一下,如果句子变长了:
“小明,就是那个住在北京朝阳区、去年刚从清华大学计算机系毕业的、特别喜欢打篮球的高个子男生,他最喜欢吃的水果是苹果。”
RNN 还是一个字一个字地读。读到”苹果”的时候,它需要知道这个”苹果”跟”小明”有关——但中间隔了一大堆信息。
问题是:RNN 的”记忆”是有限的。
它把每一步的信息压缩成一组固定长度的数字(比如 256 个数字),然后传给下一步。每到下一步,新的信息会覆盖一部分旧的信息。读了几十个词之后,最前面的信息就被冲淡了——就像你往一杯墨水里不断加清水,最后颜色越来越淡。
这个问题在 AI 领域有一个专门的名字,叫长期依赖问题(long-term dependency problem)。1991 年,德国科学家 Sepp Hochreiter 在他的论文中首次系统地描述了这个问题,并指出了背后的数学原因:梯度在反向传播时会指数级地衰减——也就是说,离得越远的词,对当前词的影响越来越接近于零。
用我们第 5 篇学过的反向传播来理解:训练时,AI 需要从后往前传递”调整信号”。但 RNN 的信号每传一步就会衰减一点,传了几十步之后,信号就几乎消失了。这意味着 AI 根本学不到”远处的词”和”当前词”之间的关系。
这就是为什么 2017 年之前的机器翻译和聊天机器人总是”前言不搭后语”。 不是 AI”笨”,是它的”眼睛”只能看到最近几十个词——前面说了什么,它真的记不住了。
你可能会说:那就想办法增强记忆力呗?
确实有人这么做了。1997 年,还是那位 Hochreiter,和他的导师 Jurgen Schmidhuber 一起发明了一种改进版的 RNN,叫 LSTM(Long Short-Term Memory,长短期记忆网络)。LSTM 在 RNN 的基础上加了一个”记忆门”的机制——就像给那杯墨水加了一个阀门,让 AI 可以选择性地记住重要信息、忘掉不重要的信息。
LSTM 确实比原始 RNN 好了很多,它在 2010 年代的机器翻译、语音识别等任务中被广泛使用。但它依然有一个根本限制:还是一个词一个词地读。
不管记忆力多好,如果你只能一个字一个字地读,读一篇一万字的文章,总需要一万步。你无法”跳着读”、无法”先看结尾再回头看开头”。
更要命的是——因为必须一步一步地算,RNN 没办法并行计算。第 2 步必须等第 1 步算完才能开始,第 3 步必须等第 2 步算完……这意味着训练速度极慢。处理一个 1000 词的句子,需要 1000 个计算步骤,一步一步串行执行。
就像一条工厂的流水线,只有一个工位——不管你买多少台机器,同一时刻只能有一个人在干活。
2017 年的那篇论文,用一个全新的想法,把这两个问题一起解决了。
一个全新的想法:不要一个字一个字地读了
2017 年的那篇论文提出了一种全新的架构,叫做 Transformer。
这个名字的来历很有趣:据论文作者之一 Jakob Uszkoreit 回忆,他只是觉得”Transformer”这个词听起来很酷。团队的早期设计文档标题是”Transformers: Iterative Self-Attention and Processing for Various Tasks”,文档里甚至画了几个《变形金刚》的角色。
Transformer 的核心想法可以用一句话概括:
不要一个字一个字地读了。让 AI 同时看到所有的字,然后自己决定哪些字和哪些字相关。
这就像阅读方式的一次革命。
RNN 读文字像什么?像用手指一个字一个字地指着读——指到哪算哪,前面读过的只能靠记忆。
Transformer 读文字像什么?像你把整篇文章铺开在桌上,一眼看到全部文字,然后目光自动在相关的词之间跳来跳去。

这个”目光自动在相关的词之间跳来跳去”的能力,就是这篇论文的核心发明——注意力机制(Attention Mechanism)。
论文的标题 “Attention Is All You Need”(你只需要注意力)正是在说这件事:只要有了注意力机制,不需要 RNN 的那种”一步一步循环读”的结构了。
让我来详细解释注意力机制是怎么工作的。
注意力机制:AI 学会了”抓重点”
先从一个你每天都在做的事情说起。
你读一本小说,读到这么一句话:
“小明把球传给了小红,她接住了球,非常开心。”
读到”她”的时候,你是怎么知道”她”指的是小红、不是别人?
你的大脑做了一件事:自动回看前文,找到了”小红”这个词,确认了”她”就是”小红”。
你不需要从头重新读一遍。你的目光会自动跳回去——在”她”和”小红”之间建立了一个联系。
这就是”注意力”——你在处理当前这个词的时候,自动关注到了句子中与它最相关的那些词。
Transformer 的注意力机制,做的就是同样的事情。
让我用一个更 具体的例子来展示。
两个”苹果”的故事
看这两个句子:
句子 A:”我饿了,吃了一个红色的苹果。”
句子 B:”我买了一部新的苹果手机。”
两个句子里都有”苹果”这个词。但你一眼就能看出来——第一个苹果是水果,第二个苹果是品牌。
你是怎么区分的?靠上下文。
- 看到”吃”、”红色”、”饿了”,你知道这是水果
- 看到”买”、”手机”、”新的”,你知道这是品牌
注意力机制让 AI 做到了同样的事。
当 AI 处理句子 A 中的”苹果”时,注意力机制会计算”苹果”和句子中每个其他词的”相关程度”。计算的结果大概是这样的:
句子 A:"我 饿了 吃了 一个 红色的 苹果"
"苹果"对每个词的注意力:
我 → 0.02 (不太相关)
饿了 → 0.08 (有点相关——暗示食物)
吃了 → 0.35 (非常相关——"吃"说明是食物)
一个 → 0.05 (不太相关)
红色的 → 0.45 (非常相关——水果的颜色)
苹果 → 0.05 (自己和自己)
注意这些数字加起来等于 1.00——它们代表的是”注意力的分配比例”。AI 把最多的注意力(0.45 和 0.35)分给了”红色的”和”吃了”——这两个词最能帮助它理解这个”苹果”是水果。

现在看句子 B:
句子 B:"我 买了 一部 新的 苹果 手机"
"苹果"对每个词的注意力:
我 → 0.02 (不太相关)
买了 → 0.20 (相关——买的是产品)
一部 → 0.08 (有点相关——"一部"暗示电子产品)
新的 → 0.10 (有点相关)
苹果 → 0.05 (自己和自己)
手机 → 0.55 (非常相关——"手机"直接说明了苹果是品牌)
这次,AI 把最多的注意力(0.55)分给了”手机”——这个词直接告诉了 AI,这个”苹果”是品牌,不是水果。
同一个词”苹果”,因为上下文不同,AI 分配的注意力完全不同,最终理解的含义也完全不同。

这就是注意力机制的力量。在第 2 篇里我们学过,一个词会被转化成一串数字(词向量)。在 RNN 的时代,”苹果”这个词不管出现在哪里,对应的词向量都是一样的——AI 没法区分水果苹果和品牌苹果。
但有了注意力机制,AI 在处理每个词的时候,会根据上下文重新计算这个词的表示。句子 A 中的”苹果”,经过注意力机制之后,它的数字表示会包含”吃”和”红色”的信息——变成一个带有”水果味”的苹果。句子 B 中的”苹果”,经过注意力机制之后,它的数字表示会包含”手机”和”买”的信息——变成一个带有”科技味”的苹果。
注意力机制不是改变了词本身的意思,而是让词的意思随上下文而变化。
注意力是怎么算出来的?
你可能好奇:AI 怎么算出 0.35、0.55 这些注意力数字的?
这里我尽量解释得直观,不跳步骤。
想象一个图书馆的场景。
你走进图书馆,手里有一个问题(”我想找关于水果的书”)。书架上每本书都有一个标签(”这本书讲烹饪”、”这本书讲手机”、”这本书讲农业”)。你会把自己的问题和每本书的标签做比较—— 越匹配的书,你越想拿来看。最后,你从匹配度最高的那几本书里提取出你要的信息。
Transformer 的注意力机制就是这个过程。论文的作者把它形式化成了三个东西:
- Query(查询):”我想找什么?”——当前这个词在”提问”
- Key(键):”我是什么?”——句子中每个词的”标签”
- Value(值):”我有什么信息?”——句子中每个词实际携带的内容
这三个名字来自数据库的术语(数据库就是用”键”来查找”值”的)。我第一次看到 Query/Key/Value 的时候完全蒙了——“这跟语言有什么关系?”后来才明白,这其实就是一个检索过程:用一个问题去检索一堆信息,找出最相关的部分。
具体的计算过程是这样的:
第 1 步:为每个词生成 Q、K、V 三个向量
我们在第 2 篇学过,每个词会变成一个向量(比如一串 512 个数字)。现在,每个词的向量要被分别乘以三个不同的权重矩阵(就是第 4 篇讲的那种”乘法+加法”的运算),得到三个新的向量:Query、Key、Value。
这三个权重矩阵一开始也是随机数——就像我们在第 1 篇和第 5 篇里看到的检测器和神经网络的参数一样,它们会在训练过程中被反向传播慢慢调整到最佳状态。
第 2 步:计算注意力分数
拿”苹果”的 Query,和句子中每个词的 Key 做”点积”运算。
什么是点积?就是两组数字对应位置相乘、然后全部加起来——和第 1 篇里 Sobel 算子的计算方式完全一样。
注意力分数 = 苹果的 Query · 每个词的 Key
苹果 Q · "吃了"K = 112 (高分——很相关)
苹果 Q · "红色的"K = 98 (高分——很相关)
苹果 Q · "一个"K = 23 (低分——不太相关)
苹果 Q · "我"K = 15 (低分——不太相关)
点积的值越大,说明这两个向量”方向”越一致——也就是说这两个词越相关。点积的值越小,说明越不相关。
第 3 步:转化为概率
把上面的分数通过一个叫 softmax 的函数,转化成 0 到 1 之间的概率值(所有值加起来等于 1)。Softmax 的作用就是”分配比例”——让大的分数变成大的比例,小的分数变成小的比例。
这一步的结果,就是我们前面看到的那些注意力数字:0.35、0.45 等等。
第 4 步:加权求和
用这些注意力比例,对每个词的 Value 向量做加权平均。
"苹果"的新表示 = 0.02×"我"的 V +0.08×"饿了"的 V +0.35×"吃了"的 V
+0.05×"一个"的 V +0.45×"红色的"的 V +0.05×"苹果"的 V
因为”吃了”和”红色的”的权重最大,所以最终”苹果”的新表示里,主要包含了”吃了”和”红色的”的信息。
这就是注意力机制的全部计算过程。

把四步串起来:每个词都会”提一个问题”(Query),去和所有词的”标签”(Key)做比较,找到最相关的词,然后把那些最相关的词的”信息”(Value)融合到自己身上。
整个过程只有乘法和加法——和第 4 篇讲的神经网络一模一样。
自注意力:每个词都在看所有词
上面描述的过程有一个重要的特点:每个词的 Query、Key、Value,都来自同一个句子。
“苹果”在提问,”吃了”和”手机”在回答——它们都是同一个句子里的词。AI 在让句子”自己看自己”。
这就是为什么这个机制被叫做自注意力(Self-Attention)——“自”的意思就是”自己跟自己做注意力计算”。
这跟 RNN 有什么根本的不同?
RNN 是串行的: 处理到第 5 个词的时候,它只能看到第 1-4 个词传过来的”压缩记忆”。
自注意力是并行的: 处理第 5 个词的时候,它直接看到了句子里所有的词——第 1 个、第 2 个、第 3 个……一直到最后一个。不需要等前面的词先算完。
这就像两种完全不同的阅读方式:
- RNN:蒙着眼睛,别人一个字一个字地念给你听。你只能靠记忆把前面的内容串起来。
- Transformer:睁着眼睛,整篇文章摊开在面前。你可以自由地在任意两个词之间跳来跳去。
还有一个”多头”的设计
研究到这里,我产生了一个疑问:一个词可能和其他词有好几种不同的关系。比如”她”这个词,可能需要同时知道:
- “她”指的是谁?(语义关系——指向”小红”)
- “她”在句子里的角色是什么?(语法关系——主语)
- “她”的情感是什么?(语境关系——和”开心”相关)
一组 Query/Key/Value 只能捕捉一种关系。怎么办?
Transformer 论文的作者想了一个巧妙的办法:同时用好几组不同的 Query/Key/Value,让每一组关注不同的关系。
这就叫多头注意力(Multi-Head Attention)。”多头”的意思就是有好几个”注意力头”,每个头用自己独立的一组 Q/K/V 矩阵去做注意力计算。
原始的 Transformer 论文用了 8 个头。就像让 8 个人同时阅读同一个句子,每个人关注不同的方面——有人关注”谁是谁”,有人关注”谁做了什么”,有人关注”感情色彩”。最后把 8 个人的理解综合起来。
这样,AI 对每个词的理解就不再是单一的,而是多维度的。