编程与 AI12 分钟阅读更新于 2026-08-03

Transformer 为什么会出现:从顺序处理到全局注意力

从机器翻译这个具体任务出发,理解 RNN 的顺序依赖、长距离信息衰减,以及 Transformer 如何用自注意力和并行计算重新组织语言处理。

相关工具

Transformer 解决的不是一个小问题

Transformer 在 2017 年的论文《Attention Is All You Need》中提出。它并不是凭空出现的架构,而是回应了当时序列处理模型的一组实际困难:一句话需要按顺序读,远处的词之间不容易建立联系,训练过程难以充分并行,句子越长,信息传递的路径越长。

理解 Transformer,最好先把它放回机器翻译场景。输入是一句话,输出是另一种语言的句子。模型既要知道每个词的含义,也要知道词与词之间的关系。例如代词到底指向前面哪个名词,否定词影响哪一段内容,句子的前半部分怎样约束后半部分。

资料 资料先把 Transformer 看成一个黑盒,再逐层拆成编码组件和解码组件,接着解释词向量、自注意力、前馈网络和位置编码。本文也沿用这条路线:先理解它为什么需要出现,再看它大致怎样工作。

Transformer 编码器解码器架构总览图
Transformer 架构总览

输入序列经过词嵌入和位置编码,进入编码器;解码器结合已有输出和编码结果,逐步生成目标序列。

先看当时常用的 RNN 为什么不够理想

RNN 的基本思路很直观:按照词语出现的顺序读取输入,每读一个词,就把当前信息和前一时刻的隐藏状态合并,再把结果传给下一步。这样,隐藏状态像一条不断更新的记忆,负责把已经读过的内容带到后面。

这种设计适合表达顺序,却带来明显限制。第 t 个位置必须等第 t-1 个位置处理完,训练时很难同时计算所有位置。序列越长,等待越多,硬件的并行能力也越难发挥。

更麻烦的是,早期信息要经过很多次隐藏状态传递才能影响后面的词。路径变长后,信息可能逐渐变弱,模型也更容易忘记句首的限定条件。LSTM、GRU 等结构缓解过这个问题,但没有改变顺序处理的基本方式。

RNN 顺序处理和 Transformer 并行处理的对比图
顺序处理与并行处理

RNN 依赖前一个时间步,Transformer 可以让多个位置同时参与注意力计算。

CNN 能并行,但不擅长直接看全局

在序列任务中,CNN 也曾被用来提取局部模式。卷积核可以同时处理多个位置,计算速度比较适合并行;多个卷积层叠加后,模型还能逐渐扩大感受野。

但 CNN 关注的是固定范围的局部窗口。想让句首和句尾直接建立关系,往往需要增加层数、扩大卷积范围,或者设计额外的结构。路径变长之后,模型理解远距离依赖仍然不够直接。

Transformer 的关键变化,是让每个位置都能根据当前任务直接查看序列中的其他位置。它不再先决定一个固定窗口,而是通过注意力权重动态判断哪些词更值得关注。

自注意力让每个词都能询问整句话

Self-Attention,也就是自注意力,处理的是同一个序列内部的位置关系。模型在表示某个词时,不只使用这个词自己的向量,还会查看其他词,并根据相关程度分配不同权重。

可以用代词指代来理解。句子中出现 it 时,模型需要判断它更可能和 animal 相关,还是和 street 相关。自注意力会计算当前词与其他词的关系,再把相关位置的信息按权重汇总进当前表示。

这种机制的价值不只是“看得更远”,还在于关注范围会随输入变化。同一个词放在不同句子里,得到的表示可以不同,因为它关注的上下文也不同。

自注意力从输入词到 Q K V、权重和输出表示的信息流图
自注意力的信息流

每个输入词生成 Q、K、V,先计算相关性,再归一化为权重,最后汇总成新的表示。

Q、K、V 是理解注意力的三个角度

在自注意力中,同一个输入向量会经过三组不同的参数变换,得到 Query、Key 和 Value。它们不是三个独立词语,而是同一份输入在计算关系时承担的三种角色。

Query 可以理解为“我正在寻找什么”,Key 是“我能提供什么线索”,Value 是“如果选择关注我,应该带走什么信息”。当前词的 Query 会和所有词的 Key 做相似度计算,得到一组相关性分数,再根据这些分数决定从各个 Value 中取多少信息。

经典的缩放点积注意力可以写成:Attention(Q, K, V) = softmax(QK^T / √d_k)V。先做 Q 和 K 的点积,再除以维度平方根控制数值范围,经过 Softmax 得到权重,最后对 V 加权求和。公式不需要死记,抓住“比较关系、得到权重、汇总信息”这条线就够了。

为什么要缩放并使用 Softmax

当向量维度较大时,Q 和 K 的点积可能变得很大。数值过大,会让 Softmax 的输出过于集中,某个位置接近 1,其他位置接近 0,训练时的梯度也可能变得不稳定。除以 √d_k,就是为了把分数控制在更合适的范围。

Softmax 的作用是把一组分数变成权重分布。权重通常为正,并且总和为 1,于是模型可以用它表达“当前词应该从不同位置拿多少信息”。这不是简单的选择一个词,而是可以同时参考多个位置,只是参考程度不同。

