深度学习的数学原理(二十五):缩放点积注意力

一、引言:注意力到底在做什么?

Transformer 的核心是自注意力机制 ,它的本质可以用一句话概括:
在生成当前 token 时,对序列里每一个词计算"相关程度",按重要性加权融合信息,从而决定模型该"关注"什么、输出什么。

整个过程可以理解为:

  1. 对每个词生成三个向量:查询 Q(我要找什么)、键 K(我是什么)、值 V(我包含什么信息)
  2. 用 Q 和所有 K 做匹配,得到注意力分数------分数越高,越需要关注
  3. 对分数做缩放与归一化,得到注意力权重
  4. 使用权重对 V 加权求和,得到融合后的语义向量
  5. 用这个语义向量预测下一个 token

这就是注意力"决定该关注什么"的完整逻辑。


二、缩放点积注意力:公式与完整数学推导

2.1 核心公式

Attention ( Q , K , V ) = s o f t m a x ( Q K ⊤ d k ) V \text{Attention}(Q,K,V) = \mathrm{softmax}\left( \frac{Q K^\top}{\sqrt{d_k}} \right) V Attention(Q,K,V)=softmax(dk QK⊤)V

2.2 符号说明

  • Q ∈ R L × d k Q \in \mathbb{R}^{L \times d_k} Q∈RL×dk:查询矩阵, L L L 为序列长度
  • K ∈ R L × d k K \in \mathbb{R}^{L \times d_k} K∈RL×dk:键矩阵
  • V ∈ R L × d v V \in \mathbb{R}^{L \times d_v} V∈RL×dv:值矩阵
  • d k d_k dk:Q、K 向量的维度
  • d k \sqrt{d_k} dk :缩放因子,保证训练稳定
  • 输出 O ∈ R L × d v O \in \mathbb{R}^{L \times d_v} O∈RL×dv:融合全局信息的语义向量

2.3 分步数学推导

步骤1:计算相似度分数

S = Q K ⊤ S = Q K^\top S=QK⊤
S i j S_{ij} Sij 表示第 i i i 个位置对第 j j j 个词的原始相关性打分 ,由向量点积实现:
S i j = q i ⋅ k j = ∑ t = 1 d k q i , t k j , t S_{ij}=q_i \cdot k_j = \sum_{t=1}^{d_k} q_{i,t} k_{j,t} Sij=qi⋅kj=t=1∑dkqi,tkj,t

点积越大,语义越相关,模型越应该关注这个词。

步骤2:缩放

S ~ = S d k \tilde{S} = \frac{S}{\sqrt{d_k}} S~=dk S

目的:稳定点积数值,避免 Softmax 饱和、梯度消失。

步骤3:Softmax 归一化

α i j = exp ⁡ ( S ~ i j ) ∑ l = 1 L exp ⁡ ( S ~ i l ) \alpha_{ij} = \frac{\exp(\tilde{S}{ij})}{\sum{l=1}^{L} \exp(\tilde{S}_{il})} αij=∑l=1Lexp(S~il)exp(S~ij)

将分数转为 0~1 之间的权重,且每行和为 1,α i j \alpha_{ij} αij 就是第 i i i 位对第 j j j位的注意力权重

步骤4:加权求和得到输出

o i = ∑ j = 1 L α i j v j o_i = \sum_{j=1}^{L} \alpha_{ij} v_j oi=j=1∑Lαijvj

输出向量 o i o_i oi 是所有词信息按权重融合的结果,直接用于后续预测下一个 token。


三、缩放因子 d k \sqrt{d_k} dk 的作用

3.1 数学根源

假设 Q、K 中元素独立同分布,均值 0、方差 1,则点积的方差为:
V a r ( q ⋅ k ) = d k \mathrm{Var}(q\cdot k) = d_k Var(q⋅k)=dk
维度 d k d_k dk 越大,点积数值越大,Softmax 越容易进入饱和区,导致梯度几乎为 0,模型无法学习。

3.2 实例对比( d k = 64 , d k = 8 d_k=64,\sqrt{d_k}=8 dk=64,dk =8)

设原始注意力分数:(S = 6, 0, 0)

情况A:不使用缩放因子

S ~ = 6 , 0 , 0 \tilde{S} = 6,0,0 S~=6,0,0
exp ⁡ ( 6 ) ≈ 403.4 , exp ⁡ ( 0 ) = 1 , exp ⁡ ( 0 ) = 1 \exp(6)\approx403.4,\quad \exp(0)=1,\quad \exp(0)=1 exp(6)≈403.4,exp(0)=1,exp(0)=1
α ≈ 403.4 405.4 , 1 405.4 , 1 405.4 0.995 , 0.0025 , 0.0025 \alpha \approx \left\\frac{403.4}{405.4},\\frac{1}{405.4},\\frac{1}{405.4}\\right \approx 0.995, 0.0025, 0.0025 α≈405.4403.4,405.41,405.410.995,0.0025,0.0025

  • 权重极度极端,几乎只关注第一个词
  • 梯度极小,接近消失
  • 模型无法更新,训练崩溃
