Self-attention

自注意力机制(Self-attetion):

当神经网络的输入是一系列向量,而且不同向量之间有一定的关系,我们需要训练的网络需要充分发挥这些关系,以获得满意的输出结果;

Self-attention_第1张图片

这里重点关注第一种,每一个vector都对应一个label,因此他也被成为sequence labeling;例如下面这个例子,判断一句话中每个词的词性,可以发现两个saw单词的输出词性是不一样的,这说明我们不经要考虑各个输入(vetor),也应该考虑各个输入之间的内在关系,才能获得满意的结果;

Self-attention_第2张图片

按照FC网络着手,我们可以引入window机制,来体现各个输入的连接,其余使用fully connection,这样的话window如果过小,只能表达很小的输入内在联系,若window大,则参数量过大,运算量大,还容易过拟合;

Self-attention_第3张图片

随着引入Self-attention,他充分考虑了context前后文关系,并且self-attention机制可以在网络的不同地方插入,多次插入;

Self-attention_第4张图片

其中关键部分就是通过各个输入向量,得到各个输出的同时需要考虑各个向量之间的相关性;首先我们需要解决如何表达相关性;

Self-attention_第5张图片

表达相关性的方式有很多,这里使用dot-product;用来表示相关性,也叫做attention-score;

Self-attention_第6张图片

以下面四个输入为例,a1a2a3a4,分别计算相关性,得到的11121314代表着a1分别和四个输入的相关性(这里a1和自身也会计算相关性,所以有四个),在通过soft-max操作,得到';通过soft-max并不会影响关联性大小的改变;

Self-attention_第7张图片

所以最后得到的一系列’在乘以v就能得到最后的b;这里可以发现如果a1和a2的关联性很强,则b1会和v2很接近,因为12’占主导地位;

Self-attention_第8张图片

最终四个输入能得到四个输出如下,这里b1到b4不是依次产生的,是可以同时计算得到;

Self-attention_第9张图片

从矩阵运算的角度理解,self-attention整个从输入I到输入O的运算如下图所示,可以发现这里大部分的结构已经被预先设定了,我们需要学习的参数只有三个矩阵,

Self-attention_第10张图片

Multi-head self-attention,产生了多个qkv来表示不同形式的相关性,如图是head=2时,都用双倍的参数来更全面的表达两个输入之间的相关性,最后也可以通过矩阵运算得到,对应输出;

Self-attention_第11张图片

但是self-attention机制本身没有包括位置的咨询,如果任务的位置信息重要时,需要引入positional encoding;在输入前面加入一个来表示位置,但是向量的表示多样;

Self-attention_第12张图片

Self-attention在transformer和BERT中都有很好的应用,它特别对NLP问题非常有效;

它也可以应用在speech中,可能会截断某些输入之间的关联,被称为Truncated Self-attention;

Self-attention_第13张图片

它也可以应用在Image中,一个三通道的图像,就可以被看作一系列向量输入;

Self-attention_第14张图片

可以发现self-attention和CNN的思想其实比较类似:CNN就是简化版的Self-attention,或者Self-attention是复杂版的CNN;

Self-attention_第15张图片

回到问题,对于一系列的输入向量,也可以用RNN来解决,但是RNN的输入是nonparallel的,而Self-attention是parallel输入的;而且RNN随着输入时间间隔很难考虑比较远的输入相关性,而Self-attention可以避免这类问题;

Self-attention_第16张图片

它还可以应用在Graph上面,只需要考虑相连接的nodes,减少参数,这就是GNN;

Self-attention_第17张图片

你可能感兴趣的:(神经网络)