自然語言處理中的Attention機制
1. 前言
最開始Attention只是人們的直覺,后來被第一次應用到機器翻譯中的詞對其任務中。Attention機制利用每個元素被賦予的重要性評分來對序列數據進行編碼。目前Attention機制有很多的變體,並且應用到了不同的任務中如:情感分類、文本摘要、QA、依存分析等。總的來說,Attention機制可以得到一個上下文編碼,這個編碼是序列向量的加權求和,權重是歸一化的attention分數。與查詢向量匹配度高的向量被賦予更高的權重,所以Attention機制本質也是一種尋址機制。本文嘗試總結Attention機制的原理及其各種變體,希望對讀者有所幫助。
2. Attention機制的第一個應用
傳統的機器翻譯任務[1]是基於Encoder-Decoder結構的,其中Encoder和Decoder都是RNN。然而,使用這樣的結構做機器翻譯任務是有缺陷的。第一個缺陷是RNN網絡具有遺忘性,對於稍微長一點的句子編碼和解碼效果不佳;第二個缺陷是,解碼器在解碼過程中沒有顯示的單詞對其操作,導致其翻譯時注意力被分散在整個序列中。為了解決機器翻譯中的這兩個問題,(Bahdanau, Cho, and Bengio 2014)[2] 最早引進了Attention機制。
如上圖\(b\),在解碼階段對每個詞的解碼時不僅會考慮上一個隱變量,還會考慮一個關注於此單詞的上下文編碼\(c_i\)。這個\(c\)的計算過程是使用上個單詞的隱遍量\(s_{i-1}\)與編碼時所有時間點的隱變量\({h_1, h_2,...,h_n}\)計算重要性評分\({e_1, e_2, ..., e_n}\),這個評分歸一化之后的向量\({\alpha_1, \alpha_2, ..., \alpha_n}\)作為權重,與\({h_1, h_2,...,h_n}\)計算加權和得到。至於\(e\)的計算,圖中使用的是加性方式下面會介紹。
3. Attention的通用定義
上面介紹的是機器翻譯任務。為了形式化Attention機制,這里定義向量序列:
\(V=\{v_i\} \in R^{n*d_v}\),於是關注於\(u\)的上下文編碼\(c\)的計算可以寫為:
其中,\(u\in R^{d_u}\)是與任務相關的查詢向量。\(a(u,v)\)是一個可以學習的對其函數,其輸出是一個用來衡量向量\(u,v\)的匹配質量的數值。(Luong, Pham, and
Manning 2015)[3]給出幾種常用的attention score的計算方式:
乘法
加性
MLP
4. Attention的變體
Attention的變體主要份兩個方向:
- 計算attention score的函數\(a(u,v)\)的設計
- 加權求和時的方式
4.1 計算attention score時的變體
除了第3節中介紹的幾種計算attention score的方式,還有如下幾種變體:
多維的Attention
其實就是將attention機制獨立重復k次,這樣就可以得到k組attention(即attention scores不再是一個向量,而是一個二維矩陣了)、k組c了。這樣的好處是每一組attention的關注點可能有所不同。如果需要將k組c合並成一個,則將其concat起來然后與矩陣進行笛卡爾積就行了。Transformer里面的multi-head就是這么操作的。這樣的模型有一個缺點,多個頭可能關注點可能相同或者相似。為了解決這個問題,(Du et al. 2018; Lin et al. 2017)[4][5]提出使用下面的正則化項:
其中A是Attention矩陣。
Feed-forward Attention
(Raffel, C. and Ellis, D.P., 2015)[6]提出了一種簡單的、無需查詢變量的attention機制。
這種方式直接通過\(h_i\)獲得這個向量的attention score,加權求和得到的向量是句子的表示\(c\)。這個表示去除了不重要的單詞信息同時強化突出重要信息。
計算attention score的函數\(a(h_i)\)是一個可以學習的函數,不過此函數僅僅依賴\(h_i\).
\(a(h_i)\)可以是一個MLP:
或者是利用向量點積(其實就是一個神經元的感知機):
其中\(w \in R^{1*dim}, b \in R\) 是一個可以學習的向量。
層級的Attention
(Yang et al. 2016)[7]使用自底向上的方式獲得文本的向量表示,進而用於分類任務。首先句子中每個單詞進行attention計算獲得這個句子的向量編碼,然后對所有句子進行attention計算獲得文本的向量編碼。
具體地:
其中\(h_i^{(t)}\)為第\(i\)個句子的第\(t\)個單詞, \(v_i\)為第\(i\)個句子的編碼。我們把\(u_w、u_s\)叫做單詞級和句子級的匹配向量。這里attention score的計算方式其實是feed-forward attention方式。
自注意力機制
上面的Attention機制都需要一個查詢向量,而得到的向量\(c\)也是關於這個查詢向量的上下文向量。Transformer(Vaswani et al. 2017)[8]提出了一種不需要查詢向量的Attention機制,即自注意力機制。自注意力機制允許在沒有任何額外信息的情況下通過輸入句子本身獲得句子的上下文向量。
首先,需要重新形式化attention為一下過程(Key,Value and Query):
查詢向量\(q\)與所有的\(k\)計算attention score,歸一化后得到attention作為\(value\)的權重得到最后的Attention Value即為關於查詢向量\(q\)的上下文向量。其實通用的Attention可以看作是上述形式化的k=q=v時的特例。
如何得到\(q、k、v\)呢?
\(q、k、v\)向量由輸入\(x\)本身分別與可以優化的矩陣\(W^Q、W^K、W^V\)進行笛卡爾集得到。attention的計算過程和其他的計算過程是類似的,Transformer中計算attention score的方式是維度歸一化后的余弦相似度(\(q^Tk/\sqrt {dim}\))。
基於記憶的Attention
在介紹自注意力的那一小結中介紹了Q-K-V的Attention結構,其實這就是所謂的Memory-based attention.
4.2 加權時的變體
Soft attention、global attention、動態 attention
以上三種就是attention 通用定義中的注意力機制。在得到attention score之后對value進行加權而不是選擇其中權重最大的,所以被稱為soft attention。同時,這種機制考慮了所有的value,所以被稱為global attention。而被成為動態attention,是因為每次查詢都會重新計算attention。
Hard attention
Hard attention的思想是在尋址時不再考慮所有value的加權求和,而是只考慮用最重要的value來表示上下文向量。這個value可以是通過取最大attention權重的value,也可以是通過對attention score表示的多項式分布采樣得到的value。Hard attention並不常見,因為有max pooling或者采樣操作,所以整個模型不再可微,需要通過方差約歸或者強化學習等技術來幫助訓練。
local attention
(Luong et al. 2015)[9]提出了局部注意力和全局注意力機制。由於全局注意力需要考慮所有的value的加權和,計算量大。所以考慮只在一個窗口內進行加權求和,即局部注意力。
注:本文主要參考(Hu 2018)[10]的綜述完成。
References:
Kalchbrenner, N. and Blunsom, P., 2013, October. Recurrent continuous translation models. In Proceedings of the 2013 Conference on Empirical Methods in Natural Language Processing (pp. 1700-1709). ↩︎
Bahdanau, D., Cho, K. and Bengio, Y., 2014. Neural machine translation by jointly learning to align and translate. arXiv preprint arXiv:1409.0473. ↩︎
Luong, M.T., Pham, H. and Manning, C.D., 2015. Effective approaches to attention-based neural machine translation. arXiv preprint arXiv:1508.04025. ↩︎
Du, J.; Han, J.; Way, A.; and Wan, D. 2018. Multi-level structured self-attentions for distantly supervised relation extraction. arXiv preprint arXiv:1809.00699. ↩︎
Lin, Z.; Feng, M.; Santos, C. N. d.; Yu, M.; Xiang, B.; Zhou, B.; and Bengio, Y. 2017. A structured self-attentive sentence embedding. arXiv preprint arXiv:1703.03130. ↩︎
Raffel, C. and Ellis, D.P., 2015. Feed-forward networks with attention can solve some long-term memory problems. arXiv preprint arXiv:1512.08756. ↩︎
Yang, Z.; Yang, D.; Dyer, C.; He, X.; Smola, A.; and Hovy, E. 2016. Hierarchical attention networks for document classification. In Proceedings of the 2016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, 1480–1489. ↩︎
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A.N., Kaiser, Ł. and Polosukhin, I., 2017. Attention is all you need. In Advances in neural information processing systems (pp. 5998-6008). ↩︎
Luong, M.T., Pham, H. and Manning, C.D., 2015. Effective approaches to attention-based neural machine translation. arXiv preprint arXiv:1508.04025. ↩︎
Hu, D., 2019, September. An introductory survey on attention mechanisms in NLP problems. In Proceedings of SAI Intelligent Systems Conference (pp. 432-448). Springer, Cham. ↩︎