各式各样的Attention

各式各样的Attention_第1张图片

Self-attention 有很多变形如上图所示,有很多研究都在关注如何在破坏精准度的情况下减少计算量;

各式各样的Attention_第2张图片

在之前介绍的Self-attention机制中,当N(sequence的长度)的数值比较大,这里计算N*N有很大的运算量。并且当N较大时,虽然self-attention只是网络中的一个模块,它也会主导网络的运算量;经常这些加速的self-attention会运用在图像领域;

各式各样的Attention_第3张图片

为了减少运算量,提出以下几种方法:

1Local Attention/ Truncated Attention

在计算时只关注很小的区域范围,这和CNN非常类似;

各式各样的Attention_第4张图片

2Stride Attention

这里空几格是可以基于经验调整;

各式各样的Attention_第5张图片

3Global Attention

设置特殊的token;

各式各样的Attention_第6张图片

Longformer:就是Local Attention加Stride Attention加Global Attention;

Big Bird:在Longformer基础上再加Random attention;

各式各样的Attention_第7张图片

Attention 里面并不是所有值都比较大,我们如果可以估计哪些q和k组合能形成较大的值,就可以省略计算小的value,直接计算大的value,这样的就可以减少运算量。

各式各样的Attention_第8张图片

Reformer/Routing Transformer:使用Clustering进行聚合,只需要计算同类的weight可以减少运算量;

各式各样的Attention_第9张图片
各式各样的Attention_第10张图片

Sinkhorn Sorting Network:它用一个学习出来的模块来决定哪些权重需要被计算;而且右侧的学习模块是解析度比较低的对应到左侧解析度高的矩阵,这样可以用少的计算量映射到大图中;

各式各样的Attention_第11张图片

Linformer:由于很多重复的列,或许我们不需要计算所有,可以减少一部分K;

各式各样的Attention_第12张图片

因此我们减少K的数量,这里我们不能减少Query,因为它会影响我们最终输出的长度;

各式各样的Attention_第13张图片

所以我们可以用Linformer中提到的方法用一个N*K的矩阵来减少K的数量;

Compressed Attention:用到了Conv卷积来进行压缩;

各式各样的Attention_第14张图片

通过下图可以发现,矩阵的计算顺序改变一下,两种方法得到的结果一样但是计算量却不一样。

各式各样的Attention_第15张图片

由于上述的表示是除去softmax的,现在继续加入softmax模块:将这个计算过程转化;

各式各样的Attention_第16张图片

所以整个计算的流程变成:

各式各样的Attention_第17张图片

而且不同的paper都有自己不同的转化过程:

各式各样的Attention_第18张图片

Synthesizer:全部把它当作需要训练的参数;

各式各样的Attention_第19张图片

最后Summary如下:

各式各样的Attention_第20张图片

你可能感兴趣的:(深度学习,人工智能)