情况B:使用缩放因子

S ~ = 6 , 0 , 0 8 = 0.75 , 0 , 0 \tilde{S} = \frac{6,0,0}{8} = 0.75, 0, 0 S~=86,0,0=0.75,0,0
exp ⁡ ( 0.75 ) ≈ 2.117 , exp ⁡ ( 0 ) = 1 , exp ⁡ ( 0 ) = 1 \exp(0.75)\approx2.117,\quad \exp(0)=1,\quad \exp(0)=1 exp(0.75)≈2.117,exp(0)=1,exp(0)=1
α ≈ 2.117 4.117 , 1 4.117 , 1 4.117 0.514 , 0.243 , 0.243 \alpha \approx \left\\frac{2.117}{4.117},\\frac{1}{4.117},\\frac{1}{4.117}\\right \approx 0.514, 0.243, 0.243 α≈4.1172.117,4.1171,4.11710.514,0.243,0.243

  • 权重分布合理,保留全局信息
  • 梯度正常,模型可稳定学习

3.3 对比总结

项目 无缩放 有缩放
数值范围 大,易饱和 稳定在合理区间
权重分布 极端 One-hot 平滑合理
梯度 接近 0,无法训练 正常流动
效果 模型不收敛 稳定学习

四、完整手动实例:注意力如何打分、决定输出

我们以翻译任务:

