从一个问题开始
你有没有想过,当你问 ChatGPT 一个问题的时候,它到底是怎么「理解」你的话并且生成回答的?
很多人的直觉是:AI 大概是像人一样,从头到尾读你的问题,理解意思,然后组织语言回答。
实际上完全不是这样。大模型的「思考」方式跟人类有根本性的区别。而这种区别的核心,就在于一个叫做 Transformer 的架构。
这篇文章不会出现任何数学公式。我会用你日常生活中熟悉的场景来解释 Transformer 到底在干什么。如果你想了解基于 Transformer 架构的具体模型实现,可以看看 Hermes 是什么 这篇文章。
在 Transformer 之前,AI 是怎么处理语言的
要理解 Transformer 为什么厉害,得先知道它出现之前的方案有什么问题。
在 Transformer 之前,处理语言的主流方案叫 RNN(循环神经网络)。RNN 的工作方式很好理解——它像人一样,一个字一个字地读。
想象你在读一句话:「今天天气不错,我们去公园散步吧。」
RNN 的处理方式就像你用一根手指指着文字,从左到右一个字一个字地移动:
1 | 今 → 天 → 天 → 气 → 不 → 错 → ... → 吧 |
每读一个字,它会把当前的信息和之前积累的信息做一个整合,然后带着这个整合后的「记忆」去读下一个字。
这种方式有两个严重的问题:
第一,记不住远处的内容。当句子很长的时候,RNN 读到最后已经忘了开头说的什么了。就像你在读一本书,读到第 100 页的时候已经想不起第 3 页的具体内容了。
第二,速度慢。因为必须按顺序一个接一个处理,没法并行。你有 100 个字要处理,就得跑 100 步。
这两个问题,Transformer 都给解决了。
Transformer 的核心想法:不按顺序读,而是同时看全部
Transformer 最根本的思路转变是:不再一个字一个字地顺序处理,而是把整句话一次性全部摊开来看。
回到刚才那句话「今天天气不错,我们去公园散步吧」。
RNN 是一个字一个字读过去。而 Transformer 是把所有字同时摆在面前,像看棋盘一样,一眼就能看到所有棋子的位置。
但这带来一个新问题:如果你同时看到所有字,你怎么知道哪些字跟哪些字有关系?
比如在「小明昨天买了一本书,他今天开始读了」这句话里,「他」指的是「小明」,「读」的对象是「书」。如果你只是把所有字平铺在面前,怎么让模型理解这些关系?
这就是 Attention(注意力)机制的用处。
注意力机制:决定「看哪里」
Attention 机制用一句话解释就是:让每个字去「看」其他所有字,然后根据相关程度决定要从每个字那里「吸收」多少信息。
我用一个更生活化的类比:
想象你走进一个教室参加一场会议。教室里有 30 个人,每个人都在发言。你不可能同时认真听所有人说的话,你会有选择地把注意力分配到不同的人身上:
- 正在讲话的领导,你给 40% 的注意力
- 偶尔插嘴的同事 A,你给 20% 的注意力
- 在旁边聊天的两个人,各给 5% 的注意力
- 在角落打瞌睡的人,你几乎不给注意力
你最终获得的信息,就是所有人发言内容的一个「加权混合」——重要的声音权重高,不重要的声音权重低。
Attention 机制做的就是这件事。对于句子中的每个字,它会计算这个字和其他所有字的「相关程度」,然后按照相关程度来加权整合信息。
在「小明昨天买了一本书,他今天开始读了」这句话中:
- 当模型处理「他」这个字时,Attention 机制会发现「他」跟「小明」的相关度最高,所以会从「小明」那里吸收更多信息——于是模型就「理解」了「他」指的是小明
- 当模型处理「读」这个字时,Attention 会发现「读」跟「书」的相关度很高——于是模型知道读的对象是书
这就是所谓的 Self-Attention(自注意力):句子中的每个位置都在跟自己句子内的其他位置做注意力计算。
Self-Attention 的直觉理解
Self-Attention 可以理解为一个「关系发现器」。
想象你在整理一堆照片。你把照片全部铺在桌子上,然后对每张照片,你都去看看它跟其他照片有什么关联:
- 这张海滩照片跟那张泳装照片有关(都是海边度假)
- 这张餐厅照片跟那张菜品特写有关(同一顿饭)
- 这张风景照片跟那张自拍背景一样(同一个地点)
通过这种「每张跟每张比」的方式,你就建立了照片之间的关系网络。
Self-Attention 做的事情完全一样,只不过处理的不是照片,而是句子中的文字。它通过「每个字跟每个字比」的方式,建立起了字词之间的关系网络。
这里有一个关键细节:每个字在做 Attention 计算的时候,扮演三个角色。
继续用教室会议的类比:
- Query(提问者):你举手问了一个问题
- Key(标签):每个人脸上贴着一个标签,写着他们擅长回答什么
- Value(知识):每个人脑子里装着的实际知识
当你(Query)问了一个问题,你会扫一眼所有人的标签(Key),找到跟你的问题最匹配的几个人,然后从他们(Value)那里获取信息。
句子中的每个字都同时扮演这三个角色:既是提问者,又是被查询的人,还是信息的提供者。这就是 Self-Attention 之所以叫「Self」的原因——自己内部的注意力分配。
Multi-Head Attention:多个角度同时看
理解了 Self-Attention 之后,Transformer 还有一个重要的设计:Multi-Head Attention(多头注意力)。
这个概念其实很直观。
回到教室场景。假设你不止是一个人在听,而是同时派了 8 个「分身」去参加这个会议。每个分身关注不同的方面:
- 分身 1 关注谁在说跟项目进度有关的事
- 分身 2 关注谁在说跟预算有关的事
- 分身 3 关注谁的情绪比较激动
- 分身 4 关注谁在跟谁互动
- ……
会议结束后,8 个分身各自带着从不同角度收集到的信息回来,你把这些信息整合在一起,就得到了一个非常全面的会议理解。
Multi-Head Attention 就是这个原理。它不是做一次 Attention,而是同时做多次,每次从不同的角度去关注信息。有的 head 可能在关注语法结构,有的在关注语义关系,有的在关注指代关系。最终把所有 head 的结果合并起来。
实际的大模型里,head 的数量通常是 32 个或者 64 个。这意味着模型从 32 或 64 个不同角度同时在分析一句话。
位置编码:告诉模型字的顺序
前面说了,Transformer 是把所有字同时摊开来看的。但这带来一个问题:「我打他」和「他打我」用到的字完全一样,模型怎么区分?
答案是位置编码(Positional Encoding)。
简单理解:在每个字的信息上,加一个表示位置的标记。就像排队时发号码牌——虽然大家同时站在一个大厅里,但每个人手上的号码牌不同,所以你知道谁排在前面谁排在后面。
有了位置编码,「我打他」中的「我」在位置 1、「打」在位置 2、「他」在位置 3;而「他打我」中的「他」在位置 1、「打」在位置 2、「我」在位置 3。虽然字一样,但位置不同,模型就能区分这两句话的意思。
Transformer 的完整流程
把上面的部分组装起来,Transformer 处理一句话的完整流程是:
第一步:嵌入(Embedding)。把每个字转换成一个数字向量。你可以理解为给每个字一个「身份证」,这个身份证上编码了这个字的所有语义信息。
第二步:加上位置编码。在每个字的身份证上加一个「位置戳」,标明它在句子中的位置。
第三步:Self-Attention。所有字同时互相「看」,计算彼此的相关程度,交换信息。经过这一步,每个字不再只知道自己的信息,还整合了跟自己相关的其他字的信息。
第四步:前馈网络。对每个字的整合后信息做进一步处理和变换。你可以理解为「消化」刚刚收集到的信息。
第五步:重复多层。以上步骤不是只做一次,而是重复很多次(GPT-3 是 96 层,Llama 3 70B 是 80 层)。每重复一层,模型的理解就深入一层。
最后:输出。经过多层处理后,模型基于整合后的信息,预测下一个最可能的字。
为什么 Transformer 比 RNN 强
现在回过头来看 RNN 的两个问题,Transformer 是怎么解决的:
长距离依赖:RNN 必须通过一步步传递来「记住」远处的信息,容易遗忘。Transformer 的 Attention 机制让每个位置都能直接「看到」任意远的其他位置,不管相隔多远都一样近。句子开头的第一个字跟最后一个字之间的信息传递,只需要一步。
并行计算:RNN 必须按顺序处理,一个字处理完才能处理下一个。Transformer 的所有字可以同时处理(因为 Attention 是矩阵运算,天然可以并行),在 GPU 上可以大规模并行加速。
这两个优势让 Transformer 成为了大模型的事实标准架构。从 2017 年被提出到现在,几乎所有的大语言模型——GPT、Llama、Mistral、Hermes 的底座模型——都基于 Transformer 架构。
解码器 vs 编码器
你可能听过「Decoder-only」和「Encoder-Decoder」这些术语。简单解释一下:
编码器(Encoder):负责理解输入。读进去一段文字,输出对这段文字的理解。特点是每个位置可以同时看到左边和右边的所有内容。BERT 就是典型的编码器架构。
解码器(Decoder):负责生成输出。一个字一个字地生成文本。特点是每个位置只能看到左边(已经生成的)的内容,看不到右边(还没生成的)。GPT 系列就是纯解码器架构。
编码器-解码器:输入先经过编码器理解,然后解码器基于理解来生成输出。早期的 T5 模型就是这种结构。
目前主流的大模型基本都是 Decoder-only 架构。包括 GPT-4、Llama、Hermes——它们都是纯解码器。原因是纯解码器架构在大规模训练时表现更好,而且更简洁。
一个直觉性的总结
如果要用一句话概括 Transformer:它是一个让文本中的每个位置都能直接跟其他所有位置交流信息的架构。
想象一群人围坐在一张大圆桌旁开会。每个人都能看到其他所有人,都能听到其他所有人说话,然后根据与自己相关的程度来吸收信息。多开几轮会议(多层),理解就越来越深。
这种「全局可见、加权关注」的设计,让 Transformer 能够捕捉到语言中各种复杂的关系——远距离依赖、指代关系、语义关联、语法结构。而且因为所有计算都可以并行,训练速度极快,可以用海量数据训练出参数量巨大的模型。
这就是为什么 Transformer 从 2017 年开始,迅速统治了整个 NLP 领域,并成为 AI 大模型时代的基石。
如果你对大模型训练之后如何变得「听话」感兴趣,可以接着看 RLHF 到底在干嘛 这篇文章。想了解基于 Transformer 架构的 Hermes 模型有哪些独特之处,推荐看 Hermes 3 技术报告解读。也欢迎到 cocoloop 社区 来讨论 AI 技术话题。