前言

本人是一名大二学生,此前早已听闻 Transformer 的大名,却始终没有真正读过那篇奠定其地位的经典论文《Attention Is All You Need》。直到最近参与一个涉及到Transformer 相关的项目,我才决定认真回到原文,从论文本身出发,重新理解这一影响深远的模型。

在阅读论文的过程中,我也查阅了不少关于 Transformer 的解读资料,但总觉得它们往往走向两个极端:要么过于学术化,概念密集、推导繁复,让初学者望而却步;要么过于简化,只停留在表层介绍,难以真正把 Transformer 的整体架构讲清楚。也正因为如此,我想尝试写下这篇对《Attention Is All You Need》的赏析文章,以一名大学生的视角,重新梳理这篇经典论文。

这篇文章并不追求晦涩的术语堆砌,也不满足于浅尝辄止的“科普式介绍”,而是希望在保证准确性的前提下,把 Transformer 中那些看似枯燥、抽象的知识讲得更清楚、更易理解。为了让内容更直观,文中在说明关键概念时也会穿插一些例子,帮助读者把抽象结构与具体理解对应起来。

如果你是一位刚接触 Transformer 的初学者,我希望这篇文章能帮助你在读完之后,对它的核心架构建立起一个相对清晰、完整的认识;如果你已经对相关技术比较熟悉,也希望这篇文章能提供一个不同于常规讲解路径的观察角度,带来一些新的思考。

一、如果今天回头看 AI 发展史,Transformer 几乎绕不过去

如果今天回头看人工智能的发展,有一篇论文几乎绕不过去,那就是 2017 年的《Attention Is All You Need》。

它的重要性,不仅在于提出了 Transformer,更在于它改变了人们处理序列数据的基本方式:在这篇论文之前,主流方法大多依赖 RNN(循环神经网络)CNN(卷积神经网络);而在这篇论文之后,attention(注意力机制) 从辅助角色走到了模型核心,进而奠定了 BERT、GPT 以及后来大模型体系的基础。论文自己也明确指出,Transformer 是第一个完全依赖 self-attention 来计算输入和输出表示,而不使用 sequence-aligned RNN 或 convolution 的 transduction model。

很多人第一次接触 Transformer,往往会被那张经典架构图劝退:左边是 Encoder,右边是 Decoder,中间充满了 Multi-Head Attention、Add & Norm、Feed Forward、Mask、Positional Encoding 等术语。

但如果换一个角度来看,这张图真正表达的核心其实并不复杂:

左边负责把输入“读懂”,右边负责把输出“写出来”,而两边真正起决定作用的,是 attention。

本文会按照“背景 → 架构图 → 关键模块 → 影响”的顺序,对 Transformer 做一次完整、通俗但尽量准确的说明。


二、Transformer 出现之前:AI 是如何处理语言的?

自然语言处理中的很多任务,本质上都可以归结为“处理序列”。

这里的序列,指的是一串有顺序的数据。例如一句话就是一个词序列;机器翻译则是把一个输入序列转换成另一个输出序列。论文摘要一开头就指出,在 Transformer 出现之前,最有竞争力的序列转换模型,大多建立在循环神经网络卷积神经网络之上。

2. RNN / LSTM 的问题出在哪里?

RNN 及其改进模型 LSTM、GRU 虽然曾长期主导序列建模任务,但它们存在两个核心局限。

第一,计算具有天然的串行性,不利于并行。
RNN 在每一个时间步的隐藏状态,都依赖前一个时间步的结果,因此模型必须按照序列顺序逐步计算,无法像后来的并行模型那样同时处理整句话。也就是说,第 t 个词的表示只有在第 t-1 个词处理完成后才能得到。论文中也指出,这种顺序性限制了训练样本内部的并行化,尤其当序列较长时,这一问题会更加明显,从而影响训练效率。

例如,在句子“我 今天 去 北京 出差 了”中,模型会按照“我 → 今天 → 去 → 北京 → 出差 → 了”的顺序依次处理。
当读到“北京”时,模型并不是直接同时利用整句信息,而是依赖前面“我、今天、去”逐步累积形成的隐藏状态,再结合当前输入进行更新。正因为每一步都要等待前一步完成,RNN 的计算过程本质上是串行的:句子越长,计算路径越长,训练和推理也就越慢。

