浅谈《Attention is All You Need》——论文精读

MOE架构的大模型的路由机制再花哨,底层依然是Transformer Block;长序列建模在挑战上下文长度的极限,但核心仍然是自注意力的变体;推理优化的系统及创新,本质上是在和硬件搏斗,只为更高效地执行attention运算;多模态模型他们如何融合视觉与语言,答案是把图象打成patch扔进Transformer,把音频切成分帧扔进Transformer……

具体是怎样的Transformer架构,能具有如此神奇的效果呢?接下来让我对《Attention is All You Need》进行论文分析。

声明:本文是初学者第一次阅读论文&分析论文,如有不足之处恳请批评指正。

前置知识

CNN

CNN依靠局部感受野提取特征,通过堆叠层数扩大感受范围,但天然局限于**局部关联建模**,无法高效捕捉长距离语义依赖,且位置先验固定。

RNN

RNN/LSTM/GRU 是传统序列建模方案,必须**按时间步串行计算**,无法并行训练;同时长序列会引发梯度消失/爆炸,难以建模长距离依赖。

Motivation

序列建模

序列建模当时有哪些困境呢?

1. 长距离依赖。如指代回指,跨句因果,翻译重排。

2. 内容的相关性。内容不仅与距离相关,还需考虑语义需要。

3. 路径长度。距离越远,梯度越容易衰减/爆炸。

4. 感受野。CNN感受野靠堆叠层数扩大,仍是位置先验固定。

5. 并行化。RNN需按时间串行。

基本架构

Encoder

编码器,将符号嵌入序列转换为一组更具有语义结构的连续表示。

例如: Lab4AL is (input)→ {LAb,4,AI,is} (token)→ symbol representations

编码器要做的,就是经过多层自注意力机制加前馈网络的变换,会得到更具语义结构的连续表示。

这个向量不同于原始嵌入向量之处,在于它除了表示自身的语义,还整合了整个序列上下文的信息,这样可以使得词的多义性根据上下文被削平。

Decoder

解码器,根据编码好的语义表示自回归的持续生成新的离散符号。

例如(接着上述例子):

Decoder的两个输入:symbol representations和continuous representations. symbol representations → continuous representations(from Encoder)→ Decoder → new continuous representations → 解码 →All(token)

然后,进行自回归过程: All → new symbol representations + symbol representations(先前的) → Decoder →you need(新token)

解码方式: 贪婪解码:将这两个数在内部不断转换,生成新的连续语义表示,再经过线性层和softmax,将其转换成基于整个词汇表的概率分布,也就是说每一个词汇表都对应一个概率,他可能就会取概率最大的一个token作为它的下一个预测值。

自回归: 它会把解码产生的新token转为新的嵌入向量,作为新的输入,和之前的symbol representations加在一起,走同样的过程去生成新的token,这就是自回归的持续生成。再把它作为新的输入,如此循环。

一个Encoder,一个Decoder,一个编码,一个解码,把单纯的文本转换为更具有语义的上下文表示。

Attention

Attention的含义

人类在理解一句话时,并不是每个词都同等重要。对于机器同样,我们也希望机器在生成和理解的时候,动态决定当前重点看哪部分。这就引出了注意力权重:

注意力权重是模型在进行计算时,为每个输入元素(如文本中的词语、向量中的特征)分配的重要程度分数 ,用于衡量不同输入元素对当前任务(如文本理解、特征提取)的贡献大小。分数越高,代表该输入元素越重要,模型会优先关注、重点提取其信息。

这里提到了两种注意力:

加性注意力,是注意力实现的最初手段,是用前馈网络计算非线性关系,非线性关系可以让我们学到更强的语言表示能力,但速度相对较慢。

点积注意力,就是计算词向量的内积表达相关性。其核心优势就是速度快,但是表达能力比较弱。 鉴于点积注意力能用显卡并行处理,所以Transformer选的就是它。

Attention 计算流程

1. 核心定义

Attention 的本质是:根据 Query 与 Key 的相似度,生成注意力权重,再对 Value 进行加权求和。

2. 输入三个矩阵 来自输入向量经过线性变换得到:

– Q (Query):查询矩阵,表征“当前要找什么”

– K (Key):键矩阵,表征“每个元素有什么特征”

– V (Value):值矩阵,表征“每个元素的实际信息”

3. 计算相似度(匹配度)

$$ \text{score} = Q K^T $$ 作用:计算每个 Query 与所有 Key 的相关程度。

4. 缩放(防止数值过大,影响归一化)

除以 Key 向量维度的平方根: $$ \text{score}_{\text{scaled}} = \frac{Q K^T}{\sqrt{d_k}} $$ 其中 \(d_k\) 是 Key 向量的维度。

5. 得到注意力权重(核心)

使用 Softmax 归一化,将分数转为 0~1 之间的概率分布,这就是注意力权重: $$ \text{Attention Weights} = \text{softmax}\left( \frac{Q K^T}{\sqrt{d_k}} \right) $$

其中,Softmax 的优点在于其非负性,并且还能放大不同特征权重之间的差异,还能求导,进行梯度下降优化操作。

填坑:为什么要在第四步缩放?

如果不缩放,可能出现 {0.99999,0.0000001……} 之类的特征向量,梯度接近 0,学习不稳定。

6. 加权求和得到最终输出 使用权重对 Value 加权融合,得到 Attention 输出:

$$ \text{Output} = \text{softmax}\left( \frac{Q K^T}{\sqrt{d_k}} \right) V $$

7. 一句话总结

Attention = 相似度计算 → 归一化得到权重 → 加权信息融合

多头注意力

由于点积注意力略显单薄,表达能力有限,所以就采用多视角计算注意力,缓和信息平均混合造成的损失。 多头注意力的核心思路非常直观:

