Transformer:大模型为什么能读懂上下文

如果只用一句话解释 Transformer,我会这样说:

Transformer 是一套让 token 在允许范围内互相参考的架构。它不是简单地从左到右把一句话读完,而是把整段文字变成一组向量,让每个位置自己判断“我应该重点看谁”,再一层一层地重写自己的理解。

这也是为什么 Transformer 后来会成为大模型的核心架构。它既能并行处理整段文本,又能捕捉很远位置之间的关系。比如一句话前面提到“这家公司”,后面才说“它的收入增长很快”,模型需要知道“它”指的是谁。Transformer 做的,就是不断建立这种上下文关系。只是到了 Decoder-only 生成模型里,它会用 Mask 遮住未来位置,不能提前偷看答案。

一、Transformer 想解决什么问题

在 Transformer 之前,很多序列模型会按顺序处理文本:先读第一个词,再读第二个词,再读第三个词。这样很符合人的直觉,但机器训练起来不够痛快。

  • 不容易并行:后面的计算依赖前面的结果,GPU 很难一次性把整段文字铺开算;
  • 长距离关系难抓:一句话前后隔得很远时,信息要经过很多步传递,容易变弱;
  • 上下文混在一起:模型需要自己记住前面发生过什么,序列越长越难。

Transformer 的思路很直接:既然每个词都可能影响其他词,那就让它们直接互相看。这个机制,就是 Self-Attention。

二、整体架构

Transformer 的主流程可以拆成几步:先把 token 变成向量,再加入位置信息,然后经过很多层 Transformer Block,最后输出每个位置的预测结果。

Transformer:从 token 到预测结果 输入 token我 / 喜欢 / 写 Embedding文字变向量+ 位置编码 Transformer BlockSelf-AttentionFFNAdd & Norm重复 N 层 输出向量每个位置的新理解 预测下一个token 概率
Transformer 的核心不是某一个单独组件,而是“向量表示 + 注意力 + 多层重写”的组合。

这里最容易忽略的是位置编码。Self-Attention 本身只看一堆 token 向量,并不知道谁在前谁在后。所以模型必须额外拿到位置信息,否则“我喜欢你”和“你喜欢我”在结构上就太像了。

三、Self-Attention:每个 token 都在找参考对象

Self-Attention 可以理解成一句话内部的“互相参考”。每个 token 都会问:我理解自己时,应该参考哪些别的 token?参考多少?

比如“苹果发布了新芯片,它性能很强”这句话里,“它”需要参考前面的“新芯片”,而不是“苹果”这个公司。Attention 的作用,就是给不同 token 分配不同权重。

Self-Attention:每个 token 都在选择参考对象 苹果 发布 芯片 性能 很强 “它”会更强地关注“芯片”,弱一些关注其他 token 注意力权重不是手写规则,而是模型训练出来的
Self-Attention 让每个位置都能直接参考其他位置,所以长距离关系不用一步步传递。

严格说,“能参考谁”还要看模型类型。Encoder 做理解任务时,通常可以双向看完整输入;Decoder 做生成任务时,通常只能看自己和前文,未来 token 会被 Mask 挡住。这个差别很重要,因为大语言模型生成答案时,本质上是在一步一步预测下一个 token。

四、Q/K/V:提问、索引和内容

Self-Attention 里面最常见的三个字母是 Q、K、V。它们一开始看起来像玄学,其实可以先用资料检索来理解。

  • Query(Q):当前 token 发出的提问,“我想找什么信息”;
  • Key(K):每个 token 提供的索引,“我这里有什么信息”;
  • Value(V):真正被取走的内容,“匹配以后拿什么走”。
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V

这行公式先不用怕。它做的事情就是:用 Q 和 K 算相似度,得到一组权重,再用这组权重去加权读取 V。换成人话:先查目录,再取内容。

Q/K/V:先匹配,再读取 Query 我想找什么 Keys 每段内容的索引 Values 真正拿走的信息 注意力权重 该看谁,看多少 新表示 融合上下文
Q 和 K 决定“看谁”,V 决定“拿到什么信息”。

五、Mask:为什么 Decoder 不能偷看答案

Attention 的公式本身并不知道“未来”这个概念。如果不加限制,训练生成模型时,第 3 个 token 可能会直接看到第 4 个 token,那就像考试时把答案纸也发下来了,训练指标会好看,但模型学到的不是正常生成能力。

所以 Decoder 里会加入 causal mask,也叫因果遮罩。它的规则很简单:当前位置只能看自己和前面的 token,不能看后面的 token。

  • Encoder Attention:通常双向看,适合理解完整输入;
  • Decoder Self-Attention:用因果 Mask,只看过去和当前位置;
  • Encoder-Decoder Attention:Decoder 生成时,还可以去看 Encoder 读完的输入。

理解 Mask 之后,再看 GPT 类模型会更清楚:它不是一次性把整段答案吐出来,而是每次根据已有上下文预测下一个 token。

六、Multi-Head Attention:为什么要多个头

一句话里的关系往往不止一种。一个 token 可能既要关注语法关系,也要关注指代关系,还要关注语义相似性。只用一个注意力视角,容易把这些关系揉在一起。

