Transformer 是什么?--LLM知识(一)

一句话回答:Transformer 是一种让模型在处理一句话、一个段落或一张被切分后的图片时,能同时查看所有相关部分,并据此更新每个部分含义的神经网络架构。

它不是一个"会思考的单一零件",而是一套可反复堆叠的处理流程。每一层都重复两件事:

  1. 看看其他位置,收集和自己有关的信息;
  2. 加工收集到的信息,使自己的表示更有意义。

这套方法最早由 2017 年论文《Attention Is All You Need》提出,用于机器翻译。现在,文本生成、问答、检索、图片识别等很多模型都建立在它或它的变体之上。


1. 从一个真实问题开始:词的意思要看上下文

看这句话:

小猫追着球跑,很开心。

人很容易知道"它"大概率指"小猫"。但计算机看到的最初只是一些符号:小猫......它需要一种机制来判断:处理"它"时,应该重点参考句中的哪个词?

Transformer 的答案是:让"它"向整句话提问,并根据相关程度从每个词取回信息。

它不会只按从左到右的顺序,把前面的内容压缩进一个固定状态;而是可以直接建立"它"和"小猫"之间的联系。这个能力叫作 Self-Attention(自注意力)

可以把它想成阅读时做的事:

text 复制代码
读到"它"
  ↓
回看整句话
  ↓
发现"小猫"最相关,"球"次之,其他词较弱
  ↓
带着这个上下文,更新"它"的含义

这里的"注意"不是人类主观意识,而是模型计算出的一组权重。


2. Transformer 到底接收什么,又输出什么?

模型不能直接计算汉字或单词,所以会先把输入切成 token(词元)。词元可以是一个词、一个字,或一个常见的字符片段。

例如:

text 复制代码
输入文本:我喜欢苹果
词元:    [我] [喜欢] [苹果]

每个词元随后会被转换成一串数字,称为 embedding(嵌入向量)。向量不是人为写好的词典释义,而是在训练中逐渐学到的数值表示。

text 复制代码
词元                 向量(示意,真实模型通常有数百或数千维)
[我]       →      [ 0.2, -0.5,  0.8, ...]
[喜欢]     →      [-0.1,  0.3,  0.6, ...]
[苹果]     →      [ 0.7,  0.1, -0.2, ...]

这些向量进入多层 Transformer 后,会变成"结合上下文后的向量"。也就是说,句中"苹果"的向量不只表示"苹果"这个词,还会带有"被我喜欢"这一语境的信息。

整体流程可以记成:

flowchart TD A[原始内容] -->|切分| B[词元] B -->|转为数字| C[嵌入向量<br/>+ 位置信息] C -->|重复通过多层| D[Transformer] D --> E[包含上下文的向量] E -->|按任务读取结果| F[翻译 / 分类 / 回答<br/>/ 预测下一个词]

3. 核心内容:自注意力如何"看上下文"?

对序列中的每个位置,Transformer 会从它的当前向量中生成三份不同用途的信息:

名称 英文 作用 直觉类比
查询向量 Query,记作 Q 当前词想寻找什么信息 "我现在要找谁?"
键向量 Key,记作 K 当前词有哪些特征,可供别人匹配 "我能否回答你的问题?"
值向量 Value,记作 V 当前词能真正提供的内容 "如果你关注我,带走哪些信息?"

仍以"小猫 追着球跑,很开心"为例。当模型处理"它"时:

  1. 用"它"的 Q 与每个词的 K 计算匹配分数;
  2. 分数越高,说明该词越值得参考;
  3. 将所有分数转成总和为 1 的权重;
  4. 用这些权重,对所有词的 V 做加权平均;
  5. 得到"它"在当前上下文中的新向量。

一个纯示意的计算结果可能是:

text 复制代码
"它"对各词的关注权重:
小猫  0.70  ██████████████
球    0.20  ████
跑    0.07  █
其他  0.03

因此,新"它"的向量主要带入"小猫"的信息。这些权重不是规则工程师预先规定的,而是模型通过大量训练样本学到的。

3.1 公式是上面过程的压缩写法

如果你刚入门,不需要背公式;只要理解它表达了"匹配 → 得到权重 → 汇总信息"。
Attention⁡(Q,K,V)=softmax⁡ ( QKT dk +M) V\operatorname{Attention}(Q,K,V) = \operatorname{softmax}\left( \frac{QK^T}{\sqrt{d_k}} + M \right)V Attention(Q,K,V)=softmax(dk QKT+M)V

