Bootstrap

注意力机制的两种常用形式-----加性注意力(Additive Attention)和点积注意力(Dot-product Attention)

注意力机制的两种常用形式

注意力机制是现代自然语言处理模型(如Transformer)的核心组件。最常用的两种注意力机制是加性注意力(Additive Attention)和点积注意力(Dot-product Attention)。下面详细解释并举例说明这两种注意力机制的工作原理和区别。

1. 加性注意力(Additive Attention)

加性注意力通过一个前馈神经网络(feed-forward network)计算查询(query)和键(key)之间的相似度,具体步骤如下:

  1. 输入:查询 Q Q Q和键 K K K

  2. 计算相似度:通过一个前馈神经网络计算相似度:
    e i j = v ⊤ tanh ⁡ ( W q Q i + W k K j ) e_{ij} = \text{v}^\top \tanh(\text{W}_q Q_i + \text{W}_k K_j) eij=vtanh(WqQi+WkKj)
    其中, W q \text{W}_q Wq W k \text{W}_k Wk是可学习的权重矩阵, v \text{v} v是一个可学习的向量。

  3. 计算注意力权重:将相似度通过softmax函数进行归一化:
    α i j = exp ⁡ ( e i j ) ∑ k exp ⁡ ( e i k ) \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k} \exp(e_{ik})} αij=kexp(eik)exp(eij)

  4. 加权求和:利用注意力权重对值(value) V V V进行加权求和,得到输出:
    Attention ( Q , K , V ) = ∑ j α i j V j \text{Attention}(Q, K, V) = \sum_{j} \alpha_{ij} V_j Attention(Q,K,V)=jαijVj

2. 点积注意力(Dot-product Attention)

点积注意力通过计算查询 Q Q Q和键 K K K的点积来衡量相似度,并加上一个缩放因子,具体步骤如下:

  1. 输入:查询 Q Q Q和键 K K K

  2. 计算相似度:通过计算点积并除以缩放因子 d k \sqrt{d_k} dk
    e i j = Q i ⋅ K j ⊤ d k e_{ij} = \frac{Q_i \cdot K_j^\top}{\sqrt{d_k}} eij=dk QiKj
    其中, d k d_k dk是键的维度。

  3. 计算注意力权重:将相似度通过softmax函数进行归一化:
    α i j = exp ⁡ ( e i j ) ∑ k exp ⁡ ( e i k ) \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k} \exp(e_{ik})} αij=kexp(eik)exp(eij)

  4. 加权求和:利用注意力权重对值 V V V进行加权求和,得到输出:
    Attention ( Q , K , V ) = ∑ j α i j V j \text{Attention}(Q, K, V) = \sum_{j} \alpha_{ij} V_j Attention(Q,K,V)=jαijVj

数据示例

假设我们有如下数据:

  • 查询 Q Q Q [ 1 0 0 1 ] \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} [1001]
  • K K K [ 1 2 3 4 ] \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} [1324]
  • V V V [ 5 6 7 8 ] \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} [5768]
