先抓住一句话
Transformer 的本质:不再像 RNN 那样按顺序一个词一个词往后读,而是让每个词都能直接去看整句话里和自己最相关的词,再综合这些关系来理解文本。
如果把一句话看成一个会议:
- RNN 像“轮流发言”,前面说过什么,要靠后面的人一点点记住。
- Transformer 像“所有人同时看会议记录”,每个人都能快速找到和自己最相关的信息。
这就是它后来能成为大模型底座的核心原因。
为什么会有 Transformer
在 Transformer 之前,NLP 主要靠 RNN / LSTM / GRU 做序列建模,后来也出现了 Seq2Seq + Attention 来缓解长距离依赖问题。
但这些方法大多还是以 RNN 为骨架,仍有两个明显限制:
- 串行计算慢:必须按时间步一个一个处理,难以充分并行。
- 长距离依赖处理不彻底:注意力能缓解,但底层仍要靠“顺着传”,句子一长,信息还是会变弱。
比如这句话:
我昨天在商场里看到一只猫,它特别可爱。
模型在读到“它”时,真正需要关注的是前面的“猫”。
Seq2Seq + Attention 已经能让模型回头去看相关位置,但整体流程仍受 RNN 串行结构限制。
Transformer 更进一步:
- 不强依赖“顺着传”
- 而是让当前位置直接去“看”整句话
- 谁重要,就给谁更高权重
所以,Transformer 的关键突破不是“第一次有注意力”,而是“直接用注意力做核心结构”。
整体流程
先别急着抠细节,先看总流程:
输入文本
-> 词向量 Embedding
-> 位置编码 Positional Encoding
-> 编码器 Encoder(反复提炼上下文)
-> 解码器 Decoder(边看已生成内容,边参考编码结果)
-> 线性层 Linear
-> Softmax
-> 输出下一个词
可以把它理解成一条流水线:
- Embedding:把词变成机器能处理的向量。
- 位置编码:告诉模型词的先后顺序。
- 编码器:把输入句子加工成“带上下文的表示”。
- 解码器:根据前面已经生成的内容,继续往后生成。
- Linear + Softmax:从词表里选出当前最可能的词。
先理解注意力
注意力机制可以先不看公式,直接理解成一句话:
当前这个词,在理解自己时,不是平均参考所有词,而是重点参考和自己最相关的词。
例如:
小明把球踢给小红,因为他踢得很用力。
读到“他”时,模型会更关注“小明”,因为“踢得很用力”更像是在描述踢球的人。
这就是“关注重点”的过程。
所以,注意力机制做的事本质上就是:
- 计算“我应该关注谁”
- 给不同词分配不同权重
- 按权重把信息加权汇总
什么是自注意力
自注意力(Self-Attention)就是:
一句话内部的词,两两之间先看关系,再决定彼此该关注多少。
比如一句话是:
今天 天气 很 好
当模型处理“好”这个词时,它可能会重点参考:
- “天气”,因为“好”是在形容天气
- “今天”,因为这说明是今天的天气情况
也就是说,“好”不是孤立存在的,它要结合上下文才能被真正理解。
这也是 Transformer 比传统 RNN 更强的地方之一:
- RNN 更像沿着时间线传信息
- Self-Attention 更像直接建立任意两个词之间的联系
Q、K、V 到底是什么
这是 Transformer 最容易把人看晕的一块,但其实可以用“查资料”来理解。
假设当前词是“我”,它想知道整句话里谁和自己最相关:
- Q(Query):我现在想找什么
- K(Key):每个词都提供一个“索引标签”
- V(Value):每个词真正携带的信息内容
流程就是:
- 用当前词的
Q去和所有词的K做匹配 - 看看我和谁更相关
- 再把这些词对应的
V按权重加权求和 - 得到当前词新的表示
所以你可以把它记成一句话:
Q 用来提问,K 用来匹配,V 用来取内容。
为什么要除以 $ \sqrt{d_k} $
这个细节很多文章一上来就讲公式,结果越看越晕。其实抓住直觉就够了:
- 维度越高,点积结果越容易变大
- 分数一旦太大,Softmax 就会变得特别极端
- 权重过于极端,训练就容易不稳定
所以要除以 $ \sqrt{d_k} $,本质上就是:
给分数降温,避免注意力分配过头。
为什么是多头注意力
单头注意力可以理解一句话里的“一种关系”,但现实中的语言关系往往不止一种。
比如一句话里可能同时存在:
- 主谓关系
- 指代关系
- 时间关系
- 因果关系
所以 Transformer 不只用一个注意力头,而是同时开多个头,让它们分别去看不同角度的关系。
这就像几个人一起看同一篇文章:
- 一个人专门看主干结构
- 一个人专门看修饰关系
- 一个人专门看代词指代
最后再把这些结果拼起来,信息就更丰富了。
这就是多头注意力(Multi-Head Attention)。
为什么还要位置编码
注意力机制本身只看“词和词的关系强不强”,但它天然不知道顺序。
比如:
- 我打你
- 你打我
这两个句子词差不多,但顺序一变,意思完全不同。
所以 Transformer 必须额外加入位置编码(Positional Encoding),告诉模型:
- 谁在前
- 谁在后
- 两个词相距多远
这样模型才知道句子不是一堆无序词袋,而是有先后结构的序列。
编码器和解码器分别干什么
编码器
编码器的任务可以理解成:
把原始句子加工成一份“上下文理解结果”。
比如输入一句英文:
I love deep learning.
编码器不会直接输出中文,它先做的是把这句话中每个词和上下文的关系都编码好,形成更有语义的信息表示。
解码器
解码器的任务是:
参考编码器给出的理解结果,一个词一个词往外生成。
如果做机器翻译,过程可能像这样:
我
-> 我 爱
-> 我 爱 深度学习
解码器生成当前词时,会同时看两部分信息:
- 已经生成过的词
- 编码器提供的输入句子语义
为什么解码器要加 Mask
训练时,解码器不能偷看未来答案。
比如目标句子是:
我 爱 深度学习
当模型正在预测“爱”时,它只能看见“我”,不能提前看见“深度学习”。
所以需要 Mask:
- 把未来位置遮住
- 保证模型只能基于过去信息做预测
这就像考试时不能先偷看后面的标准答案。
Transformer 比 RNN 强在哪
可以直接记这 4 点:
- 并行能力强:训练更快,更适合大规模数据。
- 长距离依赖更强:远距离词之间能直接建立联系。
- 特征提取更灵活:多头注意力能从不同角度理解句子。
- 扩展性更好:更容易堆大、堆深,适合做大模型。
但它也不是没有代价:
- 序列越长,注意力计算越贵
- 显存开销通常比传统 RNN 更大
所以后来又出现了很多 Transformer 变体,都是在继续优化效率。
和现实中的模型是什么关系
这一点很重要,很多人学完 Transformer 还是不知道它和大模型有什么关系。
其实可以这样记:
- Encoder-only:代表是
BERT,擅长“理解类任务”,如分类、抽取、匹配。 - Decoder-only:代表是
GPT,擅长“生成类任务”,如对话、续写、写代码。 - Encoder-Decoder:代表是
T5,适合输入一段、输出一段的任务,如翻译、摘要。
也就是说,今天的大模型虽然长得不完全一样,但底层核心思想大多都来自 Transformer。
一套最容易记住的理解框架
如果你只想带走最核心的内容,可以记住下面这几句:
- RNN 是顺着读,Transformer 是全局看。
- 注意力机制的本质,是给重要信息更高权重。
- Self-Attention 解决的是词与词之间如何直接建立联系。
- Q、K、V 可以理解成“提问、匹配、取内容”。
- 多头注意力是从多个角度同时理解一句话。
- 位置编码解决的是顺序问题。
- Transformer 是今天大模型的基础骨架。
小结
Transformer 为什么重要,不是因为它公式多,而是因为它换了一种处理序列的思路:
- 不再靠“记忆链”硬传信息
- 而是靠“注意力”直接找重点
- 再配合并行计算,把训练效率和效果都提了上来
所以你可以把 Transformer 理解成一句话:
它让模型学会了在一整段信息里,快速找到当前最该关注的内容。
如果再往下学,最值得继续深挖的就是 3 块:
- Self-Attention 的计算过程
- Multi-Head Attention 的张量维度变化
- Decoder 中 Mask 的具体实现