Self-attention

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值