Transformer论文

Transformer 原始论文 《Attention is All You Need》,由 Vaswani 等人于 2017 年 6 月发布,是近年来最具革命性的深度学习论文之一,它不仅在自然语言处理领域带来了根本性变革,也为图像处理、音频处理、分子建模、强化学习等领域开辟了新的研究方向。

一、论文地位

因为首先看论文的摘要和结果(结论)能让读者把握整篇论文的大致方向,因此我在读论文的时候基本也是采用这种方式进行,

1.1 论文成果

如下是在论文中展示的成果,但深远的成果我会娓娓道来:

  1. 彻底摒弃循环神经网络(RNN)结构

    • 在当时,NLP 的主流模型是 LSTM、GRU 等循环神经网络,处理长文本效率低,训练过程难以并行。

    • Transformer 完全抛弃循环结构,用 注意力机制(Attention) 实现了更快、更并行、更准确的建模。

  2. 提出自注意力机制(Self-Attention)

    • 第一个完全基于注意力机制的序列转导模型,它用多头自注意力机制取代了编码器-解码器架构中最常用的循环层
    • 模型中每个词都可以看到整个句子的所有词,解决了长距离依赖问题,成为后续大模型的基础模块。
  3. 统一的模型框架

    • 不再区分语言建模、翻译、摘要等任务模型结构,Transformer 提供了一个统一的、可扩展的架构。

在翻译任务中,都取得了当时的最佳性能,并且超过了之前报道的所有的集成模型(PS:集成模型就是多个模型进行合作,也就是transformer单个模型可以一穿几,丝毫不惧)

1.2 后续影响

✅ 引发预训练语言模型浪潮

Transformer 成为 GPT、BERT、T5、XLNet、RoBERTa 等一系列模型的基础:

模型 基础结构 发布年份 特点
BERT 双向 Transformer Encoder 2018 掀起 NLP 预训练革命
GPT 单向 Transformer Decoder 2018+ 引领大模型时代
T5 Encoder-Decoder Transformer 2020 所有任务统一为文本生成

✅ 催生通用 AI 模型

Transformer 被拓展至:

  • 图像领域(Vision Transformer, ViT)
  • 多模态(CLIP, Flamingo)
  • 音频建模(AudioLM, Whisper)
  • 分子建模(AlphaFold 使用 attention)
  • 编码任务(Codex, CodeT5)

✅ 成为大模型(LLM)的核心结构

所有大语言模型(如 GPT-4、Claude、Gemini、通义千问、文心一言)都基于 Transformer 结构。

总结一句话:

Transformer 是现代深度学习架构中最具颠覆性的成果之一,彻底改变了人类设计、训练与部署 AI 模型的方式。

二、提出背景

✅ 传统的网络模型有很大的缺点,在2017年之前的模型主要是依赖于序列转导模型,这样的方式是基于上一个层的输出作为下一层的输入进行预测,假如在转折点预测的好那就是跟输出结果一样完全拟合。

预测的好的样子

但是如果在转折点预测的不好的话

预测不好的样子1
预测不好的样子2

当时只有极少数的情况下不搭配RNN使用,其他任务均与RNN搭配使用。基于此,提出了Transformer架构,摒弃了循环机制,完全依赖于注意力机制来提取输入和输出之间的全局依赖关系。

三、模型架构

3.1 整体架构图

模型框架有Encoder-Decoder组成:

​ ✅ 左边是编码器,负责将输入序列映射为连续表示。6个相同的层堆叠——每个层包括多头注意力层和前馈网络,使用的关键技术主要有残差链接、LayerNorm(这个归一化不需要补齐,不像batchLayer)、维度dim_mode=512。

​ ✅ 右边是解码器,负责自回归生成输出序列。除了编码器相同的6层内容之外还在每层中新增编码器-解码器注意力机制,同时进行一系列处理:防止当前位置关注后续位置的掩码自注意力和确保位置i仅依赖一直输出的输出嵌入偏移。

两者最核心的组件是:多头注意力层和前馈网络,在网络模型中所有的输入都是经过一个统一的位置编码成数字进行输入运算。

