Transformer架构

Transformer
你有没有这种感觉?
刷了一堆Transformer的博客,感觉懂了。但面试官往那一坐,问你"Attention为什么要除以根号dk",脑子突然一片空白。
这太正常了。
Transformer相关的知识点太碎了。从Self-Attention到位置编码,从Multi-Head到架构选择,每个点单拿出来都能讲两小时。面试官随便挑一个深入问,很多人的知识储备就见底了。
这篇文章帮你解决这个问题。
我会把Transformer面试最常考的8个问题一次性讲清楚。不是那种堆公式的学术解释,而是让你真正理解、面试时能自信说出来的内容。
准备好了吗?咱们开始。
合集文章导航
本合集共 8 篇文章,涵盖 Transformer 面试核心考点:
基础概念篇
- Transformer 相比 RNN 和 CNN 有什么优势? - 理解 Transformer 的核心优势
- Self-Attention 中 Q、K、V 分别是什么意思? - 掌握注意力机制三要素
- 为什么 Self-Attention 要除以根号 dk? - 理解缩放因子的数学原理
核心机制篇
4. Multi-Head Attention 为什么有效? - 多头注意力的设计思想
5. Transformer 为什么需要位置编码? - 位置信息的注入方式
架构与模型篇
6. Encoder-only、Decoder-only 和 Encoder-Decoder 架构有什么区别? - 三种架构的适用场景
7. BERT 和 GPT 的核心区别是什么? - 预训练模型的本质差异
性能优化篇
8. Transformer 的计算复杂度为什么是瓶颈? - O(n²)问题与优化方案
为什么Transformer成了面试"钉子户"
先问你一个问题。
2017年Transformer刚出来的时候,很多人觉得这就是个新架构而已,过两年就被淘汰了。
结果呢?
BERT、GPT、T5、ChatGPT……一个比一个火。Transformer不仅没被淘汰,反而成了整个AI领域的基石。
凭什么?
因为它解决了两个RNN和CNN搞不定的问题。
第一,并行计算。
RNN处理一句话,必须一个字一个字往后读。"今天天气真好",得先处理"今天",再处理"天气",再处理"真好"。
这叫串行处理,速度慢得要命。句子长一点,训练时间直接翻倍。
Transformer不一样。它让所有字同时处理,你看着是一句话,其实是一整个矩阵扔进去算。
快多少?原来要等一杯咖啡的功夫,现在刷两条短视频就出结果了。
第二,长距离依赖。
RNN还有个毛病。句子开头的信息,传到结尾的时候早就"失忆"了。就像你读一本小说,翻到第五章已经忘了第一章发生了什么。
Transformer让任意两个字直接对话。"今天"和"真好"虽然隔了"天气"两个字,但它们可以瞬间知道对方的存在。
这就是注意力机制的核心威力。

CNN呢?它比RNN好,但也有局限。
CNN像用一个固定大小的放大镜扫文章。扫到一个窗口就看窗口里的字,窗口外的一概不知。要扩大感受野?就得堆很多层卷积。
Transformer直接开了"上帝视角"——一眼扫完全文,每个字都知道其他字在干嘛。
所以面试官爱问Transformer,因为它背后的设计思想本身就值得聊。你不仅要会用,还得能讲清楚"好在哪"。
Self-Attention的QKV到底是什么意思
好,现在我们知道了Transformer的核心是注意力机制。
但 Attention 到底是怎么"注意"的?
这里有个QKV三剑客。搞不懂它们,Attention就永远是个黑盒子。
Q是Query,查询。 你带着问题去找答案。比如你想找"和AI相关的论文",Q就是"AI"这两个字。
K是Key,钥匙。 每篇论文都有一个标签。标签写着"AI"、"机器学习"、"物理"……这把钥匙能打开对应的门。
V是Value,内容。 论文的正文内容。门打开了,你就拿到论文了。
Q和K匹配度越高,拿到的V就越准确。
Attention的计算过程是这样的:
第一步,每个字提取出Q、K、V三个向量。
第二步,Q和K做点积,算出相似度。相似度高说明它们"关系近"。
第三步,softmax一下,把相似度变成概率分布,所有值加起来等于1。
第四步,用这个概率分布去加权求和V。关系近的字,权重就大;关系远的,权重就小。
这就是Attention的核心。