Multi-Head Attention 的做法是:让多个注意力头并行工作,每个头都可以学一种不同的关注方式,最后再把结果拼起来。

头 1可能更关注主谓宾、修饰关系这类语法线索。
头 2可能更关注“它、这个、那个”指向谁。
头 3可能更关注语义相近或主题相关的 token。

当然,这只是帮助理解的说法。真实模型里的每个 head 不一定能被清晰命名,但“多个视角同时看上下文”这个直觉是对的。

七、Transformer Block 里有什么

一个 Transformer Block 通常由两大块组成:Self-Attention 和 FFN。前者负责“和上下文交流”,后者负责“自己再加工一遍”。中间还会配 Residual 和 LayerNorm,让训练更稳定。

一个 Transformer Block:先交流,再加工 输入表示 Self-Attention Add & Norm FFN Add & Norm 输出表示 虚线表示残差连接:原始信息可以绕过复杂变换,直接加回去
Attention 负责跨 token 交流,FFN 负责每个 token 内部加工,残差和归一化负责稳定训练。

八、FFN:每个 token 自己再思考一遍

Attention 之后,每个 token 已经融合了上下文信息。但融合完还不够,它还需要在自己的位置上做一轮非线性加工,这就是 FFN(Feed Forward Network)。

FFN 可以理解成一个“逐位置的小 MLP”:每个 token 都用同一套参数加工,但不同 token 之间不直接交流。交流已经在 Attention 里完成了,FFN 负责把信息消化成更有用的表示。

FFN(x) = Linear2(Activation(Linear1(x)))

很多大模型的参数,其实大量都在 FFN 里。Attention 很显眼,但 FFN 也很吃参数、很吃算力。

九、Residual 和 LayerNorm:让深层网络稳住

Transformer 往往不是一两层,而是几十层甚至上百层。层数一深,训练就容易不稳定:信息可能越传越乱,梯度也可能变得不好优化。

  • Residual(残差连接):把输入直接加到输出上,让原始信息有一条“高速通道”;
  • LayerNorm:把每一层的数值范围整理一下,避免激活值忽大忽小。

可以把它们理解成 Transformer 的稳定器。Attention 和 FFN 负责变聪明,Residual 和 LayerNorm 负责别把自己练崩。

十、Encoder、Decoder、Decoder-only 有什么区别

原版 Transformer 是 Encoder-Decoder 架构,常用于机器翻译:Encoder 读输入句子,Decoder 生成输出句子。但后来不同任务里,大家会取其中一部分来用。

三种常见 Transformer 用法 Encoder-only 代表:BERT 理解输入 适合分类、抽取、理解 Encoder-Decoder 代表:原版 Transformer / T5 读输入 写输出 适合翻译、摘要、生成 Decoder-only 代表:GPT / LLaMA 预测下一个 token 适合大语言模型对话
今天我们说的大语言模型,大多是 Decoder-only Transformer。
Encoder-only双向看上下文,更偏理解任务。比如判断一句话情感、抽取实体、做文本匹配。
Encoder-Decoder一边读输入,一边生成输出。很适合“把 A 转成 B”的任务,比如翻译和摘要。
Decoder-only只做一件事:根据前文预测下一个 token。GPT 系列和很多现代 LLM 都属于这一类。

十一、Transformer 的优点和代价

Transformer 能成为主流,不是因为它完美,而是它特别适合大规模训练。

  • 优点一:并行友好。训练时可以同时处理一整段序列,比逐步递归更适合 GPU;
  • 优点二:长距离关系更直接。任意两个 token 可以通过 Attention 直接建立联系;
  • 优点三:扩展性好。层数、宽度、数据、算力都能比较自然地放大。

代价也很明显:标准 Attention 会让序列长度带来很高的计算和显存压力。长度从 1K 到 2K,不只是多一倍那么简单,很多 Attention 计算会接近平方增长。这也是为什么后来会出现 FlashAttention、稀疏注意力、滑动窗口注意力、KV Cache、PagedAttention 等一堆优化。

十二、和 KV Cache、FlashAttention 的关系

把 Transformer 主结构看懂以后,很多推理优化就更容易理解了。

  • KV Cache:来自 Attention 里的 K/V。生成新 token 时,历史 token 的 K/V 不变,所以可以缓存复用;
  • FlashAttention:还是在算 Attention,但通过分块和在线 Softmax 减少显存读写;
  • PagedAttention:不改变 Transformer 数学,主要是把 KV Cache 管得更省显存、更适合高并发。

所以 Transformer 是地基,KV Cache 和 FlashAttention 更像是围绕这个地基做出来的工程优化。先理解主结构,再看这些优化,会顺很多。

十三、最后总结

Transformer 的核心直觉其实很朴素:一句话里的每个 token,都应该有机会参考其他 token,然后不断更新自己对上下文的理解。

Embedding 把文字变成向量,位置编码告诉模型顺序,Self-Attention 让 token 在规则允许的范围内互相参考,Mask 决定哪些位置不能看,Multi-Head Attention 让模型从多个视角看关系,FFN 负责逐位置加工,Residual 和 LayerNorm 负责稳定训练。很多大模型看起来很神秘,但底层依然是在反复堆叠这样的 Transformer Block。

参考资料