将《设计人工智能:基础与应用》拆分为 38 个 Markdown 文件, 按 11 个部分(上篇6部分+下篇5部分)+ 3 个附录组织。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3.5 KiB
学习目标
理解Self-Attention的动机和原理
掌握Q、K、V的计算过程
了解Multi-Head Attention的优势
为什么需要Attention
序列标注问题
输入序列:``x₁, x₂, ..., xₙ (N``个元素``)
输出序列:``y₁, y₂, ..., yₙ' (N'``个元素``)
传统方法 (RNN/FCN): - 固定窗口大小 - 长距离依赖丢失 - 难以并行计算
Self-Attention: - 每个元素都能关注所有元素 - 直接建模任意距离依赖 - 可以并行计算
Self-Attention原理
核心思想
为每个输出元素,计算输入序列中所有元素的相关性:
对于每个位置``i``:
yᵢ = Σ (``注意力权重`` × ``对应输入值``)
Q、K、V计算
输入``X → ``三个线性变换
↓
Q (Query): "``我想找什么``"
K (Key): "``我有什么标签``"
V (Value): "``我的实际内容``"
注意力分数计算
1. ``计算相似度:``Score = Q × Kᵀ
2. ``缩放:``Score = Score / √dₖ
3. ``Softmax``:``Weight = ``softmax``(Score)
4. ``加权求和:``Output = Weight × V
直观理解
查询:``"``苹果``"
↓
与所有``Key``计算相似度
↓
权重高的``Key``对应``Value``贡献更大
↓
输出:融合上下文的``"``苹果``"``表示
Multi-Head Attention
单头 vs 多头
单头注意力:
一组``Q``、``K``、``V → ``一个注意力表示
多头注意力:
多组``Q``、``K``、``V → ``多个注意力表示`` → ``拼接
多头优势
头 关注内容
Head 1 语法关系
Head 2 语义指代
Head 3 长距离依赖
... ...
多头让模型从不同角度理解序列。
Positional Encoding
问题
Self-Attention本身是置换不变的:
Attention(``[A, B, C]) = Attention([B, A, C])
但序列位置很重要!
解决方案
添加位置信息:
输入`` = X + ``PositionalEncoding
常用方法: - 正弦/余弦位置编码 - 可学习位置编码
Self-Attention vs CNN
感受野对比
层级 CNN Self-Attention
单层 局部感受野 全局感受野
深层 逐层扩大 始终全局
计算复杂度
操作 CNN Self-Attention
复杂度 O(k²·C) O(n²·d)
n 图像尺寸 序列长度
k 卷积核大小 -
思考与练习
1.为什么Attention需要Scaling (除以√dₖ)?
2.Multi-Head Attention中,头数越多越好吗?
3.Self-Attention如何应用在图像上?
关键术语
中文 英文 说明
查询 Query 查询向量
键 Key 键向量
值 Value 值向量
缩放点积 Scaled Dot-Product 注意力计算方式
掩码 Mask 屏蔽某些位置的注意力
延伸阅读
The Illustrated Transformer # 03.2 Transformer架构