Skip to content

Transformer 说明

如果你要找的是 Hugging Face 的 transformers Python 库,而不是模型架构,看:Transformers 库说明

这篇文章解决什么问题

很多人知道“大模型是 Transformer”,但这句话本身其实没有解释什么。

真正容易卡住的地方通常是这些:

  • Transformer 到底是什么
  • 它为什么会替代更早的 RNN / LSTM
  • 它和“注意力机制”到底是什么关系
  • 它内部到底在做什么
  • 为什么今天的大模型大多还是 Transformer 变体
  • 它强在哪里,短板又在哪里

这篇文章就是把这些问题拆开说明。

先说结论

  • Transformer 是一种处理序列数据的神经网络架构。
  • 它最核心的变化,是让模型在处理一个 token 时,可以直接“看”整段序列里哪些位置更重要。
  • 它能成为今天大模型的基础,不是因为结构最简单,而是因为它同时解决了效果、并行训练和长距离依赖这几件事。
  • 今天常见的大语言模型,大多不是完整原版 Transformer,而是以 Transformer 为底座、再做大量工程改造后的版本。

什么是 Transformer

最简单的说法是:

Transformer 是一种“让序列中每个位置都能按需关注其他位置”的模型结构。

这里的“序列”可以是:

  • 一句话
  • 一段代码
  • 一篇文章
  • 一串语音切片
  • 一组图像 patch

也就是说,它并不只适合自然语言。
只是因为它在 NLP 上爆发得最早,大家才最先从文本场景认识它。

它想解决什么问题

在 Transformer 之前,处理文本序列最常见的是:

  • RNN
  • LSTM
  • GRU

这类模型的共同特点是:

  • 按顺序一个词一个词往后走
  • 当前状态依赖前一个状态

这条路能用,但有三个明显问题。

1. 很难并行

如果一句话有 100 个 token,RNN 类模型通常得按顺序一步步算。

也就是说:

  • 先算第 1 个
  • 再算第 2 个
  • 再算第 3 个

不能很自然地把整段序列一次并行扔进 GPU。

这会直接拖慢训练速度。

2. 长距离依赖容易变弱

比如一句很长的话里,后面某个词真正需要参考的是前面很远的位置。
RNN 理论上能把信息一路传过去,但路径很长,效果容易衰减。

常见现象就是:

  • 离得近的信息更容易保住
  • 离得远的信息更容易丢

3. 信息路径太长

如果当前位置要参考 30 个 token 前的一个词,在传统循环结构里,这个影响要一层层传过去。
路径越长,训练越难,信号越容易变形。

Transformer 想解决的核心,就是:

  • 不要只靠顺序传递
  • 让一个位置能更直接地看到别的位置

它为什么叫 Transformer

名字来自论文《Attention Is All You Need》里提出的整套新结构。
“Transformer”可以理解成一种对输入表示不断做变换的网络。

但如果只记一个关键词,最重要的不是名字,而是:

Attention

因为 Transformer 的核心突破,就是把注意力机制放到了架构中心。

什么是 Attention

Attention 可以理解成一句话:

当模型处理当前位置时,它不会平均看所有词,而会给不同位置分配不同权重。

比如一句话:

text
小明把书放在桌子上,因为它太重了。

当模型看到“它”时,真正重要的问题是:

  • “它”指的是“小明”?
  • “它”指的是“书”?
  • “它”指的是“桌子”?

如果没有选择重点的能力,模型就只能很笨地依赖固定窗口或顺序记忆。
有了 Attention,它就能对不同位置打分,判断哪些位置更相关。

所以 Attention 的本质是:

  • 不是简单把上下文全部拼起来
  • 而是动态决定“此刻该重点看谁”

Self-Attention 又是什么

在 Transformer 里最核心的是 Self-Attention

它的意思是:

同一段输入序列内部,每个位置都可以去看同一段序列里的其他位置。

比如句子:

text
今天天气很好,我想去公园散步。

当模型处理“散步”时,它可能更关注:

  • “天气很好”
  • “公园”
  • “去”

