Self-Attention | 自注意力

178 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情


之前我们已经在Attention Model - 掘金 (juejin.cn)讲过如何将注意力机制和RNN等序列模型结合起来,这一节就说一下如何使注意力机制和卷积神经网络结合起来,这需要计算自注意力,并且是理解transformer1 的核心。

计算自注意力需要为输入句子的每一个单词创建基于注意力的表达。

A(q,K,V)=A(q,K,V) = attention-based vector representation of a word,结果使用A<1>...A<5>A^{<1>}...A^{<5>}表示。

依旧是使用这个例子:

Jane visite l’Afrique en septembre

l’Afrique(非洲)为例。

  • 是世界第二大洲
  • 口第二大洲
  • 非洲是世界古人类和古文明的发源地之一
  • ...

假设我们现在已经获得word embedding向量,上边列表我们可以看出,提到非洲有很多角度,那我们如何得知在当前的句子里我们是要使用到非洲的哪个意象呢?我们需要看看周围的单词来弄清楚,当前句子中非洲最适合的表达。实际上计算表达式的过程与之前的attention没什么区别。

RNN Attention

α<t,t>=exp(e<t,t>)t=1Txexp(e<t,t>)\alpha^{<t, t^{\prime}>}=\frac{\exp \left(e^{<t, t^{\prime}>}\right)}{\sum_{t^{\prime}=1}^{T x} \exp \left(e^{<t, t^{\prime}>}\right)}

Transformers Attention:

A(q,K,V)=iexp(qk<i>)jexp(qk<j>)v<i>A(q, K, V)=\sum_{i} \frac{\exp \left(q \cdot k^{<i>}\right)}{\sum_{j} \exp \left(q \cdot k^{<j>}\right)} v^{<i>}

具备自注意力的公式会从上边个变为下边这个。大体上看起来确实没什么区别,小的区别在于self-attention有三个直,query、key 和 value,这三个值是计算每个单词注意力的关键输入数据。


现在每个单词的输入x<t>x^{<t>}是该单词对应的词嵌入向量。

  • 比如l’Afrique的词嵌入向量输入为x<3>x^{<3>}

首先将每个单词与其三个值q、k、v关联起来。

image.png

  • l’Afrique(非洲)为例

    q<3>=WQx<3>k<3>=WKx<3>v<3>=WVx<3>q^{<3>} = W^{Q}x^{<3>} \\ k^{<3>} = W^{K}x^{<3>}\\ v^{<3>} = W^{V}x^{<3>}

    其中WW都是需要学习的参数。 最后得到:

 Query (Q) Key (K) Value (V)q<1>k<1>v<1>q<2>k<2>v<2>q<3>k<3>v<3>q<4>k<4>v<4>q<5>k<5>v<5>\begin{array}{ccc} \text { Query }(Q) & \text { Key }(K) & \text { Value }(V) \\ q^{<1>} & k^{<1>} & v^{<1>} \\ q^{<2>} & k^{<2>} & v^{<2>} \\ q^{<3>} & k^{<3>} & v^{<3>} \\ q^{<4>} & k^{<4>} & v^{<4>} \\ q^{<5>} & k^{<5>} & v^{<5>} \end{array}

接下来计算当前位置的qq和周围位置的kk的内积。

  • l’Afrique(非洲)为例,要计算(q<3>,k<1>)(q^{<3>},k^{<1>})直到(q<3>,k<5>)(q^{<3>},k^{<5>})。计算完五个内积之后要对其进行softmax计算。

经过计算visite与其乘积结果最大,这可以证明visite提供了与非洲发生的事情最有关的背景,即访问非洲。

这一步的主要目的是获得最需要的信息,以帮助我们计算出关于A<3>A^{<3>}最有用的值。

如果qq是在问“非洲发生了什么事?” 那经过qqkk的内积计算之后就会回答在那里发生了什么:“visite l’Afrique”(拜访非洲)。


之后将我们计算出的(q<i>,k<j>)(q^{<i>},k^{<j>})内积乘以对应的v<i>v^{<i>},最后将其求和。

  • l’Afrique(非洲)为例,要计算(q<3>k<1>)×v<1>(q^{<3>}·k^{<1>})\times v^{<1>}直到(q<3>k<5>)×v<5>(q^{<3>}·k^{<5>})\times v^{<5>}

这个算法可以确保模型中使用的不是一个固定的词嵌入,自注意力机智可以意识到l’Afrique是要访问的目的地,从而计算出这个单词更有用的表示。

当然可以不用一个单词一个单词计算,集成化的公式如下:

Attention(Q,K,V)=softmax(QKTdk)V\operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V
  • dk\sqrt{d_{k}}这一项是对点积的缩放,以免产生爆炸。也因此有个别称“缩放点积注意力”(the scaled dot-product attention)。

  1. Vaswani et al. 2017, Attention Is All You Need