0
点赞
收藏
分享

微信扫一扫

多图预警! Multi-Head Attention | 多头注意力 #51CTO博主之星评选#

殇感故事 2022-03-15 阅读 143

:star:注意

  1. 本篇文章需要结合self-attention食用:Self-Attention #yyds干货盘点#
  2. 本篇文章参考吴恩达老师deep learning系列序列模型第四章内容。

在self-attention里我们提到,它的原理更类似于如何在序列模型中使用CNN的窗口,实现某个位置的注意力。我们说对于有多个意象的词,比如l’Afrique,我们要看看更关注哪一方面的含义。提取一方面的含义我们可以称之为一个头,如果要计算多方面的含义我们就可以称之为多头(multi-head)。

还是以这句话为例子:
Jane visite l’Afrique en septembre.

先回顾一下self-attention中我们说,对于输入x,我们学习不同的参数将其转化为q,k,v。
例如l’Afrique:
$$
\begin{aligned}
q^{<3>} &=W^{Q} x^{<3>} \
k^{<3>} &=W^{K} x^{<3>} \
v^{<3>} &=W^{V} x^{<3>}
\end{aligned}
$$
image.png

之后将当前位置的q和每一个k做运算。这一步可以根据q找到当前位置最相关的数据。

image.png

之后我们将所有的qk的内积与v做计算并进行softmax。

l’Afrique为例,在这个句子里更关注其地理位置的属性,或者说旅游相关的方面,引发这个关注的词是visite。在这我们将最相关的标红。

image.png

到这里我们就提取出了l’Afrique(非洲)的一个意象(一个head),如果我们要提取多面的意向就要计算多头注意力,这里稍微有一点区别:

首先我们依旧像之前一样获得query、key、value向量。
image.png

之后我们要计算出每个头自己的query、key、value向量。

还是以l’Afrique为例子,$x^{<3>}$的query、key、value向量要乘以第一个head对应的可学习参数,得到第一个head所需要的query、key、value向量。
$$
\begin{aligned}
q^{<3>}{1} &=W^{Q}{1} q^{<3>} \
k^{<3>}{1} &=W^{K}{1} k^{<3>} \
v^{<3>}{1} &=W^{V}{1} v^{<3>}
\end{aligned}
$$

image.png

求出第一个head对应的query、key、value向量之后计算过程就和self-attention一样了,这里画图过程就省略了。

image.png

head1计算出来之后其他的head计算方法一样。

image.png

最后总结一下计算过程:

由输入获得query、key、value向量。
$$
\begin{aligned}
q^{<i>} &=W^{Q} x^{<i>} \
k^{<i>} &=W^{K} x^{<i>} \
v^{<i>} &=W^{V} x^{<i>}
\end{aligned}
$$

获得每个head单独的query、key、value向量:

$$
\begin{aligned}
q^{<i>}{j} &=W^{Q}{j} q^{<i>} \
k^{<i>}{j} &=W^{K}{j} k^{<i>} \
v^{<i>}{j} &=W^{V}{j} v^{<i>}
\end{aligned}
$$

query、key进行计算,获得距离:

$$
\begin{aligned}
&q^{<i>}{j} · k^{<1>}{j} \
&q^{<i>}{j} · k^{<2>}{j} \
&...\
&q^{<i>}{j} · k^{<i-1>}{j} \
&q^{<i>}{j} · k^{<i+1>}{j} \
&...\
&q^{<i>}{j} · k^{<n>}{j} \
\end{aligned}
$$

上一步计算的值与对应的value做计算,之后将其相加获得注意力分数:

$$
\begin{aligned}
&(q^{<i>}{j} · k^{<1>}{j})v^{<1>}{j} \
&(q^{<i>}
{j} · k^{<2>}{j})v^{<2>}{j} \
&...\
&(q^{<i>}{j} · k^{<i-1>}{j})v^{<i-1>}{j} \
&(q^{<i>}
{j} · k^{<i+1>}{j})v^{<i+1>}{j} \
&...\
&(q^{<i>}{j} · k^{<n>}{j})v^{<n>}{j} \
\end{aligned}
$$
$$
\begin{aligned}
result^{<i>}
{j} = &(q^{<i>}{j} · k^{<1>}{j})v^{<1>}{j} + ... + (q^{<i>}{j} · k^{<i-1>}{j})v^{<i-1>}{j} + \ &v^{<i>}{j}+(q^{<i>}{j} · k^{<i+1>}{j})v^{<i+1>}{j} +... + (q^{<i>}{j} · k^{<n>}{j})v^{<n>}_{j}
\end{aligned}
$$

最后对其进行softmax计算:
$$
A^{<i>}{j} = softmax(result^{<i>}{j}).
$$

举报

相关推荐

0 条评论