从RNN到GPT:一文读懂Transformer,大模型的底层心脏
现在我们每天用的GPT、Claude、Llama、Gemini,几乎所有主流大语言模型,本质上都是同一个架构的变体——Transformer。
2017年谷歌发表论文《Attention Is All You Need》,只用一个核心机制“注意力”,就彻底解决了序列建模的老大难问题,直接开启了大模型时代。很多人觉得它满是公式、晦涩难懂,但它的核心思想其实非常朴素:让句子里的每个词,都能和所有词“打个招呼”,判断谁对自己重要,然后按重要程度整合信息。
这篇我们用大白话拆解它的每一个零件,讲清楚它是什么、为什么这么设计、又是怎么工作的。
一、前传:RNN的三个致命痛点
在Transformer出现之前,处理文本、语音这类序列数据,主流是RNN和它的改进版LSTM。
它的思路很简单:词一个接一个按顺序进入网络,每一步都带着之前的信息往下传,就像传话游戏,一个传一个。
但它有三个绕不开的致命问题:
- 串行计算,训练极慢:必须等前一个词算完,才能算后一个。哪怕有上百块显卡,也只能一个词一个词地推进,序列越长速度越慢。
- 长距离记不住:信息一步步传递,越传越淡。比如“我2010年去了巴黎……那是我最喜欢的城市”,“城市”要指代“巴黎”,中间隔了太多内容,RNN很难学到这种长距离对应。
- 前面的信息容易被覆盖:隐藏状态不断更新,越往后,开头的信息稀释得越厉害。
而Transformer的出现,一次性把这三个问题全解决了。
| 特性 | RNN/LSTM | Transformer |
|---|---|---|
| 计算方式 | 串行,逐个传递 | 并行,所有位置同时算 |
| 长距离依赖 | 弱,越远越模糊 | 强,任意距离直接关联 |
| 训练速度 | 慢,难以扩展 | 快,可大规模并行 |

二、核心灵魂:自注意力机制
自注意力(Self-Attention)是Transformer的心脏。它的逻辑说穿了很简单:
每个词都去和句子里所有词比对一下,看看谁和自己最相关,然后按相关程度把它们的信息加权拼起来,形成自己的新表示。
Q、K、V:三个向量的角色扮演
为了计算相关性,每个词会生成三个不同的向量:
- Q(Query 查询):相当于“我在找谁?”,代表这个词的查询方向;
- K(Key 键):相当于“我是谁?”,代表这个词的身份标识;
- V(Value 值):相当于“我有什么内容?”,代表这个词的实际信息。
完整计算三步走
- 计算相似度:每个词拿自己的Q,去和所有词的K做点积运算,得到注意力分数。分数越高,说明两个词语义越相关。
- 归一化权重:用Softmax函数把分数转成0到1之间的权重,总和为1,相当于给每个词分配注意力占比。
- 加权求和:用权重把所有词的V加权相加,得到的就是这个词经过注意力后的新表示。
为什么要除以√d_k?
这是个非常关键的细节。如果Q和K的维度很大,点积的数值就会很大,Softmax函数会进入“饱和区”——要么接近1要么接近0,梯度几乎为0,模型就训不动了。
除以√d_k,相当于把数值缩放回合适的区间,让Softmax的梯度保持健康,训练才能稳定。

