目錄
1.簡介
注意力機制(Attention Mechanism)源於對人類視覺的研究。在認知科學中,由於信息處理的瓶頸,人類會選擇性地關注所有信息的一部分,同時忽略其他可見的信息。上述機制通常被稱爲注意力機制
綜上,注意力機制主要有兩個方面:決定需要關注輸入的哪部分;分配有限的信息處理資源給重要的部分。
在深度學習中,注意力可以藉助重要性權重向量來實現:在預測或推斷一個元素時,如圖片中的像素點或句中的一個詞,我們使用注意力向量來判斷,它與其他元素有多強的關聯性,然後對加權後的向量求和以逼近最後的目標值(target)。
2.注意力機制的誕生
注意力機制最早於2014年在計算機視覺中提出。但是本文的討論以機器翻譯任務上的seq2seq模型爲例。
Seq2Seq模型: 將一個輸入序列(source)轉化爲另一個序列(target),兩個序列都可以是不定長的。
場景:
- 多語言機器翻譯(文本或語音)
- 問答對話對話生成系統
- 將句子解析爲語法樹
結構:循環神經網絡結構
- 編碼器:處理序列輸入並壓縮信息到一個固定長度的上下文向量中。上下文向量被當做是輸入序列的語義概要。
- 解碼器:由上下文向量初始化,並每次產生一個轉碼輸出。
源輸入和目標輸出的語義對齊問題由上下文向量學習和控制。上下文向量處理三方面的信息:
- 編碼器的隱藏狀態
- 解碼器的隱藏狀態
- 源輸入和目標輸出的對齊
缺點: 固定長度上下文向量無法記憶長句子。
解決方法: 提出注意力機制(Bahdanau 2015)。注意力機制考慮了上下文向量和所有序列輸入的信息,構建了“連接”。每一個輸出元素下的連接的權重都是自動學習的。上下文向量已經考慮了整體輸入序列信息,不需要擔心遺忘的問題。
3.不同類別的計算原理
計算步驟:
- 在所有輸入信息上計算注意力分佈
- 根據注意力分佈來計算輸入信息的加權平均
3.1.普通模式注意力
定義:
- 和任務有關的查詢向量
- 注意力變量表示被選擇信息的索引位置。即表示選擇了第個輸入信息
- 在給定和下,選擇第個輸入信息的概率稱爲注意力分佈(Attention Distribution)
- 爲注意力打分函數
計算注意力分佈:
注意力打分函數:
- 加性模型
- 點積模型
- 縮放點積模型
- 雙線性模型
其中,爲可學習的網絡參數,爲輸入信息的維度。
理論上,加性模型和點積模型的複雜度差不多,但是點積模型在實現上可以更好地利用矩陣乘積,從而計算效率更高。但當輸入信息的維度比較高,點積模型的值通常有比較大方差,從而導致softmax函數的梯度會比較小。因此,縮放點積模型可以較好地解決這個問題。雙線性模型可以看做是一種泛化的點積模型。假設,雙線性模型可以寫爲,即分別對和進行線性變換後計算點積。相比點積模型,雙線性模型在計算相似度時引入了非對稱性。
加權平均:
注意力分佈可以解釋爲在給定任務相關的查詢時,第個信息受關注的程度。
3.1.1.軟性注意力
我們採用一種“軟性”的信息選擇機制對輸入信息進行彙總,其選擇的信息是所有輸入信息在注意力分佈下的期望。
注意: 上面這個公式,被稱爲軟性注意力機制(Soft Attention Mechanism)。
3.1.2.硬性注意力
只關注到某一個位置上的信息。
實現方式1: 選取最高概率的輸入信息
實現方式2: 在注意力分佈式上隨機採樣
缺點: 基於最大采樣或隨機採樣的方式來選擇信息。因此最終的損失函數與注意力分佈之間的函數關係不可導,無法使用在反向傳播算法進行訓練。爲了使用反向傳播算法,一般使用軟性注意力來代替硬性注意力。
3.2.鍵值對模式:鍵值對注意力
用鍵值對(key-value pair)格式來表示輸入信息,其
中“鍵”用來計算注意力分佈,“值”用來計算聚合信息。
- 個輸入信息:
- 給定任務相關的查詢向量
- 爲打分函數
注意力函數爲:
注意: 當時,鍵值對模式就等價於普通的注意力機制。
3.3.多頭注意力(Multi-Head Attention)
利用多個查詢,來平行地計算從輸入信息中選取多個信息。每個注意力關注輸入信息的不同部分。
其中,表示向量拼接。
3.4.結構化注意力
要從輸入信息中選取出和任務相關的信息,主動注意力是在所有輸入信息上的多項分佈,是一種扁平(flat)結構。
如果輸入信息本身具有層次(hierarchical)結構,比如文本可以分爲詞、句子、段落、篇章等不同粒度的層次,我們可以使用層次化的注意力來進行更好的信息選擇[Yang et al., 2016]。
此外,還可以假設注意力上下文相關的二項分佈,用一種圖模型來構建更復雜的結構化注意力分佈[Kim et al., 2017]。
4.應用
注意力機制一般可以用作一個神經網絡中的組件。
4.1.指針網絡
注意力機制主要是用來做信息篩選,從輸入信息中選取相關的信息。
注意力機制可以分爲兩步:一是計算注意力分佈,二是根據來計算輸入信息的加權平均。
我們可以只利用注意力機制中的第一步,將注意力分佈作爲一個軟性的指針(pointer) 來指出相關信息的位置。
指針網絡(Pointer Network)[Vinyals et al., 2015] 是一種序列到序列模型。
輸入是長度爲的向量序列
輸出是輸入序列的下標/索引序列,其中。
比如下圖中,輸入爲20, 5, 10,輸出爲1, 3, 2。
條件概率
其中,條件概率可以通過注意力分佈來計算。
假設用一個循環神經網絡對進行編碼得到向量,則
其中,爲可學習的參數,爲在解碼過程的第步時,每個輸入向量的未歸一化的注意力分佈。
其實我有點沒看懂……
4.2.自注意力模型
當使用神經網絡來處理一個變長的向量序列時,通常可以使用卷積網絡或循環網絡進行編碼來得到一個相同長度的輸出向量序列。它們是一種局部的編碼方式,只建模了輸入信息的局部依賴關係。
雖然循環網絡理論上可以建立長距離依賴關係,但是由於信息傳遞的容量以及梯度消失問題,實際上也只能建立短距離依賴關係。
建立輸入序列之間的長距離依賴關係:
- 增加網絡的層數,通過一個深層網絡來獲取遠距離的信息交互
- 使用全連接網絡。全連接網絡是一種非常直接的建模遠距離依賴的模型,但是無法處理變長的輸入序列。不同的輸入長度,其連接權重的大小也是不同的。這時我們就可以利用注意力機制來“動態”地生成不同連接的權重,這就是自注意力模型(Self-Attention Model)。
計算原理:
輸入序列
輸出序列
- 首先,通過線性變換得到三組向量序列:
,爲查詢向量序列
,爲鍵向量序列
,爲值向量序列
其中,分別爲可學習的參數矩陣。 - 計算輸出向量:
其中爲輸出和輸入向量序列的位置,連接權重由注意力機制動態生成。
如果使用縮放點積來作爲注意力打分函數,輸出向量序列可以寫爲
評價:
自注意力模型可以作爲神經網絡中的一層來使用,有效地建模長距離依賴問題。既可以用來替換卷積層和循環層[Vaswani et al., 2017],也可以和它們一起交替使用[Shen et al., 2018](比如可以是卷積層或循環層的輸出)。
自注意力模型計算的權重只依賴和的相關性,而忽略了輸入信息的位置信息。因此在單獨使用時,自注意力模型一般需要加入位置編碼信息來進行修正[Vaswani et al., 2017]。
參考
https://www.jianshu.com/p/c9490f9e59ba
https://blog.csdn.net/joshuaxx316/article/details/70665388
https://www.jianshu.com/p/9b922fb83d77
https://blog.csdn.net/tg229dvt5i93mxaq5a6u/article/details/78422216