權重形成機制不同?
拿NLP中序列建模來做個例子,有幾點區別:
但由於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:
1.https://arxiv.org/abs/1901.10430
2.https://arxiv.org/abs/2002.03184
首先attention是一種機制,不同語境下,可以是完全不一樣的東西。
而1d convolution就是個操作符而已。
如果你把1d conv看某種加權之後在加和的操作,好像表面上和attention的幹活有點兒類似。
但是就算這麼附會的理解,也不對。
1d conv沒有key的概念,給定hidden states,過一遍1d conv那結果始終都是不變的。
卷積是固定參數,推理階段對於所有輸入都作用一樣的權重
attention的權重由輸入特徵所決定,所以對於不同的樣本,權重不一樣
參照另一個問題的回復。
深度學習中Attention與全連接層的區別何在? - 哈哈哈的回答 - 知乎
attention模塊獲得的權重,對於不同的樣本,是不同的;與之相反,一維卷積層中的權重,對於任意樣本,都是相同的。
在attention模塊中,為什麼要對不同的樣本,施以不同的權重呢?
舉個例子,在下面兩張圖片中,鷹在圖片中的位置是不同的。如果我們希望演算法既能捕捉到左圖的鷹,又能捕捉到右圖的鷹,我們就希望這個演算法能夠根據每個樣本的特點,對每個樣本內部的不同位置,施加不同的權重。
通常的attention,例如SENet,都是學習得到一組權重,然後進行特徵加權的形式。
但是,attention可以不是特徵加權的形式,也可以是「軟閾值化」的形式。
舉個例子,attention可以用來生成軟閾值函數所需的閾值,用軟閾值函數來進行特徵的非線性變換,以應對各個樣本中雜訊強度不同的情況(深度殘差收縮網路[1])。