类比一下。想象你去图书馆找书。
你脑子里有个想找的主题(Query)。图书馆每本书脊上有个标签(Key)。书的内容就是Value。
你对照着标签找书,标签越匹配的书,越容易被你翻出来。
Attention就是这么回事。只不过这个过程是自动学习的,模型自己决定哪些字该"注意"哪些字。
为什么偏偏要除以根号dk
Attention的计算公式里有个奇怪的除法。
Attention(Q,K,V) = softmax(QK^T / √dk) V为什么要除以√dk?
不除会怎样?
假设Q和K的向量维度是dk。当你计算点积QK^T的时候,结果的范围会随着dk增大而变大。
多大?
大概和√dk成正比。
如果dk=512,那点积结果可能是512左右。扔进softmax,概率分布会变得很"尖"——最大那个值接近1,其他全接近0。
想象一场考试,满分不是100分而是10000分。结果所有人的成绩都是9999分,区分不出来谁好谁坏。
softmax就是这样。点积太大,所有注意力都堆到某一个字上,其他字被完全忽略。
除以√dk之后,点积结果被缩放到合理范围。softmax出来的分布才是"软"的,每个字都能分到一点注意力。
这就是为什么要除。
数学上可以证明,这样做能让点积结果的方差稳定在1左右。

面试的时候,很多人一紧张就把公式背错了。有人会直接除dk,有人干脆说不清原因。
但你理解了"防止梯度消失"这个本质,不管面试官怎么问,你都能讲清楚。
Multi-Head Attention为什么有效
Attention只有一个头行不行?
行,但不够好。
为什么?
因为每个头能学到不同的东西。
有的头关注语法结构。"主语"和"谓语"靠得近,学这个头的模型就能理解句子结构。
有的头关注语义关联。"猫"和"动物"语义相近,学那个头的模型就能捕捉语义。
还有的头关注位置关系,相邻的字更容易被一起注意。
一个头只能捕捉一种模式。多个头一起工作,才能全方位理解一句话。

类比一下。
你看一幅名画。站在远处看,你能感受到整体氛围。走近看,能看到笔触细节。换到X光下看,能看到画家打底稿的痕迹。
多个视角叠加,你对这幅画的理解才完整。
Multi-Head Attention就是这个道理。每个头是一个视角,所有头合起来才是完整的理解。
实际用多少个头?
BERT用了12个头,GPT-3用了96个。但不是越多越好。太多头会增加计算量,而且很多头可能学到重复的东西。
有个经验值:dk/64,通常是8或16个。
面试官有时候会追问:"为什么要用多头而不是直接把dk放大?"
答案是:多头能从不同的子空间提取信息,直接放大dk只能加深单一子空间的表达。就像你用多个相机从不同角度拍同一个物体,比用一个超贵的相机拍一次效果好。
位置编码——Transformer的"顺序感"从哪来
Attention说完了,但有个致命问题。
它算不出"谁在前面,谁在后面"。
"我爱你"和"你爱我",用Attention算出来的结果完全一样。因为Attention只看相关性,不看位置。
但顺序在语言里太重要了。"先有鸡还是先有蛋",换个顺序意思全变了。
怎么办?
给每个字加一个"GPS定位器"。
这就是位置编码。
Transformer用的是正弦余弦函数。偶数位置用sin,奇数位置用cos。不同位置产生不同的波形,像是在每个字上打了一个独特的印记。

为什么用三角函数?
第一,三角函数有周期性和对称性,模型可以学到相对位置关系。
第二,可以泛化到训练时没见过的更长序列。PE(pos+k)可以用PE(pos)的线性函数表示。
第三,函数固定,不需要学习,省参数。
位置编码加在哪?
原始Transformer是直接加在输入embedding上。不是拼接,是相加。相当于在每个字的向量里注入了位置信息。
后来又有RoPE、ALiBi等新位置编码,但原理都是给模型注入顺序感。
面试的时候,你得能说清楚"为什么Self-Attention需要位置编码"。答案就是:Attention本身是位置无关的,必须显式注入位置信息。
三种架构怎么选——Encoder-only、Decoder-only、Encoder-Decoder
Transformer有三种形态,傻傻分不清就麻烦了。
第一种,Encoder-only。 只用编码器,典型代表是BERT。
输入一句话,输出一个理解。比如做情感分析,"这部电影太好看了"进去,输出"正面"。
擅长的是理解任务。阅读理解、文本分类、命名实体识别……这类"看完内容,回答问题"的任务,Encoder最拿手。
第二种,Decoder-only。 只用解码器,典型代表是GPT系列。
给定前文,预测下一个字。然后把预测出来的字加进去,再预测下一个。循环往复,直到生成结束。
擅长的是生成任务。写文章、写代码、写邮件……这类"从零开始创造"的任务,Decoder最拿手。
第三种,Encoder-Decoder。 编码器和解码器都用,典型代表是原始Transformer、T5。
输入一个序列,输出一个序列。机器翻译、文本摘要、问答系统……输入和输出都是序列,但长度可以不同。

