在深入讨论之前,让我们先回顾softmax函数的基本形式:
softmax ( x ) i = e x i ∑ j = 1 n e x j \text{softmax}(x)_i = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}} softmax(x)i=∑j=1nexjexi
这个函数将任意实数向量转换为总和为1的概率分布,广泛应用于分类任务、注意力权重计算和生成模型的输出层。然而,softmax有一个关键特性:它对输入值的微小差异极为敏感,容易产生高度会合的分布。
这种敏感性在某些场景下是抱负的(如需要明白决议的分类),但在其他场景下大概成为停滞(如需要多样性的文本生成或需要软性关注的注意力机制)。这就是"平滑控制"发挥作用的地方。
温度调节:控制生成的随机性
温度参数的数学表示
在语言模型(如GPT系列)中,softmax通常经过温度参数 T T T 的调解:
softmax ( x / T ) i = e x i / T ∑ j = 1 n e x j / T \text{softmax}(x/T)_i = \frac{e^{x_i/T}}{\sum_{j=1}^{n} e^{x_j/T}} softmax(x/T)i=∑j=1nexj/Texi/T
温度参数的效果可以直观理解为控制概率分布的"锐利程度":
在2017年的开创性论文《Attention Is All You Need》中,注意力计算包罗一个关键的缩放操作:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
这里的缩放因子 d k \sqrt{d_k} dk 与温度参数在数学上扮演着相似脚色,但其存在却有着更深层次的动机。
缩放因子的统计必要性
为什么要除以 d k \sqrt{d_k} dk 而非其他值?这涉及到点积操作的统计特性与方差加法定理:
当两个向量 q \mathbf{q} q 和 k \mathbf{k} k 的元素是独立同分布的随机变量(均值为0,方差为1)时:
点积的方差分析:
每个点积 ( Q K T ) i j = ∑ l = 1 d k q i l ⋅ k j l (QK^T)_{ij} = \sum_{l=1}^{d_k} q_{il} \cdot k_{jl} (QKT)ij=∑l=1dkqil⋅kjl 是 d k d_k dk 个元素乘积的和
当 q i l q_{il} qil 和 k j l k_{jl} kjl 相互独立且各自方差为1时,其乘积 q i l ⋅ k j l q_{il} \cdot k_{jl} qil⋅kjl 的方差也为1
只管上下文差别,温度参数和注意力缩放因子本质上执行相同的数学操作:控制softmax的输入分布。两者都可以表示为:
softmax ( x / τ ) \text{softmax}(x/\tau) softmax(x/τ)
区别在于:
温度参数 τ = T \tau = T τ=T 通常是人为设定的超参数
注意力缩放 τ = d k \tau = \sqrt{d_k} τ=dk 是基于统计理论自动确定的
为什么注意力缩放使用 d k \sqrt{d_k} dk 而非其他值
许多人大概会问,为什么倒霉用 d k d_k dk 自己或 d k / 2 d_k/2 dk/2 作为缩放因子?答案在于统计规范化的尺度实践:
除以尺度差( d k \sqrt{d_k} dk )是将随机变量尺度化到单元方差的正确方法
除以 d k d_k dk 会过度压缩分布,使注意力几乎均匀分布
除以 d k / 2 d_k/2 dk/2 或其他任意值缺乏理论基础,且不会随维度自顺应调解
实行证实, d k \sqrt{d_k} dk 提供了最佳平衡:既防止了梯度消散,又保存了富足的选择性。
参考《Attention is all you need 》 原文(Section 3.2.1, Footnote 4):
作者在脚注 4 中提供的数学解释:
假设 query ( q q q) 和 key ( k k k) 的每个分量都是独立的随机变量,均值为 0,方差为 1。
那么,它们的点积 q ⋅ k = ∑ i = 1 d k q i k i q \cdot k = \sum_{i=1}^{d_k} q_i k_i q⋅k=∑i=1dkqiki 的均值为 0,方差为 d k d_k dk。
因此,随着 d k d_k dk 的增大,点积的方差也会增大,导致点积的数值范围变大。
除以 d k \sqrt{d_k} dk 可以将点积的方差重新调解为 1,避免数值过大。
实行支持:
作者在文中提到,他们做了对比实行,发现不消缩放因子的点乘注意力机制,在dk值大的时候,效果差于带缩放因子的点乘注意力机制。
在论文的 3.2.1 节中,有提到 “While for small values of dk the two mechanisms perform similarly, additive attention outperforms dot product attention without scaling for larger values of dk [3].”, 这里的[3]是另外一篇论文《Massive Exploration of Neural Machine Translation Architectures》,做了实行对比。
总结:
作者引入 1 d k \frac{1}{\sqrt{d_k}} dk 1 缩放因子的主要目标是为了防止 d k d_k dk 较大时点积结果过大,导致 softmax 函数进入梯度饱和区。他们通过假设 query 和 key 的分量是独立的随机变量,推导出点积的方差会随着 d k d_k dk 线性增长,因此需要举行缩放来保持数值稳固。固然没有直接在本篇论文中举行实行对比,但是引用了其他论文的实行结果来支持。
现实应用中的计划考量
在差别规模的Transformer模型中,缩放因子始终保持 d k \sqrt{d_k} dk 形式,但详细值随模型变化:
模型注意力维度 d k d_k dk缩放因子 d k \sqrt{d_k} dk BERT-base648GPT-2648GPT-364-1288-11.3GPT-4 (估计)128-25611.3-16超大模型1024+32+ 这种随维度自动调解的机制确保了模型在规模扩展时保持精良的注意力动态。
超越基础:高级平滑技术