不只用一组注意力去看句子,而是用多组“注意力头”,在不同的特征子空间里学习不同的关注模式,最后把所有头学到的信息拼在一起,得到更丰富、更全面的表示。比如,车的颜色设置为一头,车的价钱设置为一头,车的造型设置为一头等,多头并行自注意力。

计算流程和公式

1. 线性投影与分头

我们不会直接用原始的 Q、K、V,而是先把它们分别通过线性层做投影,再均匀拆分成 h 个“小头”,让每个头专注学习一部分特征。

2. 分头计算缩放点积注意力

每个头都独立计算一次 Attention,互不干扰。

第 i 个头的计算公式为:

$$ \text{head}_i = \text{Attention}\left(QW_i^Q,\ KW_i^K,\ VW_i^V\right) $$

其中,$W_i^Q$、$W_i^K$、$W_i^V$ 是每个头专属的线性变换矩阵,让不同头学到不同的关注模式。

3. 拼接所有头的输出

把 h 个头的结果拼接起来,再通过最后一层线性变换整合,得到最终的多头注意力输出: $$ \text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1,\dots,\text{head}_h)W^O $$

简单理解: 分头学习 → 各自算注意力 → 拼接融合 → 输出更强的语义表示。

Encoder详细结构

总体架构

Encoder 由 N 层(论文中 N=6)完全相同的层堆叠而成。 每一层包含两个子层:

1. 多头自注意力,残差连接+层归一化

2. 前馈神经网络,残差连接+层归一化

多头自注意力

Encoder 使用全上下文自注意力,每个词都能关注到输入序列的所有位置。具体运算见前文。

前馈神经网络(FFN)

公式:

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

两层线性变换 + 中间ReLU激活,对每个位置独立变换。

特性:

1.各个位置独立。序列中每个向量单独且同样地应用FFN。

2.参数按照层不同。同一Transformer层用同一组$W_1$,$W_2$,$b_1$,$b_2$。

前馈网络在每一层中是一样的,在不同层中不一样,由此前馈网络能通过两次线性变换和不同层的堆叠,学习出更强的语义表示,同时还能使得计算高度并行。残差连接与层归一化

残差连接+层归一化

1. 残差连接

残差连接的核心作用是解决深度网络的梯度消失问题。 Transformer 在每一个子层(自注意力、前馈网络)外都包裹了残差连接,让信息可以直接跨层流动。

结构: 输入 → 子层(注意力/FFN)→ 输出 + 输入(直接跳跃)

公式:$$ x_{\text{out}} = x + \text{Sublayer}(x) $$

直观理解: 让模型学习“残差”而非直接学习完整映射,深度加深时依然能稳定训练、不会退化。

2. 层归一化

层归一化对每个样本的特征维度做归一化,让训练更稳定、收敛更快。与 BatchNorm 不同,LayerNorm 不依赖批次,在 NLP 任务中表现更优。

公式: $$ \text{LayerNorm}(x) = \frac{x – \mu}{\sqrt{\sigma^2 + \epsilon}} \cdot \gamma + \beta $$

其中:

$\mu$:当前样本的均值

$\sigma$:当前样本的方差

$\gamma, \beta$:可学习缩放与偏移

Decoder详细结构

总体架构

同样由 N=6 层堆叠而成,每层包含三个子层:

1. 掩码自注意力,残差连接+层归一化

2. 交叉自注意力,残差连接+层归一化

3. 前馈神经网络,残差连接+层归一化

掩码自注意力

1.作用:

防止模型在生成时看到未来的token

2.具体操作

将未来位置的score设置为 -∞,Softmax后为0。

交叉自注意力

1.操作:

Q 来自 Decoder 上一层 ,K、V 来自 Encoder 输出。

2.作用:

让每个生成位置都能关注输入句子的全部信息。

位置编码

含义

Transformer 没有递归和卷积,不包含序列顺序信息,因此必须显式加入位置信息。

公式

采用三角函数位置编码,通过正弦、余弦函数交替映射奇偶维度:

$$ PE_{pos,2i} = \sin\left(pos / 10000^{2i/d_{model}}\right) $$ $$ PE_{pos,2i+1} = \cos\left(pos / 10000^{2i/d_{model}}\right) $$

将计算得到的位置编码向量,与词嵌入向量**逐维相加**,融合位置信息与语义信息,一同送入后续注意力层计算。

 Transformer 的深远影响

Transformer 凭借纯粹的自注意力机制,彻底抛弃了传统 CNN、RNN 架构的局限,不仅统一了序列建模范式,还直接奠定了现代大模型与人工智能的发展基础,衍生出两大主流技术分支:**编码理解架构**与**解码生成架构**。

BERT

BERT 完全基于 Transformer **Encoder** 结构搭建。 Encoder 具备双向上下文建模能力,能够同时利用当前字符**前文与后文**的全局信息,实现深度语义理解。

核心特点:

– 采用双向全连接自注意力,无掩码限制

– 擅长语义推理、文本分类、情感分析、问答、语义匹配等自然语言理解任务

– 开启了预训练+微调的 NLP 通用范式

GPT

GPT 系列模型完全基于 Transformer **Decoder** 结构搭建。 依靠掩码自注意力机制,严格限制只能观测历史内容,符合人类逐字表达的逻辑,实现自回归生成。

核心特点:

– 适配对话、文案创作、代码生成、长文本续写等生成类任务

-奠定了大语言模型、生成式 AI 的核心架构基础

总结

Transformer 完全抛弃 RNN/CNN,仅用注意力机制实现序列建模: – 并行训练速度极快 – 长距离依赖建模能力强 – 成为所有大模型、多模态模型的统一底座 《Attention Is All You Need》真正意义上开启了全新的深度学习时代。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