第二,长距离依赖难以有效建模。
长距离依赖是指句子中相隔较远的两个位置之间仍然存在重要联系,例如句首的主语与句末的谓语、前文中的实体与后文中的代词指代。
在 RNN 中,这类信息必须通过隐藏状态沿时间步逐步传递。随着传递距离增加,早期信息更容易衰减或失真,因此模型往往更难捕捉远距离的语义关联。LSTM 和 GRU 通过门控机制缓解了这一问题,增强了对长期信息的保留能力,但并没有改变其依赖顺序传播的基本机制,因此在处理较长序列时仍然存在明显局限。


三、CNN 为什么也没有成为最终答案?

与 RNN 不同,CNN(Convolutional Neural Network,卷积神经网络) 在并行计算方面有天然优势。
它可以在多个位置上同时执行卷积操作,因此在训练速度和硬件利用率上通常优于 RNN。

这也是为什么在 Transformer 之前,CNN 也被广泛用于序列建模。论文背景部分提到,像 ByteNet、ConvS2S 这类模型,都尝试用卷积作为基本构件,以并行方式计算输入和输出位置的隐藏表示。

但 CNN 也有局限。

卷积更擅长建模局部关系。如果两个相关位置相距较远,那么模型通常需要堆叠更多层卷积,才能让这两个位置的信息发生交互。论文指出,在卷积模型中,把两个任意位置关联起来所需的操作数,会随着距离增长而增加;这使得学习远距离依赖变得更困难。

因此,在 Transformer 出现之前,局面可以概括为:

  • RNN 系模型:符合语言顺序,但不利于并行
  • CNN 系模型:更易并行,但对全局关系的建模不够直接

四、注意力机制其实早就存在,但当时只是辅助模块

这里有一个常见误区:很多人会以为 attention 是 Transformer 发明的。实际上并不是。

在 Transformer 之前,注意力机制(attention mechanism) 已经在机器翻译等任务中发挥了重要作用。论文引言明确说,attention 已经成为优秀序列模型的重要组成部分,只不过在绝大多数情况下,它仍然是与循环网络结合使用的。

什么是注意力机制?

最直观地理解,注意力机制就是:

当前模型在处理某个位置时,不必平均看待所有信息,而是可以更关注其中与自己最相关的部分。

例如机器翻译任务:

输入:I love machine learning
输出:我 喜欢 机器 学习

当模型生成“喜欢”这个词时,其实最相关的输入词是:love

而不是:I、machine、learning

因此模型不需要平均参考所有输入词,而是应该把更多注意力放在“love”这个词上

这就是注意力机制的核心思想:

模型在处理某个词时,可以动态地“关注”最相关的信息。

也可以理解为:

不是所有信息都一样重要
模型会自动决定“重点看哪里”

这就是注意力机制的基本思想:
不是平均使用所有信息,而是动态分配“关注度”。

但在 Transformer 之前,attention 的角色通常是:

  • 主干仍然是 RNN 或 CNN
  • attention 只是一个增强模块
  • 用来帮助模型更好地对齐输入和输出

真正让 Transformer 诞生的问题,其实只有一句话:

既然 attention 已经证明有用,为什么不能直接让它成为模型主干?


五、Transformer 的出现:从“辅助”到“主干”

《Attention Is All You Need》共有 8 位作者。论文脚注中明确写道:

  • Jakob Uszkoreit 提出了用 self-attention 替代 RNN 的想法,并发起了对这一思路的评估
  • Noam Shazeer 提出了 scaled dot-product attention、multi-head attention 和无参数位置表示。

这说明 Transformer 的真正突破,不只是提出了几个新模块,而是完成了一次更根本的思路转变:

不再把 attention 当作附属部件,而是让 attention 本身承担起核心计算任务。

论文引言中对 Transformer 的描述非常明确:它摒弃 recurrence,完全依赖 attention mechanism 来建立输入和输出之间的全局依赖关系

这也是论文标题 “Attention Is All You Need” 的真正含义:

对序列建模来说,attention 已经不只是“有帮助”,而是足以成为主体结构。


