第14章 注意力机制与Transformer
注意力机制(Attention Mechanism)是深度学习领域的一次革命性突破,而基于它构建的 Transformer 模型,彻底改变了自然语言处理(NLP)乃至计算机视觉(CV)的格局。
本章将从"为什么需要注意力"出发,逐步拆解注意力机制的核心逻辑、经典的缩放点积注意力,以及 Transformer 的完整架构。内容力求去公式化、重直观理解,帮助本科生和研究生掌握这一"深度学习必学"的核心技术。
14.1 注意力机制的核心思想
在正式讲技术之前,我们先从人类的认知习惯入手。
14.1.1 人类的注意力
当你阅读这句话时,你的眼睛并不会平均分配精力给每个字,而是会聚焦在关键词上;当你看一张照片时,你会本能地关注主体(比如画面中的人),而忽略背景的细节。这种**"资源分配的不对称性"**就是注意力的本质。
14.1.2 深度学习中的"瓶颈"
在 Transformer 出现之前,循环神经网络(RNN)及其变体(LSTM、GRU)是处理序列数据(如文字、语音)的主流。但 RNN 有一个致命缺陷:
- 串行计算:必须等前一个词处理完,才能处理后一个词,无法并行,训练速度慢。
- 长距离依赖问题:当句子很长时,开头的信息在传递到结尾时会"丢失",导致模型记不住前文的关键信息。
注意力机制的出现,就是为了解决这两个问题。
14.1.3 注意力机制的定义
在深度学习中,注意力机制的核心可以概括为一句话:在处理当前信息时,模型会自动计算它与序列中其他所有信息的"关联程度",并赋予不同的权重。
通俗理解:"不问过往,只问相关"。无论某个词在句子的开头还是结尾,只要它和当前词相关,模型就能直接"看到"它,并给予高权重。
14.2 注意力机制的基本形式
注意力机制有多种形式,我们从最基础的"加性注意力"讲起,再过渡到 Transformer 中使用的"缩放点积注意力"。
14.2.1 核心三要素(Query, Key, Value)
这是理解所有注意力机制的基石。为了方便理解,我们以**"机器翻译"**(把"我爱中国"翻译成英文)为例:
- Query(查询向量) :"我现在要找什么?"
- 比如当前正在翻译"爱"这个字,Query 就代表"爱"的意图。
- Key(键向量) :"我这里有什么?"
- 比如句子中所有词(我、爱、中国)的特征表示,Key 代表了这些词的属性。
- Value(值向量) :"找到后,我要拿什么?"
- 比如句子中所有词的具体内容,是最终要加权求和的对象。
工作流程 :用当前的 Query 去和所有的 Key 做匹配(计算相似度),得到注意力权重 (Score),再用这个权重对 Value 进行加权求和,得到最终的注意力输出。
14.2.2 加性注意力(Additive Attention)
这是最直观的注意力计算方式,由 Bahdanau 等人提出,主要用于解决 RNN 的长距离依赖问题。
- 原理:用一个小型的神经网络,把 Query 和 Key 拼接或相加后,计算出一个分数。
- 适用场景:当 Query 和 Key 的维度不同时,加性注意力依然有效。
- 缺点:引入了额外的神经网络参数,计算量相对较大。
14.2.3 缩放点积注意力(Scaled Dot-Product Attention)
这是 Transformer 的核心 ,由 Vaswani 等人提出。它抛弃了复杂的神经网络,直接用矩阵乘法来计算相似度。
- 点积(Dot-Product):直接将 Query 矩阵和 Key 矩阵的转置相乘。这一步极其高效,因为可以利用 GPU 进行大规模并行计算。
- 为什么要"缩放"(Scaled)?
- 当词向量的维度( d k d_k dk)很大时,点积的结果会非常大。
- 大的数值会输入到 Softmax 函数中,导致梯度变得极小(Softmax 曲线变得非常陡峭),使得模型难以训练。
- 解决方案 :将点积结果除以 d k \sqrt{d_k} dk ,把数值拉回到合理范围,让梯度流动起来。
通俗总结:缩放点积注意力就是"用简单的乘法算相似度,再除以一个数防止训练崩溃"。
14.3 多头注意力(Multi-Head Attention)
仅仅计算一次注意力是不够的。就像人类理解一句话需要从语法、语义、情感等多个角度去关注,模型也需要"多视角"的注意力。
14.3.1 核心思想
"分而治之,再合而为一"。
- 多头(Multi-Head) :将 Query、Key、Value 分别通过 h h h 组不同的线性变换(投影),得到 h h h 组不同的 Q、K、V。
- 并行计算 :对这 h h h 组 Q、K、V 分别计算缩放点积注意力,得到 h h h 个不同的注意力输出矩阵(每个矩阵代表一个视角的关注重点)。
- 拼接与整合 :将这 h h h 个矩阵拼接起来,再通过一次线性变换,得到最终的多头注意力输出。
14.3.2 优势
- 捕捉多维度信息:比如在翻译"苹果"时,头1可能关注"手机",头2可能关注"水果",多头机制能让模型同时捕捉这些不同的语义。
- 增强模型表达能力:相比单头注意力,多头注意力拥有更多的参数,拟合能力更强。
14.4 Transformer 整体架构
Transformer 的整体结构非常对称,主要由编码器(Encoder)和解码器(Decoder)两大部分组成,且两者都由堆叠的层构成。
14.4.1 编码器(Encoder)
编码器负责"理解输入"。它由 N N N 个相同的层堆叠而成(原论文中 N = 6 N=6 N=6),每层包含两个子层:
- 子层一:多头注意力层(Masked 不适用)
- 这里使用的是自注意力(Self-Attention)。
- 含义:Query、Key、Value 都来自同一个输入(比如原句"我爱中国")。模型在编码每个词时,会关注原句中所有其他的词。
- 子层二:前馈神经网络(Feed-Forward Network, FFN)
- 这是一个简单的两层全连接网络,作用是对注意力输出的特征进行进一步的非线性变换。
- 重要组件:残差连接与层归一化(Add & Norm)
- 残差连接:防止梯度消失,让模型更容易训练深层结构(借鉴了 ResNet)。
- 层归一化:加速模型收敛,稳定训练过程。
- 注:Transformer 中,每个子层的输出都遵循
LayerNorm(x + Sublayer(x))的模式。
14.4.2 解码器(Decoder)
解码器负责"生成输出"。它同样由 N N N 个相同的层堆叠而成,每层包含三个子层:
- 子层一:掩码多头注意力(Masked Multi-Head Attention)
- 这是自注意力的一种特殊形式。
- 为什么要掩码(Mask)? 在生成句子时,我们是一个词一个词生成的。当生成第3个词时,我们不能让模型"看到"第4、5个词(未来的信息)。
- 做法 :在计算 Softmax 之前,把未来位置的权重设为负无穷( − ∞ -\infty −∞),这样 Softmax 后它们的概率就是 0,模型就不会关注它们了。
- 子层二:编码器-解码器注意力(Encoder-Decoder Attention)
- 这里的 Query 来自解码器的上一层,而 Key 和 Value 来自编码器的输出。
- 作用:这是"翻译"的核心步骤。模型在生成目标词(如英文)时,通过 Query 去查询源句子(如中文)中哪个词是它该关注的。
- 子层三:前馈神经网络
- 与编码器中的 FFN 相同。
14.4.3 输入与输出处理
为了让模型理解序列的顺序和类别,还需要两个关键的嵌入层:
- 词嵌入(Embedding):将离散的单词转换为连续的向量。
- 位置编码(Positional Encoding) :
- Transformer 没有 RNN 的循环结构,天生不知道词的顺序。
- 因此,必须人为地给每个词加上"位置信息"。原论文使用了正弦和余弦函数来生成位置编码,直接加到词嵌入向量上,让模型知道"谁在前,谁在后"。
14.5 Transformer 的意义与发展
14.5.1 核心优势
- 全并行计算:抛弃了 RNN 的串行结构,所有词可以同时处理,训练效率提升了数十倍。
- 完美捕捉长距离依赖:通过自注意力机制,模型可以直接连接句子中任意两个词,无论它们相距多远。
14.5.2 后续发展(大语言模型的基石)
Transformer 不仅仅是一个翻译模型,它是目前所有**大语言模型(LLM)**的基础:
- BERT :只使用了 Transformer 的编码器,在自然语言理解(如文本分类、阅读理解)任务上取得了突破。
- GPT :只使用了 Transformer 的解码器,通过自回归的方式生成文本,是 ChatGPT 等对话模型的前身。
- ViT(Vision Transformer):将图片切成一个个"图像块"(Patch),当作"单词"输入 Transformer,彻底颠覆了卷积神经网络(CNN)在计算机视觉领域的统治地位。
14.6 总结和深入阅读
本章的核心知识点可以归纳为以下三点,这也是本科生和研究生学习时需要重点掌握的:
- 注意力三要素:理解 Query、Key、Value 的含义,这是所有注意力机制的基础。
- 自注意力的本质:模型在处理序列时,动态地为每个位置分配不同的权重,关注全局信息。
- Transformer 架构:记住"编码器(自注意力+FFN)"和"解码器(掩码自注意力+编解码注意力+FFN)"的经典结构。
学习建议
- 手动推导:找一个简单的句子(如 3 个词),手动计算一次缩放点积注意力的过程,能帮你彻底理解矩阵运算的含义。
- 代码实践 :不要只看理论,建议用 PyTorch 实现一个最简版的 Transformer。PyTorch 官方已经提供了
nn.MultiheadAttention接口,可以直接调用。 - 可视化:利用工具可视化注意力权重矩阵,你会直观地看到模型在翻译时,到底"看"了原句的哪个词。
深入阅读资料
- 必读论文:《Attention Is All You Need》(2017年),这是 Transformer 的开山之作,原文非常清晰,强烈建议阅读。
- 可视化工具 :Transformer Playground,这是一个非常经典的交互式可视化网页,能帮你直观理解 Transformer 的工作流。
- 进阶方向 :可以进一步学习 Transformer 的改进版,如加入门控机制(Gated Transformer) 、线性注意力(Linear Attention)(解决长文本计算量过大的问题)等。