类比一下人类任务:
- Encoder-only像阅读理解。看一篇文章,回答问题。你在"理解"。
- Decoder-only像写作。给你一个开头,让你续写。你在"创造"。
- Encoder-Decoder像翻译。看一段中文,翻成英文。你在"转换"。
面试官经常问:"BERT和GPT哪个更好?"
没有标准答案。任务不同,选择不同。想做理解用BERT,想做生成用GPT。硬要比的话,就像问"挖掘机技术和厨师技术哪个更好"——不在一个赛道。
BERT和GPT的核心区别
既然说到了BERT和GPT,就深入聊一下它们的核心区别。
第一个区别:预训练任务不同。
BERT用的是Masked Language Modeling,简称MLM。就是完形填空。
"今天天气真[MASK]"进去,模型预测被盖住的字是什么。模型必须理解上下文,才能猜对。
GPT用的是Next Token Prediction,简称NTP。就是续写。
"今天天气真"进去,模型预测下一个字"好"。然后"今天天气真好"进去,预测"。"。一步步生成完整句子。

第二个区别:注意力方向不同。
BERT是双向注意力。每个字可以看到左边也可以看到右边。
GPT是单向注意力。每个字只能看到左边的字,不能"偷看"右边。
这个差别很关键。BERT读文章像开了全景天窗,前后都能看;GPT读文章像正常人,从头读到尾。
第三个区别:适用场景不同。
BERT因为能看到双向信息,理解能力更强,适合做分类、实体识别这类理解任务。
GPT因为训练的就是生成能力,生成能力更强,适合做对话、写作这类生成任务。
简单记:BERT训练方式是完形填空,GPT训练方式是续写。
面试的时候,可能会有人问:"为什么GPT不用BERT那种MLM任务?"
答案:GPT用的NTP任务天然适合自回归生成,从左到右生成。而MLM在生成任务里有个问题——训练和推理不一致,训练时能看到[MASK],推理时没有[MASK]。
计算复杂度——Transformer的阿喀琉斯之踵
Transformer很强,但有个致命弱点。
计算量太大。
Attention的核心是Q和K做点积。假设序列长度是n,每个位置要和所有位置计算相似度。
这就是O(n²)的复杂度。
n是序列长度。n²意味着长度翻倍,计算量翻四倍。长序列场景下,这是个灾难。
想象一个办公室10个人。每个人都要和所有人沟通,需要45次对话。
如果变成100个人?需要4950次对话。人数涨了10倍,沟通成本涨了100倍。
这就是Transformer的痛苦。

怎么解决?
方案一:稀疏注意力。 不让每个字看所有字,只看局部或者随机看一些。BigBird、Longformer就是这么干的。
方案二:线性注意力。 把O(n²)变成O(n)。Performer、Linear Attention在做这件事。但目前效果还追不上标准Attention。
方案三:FlashAttention。 不用稀疏,不用近似,从底层内存优化入手加速标准Attention。这两年火得一塌糊涂,GPT-4训练就用它。
面试的时候,你得能说清楚O(n²)问题是怎么来的,以及主流的优化方向。
掌握了这些,你就入门了
好,8个核心问题讲完了。
简单过一遍:
- Transformer解决了RNN的并行和长距离依赖问题
- Attention的QKV是查询-钥匙-内容的匹配机制
- 除以根号dk是为了防止softmax梯度消失
- Multi-Head让模型从多角度理解信息
- 位置编码给模型注入顺序感
- 三种架构适合不同任务
- BERT和GPT区别在于预训练任务和注意力方向
- O(n²)复杂度是Transformer的痛点,各种优化方案在攻这个山头
能讲清楚这8个问题,Transformer的基础你就过关了。
但技术永不止步。
大模型时代,Transformer又有了新的演进。RoPE位置编码怎么工作的?为什么Linear Attention被寄予厚望?混合专家模型MoE是怎么回事?
这些问题,下一篇咱们接着聊。
对了,下一篇正是要讲Transformer相比RNN和CNN的具体优势。你会看到更详细的对比,更清晰的图解。
准备好你的问题,我们下一期见。