六、进入核心:那张经典架构图到底在表达什么?

Transformer 仍然沿用了经典的 encoder-decoder structure(编码器—解码器结构)
论文第 3 节开头写道:

  • 编码器把输入序列(x_{1},\cdot \cdot \cdot ,x_{n})映射成连续表示z=(z_{1},\cdot \cdot \cdot ,z_{n})
  • 解码器再根据这些表示,一个元素一个元素地生成输出序列 (y_{1},\cdot \cdot \cdot,y_{m} )
  • Transformer 使用的是 stacked self-attentionpoint-wise fully connected layers 来实现这套结构。

因此,阅读那张经典架构图时,最重要的方式不是先盯着模块名,而是先把整张图看成一个数据流:

  1. 输入文本先变成向量表示
  2. 这些向量进入 Encoder,被逐层加工
  3. Encoder 输出“对输入的理解结果”
  4. Decoder 基于这个结果,按顺序生成输出
  5. 整个过程中最关键的机制,是 attention

                    


七、输入部分:从文字到向量

1. 输入嵌入(Embedding)

模型不能直接处理文字,它实际处理的是数字。
因此,输入文本首先要被转换成向量,这一步称为 Embedding(嵌入)

这里的 token 可以理解成模型处理的最小文本单位;而 向量 则是一串数字,用来表示这个 token 在模型内部的语义特征。

论文 3.4 节提到,输入 token 和输出 token 都会先被映射到d_{model}维的向量;在 base 模型中,这个维度设为 512

换句话说:

  • 文字是人类能读懂的外壳
  • 向量是模型真正用来计算的内部表示

2. 位置编码(Positional Encoding)

但只有词向量还不够。

因为 Transformer 没有 RNN 的时间步,也没有 CNN 的卷积顺序感,所以模型天然不知道“哪个词在前、哪个词在后”。
为了解决这个问题,论文提出在输入 embedding 上加入 Positional Encoding(位置编码),即注入显式的位置信息。

因此,输入模型的不是单纯的词向量,而是:

词的语义表示 + 词的位置信息

这一步非常关键,因为它让 Transformer 在没有循环结构的情况下,仍然能够区分顺序。


八、Encoder:负责“读懂输入”

Encoder(编码器) 可以理解成一个“阅读理解模块”。

论文 3.1 节指出,Encoder 由 6 个相同的层堆叠而成。每一层包含两个子层:

  1. Multi-Head Self-Attention(多头自注意力)
  2. Position-wise Feed-Forward Network(逐位置前馈网络)

并且每个子层外面都带有:

  • Residual Connection(残差连接)
  • Layer Normalization(层归一化)

如果只从功能上理解,一层 Encoder 做的事情可以概括为两步:

  • 先让句子中的词彼此交换信息
  • 再让每个位置各自对得到的信息做进一步加工

九、Self-Attention:Transformer 的核心机制

1. 什么是 Self-Attention?

Self-Attention(自注意力),可以理解为:

序列中的每个位置,在更新自己的表示时,会主动去参考同一序列中其他位置的信息。

假设有一句话:   小明 把 书 放在 桌子 上 , 他 很 喜欢 这 本 书

这里有一个问题:“他”指的是谁?

人类很容易知道:他 → 小明

但机器如果只是按顺序读,很难捕捉这种远距离关系。

Self-Attention 的做法是:

当模型计算“他”的表示时,它会同时去“看”整句话里的其他词:

小明

桌子
喜欢

然后模型会自动判断:“小明”和“他”的关系最强

于是就会把更多注意力分配给“小明”。

这就是 Self-Attention 的含义:

序列中的每个词,都可以直接参考序列中其他所有词的信息。

论文在背景部分指出,self-attention 是一种将同一序列中不同位置联系起来、以便计算序列表示的 attention 机制。

2. Q、K、V 的含义

论文将 attention 定义为:输入一个 query 和一组 key-value pairs,输出是 values 的加权和,而每个 value 的权重由 query 与对应 key 的匹配程度决定。

可以用一个简单类比来理解 Q、K、V。

假设你在图书馆找书:

  • Query(Q):你想找什么书
  • Key(K):每本书的标签
  • Value(V):书的具体内容

