為了便於描述,將attention機制的三元組定義為 ,並且通常情況下 與 等價。整個計算過程可分為三步:
1. 計算 與每個 的相關性 ;
2. 權重歸一化 ;
3. 加權求和 .
其中, 為標量, 為序列長度, 為相關性函數。常見的相關性函數有:
Multiplicative:
Additive: MLP:
單純的從attention機制計算上來看,介紹到這裡其實核心的東西都闡明瞭,attention無非就是想捕捉到序列中最相關 的信息。
但是,如果僅僅到這裡的話,那也不值得深夜碼字了。說好的拋磚引玉,還沒拋呢,接下來纔是本文的重點!
2. 拋磚
註:本小節僅為個人觀點,如有好的想法,歡迎討論交流。
注意到,上節在總結attention機制的時候,用了最相關 這個詞,我們可以思考一下這個最相關是怎麼來的?
首先,直觀上看,相關性函數計算得分越高,則該位置的信息越重要。
其次,由於相關性函數 同時也是 的函數,這也就意味著,相關性得分與 聯繫緊密。而這正是本文所要深入探討的點。
磚一:在attention機制三元組 中, 類似於一個監督信號 ,並且一個有意義的 是attention機制的關鍵;
磚二:從概率論的角度出發,attention的權重 可以看作是給定監督信號 下的條件概率分佈 ,加權求和的輸出 即為條件期望 。
第二條相對容易理解,下面簡要分析下第一條:
首先,對於機器翻譯,decoder中每前一時刻的隱狀態 作為監督信號 。對於問答場景,question本身即是天然的監督信號 。它們的核心思想都是通過 的作用 ,去捕捉最相關的信息;
其次,對於文本分類和匹配等任務,由於不存在類似上述的天然監督信號 ,那麼如何去尋找 成為attention機制能否奏效的關鍵所在。
讀過相關論文的同學都知道,既然沒有這樣的天然監督信號,那我就隨機初始化定義一個 ,隨著樣本一起訓練,接下來把時間交給神經網路就好啦。
這肯定是個好想法,充分利用神經網路的學習能力,嘗試去擬合任務內在的監督信號 。但是這種做法存在兩個問題:
魯棒性和泛化能力有待考究。訓練完, 是一個固定的表徵,模型推理時對於任意的輸入,該監督信號是否都能夠get到關鍵信息;
單個監督信號表徵的信息不充分。單個static監督信號無法cover整個特徵空間,只能捕捉到某一層面的信息。
3. Basic-Attention的變體
既然上面講了那麼多Basic-Attention存在的問題,那麼接下來就得講講該如何緩解這些問題。主要介紹兩個思路。
其一,定義單個監督信號 所能表徵的信息不夠充分,那麼最直接的做法就是定義多個監督信號,期望每個監督信號都能捕捉到不同層面的信息。這塊工作的經典論文為「A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING」,文中還順帶提出一個有意思的正則項,用來迫使每個監督信號分別attention到不同信息。
A Structured Self-attentive Sentence Embedding ?
arxiv.org
其二,可訓練的監督信號訓練結束後是固定的,我們期望可以根據具體的輸入文本,動態的調整監督信號,提高模型的魯棒性和泛化能力。這個方向還沒有出現較為成熟的方案,此處給大家推薦一篇dynamic self-attention作為參考。作者結合multi-head的形式取得了較好的結果,鏈接如下。
Dynamic Self-Attention : Computing Attention over Words Dynamically for Sentence Embedding ?
arxiv.org
延續前文思路,個人認為attention機制後續發展的關鍵還是在於如何去定義或者生成動態自適應的監督信號 。
最後,有同學可能會有疑惑,談attention,怎麼能不提到Transformer中的attention結構呢?簡單說兩句我個人的理解,Transformer中的 三者都來自其自身的表徵 ,捨棄LSTM,轉而利用「self-attention」來表徵每個詞與其上下文的聯繫。encoder中的多個block可以看作是多層級聯的BiLSTM。
推薦閱讀: