1.attention
與人類學習相同,機器學習過程中我們也希望能有側重點,核心目標也是從眾多信息中選擇出對當前任務目標更關鍵的信息。所以就有了Attention的出現。
2.Encoder-Decoder框架
在學習attention模型之前,我們先回憶encoder-decoder框架。
如果我們把中間語義編碼C換成根據當前輸出來調整成加入注意力模型的變化的Ci,那么增加了注意力模型的Encoder-Decoder框架如下:
3.Attention機制的本質思想
下面我們來看下注意力模型的Encoder-Decoder框架Ci具體是什么。
Attention函數的本質可以被描述為一個查詢(query)到一系列(鍵key-值value)對的映射。
其計算方式是先計算Query和各個Key的相似性或者相關性(這里用點乘),得到每個Key對應Value的權重系數,然后對Value進行加權求和,即得到了最終的Attention數值。所以本質上Attention機制是對Source中元素的Value值進行加權求和,而Query和Key用來計算對應Value的權重系數
Attention機制的具體計算過程,如果對目前大多數方法進行抽象的話,可以將其歸納為兩個過程:
第一個過程是根據Query和Key計算權重系數,第二個過程根據權重系數對Value進行加權求和。
而第一個過程又可以細分為兩個階段:
第一個階段根據Query和Key計算兩者的相似性或者相關性,求相似性方法有點乘,權重,余弦相似性等;
第二個階段對第一階段的原始分值進行歸一化處理;
可以將Attention的計算過程抽象為三個階段。
4.例子
我們以李宏毅深度學習授課資料:Attention-based Model所講述的機器翻譯為例。
將‘機器學習’翻譯為‘machine learning’
attention其實就是一個當前的輸入與輸出的匹配度,即為h1和z0的匹配度。
h1為當前時刻RNN的隱層輸出向量,而不是原始輸入的詞向量,z0初始化向量,如rnn中的初始記憶。
第一步:求z與h的相似性得到a
第二步:softmax歸一化處理得到概率值a^
第三步:對h加權求和得c
以上便是求attention得3個過程。
那么再算出了co之后,我們就把這個向量作為rnn的輸入(如果我們decoder用的是RNN的話),然后第一個時間點的輸出的編碼z1由co和初始狀態z0共同決定。
將z1替代z0做下一步計算。再和每一個輸入的encoder的vector計算匹配度,然后softmax,計算向量加權,作為第二時刻的輸入……如此循環直至結束。
5.Self-Attention
Self-Attention是Attention的特殊形式。自注意模型其實就是我們前面的query、key和value是相等的。在序列內部做Attention,尋找序列內部的聯系。
例如輸入一個句子,那么里面的每個詞都要和該句子中的所有詞進行attention計算。目的是學習句子內部的詞依賴關系,捕獲句子的內部結構。
6.Self-Attention GAN中的Self-Attention模型
在這個模型中用的就是一個自監督模塊關注全局信息,它的Q、K、V都是相同的是convolution feture map,再計算attention