Self-attention

一、引入

之前我们的神经网络的input通常是一个vector,现在我们的input变为大小不定的vector set,这样的场景有许多,比如语音信号、图网络等。
1

那么我们的output有如下三种情况,它们都有对应的场景,分别如句子中每个单词词性的判定、句子积极or消极判定、跨语言翻译,我们这里关注情况一。
2

如何处理输入的vector set呢?直观方法是每个vector都通过全连接神经网络(FC),但存在一个问题,比如I saw a saw这个句子,两个saw是同一个单词,但词性不同(一个动词一个名词),所以同样的输入FC怎么会得到不同结果呢?想法是考虑上下文(context),那么就可以使用一个window,但是window大小设定为多少呢?句子很长时window可以包含整个句子吗?显然不好处理。
3

于是,self-attention来啦!我们希望vector经过self-attention后成为嵌入context的vector
4

二、基本实现

假如我们的输入(\(a^i\))输出(\(b^i\))如下图所示,我们如何来衡量输入vector之间的相关性\(\alpha\)呢?
5
6

比如我们计算\(a^2、a^3、a^4\)\(a^1\)的相关性(也称为attention score),方法如下:
7

更进一步,\(a^1\)与自身也存在attention score,计算出所有attention score后,可以通过softmax层进行归一化:
8

我们根据attention score,提取出最后的信息\(b^1\)(即\(a^1\)嵌入context后的输出):
9

三、精简表达

\(Q、K、V\)的计算:
10

attention score的计算:
11

最终输出的计算:
12

因此,整个计算过程概括为:(其中只有\(W^q、W^k、W^v\)是需要学习的parameter)
13

四、进阶知识

之前的self attention中,我们只考虑了一种相关性(one head),其实我们可以假设不同的vector间存在多种相关性(multi head),如下图,存在两种相关性(\(q、k、v\)均有两个,且配套计算):
14
15

最终的输出为:
16

之前的self attention中,我们的vector是没有位置的(编号只是方便表达,vector之间没有远近,无论在哪里计算均一样);如果我们想把位置考虑进去呢?可以使用位置向量进行处理,即每个vector(或position)都加上一个独一无二的position vector:
17

五、应用

语音应用:
18

图像应用
19

六、对比

self-attention V.S. CNN
20
21

self-attention V.S. RNN
22

self-attention V.S. GNN
23

posted @ 2021-12-03 09:53  MyAJY  阅读(194)  评论(0)    收藏  举报