查询向量 (Q Q Q ) 和键向量 (K K K ) 之间的缩放点积分数计算会产生一个原始对齐分数矩阵。此计算结果为 Q K T d k \frac{QK^T}{\sqrt{d_k}} d k Q K T 。尽管这些分数反映了查询和键向量之间的匹配程度,但它们未经归一化处理,值域可以是任意范围,这使得它们难以直接被视为贡献权重。
为了将这些原始分数转换为一组可用的、表示注意力分布的权重,我们对分数矩阵的每一行独立应用softmax函数。对于特定的查询 q i q_i q i (对应 Q Q Q 的第 i i i 行),它与键 k j k_j k j (对应 K T K^T K T 的第 j j j 列) 对齐的原始分数记作 s i j = q i k j T d k s_{ij} = \frac{q_i k_j^T}{\sqrt{d_k}} s ij = d k q i k j T 。softmax函数将查询 q i q_i q i 与所有 N N N 个键的分数向量 s i = [ s i 1 , s i 2 , . . . , s i N ] s_i = [s_{i1}, s_{i2}, ..., s_{iN}] s i = [ s i 1 , s i 2 , ... , s i N ] 转换为注意力权重向量 α i = [ α i 1 , α i 2 , . . . , α i N ] \alpha_i = [\alpha_{i1}, \alpha_{i2}, ..., \alpha_{iN}] α i = [ α i 1 , α i 2 , ... , α i N ] ,其中每个权重 α i j \alpha_{ij} α ij 的计算方式如下:
α i j = softmax ( s i j ) = exp ( s i j ) ∑ l = 1 N exp ( s i l ) \alpha_{ij} = \text{softmax}(s_{ij}) = \frac{\exp(s_{ij})}{\sum_{l=1}^{N} \exp(s_{il})} α ij = softmax ( s ij ) = ∑ l = 1 N exp ( s i l ) exp ( s ij )
这里,N N N 代表键/值对的序列长度。
特性和解释
应用softmax函数会为得到的注意力权重 α i j \alpha_{ij} α ij 带来几个重要特性:
归一化: 分母 ∑ l = 1 N exp ( s i l ) \sum_{l=1}^{N} \exp(s_{il}) ∑ l = 1 N exp ( s i l ) 保证了给定查询 q i q_i q i 在所有键上的注意力权重总和为1。即 ∑ j = 1 N α i j = 1 \sum_{j=1}^{N} \alpha_{ij} = 1 ∑ j = 1 N α ij = 1 。这使得我们可以将这些权重理解为概率分布。
非负性: 由于指数函数 exp ( x ) \exp(x) exp ( x ) 对于任何实数输入 x x x 总是正数,每个单独的注意力权重 α i j \alpha_{ij} α ij 都保证是正数。
概率解释: 对于查询 q i q_i q i 的权重集合 { α i 1 , α i 2 , . . . , α i N } \{\alpha_{i1}, \alpha_{i2}, ..., \alpha_{iN}\} { α i 1 , α i 2 , ... , α i N } 代表了在输入序列上的注意力概率分布。权重 α i j \alpha_{ij} α ij 表示模型在计算第 i i i 个位置的输出表示时,分配给第 j j j 个输入元素 (由其值向量 v j v_j v j 代表) 的注意力比例。
突出重要性: 指数函数本质上会放大更大的分数,使其比小分数更为突出。如果分数 s i k s_{ik} s ik 在行 s i s_i s i 中明显大于其他分数,其对应的权重 α i k \alpha_{ik} α ik 将接近1,而其他权重将接近0。这种机制使得模型能够有效地关注通过点积评分确定的最相关输入元素。
在计算最终输出中的作用
这些计算出的注意力权重 α i j \alpha_{ij} α ij 是用于计算值向量 (V V V ) 加权和的系数。注意力机制对第 i i i 个查询的输出,是通过将注意力权重分布 α i \alpha_i α i 与值矩阵 V V V 相乘而获得的:
输出 i = ∑ j = 1 N α i j v j \text{输出}_i = \sum_{j=1}^{N} \alpha_{ij} v_j 输出 i = j = 1 ∑ N α ij v j
在矩阵表示中,这直接对应于缩放点积注意力公式的最后一步:
注意力 ( Q , K , V ) = A V = softmax ( Q K T d k ) V \text{注意力}(Q, K, V) = A V = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V 注意力 ( Q , K , V ) = A V = softmax ( d k Q K T ) V
其中 A A A 是注意力权重矩阵,其元素为 A i j = α i j A_{ij} = \alpha_{ij} A ij = α ij 。因此,softmax函数在将原始相似性分数转换为归一化分布方面起着重要作用,该分布决定了如何聚合来自输入序列不同部分 (由值向量表示) 的信息以形成输出。
可视化示例
考虑一个简化的例子,单个查询有4个原始对齐分数:s = [ 1.0 , 0.5 , 2.5 , − 0.1 ] s = [1.0, 0.5, 2.5, -0.1] s = [ 1.0 , 0.5 , 2.5 , − 0.1 ] 。应用softmax函数会转换这些分数:
exp ( 1.0 ) ≈ 2.718 \exp(1.0) \approx 2.718 exp ( 1.0 ) ≈ 2.718
exp ( 0.5 ) ≈ 1.649 \exp(0.5) \approx 1.649 exp ( 0.5 ) ≈ 1.649
exp ( 2.5 ) ≈ 12.182 \exp(2.5) \approx 12.182 exp ( 2.5 ) ≈ 12.182
exp ( − 0.1 ) ≈ 0.905 \exp(-0.1) \approx 0.905 exp ( − 0.1 ) ≈ 0.905
指数之和为 2.718 + 1.649 + 12.182 + 0.905 = 17.454 2.718 + 1.649 + 12.182 + 0.905 = 17.454 2.718 + 1.649 + 12.182 + 0.905 = 17.454 。
得到的softmax权重是:
α 1 = 2.718 / 17.454 ≈ 0.156 \alpha_1 = 2.718 / 17.454 \approx 0.156 α 1 = 2.718/17.454 ≈ 0.156
α 2 = 1.649 / 17.454 ≈ 0.094 \alpha_2 = 1.649 / 17.454 \approx 0.094 α 2 = 1.649/17.454 ≈ 0.094
α 3 = 12.182 / 17.454 ≈ 0.698 \alpha_3 = 12.182 / 17.454 \approx 0.698 α 3 = 12.182/17.454 ≈ 0.698
α 4 = 0.905 / 17.454 ≈ 0.052 \alpha_4 = 0.905 / 17.454 \approx 0.052 α 4 = 0.905/17.454 ≈ 0.052
请注意,最高的原始分数 (2.5) 对应着主导的注意力权重 (0.698),在此示例中,有效地将注意力机制集中在第三个输入元素上。这些权重之和约为1 (0.156 + 0.094 + 0.698 + 0.052 = 1.000 0.156 + 0.094 + 0.698 + 0.052 = 1.000 0.156 + 0.094 + 0.698 + 0.052 = 1.000 )。
单个查询的原始对齐分数与应用softmax函数后得到的注意力权重的对比。Softmax将分数转换为概率分布,突出显示最相关的位置。
总之,softmax函数在注意力机制中是一个重要的归一化步骤。它将原始对齐分数转换为概率分布,使得模型能够基于查询-键相似性,选择性地加权并组合来自值向量的信息,为Transformer如何处理序列信息奠定基础。