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

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

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.41]≈[0.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~=8[6,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.1171]≈[0.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.4142[1.46, 1.71, 0.38]≈[1.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}) 保证数值稳定,避免梯度消失,让注意力真正可学习

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

相关推荐
泰恒2 小时前
学习神经网络
人工智能·深度学习·机器学习
Spey_Events2 小时前
首发定档!2026中国航空维修制造及航材供应链展览会将于10 月在上海举办!
人工智能·制造
DeepModel3 小时前
机器学习非线性降维:局部线性嵌入 LLE
人工智能·机器学习
lUie INGA3 小时前
rust web框架actix和axum比较
前端·人工智能·rust
新缸中之脑3 小时前
HDRI-Generator: 环境贴图生成AI
人工智能·贴图
网安情报局3 小时前
企业押注Agentic SOC:AI重塑安全运营新范式
人工智能·网络安全
夜幕下的ACM之路3 小时前
一、基础知识学习(Transformer + 上下文窗口 + Token 计算 + Embedding 向量)
人工智能·学习·transformer·embedding
东离与糖宝3 小时前
LangChain4j vs Spring AI:最新对比,Java企业级Agent开发
java·人工智能