当你提出一个查询(Query):机器学习

系统会把这个 Query 与所有书的 Key 做匹配:

深度学习 ✔
机器学习 ✔✔
小说 ✘
历史 ✘

匹配度越高,就说明越相关。

最后系统会把最相关书籍的 Value(内容) 返回给你。

在 Transformer 中,这个过程就是:

Q 找 K
K 决定权重
V 提供信息


十、注意力公式到底在做什么?

论文中的核心公式是:

                                 

第一次接触时,可以先不从推导入手,而是从流程入手理解:

第一步:QK^{_{T}}

计算 Query 与所有 Key 的相关性分数。

第二步:除以\sqrt{d_{k}}

论文解释说,这是为了防止点积值过大,把 softmax 推到梯度极小的区域,从而影响训练。

第三步:softmax

把相关性分数变成一组归一化的权重。

第四步:乘 V

按照这些权重,对所有 Value 做加权求和。

假设模型正在处理句子:我 喜欢 机器 学习

当计算“学习”的表示时,模型可能得到这样的注意力权重:

我 0.05
喜欢 0.15
机器 0.35
学习 0.45

这表示模型认为:

  • “学习”与“机器”的关系较强
  • “学习”和自己也有关
  • “我”关系较弱

因此最终输出的表示会更多地融合:机器 + 学习   的信息。

因此,这条公式的本质其实很简单:

attention 就是在计算“谁和我更相关”,然后按这个相关程度去吸收信息”。

                                          


十一、多头注意力:为什么不是只做一次 attention?

论文在 3.2.2 节提出了 Multi-Head Attention(多头注意力)。其核心思想是:
不是只进行一次 attention,而是先将输入的Q、K、V 分别线性投影到多个不同的表示子空间中,在每个子空间内独立进行一次 attention,最后再将各个头的结果拼接并映射,得到最终输出。

在 Transformer 的 base 模型中,论文设置:

  • h=8 个注意力头
  • 每个头的 d_{k}=d_{v}=64

这样设计的关键原因在于:单头注意力只能在一个表示空间中建模关系,而多头注意力可以让模型在多个不同子空间中并行捕捉不同类型的信息。
论文也明确指出,多头注意力使模型能够在不同位置、不同表示子空间上同时关注信息;如果只使用单头注意力,这种表达能力会受到限制,容易被压缩到单一的关注模式中。

从直观上看,多头机制相当于让模型以多个“视角”同时理解同一句话。
例如,在句子“我 喜欢 机器 学习”中,不同注意力头可能学习到不同类型的关联:

  • 某些头更关注句法关系,例如“喜欢”与“学习”之间的动宾联系;
  • 某些头更关注局部语义组合,例如“机器”和“学习”构成固定语义单元“机器学习”;
  • 某些头更关注全局上下文信息,从整句话层面判断当前词在句中的语义作用。

这些头并行工作后,模型再将它们的结果综合起来,因此最终得到的表示不再局限于单一关系,而是融合了句法、语义和上下文等多方面信息。

这正是多头注意力的意义所在:
通过多个并行的注意力头,从不同表示子空间和不同角度同时建模序列内部关系,从而提升模型对复杂语言结构的表达能力。

                                           


十二、残差连接、层归一化和前馈网络分别在做什么?

1. 残差连接(Residual Connection)

论文给出的结构形式是:

                                           

也就是说,子层计算完成后,不是直接丢弃原输入,而是把输入 xxx 加回去。

这种设计的作用可以概括为:

  • 保留原始信息
  • 帮助深层网络更稳定地训练

2. 层归一化(Layer Normalization)

Layer Normalization 的作用,是把每一层输出的数值分布整理到更稳定的范围内。
你可以把它理解成一种“数值整理机制”,目的是让训练过程更稳定。

3. 前馈网络(Feed-Forward Network)

论文 3.3 节指出,除了 attention 子层外,Encoder 和 Decoder 的每一层都包含一个逐位置应用的全连接前馈网络,其形式是两次线性变换,中间带一个 ReLU 激活函数。并且在论文的 base 配置中,维度是:

                         512→2048→512 