对应关系是:

公式部分 人话解释
QKTQK^T QKT "我和谁相关?"的分数表
dk \sqrt{d_k} dk 缩小分数,避免数值过大导致训练不稳定
MM M 规定哪些位置不允许看
softmax 把分数转成注意力权重
VV V 按权重取回各位置携带的信息

这里的 dk d_k dk 是键向量的维度。Softmax 是一种把任意分数转换为非负权重、且一行权重总和为 1 的函数。

还要注意两个细节:

  • 模型不是先在字典里标记"小猫是名词、跑是动词"再计算;这些语法和语义规律也是从数据与任务目标中统计学习的。
  • 深层 Transformer 的输入不是原始词向量。前一层已经让"小猫"吸收了"追着球跑"的上下文,所以后面的层匹配到的可能是"正在追球的小猫"这个上下文化表示,而非孤立的"小猫"二字。

所以,Self-Attention 真正解决的核心问题是:它提供了一种可微分的、可由训练自动调节的"从所有位置按需取信息"机制。它不手写语言规则,而是让"该看谁、看多少"成为能被训练的参数结果。


4. 为什么要有位置信息?

仅用自注意力时,模型能看到有哪些词,却天然不知道它们的先后顺序。

text 复制代码
我 喜欢 你
你 喜欢 我

两句话的词集合相同,但意思不同。为此,Transformer 会为第 1、2、3......个位置准备位置向量,并直接加到词元嵌入向量上:

text 复制代码
"我"的输入向量 = "我"的词义向量 + 第 1 个位置的向量
"喜欢"的输入向量 = "喜欢"的词义向量 + 第 2 个位置的向量

这个机制叫作 Positional Encoding(位置编码)

原始论文使用正弦和余弦函数生成固定位置编码;现代模型也常使用可学习位置向量或旋转位置嵌入。实现不同,但目的始终一致:让模型同时知道"是什么"与"在哪里"。


5. 为什么不只做一次注意力,而要"多头"?

只做一次注意力,好比只用一个视角阅读一句话。多头注意力让模型同时使用多组独立的 Q、K、V:

text 复制代码
同一句话
 ├─ 头 1:可能更关注相邻词
 ├─ 头 2:可能更关注主谓关系
 ├─ 头 3:可能更关注指代关系
 └─ 头 4:可能更关注远距离关联
        ↓
     合并所有视角

这称为 Multi-Head Attention(多头注意力)

"可能"非常重要:没有人把每个头人工指定成"语法头"或"指代头";模型自行学习分工。有的头会出现容易解释的规律,有的则不一定能用简单语言命名。

多头注意力的价值是:模型不必把所有关系都挤进同一个相似度计算里,而能从多个表示空间同时收集信息。PyTorch 的官方 MultiheadAttention 模块实现的就是这种原始结构。官方文档


6. 为什么生成文字时不能偷看答案?

假设模型要学习补全:

text 复制代码
今天 天气 很 好

训练时,预测"天气"时绝不能直接看到后面的"很 好",否则模型只是在抄答案。于是,生成类 Transformer 会使用 Causal Mask(因果掩码)

text 复制代码
当前位置:第 3 个词
可以看:  第 1、2、3 个词
不能看:  第 4 个词及以后

这使模型学习"基于已知内容预测下一个词"。真正生成时,它会这样循环:

text 复制代码
已有内容 → 预测下一个词 → 把新词加入已有内容 → 再预测

这种逐个生成的方式叫 Autoregressive(自回归)生成

另有一种掩码叫 Padding Mask(填充掩码),用于忽略为了凑齐批量长度而补上的无意义位置。


7. 一层 Transformer 除了注意力,还做什么?

自注意力负责"和其他位置交流",但每个位置还需要自己加工获得的信息。因此,一个标准层还有三个关键部件。

前馈网络

前馈网络(Feed-Forward Network)会对每个位置的向量分别做非线性变换。

可以把注意力看成"向同学收集资料",把前馈网络看成"自己消化整理资料"。它不会让词与词直接交流;词与词的交流主要发生在注意力层。

残差连接

残差连接会把层的原输入直接加回输出:

text 复制代码
新结果 = 当前模块处理结果 + 原来的信息

