深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)

分类目录:《深入理解深度学习》总目录

相关文章:
·注意力机制(AttentionMechanism):基础知识
·注意力机制(AttentionMechanism):注意力汇聚与Nadaraya-Watson核回归
·注意力机制(AttentionMechanism):注意力评分函数(AttentionScoringFunction)
·注意力机制(AttentionMechanism):Bahdanau注意力
·注意力机制(AttentionMechanism):多头注意力(MultiheadAttention)
·注意力机制(AttentionMechanism):自注意力(Self-attention)
·注意力机制(AttentionMechanism):位置编码(PositionalEncoding)


深入理解深度学习——注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson 核回归》中使用了高斯核来对查询和键之间的关系建模。式中的高斯核指数部分可以视为注意力评分函数(Attention Scoring Function), 简称评分函数(Scoring Function), 然后把这个函数的输出结果输入到Softmax函数中进行运算。 通过上述步骤,将得到与键对应的值的概率分布(即注意力权重)。 最后,注意力汇聚的输出就是基于这些注意力权重的值的加权和。

从宏观来看,上述算法可以用来实现注意力机制框架。 下图说明了如何将注意力汇聚的输出计算成为值的加权和, 其中 a a a表示注意力评分函数。 由于注意力权重是概率分布, 因此加权和其本质上是加权平均值。

计算注意力汇聚的输出为值的加权和
用数学语言描述,假设有一个查询 q ∈ R q q\in R^q qRq m m m个“键—值”对 ( k 1 , v 1 ) , ( k 2 , v 2 ) , ⋯   , ( k m , v m ) (k_1, v_1), (k_2, v_2), \cdots, (k_m, v_m) (k1,v1),(k2,v2),,(km,vm), 其中 k i ∈ R k , v i ∈ R v k_i\in R^k, v_i\in R^v kiRk,viRv。 注意力汇聚函数就被表示成值的加权和:
f ( q , ( k 1 , v 1 ) , ( k 2 , v 2 ) , ⋯   , ( k m , v m ) ) = ∑ i = 1 m α ( q , k i ) v i ∈ R v f(q, (k_1, v_1), (k_2, v_2), \cdots, (k_m, v_m)) = \sum_{i=1}^m\alpha(q, k_i)v_i\in R^v f(q,(k1,v1),(k2,v2),,(km,vm))=i=1mα(q,ki)viRv

其中查询 q q q和键 k i k_i ki的注意力权重(标量) 是通过注意力评分函数 a a a将两个向量映射成标量, 再经过Softmax运算得到的:
α ( q , k i ) = Softmax ( a ( q , k i ) ) = exp ⁡ ( a ( q , k i ) ) ∑ j = 1 m exp ⁡ ( a ( q , k i ) ) ∈ R \alpha(q, k_i) = \text{Softmax}(a(q, k_i))=\frac{\exp(a(q, k_i))}{\sum_{j=1}^m\exp(a(q, k_i))} \in R α(q,ki)=Softmax(a(q,ki))=j=1mexp(a(q,ki))exp(a(q,ki))R

正如上图所示,选择不同的注意力评分函数会导致不同的注意力汇聚操作。 本文将介绍两个流行的评分函数,稍后将用他们来实现更复杂的注意力机制。

加性注意力

一般来说,当查询和键是不同长度的矢量时,可以使用加性注意力作为评分函数。 给定查询 q ∈ R q q\in R^q qRq和键 k ∈ R k k\in R^k kRk,加性注意力(Additive Attention)的评分函数为
α ( q , k ) = w v T tanh ⁡ ( W q q + W k k ) ∈ R \alpha(q, k)=w^T_v\tanh(W_qq+W_kk)\in R α(q,k)=wvTtanh(Wqq+Wkk)R

其中可学习的参数是 W q ∈ R h × q W_q\in R^{h\times q} WqRh×q W k ∈ R h × k W_k\in R^{h\times k} WkRh×k W v ∈ R h W_v\in R^h WvRh 。 如上式所示, 将查询和键连结起来后输入到一个多层感知机(MLP)中, 感知机包含一个隐藏层,其隐藏单元数是一个超参数 h h h。 通过使用 tanh ⁡ \tanh tanh作为激活函数,并且禁用偏置项。

缩放点积注意力

使用点积可以得到计算效率更高的评分函数, 但是点积操作要求查询和键具有相同的长度。 假设查询和键的所有元素都是独立的随机变量, 并且都满足零均值和单位方差, 那么两个向量的点积的均值为0,方差为 d d d。 为确保无论向量长度如何, 点积的方差在不考虑向量长度的情况下仍然是1, 我们再将点积除以 d \sqrt{d} d , 则缩放点积注意力(Scaled Dot-product Attention)评分函数为:
α ( q , k ) = q T k d \alpha(q, k)=\frac{q^Tk}{\sqrt{d}} α(q,k)=d qTk

在实践中,我们通常从小批量的角度来考虑提高效率, 例如基于 n n n个查询和 m m m个“键—值”对计算注意力, 其中查询和键的长度为 d d d,值的长度为 v v v。 查询 Q ∈ R n × d Q\in R^{n\times d} QRn×d、 键 K ∈ R m × d K\in R^{m\times d} KRm×d和值 V ∈ R m × v V\in R^{m\times v} VRm×v的缩放点积注意力是:
Softmax ( Q T K d ) V ∈ R n × v \text{Softmax}(\frac{Q^TK}{\sqrt{d}})V\in R^{n\times v} Softmax(d QTK)VRn×v

参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.

猜你喜欢

转载自blog.csdn.net/hy592070616/article/details/131115474