问题

Attention跟一维卷积的区别是啥?

权重形成机制不同?

高质量回答

 

莫驚蟄前咨询民工,现苦逼博士https://www.zhihu.com/question/288081659/answer/1222002868Attention跟一维卷积有什么区别?_Attention拿NLP中序列建模来做个例子,有几点区别:1、Context Window:因为一维卷积需要指定窗口的大小,比如图中,就是每次只看3个词。而且attention,这里是self-attention,他的context window是“无限”的,无限是指序列的长度是多少,窗口的大小就是多少,因为attention权重的计算涉及到一个序列里面所有的词。如上图所示,句子有5个词,窗口大小就是5. 所以一维卷积是“local”的,attention可以说是“global”的。2、Time Complexity:这个其实也是刚才的窗口大小不同导致的,因为一维卷积只看k个词(窗口大小为k),如果序列长度为n,那么复杂度就是kn。而attention因为在每个位置,每个词的权重计算都要考虑到所有的词,所以复杂度就是n^2.3、Dynamic Weights: 和二维卷积一样,一维卷积的权重是不变的,就是不会随着在序列位置中的变化而改变,但是attention不一样,每个位置的权重都是不一样的,attention scores(weights)是由dot-product计算出来的,具体地, softmax(qk/d^1/2).但由于self-attention复杂度高,对长序列建模效果没有那么好,所以对一维卷积有很多改进的工作,比如上图的Pay Less Attention with Lightweight and Dynamic Convolutions (ICLR19, FAIR)1。还有比较新的Time-aware Large Kernel Convolutions (TaLK)2。在NMT,LM等任务上的效果都能和attention-based模型扳手腕。基本上就从动态权重和动态窗口大小上面对一维卷积进行改进,而另一方面又有一些对attention的改进工作,比如将无限窗口限制一下,或者层次化一下,有太多文章这里就不赘述了。Ref:https://arxiv.org/abs/1901.10430https://arxiv.org/abs/2002.03184树朋数据分析,自然语言处理https://www.zhihu.com/question/288081659/answer/1227308595

如果只是从运算的算子看,也就是矩阵乘法的角度看,区别不是很大。所以,可以继承同一个实现。

 

attention输入的key vector 和query matrix,得到的是attention score logits。一维卷积也是类似的。卷积操作在自然语言处理中也不算少见,比如TextCNN,还有ELMO中的char CNN,你看过代码的话,其实也就是卷积核乘以输入,然后卷积核高度为1,宽度为对应的嵌入长度。

 

如果说区别,那么第一就是输入的特征的意义是什么?第二就是输出的特征的意义是什么,以及应该如何处理这种特征。

 

比如key dot product query得到的是相似度,attention list要归一化,甚至在transformer中要先对attention score的方差归一化,然后再做softmax归一化。一维卷积得到的是信息提取,所以对于卷积得到的feature map,为了更有效的提取信息,需要池化。

 

当然,这里只是说了最简单的点积attention。你看过Luong论文的话会了解到更加丰富的attention实现。

 

总的来说,你有这样的疑问,应该也是了解了一些的,在知其然的基础上多研究一下所以然会帮助更大,特别是未来某一天你需要定制自己的attention或者有效特征提取器的时候。

 

 

Attention跟一维卷积有什么区别?_Attention_02