可以这样理解:

  • attention 负责“跨位置的信息交互”
  • FFN 负责“当前位置对拿到的信息做进一步加工”

十三、Decoder:负责“一个词一个词生成输出”

如果说 Encoder 像“读懂输入”,那么 Decoder(解码器) 就像“根据理解结果写出答案”。

论文 3.1 节指出,Decoder 同样由 6 个相同的层堆叠而成,但每层有三个子层:

  1. Masked Multi-Head Self-Attention
  2. Encoder-Decoder Attention
  3. Feed-Forward Network

1. 为什么 Decoder 要按顺序生成?

论文第 3 节明确写道,decoder generates an output sequence one element at a time;并且在每一步,它都会把之前已经生成的符号作为额外输入。

这就是所谓的 auto-regressive(自回归)

生成当前位置时,只能依赖前面已经生成的内容。

2. 为什么 Decoder 需要 Mask?

因为生成时不能“偷看未来”。

如果模型在预测第 3 个词时,已经提前看到了第 4 个词的正确答案,那么训练就失去了意义。
因此,论文明确说,Decoder 中的 self-attention 需要做 masking:阻止当前位置去关注后续位置;实现方法是在 softmax 输入中,把非法连接对应的位置设为-

设模型正在翻译一句话:I love machine learning

生成过程是这样的:

第一步:<BOS> → 我

第二步:我 → 喜欢

第三步:我 喜欢 → 机器

第四步:我 喜欢 机器 → 学习

可以看到:

每一步预测,都只能依赖之前已经生成的词。

这就是 自回归(auto-regressive)生成

因此,Mask(掩码) 的本质就是:

把未来位置遮住,让当前词只能看见自己和前面的位置。

3. Decoder 为什么还要看 Encoder?

Decoder 中还有一种 attention,叫 Encoder-Decoder Attention

论文写得很清楚:在这一层中,Query 来自 decoder,而 Key 和 Value 来自 encoder 的输出。这样一来,decoder 中的每个位置都可以关注输入序列中的所有位置。

这一步的作用是:

  • Decoder 不仅要看自己已经生成了什么
  • 还要不断参考输入句子中最相关的部分

换句话说,Decoder 不是“闭着眼生成”,而是“边生成边回看输入”。

4. 模型怎么变成真正的输出词?

论文 3.4 节提到,decoder 的输出会通过一个线性变换和 softmax,转换成“下一个 token 的概率分布”。

也就是说,模型最后不是直接输出文字,而是:

  1. 给词表中的每个候选词一个概率
  2. 选择概率最高的那个词
  3. 把它作为当前输出
  4. 再继续生成下一个位置

十四、为什么 Transformer 会成为后来几乎所有大模型的基础?

论文第 4 节比较了 self-attention、recurrent layer 和 convolutional layer 的三个维度:

  • 每层计算复杂度
  • 可以并行的程度
  • 建立长距离依赖的路径长度

其中最关键的结论有两个:

1. self-attention 更适合并行

论文表 1 指出,self-attention 的顺序操作数是 O_{1},而 recurrent layer 的顺序操作数是 O_{n}。这意味着 self-attention 天然更适合现代 GPU 的并行计算方式。

2. self-attention 更容易处理远距离关系

在 Transformer 中,任意两个位置之间都可以直接建立联系,而不必依赖“逐步传递”。
这使得它在建模长距离依赖时比 RNN 更直接,也比 CNN 更高效。

也正是因为这两点,Transformer 很快从机器翻译扩展到了自然语言处理、视觉、语音以及多模态等多个领域。


十五、论文发表后,它真正改变了什么?

从实验结果来看,Transformer 在 WMT 2014 英德和英法翻译任务上取得了非常强的成绩。论文结论部分也明确指出,它不仅取得了新的 state of the art,而且相比基于循环或卷积层的架构,训练速度显著更快。

但更重要的是,它后来成为了整个大模型时代的共同起点。

从 BERT 到 GPT,再到今天的大语言模型,虽然训练目标和规模各不相同,但它们背后的核心结构,几乎都能追溯到 Transformer。

这篇论文真正改变的,不只是机器翻译的成绩,而是:

我们后来理解“模型如何读懂信息”这件事的基本方式。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