我, 爱, 你\] → \[I, love, you\] \\text{\[我, 爱, 你\]} \\rightarrow \\text{\[I, love, you\]} \[我, 爱, 你\]→\[I, love, you

为例,完整演示从打分到输出 token 的全过程。

4.1 设定

  • 序列长度 L = 3 L=3 L=3
  • 模型维度 d k = d v = 2 d_k=d_v=2 dk=dv=2, d k ≈ 1.4142 \sqrt{d_k}\approx1.4142 dk ≈1.4142
  • 输入向量(已加词嵌入+位置编码):
    X = 0.5 1.1 1.0 1.1 1.2 − 0.2 X= \begin{bmatrix} 0.5 & 1.1 \\ 1.0 & 1.1 \\ 1.2 & -0.2 \end{bmatrix} X= 0.51.01.21.11.1−0.2
  • 简化: W Q = W K = W V = I W_Q=W_K=W_V=I WQ=WK=WV=I,即 Q = K = V = X Q=K=V=X Q=K=V=X

4.2 计算注意力分数(以第 0 位"我"为例)

查询向量: q 0 = 0.5 , 1.1 q_0 = 0.5, 1.1 q0=0.5,1.1

对"我"打分

s 00 = 0.5 × 0.5 + 1.1 × 1.1 = 0.25 + 1.21 = 1.46 s_{00}=0.5\times0.5 + 1.1\times1.1 = 0.25 + 1.21 = 1.46 s00=0.5×0.5+1.1×1.1=0.25+1.21=1.46

对"爱"打分

s 01 = 0.5 × 1.0 + 1.1 × 1.1 = 0.5 + 1.21 = 1.71 s_{01}=0.5\times1.0 + 1.1\times1.1 = 0.5 + 1.21 = 1.71 s01=0.5×1.0+1.1×1.1=0.5+1.21=1.71

对"你"打分

s 02 = 0.5 × 1.2 + 1.1 × ( − 0.2 ) = 0.6 − 0.22 = 0.38 s_{02}=0.5\times1.2 + 1.1\times(-0.2) = 0.6 - 0.22 = 0.38 s02=0.5×1.2+1.1×(−0.2)=0.6−0.22=0.38

原始分数:
s 0 = 1.46 , 1.71 , 0.38 s_0 = 1.46,\\ 1.71,\\ 0.38 s0=1.46, 1.71, 0.38

含义:"我"最关注"爱",其次是自己,最不关注"你"

4.3 缩放

s ~ 0 = 1.46 , 1.71 , 0.38 1.4142 ≈ 1.03 , 1.21 , 0.27 \tilde{s}_0 = \frac{1.46,\\ 1.71,\\ 0.38}{1.4142} \approx 1.03,\\ 1.21,\\ 0.27 s~0=1.41421.46, 1.71, 0.381.03, 1.21, 0.27

4.4 Softmax 得到注意力权重

exp ⁡ ( 1.03 ) ≈ 2.80 , exp ⁡ ( 1.21 ) ≈ 3.35 , exp ⁡ ( 0.27 ) ≈ 1.31 \exp(1.03)\approx2.80,\quad \exp(1.21)\approx3.35,\quad \exp(0.27)\approx1.31 exp(1.03)≈2.80,exp(1.21)≈3.35,exp(0.27)≈1.31
S u m = 2.80 + 3.35 + 1.31 = 7.46 \mathrm{Sum}=2.80+3.35+1.31=7.46 Sum=2.80+3.35+1.31=7.46
α 0 ≈ 0.38 , 0.45 , 0.17 \alpha_0 \approx 0.38,\\ 0.45,\\ 0.17 α0≈0.38, 0.45, 0.17

4.5 加权求和得到输出向量

o 0 = 0.38 v 0 + 0.45 v 1 + 0.17 v 2 o_0 = 0.38v_0 + 0.45v_1 + 0.17v_2 o0=0.38v0+0.45v1+0.17v2

代入:

  • v 0 = 0.5 , 1.1 v_0=0.5,1.1 v0=0.5,1.1
  • v 1 = 1.0 , 1.1 v_1=1.0,1.1 v1=1.0,1.1
  • v 2 = 1.2 , − 0.2 v_2=1.2,-0.2 v2=1.2,−0.2

计算:
o 0 ( 1 ) = 0.38 × 0.5 + 0.45 × 1.0 + 0.17 × 1.2 = 0.19 + 0.45 + 0.204 = 0.844 o_0^{(1)} = 0.38\times0.5 + 0.45\times1.0 + 0.17\times1.2 = 0.19+0.45+0.204=0.844 o0(1)=0.38×0.5+0.45×1.0+0.17×1.2=0.19+0.45+0.204=0.844
o 0 ( 2 ) = 0.38 × 1.1 + 0.45 × 1.1 + 0.17 × ( − 0.2 ) = 0.418 + 0.495 − 0.034 = 0.879 o_0^{(2)} = 0.38\times1.1 + 0.45\times1.1 + 0.17\times(-0.2) = 0.418+0.495-0.034=0.879 o0(2)=0.38×1.1+0.45×1.1+0.17×(−0.2)=0.418+0.495−0.034=0.879
o 0 ≈ 0.84 , 0.88 o_0 \approx 0.84,\\ 0.88 o0≈0.84, 0.88

4.6 如何决定下一个 token?

  1. 输出向量 o 0 o_0 o0 融合了全局语义,且明显偏向"爱"的特征
  2. 经过线性层映射到词表空间,与词嵌入计算相似度(推理过程见深度学习的数学原理(二十三)
  3. Softmax 输出概率:
    • I:~25%
    • love:~55%
    • you:~20%
  4. 模型选择概率最大的 love 作为下一个输出 token

仍然值得反复强调的是,本例只是训练中的某一轮,目的在于展示过程,因此其结果一定具有代表性。


五、总结:注意力如何决定该关注什么

  1. 打分机制:通过 Q 与 K 的点积,量化每个词与当前位置的相关性,分数即"关注程度"
  2. 权重分配:Softmax 将分数转为权重,决定每个词的信息占比
  3. 信息融合:按权重对 V 加权,得到聚焦关键信息的语义向量
  4. 输出决策:语义向量映射为词表概率,直接决定下一个 token
  5. 缩放稳定:(\sqrt{d_k}) 保证数值稳定,避免梯度消失,让注意力真正可学习

简单来说:
注意力分数决定"该看谁",权重决定"看多少",加权结果决定"输出什么"。

相关推荐
继续商行20 小时前
Go性能调优实战:从pprof火焰图到内存逃逸分析的完整优化路径
人工智能
小小测试开发1 天前
安装 Python 3.10+
开发语言·人工智能·python
KaMeidebaby1 天前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
我叫唧唧波1 天前
Python+AI 全栈学习笔记
人工智能·python·学习
哈哈,柳暗花明1 天前
人工智能专业术语详解(E)
人工智能·专业术语
AI极客菌1 天前
AI绘画工具中,为什么专业玩家爱用Stable Diffusion,普通玩家却喜欢Midjourney?
大数据·人工智能·ai·ai作画·stable diffusion·aigc·midjourney
人工智能AI技术1 天前
FLUX.2[klein]开源!小香蕉平替,本地部署AI绘画的极简方案
人工智能·ai作画·aigc
腾视科技AI1 天前
腾视科技大模型一体机解决方案:低成本私有化落地,重塑行业智能应用新格局
大数据·人工智能·科技·ai·边缘计算·算力·ai算力
pusheng20251 天前
IFSJ全英文专访:中国创新力量重塑先进气体感知技术,赋能全球关键基础设施安全
前端·网络·人工智能·物联网·安全
魔点科技1 天前
魔点门禁门常开计划解决早高峰排队、忘落锁、多门手动调模式痛点
人工智能·智能硬件·智能门禁·考勤门禁·魔点科技