注意力机制的理解

Attention

相关概念

自主性提示/聚焦式注意力—查询(query)(例如一个人在看一张图片,图片中有很多物体,但是此人喜欢观察屎,因此对地上的屎最感兴趣)

非自主性提示/基于显著性的注意力—键(key)(例如图片中有某些东西特别显眼,吸引了观察者的注意)

最后眼睛盯着哪看—值(value)

注意力机制的框架如下所示:
图片来自动手学深度学习(上图来自李沐 et al. 动手学深度学习)

一个简单的例子进行理解

对于给定的数据集 ( x 1 , y 1 ) , . . . , ( x n , y n ) {(x_1,y_1),...,(x_n,y_n)} (x1,y1),...,(xn,yn),如何学习预测函数 y = f ( x ) y=f(x) y=f(x),使得对于一个输入 x x x可以获得预测值 y ^ \hat{y} y^

一个简单的方法就是对所有 y i y_i yi值进行平均加权,用均值作为最后的预测值。

基于注意力的方法就是对于样本中的 y i y_i yi赋予不同的权重。如果输入 x x x和样本中的某个 x i x_i xi更接近,那么相应的 y i y_i yi会被分配更高的权重,这样相应的预测也会较为准确。于是 f ( x ) f(x) f(x)可设计如下:
f ( x ) = ∑ i = 1 n K ( x − x i ) ∑ j = 1 n K ( x − x j ) y i f(x)=\sum_{i=1}^{n}\frac{K(x-x_i)}{\sum_{j=1}^{n}K(x-x_j)}y_i f(x)=i=1nj=1nK(xxj)K(xxi)yi
其中 K K K是一种核函数。

如果 K K K是高斯核函数,那么:
f ( x ) = ∑ i = 1 n s o f t m a x ( − 1 2 ( x − x i ) 2 ) y i f(x)=\sum_{i=1}^{n}softmax(-\frac{1}{2}(x-x_i)^2)y_i f(x)=i=1nsoftmax(21(xxi)2)yi
f ( x ) f(x) f(x)还可以写成一种更通用的形式: f ( x ) = ∑ i = 1 n α ( x , x i ) y i f(x)=\sum_{i=1}^{n}\alpha(x,x_i)y_i f(x)=i=1nα(x,xi)yi .

注意力机制的计算可以分为两步,一是计算对于一个输入的注意力分布,如对 α ( x , x i ) \alpha(x,x_i) α(x,xi)的计算,二是计算对与输入的加权平均,如对 f ( x ) f(x) f(x)的计算。

带参数的注意力汇聚

将可学习的参数 w w w加入到 f ( x ) f(x) f(x)中,即: f ( x ) = ∑ i = 1 n s o f t m a x ( − 1 2 ( w ( x − x i ) ) 2 ) y i f(x)=\sum_{i=1}^{n}softmax(-\frac{1}{2}(w(x-x_i))^2)y_i f(x)=i=1nsoftmax(21(w(xxi))2)yi .

换个方式描述

将上述几个公式总结一下:
f ( x ) = ∑ i = 1 n α ( x , x i ) y i = ∑ i = 1 n exp ⁡ ( − 1 2 ( ( x − x i ) w ) 2 ) ∑ j = 1 n exp ⁡ ( − 1 2 ( ( x − x j ) w ) 2 ) y i = ∑ i = 1 n softmax ⁡ ( − 1 2 ( ( x − x i ) w ) 2 ) y i . \begin{aligned} f(x) & =\sum_{i=1}^{n} \alpha\left(x, x_{i}\right) y_{i} \\ & =\sum_{i=1}^{n} \frac{\exp \left(-\frac{1}{2}\left(\left(x-x_{i}\right) w\right)^{2}\right)}{\sum_{j=1}^{n} \exp \left(-\frac{1}{2}\left(\left(x-x_{j}\right) w\right)^{2}\right)} y_{i} \\ & =\sum_{i=1}^{n} \operatorname{softmax}\left(-\frac{1}{2}\left(\left(x-x_{i}\right) w\right)^{2}\right) y_{i} . \end{aligned} f(x)=i=1nα(x,xi)yi=i=1nj=1nexp(21((xxj)w)2)exp(21((xxi)w)2)yi=i=1nsoftmax(21((xxi)w)2)yi.
x x x称为查询, ( x 1 , y 1 ) , . . . , ( x n , y n ) {(x_1,y_1),...,(x_n,y_n)} (x1,y1),...,(xn,yn)是一系列键值对。
对于第二行的公式,我们将 s ( x ) = − 1 2 ( ( x − x i ) w ) 2 s(x)=-\frac{1}{2}((x-x_i)w)^2 s(x)=21((xxi)w)2称为评价函数。
将上述符号全部向量化,查询为 q \boldsymbol{q} q,键值对为 ( k 1 , v 1 ) , . . . , ( k n , v n ) \boldsymbol{(k_1,v_1),...,(k_n,v_n)} (k1,v1),...,(kn,vn),于是有:
f ( q , ( k 1 , v 1 ) , … , ( k m , v m ) ) = ∑ i = 1 m α ( q , k i ) v i f\left(\mathbf{q},\left(\mathbf{k}_{1}, \mathbf{v}_{1}\right), \ldots,\left(\mathbf{k}_{m}, \mathbf{v}_{m}\right)\right)=\sum_{i=1}^{m} \alpha\left(\mathbf{q}, \mathbf{k}_{i}\right) \mathbf{v}_{i} f(q,(k1,v1),,(km,vm))=i=1mα(q,ki)vi
α ( q , k i ) = s o f t m a x ( a ( q , k i ) ) = exp ⁡ ( a ( q , k i ) ) ∑ j = 1 m exp ⁡ ( a ( q , k j ) ) \alpha\left(\mathbf{q}, \mathbf{k}_{i}\right)=softmax\left(a\left(\mathbf{q}, \mathbf{k}_{i}\right)\right)=\frac{\exp \left(a\left(\mathbf{q}, \mathbf{k}_{i}\right)\right)}{\sum_{j=1}^{m} \exp \left(a\left(\mathbf{q}, \mathbf{k}_{j}\right)\right)} α(q,ki)=softmax(a(q,ki))=j=1mexp(a(q,kj))exp(a(q,ki))

