我们有一些已知的身高(作为键 K K K)和对应的体重(作为值 V V V)。现在,我们想使用一种基于注意力机制的方法来“查询”一个特定身高(比如 170cm)对应的体重。虽然这通常不是注意力机制的典型应用,但我们可以构造一个类似的计算过程。
计算公式
-
定义键和值:
- 键矩阵 K K K:包含已知的身高值,形状为 [ n , 1 ] [n, 1] [n,1],其中 n n n 是已知数据点的数量。
- 值矩阵 V V V:包含与键对应的体重值,形状为 [ n , 1 ] [n, 1] [n,1]。
-
定义查询向量:
- 查询向量 Q Q Q:包含要查询的身高值(170cm),形状为 [ 1 , 1 ] [1, 1] [1,1]。
-
计算相似度:
- 在这个例子中,我们可以使用身高的差的负数作为相似度的度量。对于每个键 K i K_i Ki,计算相似度 s i s_i si:
s i = − ( ∣ Q − K i ∣ ) s_i = -( |Q - K_i| ) si=−(∣Q−Ki∣)
或者,为了保持数值稳定性,我们可以使用:
s i = − α ⋅ ( Q − K i ) 2 s_i = -\alpha \cdot (Q - K_i)^2 si=−α⋅(Q−Ki)2
其中 α \alpha α 是一个缩放因子(比如 α = 0.01 \alpha = 0.01 α=0.01),用于调整相似度的敏感度。
- 在这个例子中,我们可以使用身高的差的负数作为相似度的度量。对于每个键 K i K_i Ki,计算相似度 s i s_i si:
-
应用 softmax 函数:
- 对相似度向量 s s s 应用 softmax 函数,得到注意力权重 a a a:
a i = e s i ∑ j e s j a_i = \frac{e^{s_i}}{\sum_j e^{s_j}} ai=∑jesjesi
- 对相似度向量 s s s 应用 softmax 函数,得到注意力权重 a a a:
-
计算加权求和:
- 使用注意力权重 a a a 对值向量 V V V 进行加权求和,得到预测的体重:
体重 = ∑ i a i V i \text{体重} = \sum_i a_i V_i 体重=∑iaiVi
- 使用注意力权重 a a a 对值向量 V V V 进行加权求和,得到预测的体重:
具体计算(以差的负数为例)
假设我们有以下数据:
- K = [ 160 165 175 180 ] K = \begin{bmatrix} 160 \\ 165 \\ 175 \\ 180 \end{bmatrix} K= 160165175180
- V = [ 50 55 65 70 ] V = \begin{bmatrix} 50 \\ 55 \\ 65 \\ 70 \end{bmatrix} V= 50556570
- Q = [ 170 ] Q = \begin{bmatrix} 170 \end{bmatrix} Q=[170]
-
计算相似度:
- s 1 = − ( ∣ 170 − 160 ∣ ) = − 10 s_1 = -( |170 - 160| ) = -10 s1=−(∣170−160∣)=−10
- s 2 = − ( ∣ 170 − 165 ∣ ) = − 5 s_2 = -( |170 - 165| ) = -5 s2=−(∣170−165∣)=−5
- s 3 = − ( ∣ 170 − 175 ∣ ) = − 5 s_3 = -( |170 - 175| ) = -5 s3=−(∣170−175∣)=−5
- s 4 = − ( ∣ 170 − 180 ∣ ) = − 10 s_4 = -( |170 - 180| ) = -10 s4=−(∣170−180∣)=−10
-
应用 softmax 函数:
- 首先计算指数:
e s 1 = e − 10 ≈ 0.000045 e^{s_1} = e^{-10} \approx 0.000045 es1=e−10≈0.000045
e s 2 = e − 5 ≈ 0.006738 e^{s_2} = e^{-5} \approx 0.006738 es2=e−5≈0.006738
e s 3 = e − 5 ≈ 0.006738 e^{s_3} = e^{-5} \approx 0.006738 es3=e−5≈0.006738
e s 4 = e − 10 ≈ 0.000045 e^{s_4} = e^{-10} \approx 0.000045 es4=e−10≈0.000045 - 然后计算总和:
∑ j e s j ≈ 0.013566 \sum_j e^{s_j} \approx 0.013566 ∑jesj≈0.013566 - 最后计算权重:
a 1 ≈ 0.000045 0.013566 ≈ 0.0033 a_1 \approx \frac{0.000045}{0.013566} \approx 0.0033 a1≈0.0135660.000045≈0.0033
a 2 ≈ 0.006738 0.013566 ≈ 0.4967 a_2 \approx \frac{0.006738}{0.013566} \approx 0.4967 a2≈0.0135660.006738≈0.4967
a 3 ≈ 0.006738 0.013566 ≈ 0.4967 a_3 \approx \frac{0.006738}{0.013566} \approx 0.4967 a3≈0.0135660.006738≈0.4967
a 4 ≈ 0.000045 0.013566 ≈ 0.0033 a_4 \approx \frac{0.000045}{0.013566} \approx 0.0033 a4≈0.0135660.000045≈0.0033
- 首先计算指数:
-
计算加权求和:
- 体重 = a 1 × 50 + a 2 × 55 + a 3 × 65 + a 4 × 70 \text{体重} = a_1 \times 50 + a_2 \times 55 + a_3 \times 65 + a_4 \times 70 体重=a1×50+a2×55+a3×65+a4×70
- 体重 ≈ 0.0033 × 50 + 0.4967 × 55 + 0.4967 × 65 + 0.0033 × 70 \text{体重} \approx 0.0033 \times 50 + 0.4967 \times 55 + 0.4967 \times 65 + 0.0033 \times 70 体重≈0.0033×50+0.4967×55+0.4967×65+0.0033×70
- 体重 ≈ 0.165 + 27.3185 + 32.2855 + 0.231 \text{体重} \approx 0.165 + 27.3185 + 32.2855 + 0.231 体重≈0.165+27.3185+32.2855+0.231
- 体重 ≈ 60 \text{体重} \approx 60 体重≈60
结论
对于查询身高 170cm,使用上述基于注意力机制的方法预测的体重约为 60kg。这个结果是通过计算查询身高与每个已知身高的相似度,然后应用 softmax 函数得到注意力权重,最后对已知体重进行加权求和得到的。