模型架构

另外论文中提到一个端到端网络,这种网络无需人工设计复杂模块,实现整个模块可以通过一个统一的损失函数用反向传播进行整体训练。即可以从整体直接从训练数据中学习输入到输出的完整映射。

3.2 注意力机制

这个注意力机制可谓是论文的核心卖点:

注意力机制可以描述为将一个查询和一组键值对映射到一个输出,其中查询、键、值和输出都是向量。输出计算为值的加权和,其中分配给每个值的权重由查询与相应键的兼容函数计算。

这里面主要包含一下两个核心模块:

3.2.1 缩放点积注意力

论文中提到的是加性注意力和点积注意力,加性注意力使用具有单个隐藏层的前馈网络来计算兼容性函数。虽然两者在理论复杂度上相似,但点积注意力在实践中更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

如下是缩放点积注意力机制图:

Scaled Dot-Product Attention

✅可以把注意力机制想象成 图书馆查资料的过程:

  • 你是读者,你带着一个”问题”去找答案;
  • 图书馆里有很多本书(信息),你要找出最相关的书并阅读它;
角色 在注意力中的名字 含义
你的问题 Query (Q) 你在当前这个位置想知道什么内容
每本书的标题 Key (K) 每条信息的索引,决定它是否与你的问题相关
每本书的正文 Value (V) 实际的信息内容,如果你决定看这本书,就读它的正文

✅在 Self-Attention 中,Q/K/V 都是从同一组输入向量生成的,只是通过不同的线性变换得来

假设一个句子有三个词(如 “I love NLP”),嵌入后是:

1
输入序列 X = [x₁, x₂, x₃]   ← 每个 xᵢ 是 d_model 维度向量

然后我们用 3 个不同的权重矩阵生成 Q/K/V:

1
2
3
Q = X × W_Q      ← 查询向量
K = X × W_K ← 键向量
V = X × W_V ← 值向量

其中 $W_Q, W_K, W_V$是可训练参数矩阵。

✅数学层面理解Attention 的公式如下:

$Attention(Q,K,V)=\text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$

  • $QK^T$:计算 Query 和所有 Key 的相似度(打分)
  • Softmax:将打分转换为概率(注意力权重)
  • 乘以 V:将 Value 按照注意力权重加权,得到输出

3.2.2 多头注意力

使用不同的学习线性投影将查询、键和值线性投影h次到$d_k、d_k$和$d_v$维分别是有益的。然后,我们在这些投影后的查询、键和值版本上并行执行注意力函数,产生$d_v$-dimensional输出值。这些值被连接起来,并再次被投影,最终得到最终值。

Multi-Head Attention

你可以想象:

一段话由多个专家同时理解,每个“头”是一个专家,从不同角度理解这句话(比如语法、情感、实体);最后把所有专家的意见整合后,给出最终的理解结果。

✅数学层面理解Attention 的公式如下:

$MultiHead(Q,K,V) = Concat(head_1,…,head_h)W^O $

where $head_i = Attention(QW^Q_i,KW^K_i,VW^V_i)$

  • W各自的注意力特征提取矩阵

Multi-Head Attention 的优点

  • 每个头能学习不同类型的语义关系(如“主谓”、“时间”、“位置”)
  • 并行计算提高训练效率
  • 增强模型表达能力和泛化能力

3.3.3 Why Self-Attention

使用self-attention主要考虑了如上图的三个因素:

  • 一是每层的总计算复杂度

    主要衡量每层计算的时间复杂度了,其中n是输入的序列长度,d是向量维数。可以发现当序列长度n小于表示维度d时,自注意层比RNN和CNN快,如果是较长序列的任务时,考虑将自注意限制大小,即相当于选择长序列的一部分进行处理。

  • 二是网络中远程依赖关系之间的路径长度

    表示的是当前元素向前或向后必须穿越的路径长度,简单来理解,只有RNN因为每一个位置的输出都需要前一个位置的输出作为输入,所以第n个位置需要等前n-1个位置全部算出,故为O(n)。

  • 三是任意两个输入和输出位置之间的最大路径长度

    简单理解就是一个信息从一个数据点走到另一个数据点要多远