这样做可以避免深层网络轻易丢掉已有信息,也有助于训练。

层归一化

Layer Normalization(层归一化)会调节一个向量内部数值的尺度,让各层的数值更稳定,训练过程更容易收敛。

所以可以把一层 Transformer 记为:

text 复制代码
先交流:多头自注意力
再整理:前馈网络
中间始终保留原信息:残差连接
并让数值保持稳定:层归一化

8. Encoder 和 Decoder:原始 Transformer 如何翻译?

原始论文的 Transformer 有两部分。

编码器:读懂输入

编码器一次看到完整的源句子,例如:

text 复制代码
I love apples.

经过多层处理后,每个词都获得融合上下文的表示。

解码器:逐步写出输出

解码器根据编码器提供的输入信息,并结合已经写出的内容,逐步生成:

text 复制代码
我 → 我 喜欢 → 我 喜欢 苹果 → 我 喜欢 苹果 。

解码器有两种"看":

  1. 掩码自注意力:看已经生成的目标文本,不能看未来;
  2. 编码器---解码器注意力:在生成每个词时,回看输入句子的相关部分。

后来,Transformer 演化出不同结构:有的只保留编码器,擅长理解和分类;有的只保留带因果掩码的解码器,擅长续写和对话;也有的保留完整编码器---解码器结构,适合翻译、摘要等"输入到输出"的任务。


9. 模块一句话记住

模块 用一句话理解
Embedding(嵌入向量) 把词元变成模型能计算的数字向量。
Position Encoding(位置编码) 告诉模型每个词元在序列中的位置。
Self-Attention(自注意力) 决定当前词元该重点参考哪些词元。
Multi-Head Attention(多头注意力) 从多个独立视角同时建立词元之间的关系。
Mask(掩码) 规定哪些信息不能看,例如未来答案或填充符。
Feed-Forward Network(前馈网络) 对每个词元收集到的信息进行独立加工。
Residual Connection(残差连接) 保留原信息,让深层网络更容易训练。
Layer Normalization(层归一化) 让各层数值更稳定。
Encoder(编码器) 读懂和表示输入内容。
Decoder(解码器) 依据已有内容和输入信息逐步生成输出。

10. 最终心智模型

第一次学习 Transformer 时,不要把它理解成一堆公式。先把它想成一个不断开会的小组:

text 复制代码
每个词元先带着自己的初始信息进入会议
  ↓
每个词元查看其他词元,并挑选有用信息
  ↓
每个词元更新自己对当前上下文的理解
  ↓
重复多层后,得到更抽象、更有上下文的表示
  ↓
根据任务,输出分类、翻译结果或下一个词

Transformer 的核心不是"记住前文",而是"在每一层动态决定该从哪里取信息"。


参考资料

以下资料均为原始论文或主流框架官方文档:

  1. Vaswani 等, Attention Is All You Need(NeurIPS 2017)
  2. TensorFlow, Neural Machine Translation with a Transformer and Keras
  3. PyTorch, torch.nn.MultiheadAttention
  4. Su 等, RoFormer: Enhanced Transformer with Rotary Position Embedding
相关推荐
柒和远方2 小时前
V073:SDD 规范驱动开发:文档即代码,两次创造与 proposal/design/task 三份规范
llm·agent
武子康2 小时前
DeepSeek Harness:一次 Prompt 如何变成 Turn、Step 与工具事件
人工智能·llm·agent
AINative软件工程3 小时前
LLM 请求重试耗尽之后:Dead Letter Queue 工程实践
llm
孙启超12 小时前
【大模型应用开发】LLM 到底是什么,以及它是怎么训练的
人工智能·lora·llm·微调·sft·token·rlhf
DigitalOcean18 小时前
2026 LLM 成本计算指南:Token 价格、推理费用与降本方法
llm
武子康21 小时前
DeepSeek Harness、Codex、Claude Code、LangGraph 应该怎么选:先判断你缺的是产品、底盘还是工作流
人工智能·llm·agent
阿弱1 天前
pi 扩展机制:加载、执行与能力
后端·llm·agent
vivo互联网技术1 天前
Octopus:基于无历史数据的梯度正交化的学习框架|CVPR 2026
深度学习·计算机视觉·llm
leeyi1 天前
Langfuse 集成源码:batch 协议、media 上传与 mock 测试(第89篇-E75)
llm·aigc·agent