注意力权重也不能直接等同于人类意义上的解释。它能帮助我们观察模型关注了哪些位置,却不代表模型的全部判断过程都能由一张权重图解释。分析结果时仍然要结合任务、输入和输出一起看。

没有顺序处理,模型怎么知道词的位置

自注意力可以同时处理多个位置,但它本身并不知道词语的先后顺序。如果把一句话里的词全部打乱,只提供词向量,模型很难区分“猫追狗”和“狗追猫”。因此 Transformer 需要把位置信息加入输入表示。

原始 Transformer 使用位置编码,把每个位置的编码向量加到对应词嵌入上。这样进入编码器的向量同时包含词的语义和它在序列中的位置。位置编码可以使用固定函数,也可以使用训练得到的向量,具体选择取决于模型设计。

位置编码解决的是顺序问题,不是让模型重新变回 RNN。位置表示进入后,注意力仍然可以同时查看多个词,只是每个位置的表示已经带上了序列中的位置信息。

Encoder 和 Decoder 分别负责什么

原始 Transformer 是 Encoder-Decoder 架构。Encoder 负责阅读和理解输入序列,把每个位置转换成带有上下文的信息表示;Decoder 负责根据已经生成的内容和 Encoder 的输出,逐步生成目标序列。

Encoder 的一层通常包含自注意力和前馈网络。自注意力负责让不同位置交换信息,前馈网络则对每个位置的表示进行进一步变换。两者外面还会配合残差连接和归一化,帮助多层结构稳定训练。

Decoder 比 Encoder 多一层编码器-解码器注意力。它先用掩码自注意力读取已经生成的部分,避免偷看后面的正确答案,再通过编码器-解码器注意力查看输入序列,最后经过前馈网络和输出层预测下一个词。

并行计算改变了训练方式,但生成仍然是逐步的

在训练阶段,目标序列通常已经提供,模型可以把多个位置一起送入网络,通过掩码保证每个位置只能看到允许看到的内容。这样,很多位置的计算可以并行完成,硬件利用率比严格按时间步处理更高。

在生成阶段,模型并不知道下一个词是什么,只能先生成一个,再把它加入上下文,继续预测下一个。因此 Decoder 的输出仍然是逐步生成的。Transformer 解决的是训练和信息交互方式,不是让所有生成结果凭空同时出现。

这也是为什么推理速度还会受到序列长度、层数、缓存和硬件条件影响。后续的 KV Cache 等优化,会减少已经计算过的键和值的重复工作,但它们是在 Transformer 基础结构之上继续改进。

Transformer 的优势和代价要一起看

Transformer 的优势可以归纳为三点:自注意力让远距离位置更容易建立联系;训练时更适合并行计算;堆叠相同结构后,可以通过规模和数据学习复杂的语言模式。后来很多语言模型采用 Decoder-only 结构,也是沿着这套注意力和前馈网络思路发展出来的。

它也有代价。自注意力需要比较序列中不同位置的关系,序列变长后计算和显存压力会明显增加;模型仍然需要位置表示;生成阶段存在逐步输出的等待;训练所需数据和资源也不低。不能因为架构先进,就认为所有任务都应该使用最大模型。

学习 Transformer 时,最值得保留的不是一张复杂结构图,而是一条清楚的因果链:顺序处理限制了并行和远距离信息传递,于是引入自注意力;自注意力缺少顺序感,于是加入位置编码;为了完成翻译,再用编码器理解输入、用解码器逐步生成输出。

读懂 Transformer 的一条学习顺序

第一次接触时,可以先把整体架构看成输入序列、编码器、解码器和输出序列四块;第二步理解一个词怎样通过自注意力参考其他词;第三步再看 Q、K、V 和缩放点积公式;最后补上位置编码、掩码、多头注意力、残差连接和归一化。

不要一开始就被所有公式和矩阵维度压住。先能解释一个具体例子:当前词为什么要关注另一个词,关注程度如何计算,得到的信息怎样回到当前表示。等这条主线稳定后,再回头看矩阵乘法,公式会有落点。

Transformer 的出现不是把过去的模型全部判定为无用,而是针对特定限制做了新的取舍。理解这种“问题推动结构变化”的方式,后面再学习多头注意力、Decoder-only 和长上下文优化,会比单独背术语更顺。

Transformer 学习路径
步骤 1
先看整体

理解输入、编码器、解码器和输出之间的关系。

步骤 2
再看注意力

用具体句子理解一个位置如何参考其他位置。

步骤 3
补上顺序

理解位置编码、掩码和生成方向解决什么问题。

步骤 4
最后看细节

再学习多头注意力、残差连接、归一化和缓存优化。

常见问题

Transformer 是不是完全不需要顺序信息?

不是。自注意力可以同时处理多个位置,但它本身不直接知道先后顺序,因此需要位置编码或其他位置表示把顺序信息加入输入。

Transformer 为什么比 RNN 更适合并行训练?

RNN 的当前状态依赖前一个时间步,必须按顺序计算;Transformer 在训练时可以让多个位置一起参与注意力计算,因此更容易利用并行硬件。

Q、K、V 需要分别记住什么?

可以把 Q 理解为查询,K 理解为被比较的线索,V 理解为最终要汇总的内容。Q 和 K 产生相关性权重,权重再用于汇总 V。