李宏毅深度学习笔记7-自注意力机制及其在掩码自编码器(MAE)中的实现
一、引言:从CNN到自注意力
在学习完卷积神经网络(CNN)后,我们进入另一个重要的深度学习架构——自注意力机制(Self-Attention Mechanism)。与CNN主要处理固定尺寸的图像不同,自注意力模型擅长处理变长的向量序列输入,这使其在自然语言处理(NLP)、语音识别、图神经网络等领域大放异彩。
二、输入为向量序列的三大任务类型
自注意力适用于以下三类典型任务:
1. 类型1:输入与输出数量相同(序列标注)
- 每个输入向量对应一个输出标签。
- 应用示例:
- 词性标注(POS Tagging):判断每个词是名词、动词等。
- 音素识别:每帧语音对应一个音标。
- 社交网络节点分类:预测每个用户是否会购买某商品。
⚠️ 全连接网络无法解决上下文歧义问题(如 “I saw a saw” 中两个 “saw” 词性不同)。
2. 类型2:整个序列 → 单个标签(分类任务)
- 整个序列只输出一个结果。
- 应用示例:
- 情感分析:判断一段话是正面还是负面。
- 说话人识别:判断语音是谁说的。
- 分子性质预测:如亲水性。
3. 类型3:序列到序列(Seq2Seq)
- 输入长度 N,输出长度 N′(由模型决定)。
- 应用示例:
- 机器翻译
- 语音识别(ASR)
本章重点讲解类型1,因其最能体现自注意力的核心思想。
三、自注意力机制原理
核心思想
让每个位置的输出都“看到”整个输入序列,并根据相关性加权聚合信息。
运作流程(以生成 b₁ 为例)
-
Query-Key-Value(QKV)映射
对每个输入向量 ( a_i ):- ( q_i = W_q a_i ) (查询 Query)
- ( k_i = W_k a_i ) (键 Key)
- ( v_i = W_v a_i ) (值 Value)
-
计算注意力分数(Attention Scores)
用点积衡量相关性: -
Softmax 归一化
注:Softmax 非必需,ReLU 等也可尝试。
-
加权求和得到输出
矩阵视角(高效实现)
- 输入矩阵 ( I = [a_1, a_2, ..., a_n] )
- 计算:
- ( Q = I W_q ), ( K = I W_k ), ( V = I W_v )
- 注意力矩阵:( A = Q K^\top )
- 归一化:
- 输出:( O = A' V )
✅ 可学习参数仅三个矩阵:( W_q, W_k, W_v )
四、多头自注意力(Multi-Head Self-Attention)
动机
单一注意力头可能只能捕捉一种相关性(如语法关系),但语言中存在多种关系(语义、指代、时序等)。
实现
- 将 Q、K、V 分别投影到多个“头”:
(第 h 个头)
- 每个头独立计算注意力 → 得到
- 拼接所有头的输出并线性变换:
🌟 Transformer 默认使用 8 或 16 个头。
五、位置编码(Positional Encoding)
问题
自注意力本身不具备顺序感知能力——交换输入顺序,输出不变。
解决方案
- 为每个位置 ( i ) 添加位置向量 ( e_i ):
经典方法(Transformer 原始设计)
使用正弦/余弦函数生成:
🔍 位置编码也可学习(如 ALiBi、RoPE 等新方法)。
六、截断自注意力(Truncated Self-Attention)
背景
语音等任务中序列极长(如 1 秒 = 100 帧),标准自注意力复杂度 ( O(L^2) ) 难以承受。
改进
- 限制注意力范围:只计算局部窗口内的注意力(如前后 50 帧)。
- 降低计算量和内存占用,适合实时系统。
七、与其他模型对比
1. vs 卷积神经网络(CNN)
| 特性 | CNN | 自注意力 |
|---|---|---|
| 感受野 | 固定(人工设定) | 动态(数据驱动) |
| 全局依赖 | 弱(需堆叠多层) | 强(单层即可) |
| 数据效率 | 高(适合小数据) | 低(需大数据防过拟合) |
📌 CNN 是自注意力的特例(当注意力只关注局部且权重共享时)。
2. vs 循环神经网络(RNN)
| 特性 | RNN | 自注意力 |
|---|---|---|
| 并行性 | ❌ 串行计算 | ✅ 完全并行 |
| 长程依赖 | 易遗忘(梯度消失) | 直接建模(“天涯若比邻”) |
| 双向处理 | 需 Bi-RNN | 天然双向 |
💡 现代架构(如 Conformer)常结合 CNN + 自注意力,兼顾局部与全局。
当然可以!以下是将你提供的关于 MAE 与多头自注意力结合 的内容,以“思考章节”的形式,自然融入前文学习笔记后的完整版本。新增部分位于“八、应用场景扩展”之后、“九、总结与思考”之前,标题为:
八、思考:掩码自编码器(MAE)中的多头自注意力实现
在理解了多头自注意力的基本原理后,我们不妨深入一个前沿应用——掩码自编码器(Masked Autoencoders, MAE),来具体看看 MHSA 是如何在实际模型中高效运作的。
MAE 的核心思想回顾
MAE 是一种高效的视觉自监督学习方法,其流程简洁而强大:
- 高比例掩码:将图像划分为若干 patch 后,随机遮盖掉高达 75% 的 patch。
- 编码器仅处理可见 patch:这是 MAE 高效的关键——编码器“看不见”被遮盖的部分,只对剩余 25% 的可见 token 进行编码。
- 解码器重建全图:将编码结果与可学习的 mask tokens 拼接,由轻量级解码器尝试重建原始像素。
这种设计不仅大幅降低计算开销,还迫使模型学习更强的上下文推理能力。
多头自注意力在 MAE 编码器中的具体实现
MAE 的编码器本质上是一个 Vision Transformer(ViT),其核心正是多头自注意力机制。但与标准 ViT 不同,MHSA 在 MAE 中作用于一个被“压缩”的输入序列上。
1. 输入准备:稀疏但有序的 token 序列
- 假设原图有 (N) 个 patch,掩码后仅剩 (M = N/4) 个可见 patch。
- 每个可见 patch 经线性嵌入并加上对应的位置编码,形成输入序列 (z_{\text{input}} \in \mathbb{R}^{M \times D})。
- 关键点:该序列长度仅为原长的 1/4,且保留了空间位置信息。
2. 多头自注意力的执行流程(完全标准)
尽管输入变短,但 MHSA 的内部计算逻辑不变:
- QKV 投影:
- 多头拆分:将 Q、K、V 拆分为 (h) 个头,每头维度 (d = D/h)
- 并行注意力计算(对每个头 (i)):
此处的注意力矩阵大小为 (M \times M),远小于标准 ViT 的 (N \times N)。
- 头合并与输出投影:拼接所有头并乘以 (W_O),得到最终输出。
3. MAE 中 MHSA 的独特优势
| 特性 | 说明 |
|---|---|
| 计算高效 | 复杂度从 (O(N^2)) 降至 |
| 上下文推理挑战 | 每个可见 token 只能与其他可见 token 交互,必须通过稀疏线索推断全局结构,从而学到更鲁棒的表征。 |
| 位置编码不可或缺 | 由于输入是无序集合,位置编码为 MHSA 提供了空间拓扑信息,对重建至关重要。 |
启示:模块不变,范式革新
值得注意的是,MAE 并未修改 MHSA 的内部结构,而是通过改变其输入方式(高比例掩码 + 仅编码可见部分),创造出一种强大的自监督学习范式。这体现了深度学习中一个深刻思想:
优秀的架构(如 MHSA)具有极强的通用性,而创新往往来自于如何巧妙地使用它,而非一味地修改它。
多头自注意力在此扮演了“上下文推理引擎”的角色:多个注意力头从不同语义角度(如局部纹理、全局布局、边缘连续性等)协同工作,使得模型能够仅凭 25% 的碎片信息,“脑补”出完整的视觉世界。这种能力正是 MAE 能在下游任务中取得优异性能的根本原因。
九、总结
- 自注意力优势:灵活建模长程依赖、完全并行、统一架构。
- 挑战:计算复杂度高、小数据易过拟合、位置信息需额外处理。
📘 正如《Attention Is All You Need》所启示:注意力机制,或许真是AI理解世界的关键火种。
更多推荐
所有评论(0)