而不是平均对待每一个词。

“Self” 这个词表示它不是看外部别的序列,而是在看自己这段序列内部的关系。

Self-Attention 到底怎么做

把复杂公式先压成一个更容易理解的流程,就是:

  1. 每个 token 先变成一个向量
  2. 每个向量再分别映射成三种角色:
    • Query
    • Key
    • Value
  3. 当前 token 拿自己的 Query,去和所有 token 的 Key 做匹配
  4. 匹配分数越高,说明越值得关注
  5. 再用这些分数,对所有 token 的 Value 做加权汇总
  6. 得到当前位置新的表示

如果用一句更直白的话说:

  • Query:我现在想找什么
  • Key:我这里有什么信息
  • Value:如果你关注我,你最终拿走什么内容

为什么要拆成 Q、K、V

因为“是否相关”和“真正传什么信息”不是一回事。

一个位置可能:

  • 很相关
  • 但它提供的是另一种信息

把这三种角色拆开,模型就更容易学到复杂关系,而不是只用一套向量硬干所有事情。

一个简化示意

text
输入序列:
[我] [喜欢] [吃] [苹果]

处理“吃”时:

Query("吃")
  去匹配
Key("我") / Key("喜欢") / Key("吃") / Key("苹果")

匹配结果可能像这样:

我      0.05
喜欢    0.15
吃      0.20
苹果    0.60

然后模型会更重地吸收 "苹果" 对应的 Value,
因为“吃”和“苹果”的关系最强。

这不是实际训练输出,只是说明这个机制的直觉。

多头注意力是什么

如果只做一次注意力,模型很可能只学会一种关系。

但真实语言里,关系不止一种:

  • 主谓关系
  • 指代关系
  • 时间关系
  • 语义搭配
  • 句法结构

所以 Transformer 会让多个注意力头同时工作。

这就是 Multi-Head Attention

可以把它理解成:

  • 一个头盯语法
  • 一个头盯指代
  • 一个头盯远距离关系
  • 一个头盯局部搭配

当然,真实模型里的头不会这么整齐分工,但这个类比是对的:
多个头让模型能从不同角度同时看同一段内容。

Transformer 不是只有注意力

很多人会把 Transformer 误解成“就是 Attention”。

不完整。

一个标准 Transformer block 至少还有这些部分:

  • Multi-Head Attention
  • Feed Forward Network
  • Residual Connection
  • Layer Normalization
  • Position Information

这些部分是一起工作的。

Feed Forward Network 在干什么

Attention 更像是在做“信息交换”和“关系选择”。
而 Feed Forward Network 更像是对每个位置各自做一次更深的非线性变换。

可以粗略理解成:

  • Attention:我该看谁
  • FFN:我拿到这些信息后,怎么重新加工自己

所以 Transformer block 不是只看关系,还会在每一层把表示继续变换。

Residual 和 LayerNorm 为什么重要

这两个东西看起来不起眼,但训练稳定性非常依赖它们。

Residual Connection

它相当于给每一层都留一条“原路返回”的通道。
这样即使新变换学得不好,也不至于把原始信息完全冲掉。

Layer Normalization

它用来稳定数值分布,让训练过程更可控。

如果没有这类稳定器,深层网络会更难训。

Transformer 怎么知道词序

这是初看时最容易疑惑的一点。

Attention 本身不带天然顺序感。
如果只把 token 一股脑扔进去,模型其实不知道:

  • 哪个词在前
  • 哪个词在后

所以 Transformer 必须额外加入位置信息。

这类信息常见写法包括:

  • 绝对位置编码
  • 相对位置编码
  • Rotary Position Embedding(RoPE)

这也是为什么大模型的“上下文长度”会和位置编码能力直接相关。

Transformer 的基本数据流

把完整流程简化后,大致可以看成这样:

text
文本
  -> Tokenize
  -> Embedding
  -> 加入位置信息
  -> 多层 Transformer Blocks
  -> 输出每个位置的隐藏状态
  -> 线性投影到词表
  -> 得到下一个 token 的概率分布

