60 秒回答模板

Self-attention 中,输入经过线性变换得到 Q、K、V,注意力输出一般写作 softmax(QK^T / sqrt(dk))V,其中 dk 是 key/query 的维度。QK^T 表示每个 query 和各个 key 的相似度,softmax 把相似度转成权重,再对 V 做加权求和。除以 sqrt(dk) 的原因是点积由 dk 个分量相加,如果分量近似独立且方差相近,点积方差会随 dk 增大而增大。logits 过大时 softmax 会变得很尖锐,进入饱和区,梯度变小,所以用 sqrt(dk) 缩放来稳定数值和训练。

考点 标准公式
难度 算法岗真实面经题
回答目标 讲清原理、边界和追问

深入解析

01

公式含义

Self-attention 的核心公式是 Attention(Q,K,V)=softmax(QK^T/sqrt(dk))V。Q 表示查询,K 表示键,V 表示值。因为是 self-attention,Q、K、V 都来自同一个序列的表示,只是通过不同线性投影得到,用来建模序列内部 token 之间的依赖关系。

02

QK 点积的作用

QK^T 中的每个元素表示一个 query token 与一个 key token 的匹配程度。匹配分数越高,softmax 后的权重通常越大,对应的 value 对当前位置输出贡献越大。这样每个 token 的新表示都可以聚合其他 token 的信息,而不是只依赖局部邻域。

03

为什么要缩放

假设 Q 和 K 的各维分量均值为 0、方差为 1,点积会累加 dk 个随机项,其方差大约与 dk 成正比,标准差约为 sqrt(dk)。当 dk 较大时,未缩放的 attention logits 会变得很大,softmax 输出容易极端化,训练信号变差。

04

softmax 饱和问题

softmax 对输入尺度很敏感。如果某些 logits 远大于其他位置,输出会接近 one-hot。此时模型过早把注意力集中到少数位置,其他位置梯度很小,不利于稳定学习。缩放不是改变注意力机制本质,而是让 logits 保持在更合适的数值范围。

05

与多头注意力的关系

多头注意力会把整体 hidden size 切分到多个 head,每个 head 有自己的 dk。每个 head 内仍然使用 sqrt(dk) 进行缩放。这样不同 head 可以在稳定数值尺度下学习不同关系,例如语法依赖、长程引用或局部上下文模式。

06

与其他相似度的区别

缩放点积注意力可以看作对 dot-product attention 的数值校准。没有缩放时,大维度点积的幅度更容易失控;使用加性注意力时,分数由小网络计算,尺度问题表现不同。Transformer 采用缩放点积注意力,兼顾并行效率和训练稳定性。

易错点

  • 只背公式,不解释 Q、K、V 和 dk 的含义。
  • 把除以 sqrt(dk) 说成为了降低计算量,实际主要是数值尺度和梯度稳定。
  • 认为缩放会改变注意力可见范围,实际上它只调整分数尺度。
  • 忽略 softmax 饱和,无法说明维度变大时为什么训练会受影响。

面试官追问

为什么是除以 sqrt(dk),不是 dk?

因为点积方差约随 dk 增大,标准差约随 sqrt(dk) 增大。缩放目标是把标准差拉回稳定范围,因此使用 sqrt(dk) 更符合方差分析。

不除以 sqrt(dk) 会完全不能训练吗?

不一定完全不能训练,但在 dk 较大时更容易出现 logits 过大、softmax 过尖、梯度不稳定等问题。缩放是提高训练稳定性和收敛质量的重要设计。

self-attention 和 cross-attention 的公式有什么区别?

公式形式基本相同。区别在于 self-attention 的 Q、K、V 来自同一序列,而 cross-attention 通常 Q 来自目标序列,K 和 V 来自另一个序列或编码器输出。

softmax 后再乘 V 的直觉是什么?

softmax 得到的是当前位置对各个位置的关注权重,乘 V 相当于按这些权重聚合信息,得到融合上下文后的表示。