评价函数

不同的注意力评分函数会导致不同的注意力汇聚操作。常用的评分函数有以下几种:

  1. 加性函数: s ( k , q ) = w 1 tanh ⁡ ( w 2 k + w 3 q ) s(\boldsymbol{k}, \boldsymbol{q})=\boldsymbol{w_1} \tanh (\boldsymbol{w_2} \boldsymbol{k}+\boldsymbol{w_3} \boldsymbol{q}) s(k,q)=w1tanh(w2k+w3q),其中 w 1 , w 2 , w 3 \boldsymbol{w_1},\boldsymbol{w_2},\boldsymbol{w_3} w1,w2,w3都是可学习的参数。
  2. 点积函数: s ( k , q ) = q ⊤ k s(\boldsymbol{k}, \boldsymbol{q})=\boldsymbol{q}^\top \boldsymbol{k} s(k,q)=qk
  3. 缩放点积函数: s ( k , q ) = q ⊤ k D s(\boldsymbol{k}, \boldsymbol{q})=\frac{\boldsymbol{q}^\top \boldsymbol{k}}{\sqrt{D}} s(k,q)=D qk D D D是输入向量的维度。缩放点积函数是较为常用的。
  4. 双线性点积函数: s ( k , q ) = k ⊤ W q s(\boldsymbol{k}, \boldsymbol{q})=\boldsymbol{k}^\top \boldsymbol{W}\boldsymbol{q} s(k,q)=kWq
    一般来说,点积评分函数相较于加性评分函数计算效率更高,但当查询向量的维度较高时,点积评分函数会有较大的方差,导致softmax函数梯度较小。因此一般用缩放点积函数,保证点积的方差始终为1。

多头注意力机制

( K , V ) = ( k 1 , v 1 ) , ⋯   , ( k n , v n ) (\boldsymbol{K}, \boldsymbol{V})=\left(\boldsymbol{k}_{1}, \boldsymbol{v}_{1}\right), \cdots,\left(\boldsymbol{k}_{n}, \boldsymbol{v}_{n}\right) (K,V)=(k1,v1),,(kn,vn)表示 n n n组键值对,多头注意力利用多个查询 Q = ( q 1 , . . . , q m ) \boldsymbol{Q}=(\boldsymbol{q_1},...,\boldsymbol{q_m}) Q=(q1,...,qm)来并行地从输入信息中选取多组信息。每个注意力机制关注输入信息的不同部分。其关键特征在于并行。

自注意力机制

自注意力机制,顾名思义,关注自身的注意力分布。 K , Q , V \boldsymbol{K},\boldsymbol{Q},\boldsymbol{V} K,Q,V都是对同一个数据 X \boldsymbol{X} X进行线性变换(注意这里的 X \boldsymbol{X} X不是查询)。最后得到的结果,根据上述注意力机制,相当于假如从 Q \boldsymbol{Q} Q中提取出一个 q i \boldsymbol{q_i} qi,那么应该关注其它哪些 q \boldsymbol{q} q。比如对于一句话:”小花家的狗会做饭“,如果查询向量是”会“,那么进行自注意力运算后的结果应该是"做饭",即在看到”会“的时候,就应该给”做饭“更多的注意力。

如果用缩放点积来作为注意力评价函数,对于一个查询向量 q n \boldsymbol{q_n} qn,可得单个输出序列:
h n = a t t ( ( K , V ) , q n ) \boldsymbol{h_n}=att((\boldsymbol{K},\boldsymbol{V}),\boldsymbol{q_n}) hn=att((K,V),qn)

如果是多个查询向量组成的矩阵,那么最后的输出向量序列为:

H = V softmax ⁡ ( K ⊤ Q D k ) \boldsymbol{H}=\boldsymbol{V} \operatorname{softmax}\left(\frac{\boldsymbol{K}^{\top} \boldsymbol{Q}}{\sqrt{\boldsymbol{D_{k}}}}\right) H=Vsoftmax(Dk KQ)

Transformer

一篇非常优秀的博客:小白Transformer

参考

动手深度学习,李沐等.

神经网络与深度学习,邱锡鹏.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值