如果是语言模型,它最后做的事情其实很朴素:

  • 看完前面的 token
  • 预测下一个 token 最可能是什么

所以 Transformer 是骨架,语言建模目标是训练任务。
这两件事不是一回事,但会被同时提到。

为什么说 Transformer 是模型骨架

这里的“骨架”,不是比喻它“很重要”这么简单。
更准确地说,它指的是:模型内部最基础的组织方式。

也就是这些问题由它决定:

  • 输入 token 先怎么变成向量
  • 位置信息怎么加进去
  • 每一层用什么结构处理上下文
  • token 和 token 之间怎么建立关系
  • 最后怎么把隐藏状态变成下一个 token 的预测

如果把模型想成一栋楼,Transformer 更像:

  • 承重结构
  • 楼层布局
  • 管线主干走法

它不直接等于装修风格,也不等于住进去的人。

放到模型上,对应关系大致可以这样看:

部分它更像什么
Transformer 架构房子的主体结构
参数权重结构里每个位置被学出来的具体数值
训练数据施工时给它看的材料
微调 / 对齐后续把它调成某种用途
Prompt / Chat Template你现在怎么把输入送进去

所以说“模型骨架”,真正想表达的是:

Transformer 决定模型是按什么内部结构运转的,但不直接决定它最终学成什么风格、知道多少知识、会不会调用工具。

骨架通常包括什么

在大语言模型里,所谓骨架,通常至少包含这些部分:

  • embedding
  • positional encoding / RoPE
  • self-attention
  • feed-forward network
  • residual connection
  • normalization
  • decoder-only 或 encoder-decoder 这类总体拓扑

这些东西决定的是“信息怎么流动、怎么混合、怎么往下传”。

骨架不包括什么

下面这些经常和 Transformer 一起出现,但不属于“骨架”本身:

  • 具体学到了哪些事实
  • 回答口吻和风格
  • 数学或代码能力强不强
  • 是否适合工具调用
  • 是否被做过 instruction tuning
  • 这次推理时喂了什么上下文

这些更多取决于:

  • 参数规模
  • 训练数据
  • 训练目标
  • 后训练方法
  • 推理链路设计

为什么同样是 Transformer,表现会差很多

因为“骨架相同”只表示底层路线相近,不表示成品会接近。

就像两栋楼都用钢筋混凝土框架,也可能出现非常大的差别:

  • 面积不同
  • 用料不同
  • 施工质量不同
  • 后期装修不同

模型也一样。

同样是 Transformer,下面这些差异都能把结果拉得很开:

  • 参数量差很多
  • 训练语料质量不同
  • 位置编码和注意力实现不同
  • 是否做过高质量对齐
  • 是否专门优化了长上下文、工具调用、多模态

Encoder、Decoder、Decoder-only 分别是什么

Transformer 最早的论文同时包含:

  • Encoder
  • Decoder

但今天不同任务用的版本并不一样。

Encoder-only

代表思路像 BERT。

特点是:

  • 更擅长理解
  • 适合分类、匹配、抽取这类任务
  • 可以双向看上下文

Encoder-Decoder

代表思路像 T5、原始翻译模型。

特点是:

  • 一边读输入,一边生成输出
  • 很适合翻译、摘要、改写

Decoder-only

这就是今天大语言模型最常见的路线。

代表思路像:

  • GPT 系列
  • Llama 系列
  • Qwen 系列
  • Mistral 系列

它的核心特点是:

  • 只根据前面的 token 预测后面的 token
  • 通过自回归方式一步步生成

所以今天人们说“大模型是 Transformer”,很多时候更准确的说法其实是:

大多数 LLM 是 decoder-only Transformer

为什么大模型大多选 Decoder-only

因为它很适合统一成一个简单目标:

text
给定前文,预测下一个 token

这个目标有几个现实好处:

  • 海量文本容易准备
  • 训练目标统一
  • 生成任务天然适配
  • 扩展到代码、数学、对话、多模态文本接口也比较顺

