这篇文章是我的笔记分享,内容主要来自吴恩达老师的深度学习课程。^[AI中国官网-全球领先的线上AI教育、实践平台 (deeplearningai.net)]
之前我们已经在Attention Model #yyds干货盘点#讲过如何将注意力机制和RNN等序列模型结合起来,这需要计算自注意力,并且是理解transformer^[Vaswani et al. 2017, Attention Is All You Need]的核心。
计算自注意力需要为输入句子的每一个单词创建基于注意力的表达。
$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:
$$
\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)=\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>}$是该单词对应的词嵌入向量。
- 比如
l’Afrique
的词嵌入向量输入为$x^{<3>}$。
首先将每个单词与其三个值q、k、v关联起来。
-
以
l’Afrique
(非洲)为例
$$
q^{<3>} = W^{Q}x^{<3>} \
k^{<3>} = W^{K}x^{<3>}\
v^{<3>} = W^{V}x^{<3>}
$$其中$W$都是需要学习的参数。
最后得到:
$$
\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}
$$
接下来计算当前位置的$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>})\times v^{<1>}$直到$(q^{<3>}·k^{<5>})\times v^{<5>}$
这个算法可以确保模型中使用的不是一个固定的词嵌入,自注意力机智可以意识到l’Afrique
是要访问的目的地,从而计算出这个单词更有用的表示。
当然可以不用一个单词一个单词计算,集成化的公式如下:
$$
\operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V
$$
- $\sqrt{d_{k}}$这一项是对点积的缩放,以免产生爆炸。也因此有个别称“缩放点积注意力”(the scaled dot-product attention)。