加性注意力示例
  1. 计算相似度

    先计算前馈神经网络的输出,假设 W q = W k = I \text{W}_q = \text{W}_k = \text{I} Wq=Wk=I(单位矩阵), v ⊤ = [ 1 1 ] \text{v}^\top = \begin{bmatrix} 1 & 1 \end{bmatrix} v=[11]

    对于 Q 1 = [ 1 0 ] Q_1 = \begin{bmatrix} 1 & 0 \end{bmatrix} Q1=[10] K 1 = [ 1 2 ] K_1 = \begin{bmatrix} 1 & 2 \end{bmatrix} K1=[12]
    e 11 = [ 1 1 ] ⋅ tanh ⁡ ( [ 1 0 0 1 ] [ 1 0 ] + [ 1 0 0 1 ] [ 1 2 ] ) = 1 e_{11} = \begin{bmatrix} 1 & 1 \end{bmatrix} \cdot \tanh\left(\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} + \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\ 2 \end{bmatrix}\right) = 1 e11=[11]tanh([1001][10]+[1001][12])=1

    对于 Q 1 Q_1 Q1 K 2 = [ 3 4 ] K_2 = \begin{bmatrix} 3 & 4 \end{bmatrix} K2=[34]
    e 12 = [ 1 1 ] ⋅ tanh ⁡ ( [ 4 4 ] ) ≈ 0.999 e_{12} = \begin{bmatrix} 1 & 1 \end{bmatrix} \cdot \tanh\left(\begin{bmatrix} 4 \\ 4 \end{bmatrix}\right) \approx 0.999 e12=[11]tanh([44])0.999

    类似地,计算其他相似度 e 21 e_{21} e21 e 22 e_{22} e22

  2. 计算注意力权重

    例如对于 Q 1 Q_1 Q1
    α 11 = exp ⁡ ( 1 ) exp ⁡ ( 1 ) + exp ⁡ ( 0.999 ) ≈ 0.5001 \alpha_{11} = \frac{\exp(1)}{\exp(1) + \exp(0.999)} \approx 0.5001 α11=exp(1)+exp(0.999)exp(1)0.5001
    α 12 = exp ⁡ ( 0.999 ) exp ⁡ ( 1 ) + exp ⁡ ( 0.999 ) ≈ 0.4999 \alpha_{12} = \frac{\exp(0.999)}{\exp(1) + \exp(0.999)} \approx 0.4999 α12=exp(1)+exp(0.999)exp(0.999)0.4999

  3. 加权求和

    对于 Q 1 Q_1 Q1
    Attention ( Q 1 , K , V ) = 0.5001 [ 5 6 ] + 0.4999 [ 7 8 ] ≈ [ 6 7 ] \text{Attention}(Q_1, K, V) = 0.5001 \begin{bmatrix} 5 & 6 \end{bmatrix} + 0.4999 \begin{bmatrix} 7 & 8 \end{bmatrix} \approx \begin{bmatrix} 6 & 7 \end{bmatrix} Attention(Q1,K,V)=0.5001[56]+0.4999[78][67]

点积注意力示例
  1. 计算相似度

    直接计算点积并除以缩放因子 d k \sqrt{d_k} dk (假设 d k = 2 d_k = 2 dk=2):

    对于 Q 1 Q_1 Q1 K 1 K_1 K1
    e 11 = 1 ⋅ 1 + 0 ⋅ 2 2 = 1 2 e_{11} = \frac{1 \cdot 1 + 0 \cdot 2}{\sqrt{2}} = \frac{1}{\sqrt{2}} e11=2 11+02=2 1

    对于 Q 1 Q_1 Q1 K 2 K_2 K2
    e 12 = 1 ⋅ 3 + 0 ⋅ 4 2 = 3 2 e_{12} = \frac{1 \cdot 3 + 0 \cdot 4}{\sqrt{2}} = \frac{3}{\sqrt{2}} e12=2 13+04=2 3

    类似地,计算其他相似度 e 21 e_{21} e21 e 22 e_{22} e22

  2. 计算注意力权重

    例如对于 Q 1 Q_1 Q1
    α 11 = exp ⁡ ( 1 2 ) exp ⁡ ( 1 2 ) + exp ⁡ ( 3 2 ) ≈ 0.1192 \alpha_{11} = \frac{\exp(\frac{1}{\sqrt{2}})}{\exp(\frac{1}{\sqrt{2}}) + \exp(\frac{3}{\sqrt{2}})} \approx 0.1192 α11=exp(2 1)+exp(2 3)exp(2 1)0.1192
    α 12 = exp ⁡ ( 3 2 ) exp ⁡ ( 1 2 ) + exp ⁡ ( 3 2 ) ≈ 0.8808 \alpha_{12} = \frac{\exp(\frac{3}{\sqrt{2}})}{\exp(\frac{1}{\sqrt{2}}) + \exp(\frac{3}{\sqrt{2}})} \approx 0.8808 α12=exp(2 1)+exp(2 3)exp(2 3)0.8808

  3. 加权求和

    对于 Q 1 Q_1 Q1
    Attention ( Q 1 , K , V ) = 0.1192 [ 5 6 ] + 0.8808 [ 7 8 ] ≈ [ 6.7624 7.7624 ] \text{Attention}(Q_1, K, V) = 0.1192 \begin{bmatrix} 5 & 6 \end{bmatrix} + 0.8808 \begin{bmatrix} 7 & 8 \end{bmatrix} \approx \begin{bmatrix} 6.7624 & 7.7624 \end{bmatrix} Attention(Q1,K,V)=0.1192[56]+0.8808[78][6.76247.7624]

结论

加性注意力和点积注意力在理论复杂度上相似,但点积注意力更快且更节省空间,因为它可以利用高度优化的矩阵乘法代码。通过具体数据示例,我们可以看到这两种注意力机制的工作原理和实际计算过程。

;