这也是为什么 GPT 这条路线最后影响最大。

Transformer 为什么这么适合大规模训练

它能统治大模型时代,不只是因为效果好,而是因为它在工程上也很适合放大。

1. 更容易并行

相比 RNN 顺序计算,Transformer 在训练阶段更适合整段并行处理。
这对 GPU / TPU 集群非常关键。

2. 长距离关系更直接

一个位置要看很远的另一个位置,不需要一层层传很多步。

3. 可扩展性强

参数量、层数、宽度、头数、训练数据都可以系统性放大。

4. 通用性强

不仅能做文本,也能延展到:

  • 视觉 Transformer
  • 语音模型
  • 多模态模型

它的代价和短板是什么

Transformer 也不是没有问题。

1. 长序列成本高

经典 Self-Attention 的代价会随着序列长度明显上升。
这也是为什么长上下文一直是难题。

2. 对显存和算力要求高

模型越大、上下文越长,训练和推理成本都越高。

3. 不等于天然拥有稳定推理能力

Transformer 是骨架,不等于自动拥有:

  • 数学能力
  • 工具调用能力
  • 长期规划能力
  • 稳定 Agent 行为

这些能力还依赖:

  • 数据
  • 训练目标
  • 后训练
  • 推理策略
  • 工程系统

为什么说今天的模型不是“原版 Transformer”

因为从 2017 年原论文到今天,中间已经加了很多改造。

常见变化包括:

  • 只保留 decoder
  • 更现代的归一化方式
  • 更适合长上下文的位置编码
  • MoE
  • GQA / MQA
  • Flash Attention 一类高效实现
  • 更复杂的后训练流程

所以今天说某个模型是 Transformer,更准确的意思通常是:

它建立在 Transformer 思想和 block 结构之上,但已经不是教科书原版。

Transformer 和上下文、Chat Template、微调是什么关系

这几个概念很容易混在一起,其实不在同一层。

概念所在层级解决什么问题
Transformer模型架构层模型如何处理序列和建立关系
上下文推理输入层这次调用里模型能看到什么
Chat Template输入协议层如何把消息排成模型认识的 token 序列
微调训练适配层如何让模型更符合特定任务和风格

也就是说:

  • Transformer 决定底座怎么工作
  • 上下文决定这轮给它看什么
  • Chat Template 决定怎么喂进去
  • 微调决定它后来被调成什么样

一个常见误区

1. Transformer = 大模型

不对。
Transformer 是常见底座,不是“大模型”这个概念本身。

2. Attention 就等于理解

也不对。
Attention 是一种计算机制,不等于人类意义上的真正理解。

3. 上下文越长,Transformer 就自动越强

不对。
长上下文能力还要看位置编码、训练分布、实现优化和推理成本。

4. 只要是 Transformer,效果都会差不多

不对。
同样是 Transformer,参数规模、数据质量、训练方式、后训练方法不同,结果会差非常远。

我的判断

Transformer 真正改变行业的地方,不只是“注意力机制这个点子很聪明”,而是它第一次把这几件事放到了一起:

  • 能直接建模长距离关系
  • 能大规模并行训练
  • 能稳定扩展到非常大的模型和数据

所以它不只是一个论文里的网络结构,而是今天整个大模型时代最关键的一块地基。

如果只记一句话,我会建议记这个:

Transformer 的本质,是让序列中每个位置都能更直接地决定“我现在该关注谁”,并把这种能力做成可大规模训练的标准架构。

TODO:围绕 Transformer 继续补的关联问题

  • [ ] Self-Attention 的公式到底怎么读
  • [ ] RoPE 为什么能支持更好的长上下文
  • [ ] Flash Attention 在优化什么
  • [ ] GQA、MQA、MHA 分别是什么
  • [ ] MoE 和 Transformer 是什么关系
  • [ ] BERT、T5、GPT 三条 Transformer 路线到底怎么区分
  • [ ] Transformer 为什么也能做图像和多模态

参考链接

基于 VitePress 的个人知识库骨架