持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
之前我们已经在Attention Model - 掘金 (juejin.cn)讲过如何将注意力机制和RNN等序列模型结合起来,这一节就说一下如何使注意力机制和卷积神经网络结合起来,这需要计算自注意力,并且是理解transformer1 的核心。
计算自注意力需要为输入句子的每一个单词创建基于注意力的表达。
A(q,K,V)=attention-based vector representation of a word,结果使用A<1>...A<5>表示。
依旧是使用这个例子:
Jane visite l’Afrique en septembre
以l’Afrique
(非洲)为例。
- 是世界第二大洲
- 口第二大洲
- 非洲是世界古人类和古文明的发源地之一
- ...
假设我们现在已经获得word embedding向量,上边列表我们可以看出,提到非洲有很多角度,那我们如何得知在当前的句子里我们是要使用到非洲的哪个意象呢?我们需要看看周围的单词来弄清楚,当前句子中非洲最适合的表达。实际上计算表达式的过程与之前的attention没什么区别。
RNN Attention:
α<t,t′>=∑t′=1Txexp(e<t,t′>)exp(e<t,t′>)
Transformers Attention:
A(q,K,V)=i∑∑jexp(q⋅k<j>)exp(q⋅k<i>)v<i>
具备自注意力的公式会从上边个变为下边这个。大体上看起来确实没什么区别,小的区别在于self-attention有三个直,query、key 和 value,这三个值是计算每个单词注意力的关键输入数据。
现在每个单词的输入x<t>是该单词对应的词嵌入向量。
- 比如
l’Afrique
的词嵌入向量输入为x<3>。
首先将每个单词与其三个值q、k、v关联起来。

-
以l’Afrique
(非洲)为例
q<3>=WQx<3>k<3>=WKx<3>v<3>=WVx<3>
其中W都是需要学习的参数。
最后得到:
Query (Q)q<1>q<2>q<3>q<4>q<5> Key (K)k<1>k<2>k<3>k<4>k<5> Value (V)v<1>v<2>v<3>v<4>v<5>
接下来计算当前位置的q和周围位置的k的内积。
- 以
l’Afrique
(非洲)为例,要计算(q<3>,k<1>)直到(q<3>,k<5>)。计算完五个内积之后要对其进行softmax计算。
经过计算visite
与其乘积结果最大,这可以证明visite
提供了与非洲发生的事情最有关的背景,即访问非洲。
这一步的主要目的是获得最需要的信息,以帮助我们计算出关于A<3>最有用的值。
如果q是在问“非洲发生了什么事?”
那经过q和k的内积计算之后就会回答在那里发生了什么:“visite l’Afrique”(拜访非洲)。
之后将我们计算出的(q<i>,k<j>)内积乘以对应的v<i>,最后将其求和。
- 以
l’Afrique
(非洲)为例,要计算(q<3>⋅k<1>)×v<1>直到(q<3>⋅k<5>)×v<5>
这个算法可以确保模型中使用的不是一个固定的词嵌入,自注意力机智可以意识到l’Afrique
是要访问的目的地,从而计算出这个单词更有用的表示。
当然可以不用一个单词一个单词计算,集成化的公式如下:
Attention(Q,K,V)=softmax(dkQKT)V
- dk这一项是对点积的缩放,以免产生爆炸。也因此有个别称“缩放点积注意力”(the scaled dot-product attention)。
- Vaswani et al. 2017, Attention Is All You Need