3.3 关键技术细节

3.3.1 位置感知前馈网络

Position-wise Feed-Forward Networks:该网络分别且相同地应用于每个位置。这由两个线性变换组成,它们之间有一个ReLU激活函数。

✅数学层面理解FFN的公式如下:

  • $FFN(x) = max(0,xW_1 +b_1)W_2 +b_2$

🧠 一句话解释:

Position-wise Feed-Forward Networks(FFN)是对每个位置的向量单独做非线性变换,增强模型的表示能力。

它本质上是一个小型的多层感知机(MLP),对每个位置的 token 表示进行独立且一致的前馈计算。

特点 说明
逐位置 FFN 对每个 token 的表示单独处理,不与其他位置交互
全连接 + 非线性 增强模型非线性表达能力
参数共享 所有位置用相同的 FFN(即 W₁、W₂ 是共享的)
不引入序列依赖 不像注意力有位置间交互,FFN 是“点对点”处理

3.3.2 位置编码

由于模型不包含循环和卷积,为了使模型能够利用序列的顺序,必须注入一些关于序列中标记的相对或绝对位置的信息。为此,在编码器和解码器堆栈的底部向输入嵌入添加“位置编码”。

(🧠PS:为什么要位置编码?其实说白了给每个token一个编制,相对于工号一样的东西,方便看到工号就能知道这是那个人)

在对比之下选择的是正弦函数生成的位置嵌入,替代递归/卷积的位置信息。

✅数学层面理解Positional Encoding公式:

$PE_{(pos,2i)}= sin(pos/10000^{2i/dmodel}) $,我们选择的这个

$PE_{(pos,2i+1)} = cos(pos/10000^{2i/dmodel})$

🎯 架构理解总结

步骤 模块 作用
Q×Kᵀ 相似度计算 衡量注意力权重
÷√dₖ 缩放 避免梯度过小
Mask 屏蔽未来 自回归建模
Softmax 归一化 得到注意力分布
×V 加权求和 得到输出表示
多头线性投影 Multi-head 捕捉多种关系
拼接+线性 输出整合 保持原始维度

类比理解Attention和FFN:

  • Attention 是你“看别人”(你关注哪些词);
  • FFN 是你“想自己”(你如何加工你自己的信息);
  • 两者结合:你先看外界(Attention),再内化处理(FFN)。

四、训练

4.1 设备和数据集

8 个 NVIDIA P100 GPU设备上对标准的 WMT 2014 英语-德语数据集进行了训练了3.5天,该数据集包含约 450 万个句子对。使用字节对编码对句子进行编码,该编码具有约 37000 个词元的共享源目标词汇表。对于英语-法语,使用了更大的 WMT 2014 英语-法语数据集,该数据集包含 3600 万个句子,并将词元分成一个包含 32000 个词片的词汇表。句子对按近似序列长度分组。每个训练批次包含一组句子对,包含大约 25000 个源词元和 25000 个目标词元。

4.2 优化

  • 使用 Adam 优化器,其中 $β_1$ = 0.9,$β_2$ = 0.98,ε = $10^{−9}$。我们在训练过程中根据以下公式调整学习率

优化器公式

  • 层归一化:加速训练收敛

  • 残差连接:缓解深层网络梯度消失问题

  • 正则:

    • Dropout:在每个子层的输出被加到子层输入并归一化之前,对每个子层的输出应用丢弃。此外,还在编码器和解码器堆栈中对嵌入和位置编码的总和应用丢弃
    • 标签平滑
    • BLEU

正则后的结果

4.3 结果

在 WMT 2014 英语-法语翻译任务中,我们的大型模型取得了 41.0 的 BLEU 分数,超过了所有先前发布的单一模型,而训练成本不到先前最先进模型的四分之一

transformer 架构的变体

五、阅读笔记地址

我的笔记论文地址:《Attention is All You Need》


Transformer论文
http://example.com/2025/07/16/transformer论文/
作者
Alaskaboo
发布于
2025年7月16日
更新于
2025年7月17日
许可协议