self attention 自注意力机制——李宏毅机器学习课程笔记

self attention 自注意力机制——李宏毅机器学习课程笔记

self attention 自注意力机制——李宏毅机器学习课程笔记_第1张图片

假如我们要处理输入向量与输出向量个数一样多的问题,比如给定一个句子,每个单词都是一个向量,要判断并输出每个单词的词性,我们肯定要考虑到每个词与这个文本序列中其他词的相关性。以上图为例,a^1 - a^4 是四个词向量,自注意力机制的总体流程就是,首先计算出第i个词与第j个词的相关性α(i,j),再根据相关性的大小,计算出最后第i个向量对应的输出b^i 。如a^1 对应输出b^1。

具体做法

self attention 自注意力机制——李宏毅机器学习课程笔记_第2张图片

以a^1的计算过程为例:

1.计算出q1
q 1 = W q α 1 q^1=W^qα^1 q1=Wqα1
2.计算k1,k2,k3,k4
k 1 = W k α 1 ; k 2 = W k α 2 ; k 3 = W k α 3 ; k 4 = W k α 4 ; k^1=W^kα^1; k^2=W^kα^2; k^3=W^kα^3; k^4=W^kα^4; k1=Wkα1;k2=Wkα2;k3=Wkα3;k4=Wkα4;
3.这里采用一种常用的方法来计算α(1,j)等。即q1与k1,k2,k3,k4分别做点积,得到α(1,j)。

如:
α ( 1 , 2 ) = q 1 k 2 α(1,2)=q^1k^2 α(1,2)=q1k2
这样我们就可以得到a1与a2、a3、a4的相关性。

4.利用softmax函数归一化得到a’(1,j)
α ′ ( 1 , j ) = e x p ( α ( 1 , j ) ) / ∑ j e x p ( α ( 1 , j ) ) α'(1,j)=exp(α(1,j))/\sum_{j}{exp(α(1,j))} α(1,j)=exp(α(1,j))/jexp(α(1,j))
注:不一定非得选用softmax函数

5.计算v^i
v i = W v α i v^i=W^vα^i vi=Wvαi
6.得出b1
b 1 = ∑ j α ′ ( 1 , j ) v j b^1=\sum_{j}{α'(1,j)v^j} b1=jα(1,j)vj
同理可以计算出a2-a4对应的输出。


从矩阵相乘看具体实现

从上述过程我们可以知道要进行如下运算:
q i = W q α i ; k i = W k α i ; v i = W v α i q^i=W^qα^i; k^i=W^kα^i; v^i=W^vα^i qi=Wqαi;ki=Wkαi;vi=Wvαi

我们可以把a1-a4拼接成一个矩阵,乘上W^q,就得到矩阵Q。K、V的计算同理。

同样的,如下图所示,也可以计算:
A = K T Q A=K^TQ A=KTQ
再对每一列进行softmax,得到A‘

self attention 自注意力机制——李宏毅机器学习课程笔记_第3张图片

输出矩阵O=VA’

self attention 自注意力机制——李宏毅机器学习课程笔记_第4张图片

总结一下:

我们的输入矩阵是I,输出矩阵为O,在self-attention的过程中只有W^q 、W^k 和W^v是需要学习的参数

self attention 自注意力机制——李宏毅机器学习课程笔记_第5张图片

multi-head self-attention

将模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息,计算不同方面的相关性。

以两个头为例,对每个q^i ,分别乘上两个矩阵,得到q^(i,1)、 q^(i,2), 对k^i 和v^i 的处理同理。然后对两个头分别求注意力分数,然后weighted sum,得到b^(i,1) 和 b^(i,2) 。 b^(i,1) 和 b^(i,2) 连接起来,乘上 W^o 得到最终输出。
self attention 自注意力机制——李宏毅机器学习课程笔记_第6张图片
self attention 自注意力机制——李宏毅机器学习课程笔记_第7张图片

你可能感兴趣的:(机器学习)