三、多头注意力:同时关注多种关系
单头注意力已经很强,但有个问题:每个词只能用一种方式去关注别人。可语言里的关系是多样的。
比如“动物园里,老虎追着兔子跑”这句话:
- 有的关系是地点:老虎在动物园里;
- 有的关系是动作对象:追的是兔子;
- 有的关系是动作本身:主体在做什么。
多头注意力(Multi-Head Attention)就是解决这个问题的:
把Q、K、V沿着维度拆成好几组,每一组就是一个“头”。每个头独立学习一种注意力模式,各自计算各自的结果。最后把所有头的输出拼接起来,再过一个线性投影层,得到最终输出。
不同的头会自动学到不同的模式:有的关注语法结构,有的关注指代关系,有的关注局部相邻词。这些模式都不是人为设计的,是模型在训练中自动学到的。
四、位置编码:给模型补上“顺序感”
自注意力有个天生的缺陷:它是“词袋”模型,只看有哪些词,不管词的顺序。“我爱你”和“你爱我”,在它看来可能没区别。
但顺序对语言来说是命根子。所以我们要给每个词注入位置信息,这就是位置编码。
常见的三种主流方案:
- 正弦位置编码:原始Transformer用的方案,用sin/cos函数生成每个位置的编码。不需要训练,还能外推到比训练时更长的序列。
- RoPE(旋转位置编码):现在大模型的主流方案,LLaMA系列都在用。思路是把位置信息“旋转”进Q和K向量里,天然包含相对位置信息,效果更好,外推性也强。
- ALiBi:实现最简单,不加额外位置编码,直接给注意力分数加一个偏置:离得越远,分数越低。对长序列特别友好。
五、Transformer层的完整零件
一个完整的Transformer层,不只有注意力,还有前馈网络、层归一化和残差连接,共同组成一个标准模块。
前馈网络(FFN):加工信息的工厂
注意力负责“聚合信息”,把相关的信息收集起来;而FFN负责“加工信息”,对聚合后的内容做非线性变换。
FFN结构很简单:两个线性层,中间夹一个激活函数。通常中间维度比输入维度大很多,它是模型参数最集中的地方,也是模型“记忆知识”的主要载体。
早期用ReLU激活,现在主流是SwiGLU门控激活,效果更好,LLaMA等现代模型都在用。
层归一化与残差连接
- 层归一化(Layer Norm):把每一层的输出归一化成均值0、方差1的分布,再加上可学习的缩放和偏移。作用是让训练更稳定,收敛更快。现在的模型基本都用Pre-Norm,也就是进子层之前先做归一化。
- 残差连接:每个子层的输入直接加到输出上。作用是防止梯度消失,让深层模型能训得动。
所以一个标准的解码器层完整流程是:
输入 → 层归一化 → 多头自注意力 → 残差相加 → 层归一化 → 前馈网络 → 残差相加 → 输出

六、三种架构变体,各有所长
Transformer不是只有一种形态,根据任务不同,演化出三种主流架构。
1. 编码器-解码器(Encoder-Decoder)
原始Transformer就是这个架构。编码器双向注意力读入输入,解码器基于编码器输出生成结果,还带交叉注意力。
适合翻译、摘要这种“输入重写成输出”的任务,代表模型T5、BART。
2. 仅解码器(Decoder-Only)
现在的大语言模型几乎全是这个架构,比如GPT、Llama、Claude。
只有解码器,用掩码自注意力(只能看到当前词之前的内容),自回归一个词一个词生成。
为什么它成了主流?因为结构简单,在大规模预训练下生成能力极强,通用效果最好。
3. 仅编码器(Encoder-Only)
只有编码器,双向注意力,适合理解类任务:分类、实体识别、语义匹配。
代表模型BERT、RoBERTa,擅长判别、理解类任务,不擅长生成。
| 架构 | 注意力类型 | 代表模型 | 擅长任务 |
|---|---|---|---|
| 编码器-解码器 | 双向+掩码+交叉 | T5、BART | 翻译、摘要 |
| 仅解码器 | 掩码(因果) | GPT、Llama、Claude | 文本生成、对话 |
| 仅编码器 | 双向 | BERT、RoBERTa | 分类、语义理解 |
七、让大模型跑得动的关键优化
原始Transformer很美好,但直接做大模型会遇到两个瓶颈:训练显存不够、推理速度太慢。两个关键优化技术,让大模型真正实用化。
Flash Attention:训练省显存又提速
标准自注意力的时间和显存复杂度都是O(n²),序列一长,注意力矩阵特别大,显存吃不住,速度也慢。
Flash Attention的核心思路:把Q、K、V分成小块逐块计算,不保存完整的注意力矩阵,反向传播时重新计算,同时充分利用GPU的高速缓存。
结果是显存复杂度从O(n²)降到O(n),速度还快2-4倍,精度完全等价。现在大模型训练基本都用它,可以说是长序列大模型的功臣。
KV Cache:推理加速神器
自回归生成的时候,每生成一个新词,都要重新计算之前所有词的K和V,非常浪费。
KV Cache的思路很朴素:把之前算好的K和V缓存起来,生成新词的时候,只计算新词的K/V,拼到缓存里就行。
每步计算量从O(n²)降到O(n),生成速度大幅提升。代价就是多占用一点显存,但收益完全值得。
写在最后
Transformer之所以能统治AI领域,核心就是它抓住了序列处理的本质:不用按顺序逐个传递,所有位置直接交互,并行计算,长距离无损。
从2017年提出到现在,它衍生出了无数变体,支撑起了今天的大模型浪潮。理解了Transformer,你就理解了现代大模型90%的底层逻辑。
它不是什么玄乎的黑科技,本质上就是一套非常精巧的信息聚合与加工方式——而这,正是智能最核心的样子。
0 条笔记