注意力機制
RNN編碼-解碼模型
論文[1]中,從RNN編碼-解碼模型演進出注意力機制炕柔。RNN編碼-解碼模型中,編碼器輸入序列象缀,
是編碼器RNN在
時刻的隱狀態(tài)(hidden state),
隱狀態(tài)序列的生成向量(編碼)
其中和
都是非線性函數(shù)爷速。
解碼器用來預(yù)測下一個央星,定義了一個條件概率
其中解碼器輸出,對RNN有
其中是解碼器RNN在
時刻的隱狀態(tài)惫东。
注意力機制
定義(3)中的條件概率為
是RNN在
時刻的隱狀態(tài)莉给。
這里條件概率依賴的是上下文向量(context vector),在每個
是不同的廉沮。
權(quán)重
其中
這種調(diào)整模型(alignment model)對輸入在位置和輸出在位置
的匹配程度進行打分颓遏。
查詢-鍵-值
RNN編解碼結(jié)構(gòu)的例子
根據(jù)(8)注意力的權(quán)重分?jǐn)?shù)(attention scores)取決于編碼RNN狀態(tài)和解碼RNN狀態(tài)
。則獲取attention scores
需要計算這個網(wǎng)絡(luò)
次滞时,其中編碼序列長度
叁幢,解碼序列長度
。
可以考慮把和
先投影到同一個空間漂洋,再定義個這個空間內(nèi)的測度(如點乘)來計算attention scores[2]遥皂。除了用“Dot-Product Attention”,也可以用其他測度刽漂,如“additive attention”演训。其他形式的可以參考[3]。
這樣只要計算次
贝咙,
次
样悟,再矩陣乘法即可。這兩個投影就是[4][5]里面提到的查詢(query)和鍵(key)庭猩。
公式(10)來自論文[4]窟她,是縮放因子,所以這種注意力稱之為“Scaled Dot-Product Attention”蔼水。容易看出震糖,值
對應(yīng)的是
,(對解碼器)查詢
對應(yīng)
趴腋,(對編碼器的)鍵
對應(yīng)
吊说。鍵
就是值
在某個空間上的投影∮啪妫可以參考論文[6]的中2.2節(jié)Self-Attention颁井,寫的很明確。論文中提出“Relative Position Representations”蠢护,相等于限定了attention的“感受視野”雅宾。
Self-Attention
論文[4]中,沒有用RNN的編碼-解碼結(jié)構(gòu)葵硕,而是“self-attention”眉抬,和
的獲取更直接:對每個不同的輸入元素(單詞)都對應(yīng)一個Query向量贯吓,一個Key向量,一個Value向量蜀变。這三個向量都是輸入單詞的embedding向量乘以投影矩陣
宣决,
,
得到的[5]昏苏。
寫成矩陣的形式[5]。
所以公式(10)的形式如下威沫。
這樣贤惯,一個單詞的attention包含了來自其他單詞的編碼。
Multi-Headed Attention
論文[4]提出的“multi-headed” attention是對“self-attention layer”的擴展棒掠。self-attention中可能把大部分權(quán)重集中到一個輸入單詞上孵构,而事實上可能有多個關(guān)聯(lián)的單詞。Multi-headed attention采用多組矩陣獨立計算烟很,得到多組颈墅,然后把多組
聯(lián)接起來組成一個矩陣,方便前向-后向傳遞(詳見[5])雾袱。只有第一個“head”需要輸入embeddings
恤筛,后面的輸入上一個的輸出
即可[5]。
如下表對“it”進行編碼時芹橡,一個attention head焦點在“the anima”毒坛,另一個attention head在“tired”。采用多個attention head更容易表示某個輸入單詞林说。
2 single self-attention layer | Multi-headed attention |
---|---|
總結(jié)
序列到序列的編碼-解碼結(jié)構(gòu)中煎殷,引入注意力機制來建立對某一個輸出和一系列輸入(的編碼)直接的關(guān)系。查詢和鍵分別對應(yīng)兩個張量(tensor)腿箩,可以看作是輸入的數(shù)據(jù)/編碼/狀態(tài)序列和輸出的數(shù)據(jù)/編碼/狀態(tài)序列在某個空間上的投影豪直。值對應(yīng)輸入的數(shù)據(jù)/編碼/狀態(tài)序列,鍵可以看作是值的投影珠移。鍵和值可以完全相等[7]弓乙,也可以是同源對不同空間的投影張量。查詢對應(yīng)輸出剑梳,對應(yīng)target唆貌,對應(yīng)解碼器;鍵和值對應(yīng)輸入垢乙,對應(yīng)source锨咙,對應(yīng)編碼器。對于self-attention特例追逮,查詢也對應(yīng)輸入酪刀,來獲取輸入序列(可以是數(shù)據(jù)/編碼/狀態(tài))的某個輸入元素和序列中相鄰其他元素的關(guān)系粹舵。
附錄
其他例子
Image Transformer
把用注意力機制來生成文本的方法應(yīng)用到生成圖像[8](提高分辨率、修復(fù)骂倘、補足)眼滤。生成的像素點對應(yīng)的某個通道的數(shù)值取決于原始像素點數(shù)據(jù)
、前后生成的數(shù)據(jù)
和位置編碼
從公式可以看出構(gòu)成了self-attention历涝。因為是圖像處理诅需,文中還介紹了1D attention和2D attention。
并行計算
前面提到過荧库,用“Dot-Product Attention”可以減少計算量堰塌、增加并行度。由于序列的相關(guān)性分衫,生成
前需要生成
场刑,這不利于并行計算。訓(xùn)練時候因為標(biāo)記已知蚪战,根據(jù)前面符號的條件概率可以并行計算牵现,但解碼時只能順序計算
。
為了解決這個問題邀桑,[9]提出用一組離散的隱變量(discrete latent variables):來綜合
的相對信息瞎疼,
,通常
壁畸。目標(biāo)是可以獨立地由
來重構(gòu)
的每個元素丑慎,實現(xiàn)并行計算。這需要一個自編碼(autoencode)把
編碼為
瓤摧。隱變量通常是連續(xù)的竿裂,期望
是離散的,通常有三種方法來使用這些離散隱變量
- Gumbel-Softmax
- VQ-VAE
- Improved semantic hashing
作者比較驗證了這幾種方法照弥,還提出了decomposed vector quantization (DVQ)腻异,比VQ-VAE好[9]。
論文[10]中这揣,通過使用“memory-compressed attention”減少了和
參與計算的參數(shù)簡化了計算(下圖中間)悔常。使用“l(fā)ocal attention”,把長序列分成幾個短的子序列给赞,并行運算后再融合(下圖最右)机打。
Reference
-
Neural Machine Translation by Jointly Learning to Align and Translate ?
-
what-exactly-are-keys-queries-and-values-in-attention-mechanisms ?
-
Effective Approaches to Attention-based Neural Machine Translation.pdf ?
-
Self-Attention with Relative Position Representations ?
-
Depthwise Separable Convolutions for Neural Machine Translation ?
-
Image Transformer ?
-
Fast Decoding in Sequence Models using Discrete Latent Variables ? ?
-
Generating Wikipedia by Summarizing Long Sequences ?