🧠 Transformer:所有大模型的底子
GPT、Claude、BERT……背后是同一个架构。一张图看懂它凭什么横扫 AI 世界。
Transformer 是什么?
🧠 它是谁
Transformer 是 2017 年谷歌提出的神经网络架构,如今几乎所有大模型(GPT、Claude、Gemini、BERT)的底子。
它靠「注意力」机制,取代了以前循环神经网络(RNN),成为 AI 时代的通用引擎。
💡 核心思想
以前 RNN 一个字一个字顺着读,慢且记不住太远。
Transformer 则是一次把整句话看全,让每个词都能同时「关注」句子里所有其他词——理解又快又准。
一句话:Transformer 让每个词都能同时看到整句话,并按「该关注谁」的重要性加权理解。这就是它强大的秘密。
核心武器:注意力机制 Attention
🔍 它像什么?
注意力机制,就像你在人群里找朋友——扫一眼全场,自动把目光聚焦到要找的那个人。
模型读「苹果」时,会主动去关注句子里「红色」「水果」这些相关词。
🔑 Q · K · V 三件套
每个词会生成三个向量:Query(我要找什么)、Key(我是什么)、Value(我的内容)。
用 Q 去匹配所有 Key,算出每个词该被关注多少,再用 Value 加权合成新表示。
两大组件:Encoder 和 Decoder
📖 Encoder 编码器
负责「读」——把整句话逐层转成语义表示,理解每个词在语境里的意思。
BERT 只用 Encoder(专攻理解)。
✍️ Decoder 解码器
负责「写」——根据理解逐 token 生成输出(还记得上一篇的自回归吗?)。
GPT、Claude 是 Decoder-only,一边读一边写。
| 📖 Encoder | ✍️ Decoder | |
|---|---|---|
| 职责 | 读 & 理解 | 生成 & 输出 |
| 代表 | BERT | GPT / Claude |
| 生成方式 | 看整句 | 逐 token 自回归 |
| 视野 | 双向看全文 | 只能看左边 |
结构拆解:一层里有什么
👥 多头注意力
不止一组 Q/K/V,而是多组并行(多头)。
不同头各管一种关系:有的抓「主谓宾」,有的抓「指代」,有的抓「语法」——合起来理解更全面。
📍 位置编码
Transformer 天生没有先后顺序概念,得人为注入位置信息,告诉模型哪个词在前、哪个在后。
没有它,「猫追狗」和「狗追猫」就分不清了。
为什么它横扫一切
能并行
整句话同时处理,不像 RNN 一个字一个字排着来,训练快好几个数量级。
长距离依赖
隔着很远的词也能直接「互相关注」,抓住长句子里的关联。
可堆叠可预训练
结构统一,能预训练再微调;堆得越深、参数越多,能力越强。
横扫一切
从文本到图像、语音、视频,几乎所有领域的最强模型都是 Transformer。
Transformer 让每个词同时看全句、按注意力加权理解。Q 找、K 被找、Value 提供内容;Encoder 负责读、Decoder 负责写。GPT、Claude、BERT 都是它的子孙。
Transformer 是 2017 年谷歌提出的神经网络架构,现在几乎所有大模型,像 GPT、Claude、BERT 都建立在它之上。它最核心的是自注意力机制:每个词能同时看到整句话,按相关度加权去理解,和以前 RNN 一个字一个字顺着读完全不同。这让它能并行、能抓长距离关系,也就成了大模型的通用底座。
Self-Attention 就是让每个词去跟句子里所有词算相关性。实现上每个词会生成三个向量:Query、Key、Value。拿当前这个词的 Q,去跟所有词的 K 做匹配,得到一个相关性分数,再过 softmax 变成权重,最后用这些权重去加权求和所有的 V,得到这个词融合了全局信息的新表示。因为所有词都是自己跟自己算,所以叫“自”注意力。
以前 RNN 是顺序处理的,信息要一步步往后传,句子一长,离得远的重要信息就会被“稀释”甚至忘掉。Transformer 不一样,它让任意两个词之间都能直接建立联系——不管隔多远,都能通过注意力一步算到相关度。所以它天然擅长抓长距离依赖,比如一段话里开头和结尾的指代关系。
因为 RNN 是递归的,一个 token 接一个 token 顺序算,后面的计算依赖前面的输出,没法并行。Transformer 用注意力,一步就能把整句话所有词之间的关系一起算出来,词与词之间没有顺序依赖,所以可以大规模并行,训练速度快好几个数量级,能喂的数据量也大得多。
Encoder 负责“读”,把整句话转成语义表示去理解,BERT 是只用 Encoder 的。Decoder 负责“写”,根据理解逐 token 生成输出,GPT、Claude 这类是 Decoder-only,一边读一边写。两者底层都有注意力,但 Decoder 在生成时只能看左边已经生成的内容。