多图预警! Multi-Head Attention | 多头注意力 #51CTO博主之星评选#
Posted LolitaAnn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多图预警! Multi-Head Attention | 多头注意力 #51CTO博主之星评选#相关的知识,希望对你有一定的参考价值。
:star:注意:
- 本篇文章需要结合self-attention食用:Self-Attention #yyds干货盘点#
- 本篇文章参考吴恩达老师deep learning系列序列模型第四章内容。
在self-attention里我们提到,它的原理更类似于如何在序列模型中使用CNN的窗口,实现某个位置的注意力。我们说对于有多个意象的词,比如l’Afrique
,我们要看看更关注哪一方面的含义。提取一方面的含义我们可以称之为一个头,如果要计算多方面的含义我们就可以称之为多头(multi-head)。
还是以这句话为例子:Jane visite l’Afrique en septembre.
先回顾一下self-attention中我们说,对于输入x
,我们学习不同的参数将其转化为q,k,v。
例如l’Afrique
:
$$
\\beginaligned
q^<3> &=W^Q x^<3> \\
k^<3> &=W^K x^<3> \\
v^<3> &=W^V x^<3>
\\endaligned
$$
之后将当前位置的q和每一个k做运算。这一步可以根据q
找到当前位置最相关的数据。
之后我们将所有的q
和k
的内积与v
做计算并进行softmax。
l’Afrique
为例,在这个句子里更关注其地理位置的属性,或者说旅游相关的方面,引发这个关注的词是visite
。在这我们将最相关的标红。
到这里我们就提取出了l’Afrique
(非洲)的一个意象(一个head),如果我们要提取多面的意向就要计算多头注意力,这里稍微有一点区别:
首先我们依旧像之前一样获得query、key、value向量。
之后我们要计算出每个头自己的query、key、value向量。
还是以l’Afrique
为例子,$x^<3>$的query、key、value向量要乘以第一个head对应的可学习参数,得到第一个head所需要的query、key、value向量。
$$
\\beginaligned
q^<3>1 &=W^Q1 q^<3> \\
k^<3>1 &=W^K1 k^<3> \\
v^<3>1 &=W^V1 v^<3>
\\endaligned
$$
求出第一个head对应的query、key、value向量之后计算过程就和self-attention一样了,这里画图过程就省略了。
head1计算出来之后其他的head计算方法一样。
最后总结一下计算过程:
由输入获得query、key、value向量。
$$
\\beginaligned
q^<i> &=W^Q x^<i> \\
k^<i> &=W^K x^<i> \\
v^<i> &=W^V x^<i>
\\endaligned
$$
获得每个head单独的query、key、value向量:
$$
\\beginaligned
q^<i>j &=W^Qj q^<i> \\
k^<i>j &=W^Kj k^<i> \\
v^<i>j &=W^Vj v^<i>
\\endaligned
$$
query、key进行计算,获得距离:
$$
\\beginaligned
&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 \\
\\endaligned
$$
上一步计算的值与对应的value做计算,之后将其相加获得注意力分数:
$$
\\beginaligned
&(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 \\
\\endaligned
$$
$$
\\beginaligned
attention\\quad score^<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
\\endaligned
$$
最后对其进行softmax计算:
$$
A^<i>j = softmax(attention\\quad score^<i>j).
$$
以上是关于多图预警! Multi-Head Attention | 多头注意力 #51CTO博主之星评选#的主要内容,如果未能解决你的问题,请参考以下文章