注意力機制
注意力機制(英語:attention)是人工神經網絡中一種模仿認知注意力的技術。這種機制可以增強神經網絡輸入數據中某些部分的權重,同時減弱其他部分的權重,以此將網絡的關注點聚焦於數據中最重要的一小部分。數據中哪些部分比其他部分更重要取決於上下文。可以通過梯度下降法對注意力機制進行訓練。
類似於注意力機制的架構最早於1990年代提出,當時提出的名稱包括乘法模塊(multiplicative module)、sigma pi單元、超網絡(hypernetwork)等。[1]注意力機制的靈活性來自於它的「軟權重」特性,即這種權重是可以在運行時改變的,而非像通常的權重一樣必須在運行時保持固定。注意力機制的用途包括神經圖靈機中的記憶功能、可微分神經計算機中的推理任務[2]、Transformer模型中的語言處理、Perceiver(感知器)模型中的多模態數據處理(聲音、圖像、視頻和文本)。[3][4][5][6]
概述
假設我們有一個以索引 排列的標記(token)序列。對於每一個標記 ,神經網絡計算出一個相應的滿足 的非負軟權重 。每個標記都對應一個由詞嵌入得到的向量 。加權平均 即是注意力機制的輸出結果。
可以使用查詢-鍵機制(query-key mechanism)計算軟權重。從每個標記的詞嵌入,我們計算其對應的查詢向量 和鍵向量 。再計算點積 的softmax函數便可以得到對應的權重,其中 代表當前標記、 表示與當前標記產生注意力關係的標記。
某些架構中會採用多頭注意力機制(multi-head attention),其中每一部分都有獨立的查詢(query)、鍵(key)和值(value)。
語言翻譯示例
下圖展示了將英語翻譯成法語的機器,其基本架構為編碼器-解碼器結構,另外再加上了一個注意力單元。在圖示的簡單情況下,注意力單元只是循環層狀態的點積計算,並不需要訓練。但在實踐中,注意力單元由需要訓練的三個完全連接的神經網絡層組成。這 三層分別被稱為查詢(query)、鍵(key)和值(value)。
|
下表是每一步計算的示例。為清楚起見,表中使用了具體的數值或圖形而非字母表示向量與矩陣。嵌套的圖形代表了每個h都包含之前所有單詞的歷史記錄。在這裡,我們引入注意力分數以得到所需的注意力權重。
步 | x | h, H = 編碼器輸出 大小為500×1的向量,以圖形表示 |
s = 解碼器提供給注意力單元的輸入 | 對準分數 | w = 注意力權重 = softmax(分數) |
c = 上下文向量 = H*w | y = 解碼器輸出 |
1 | I | = 「I」的向量編碼 | - | - | - | - | - |
2 | love | = 「I love」的向量編碼 | - | - | - | - | - |
3 | you | = 「I love you」的向量編碼 | - | - | - | - | - |
4 | - | - | 解碼器尚未初始化,故使用編碼器輸出h3對其初始化 |
[.63 -3.2 -2.5 .5 .5 ...] | [.94 .02 .04 0 0 ...] | .94 * + .02 * + .04 * | je |
5 | - | - | s4 | [-1.5 -3.9 .57 .5 .5 ...] | [.11 .01 .88 0 0 ...] | .11 * + .01 * + .88 * | t' |
6 | - | - | s5 | [-2.8 .64 -3.2 .5 .5 ...] | [.03 .95 .02 0 0 ...] | .03 * + .95 * + .02 * | aime |
以矩陣展示的注意力權重表現了網絡如何根據上下文調整其關注點。
I | love | you | |
je | .94 | .02 | .04 |
t' | .11 | .01 | .88 |
aime | .03 | .95 | .02 |
對注意力權重的這種展現方式回應了人們經常用來批評神經網絡的可解釋性問題。對於一個只作逐字翻譯而不考慮詞序的網絡,其注意力權重矩陣會是一個對角占優矩陣。這裡非對角占優的特性表明注意力機制能捕捉到更為細微的特徵。在第一次通過解碼器時,94%的注意力權重在第一個英文單詞「I」上,因此網絡的輸出為對應的法語單詞「je」(我)。而在第二次通過解碼器時,此時88%的注意力權重在第三個英文單詞「you」上,因此網絡輸出了對應的法語「t'」(你)。最後一遍時,95%的注意力權重在第二個英文單詞「love」上,所以網絡最後輸出的是法語單詞「aime」(愛)。
變體
注意力機制有許多變體:點積注意力(dot-product attention)、QKV注意力(query-key-value attention)、強注意力(hard attention)、軟注意力(soft attention)、自注意力(self attention)、交叉注意力(cross attention)、Luong注意力、Bahdanau注意力等。這些變體重新組合編碼器端的輸入,以將注意力效果重新分配到每個目標輸出。通常而言,由點積得到的相關式矩陣提供了重新加權係數(參見圖例)。
1. 編碼器-解碼器點積 | 2. 編解碼器QKV | 3. 編碼器點積 | 4. 編碼器QKV | 5. Pytorch示例 |
---|---|---|---|---|
標籤 | 描述 |
---|---|
變量 X,H,S,T | 大寫變量代表整句語句,而不僅僅是當前單詞。例如,H代表編碼器隱狀態的矩陣——每列代表一個單詞。 |
S, T | S = 解碼器隱狀態,T = 目標詞嵌入。在 Pytorch示例變體訓練階段,T 在兩個源之間交替,具體取決於所使用的教師強制(teacher forcing)級別。 T可以是網絡輸出詞的嵌入,即embedding(argmax(FC output))。或者當使用教師強制進行訓練時,T可以是已知正確單詞的嵌入。可以指定其發生的概率(如1/2)。 |
X, H | H = 編碼器隱狀態,X = 輸入詞嵌入 |
W | 注意力係數 |
Qw, Kw, Vw, FC | 分別用於查詢、鍵、向量的權重矩陣。 FC是一個全連接的權重矩陣。 |
帶圈+,帶圈x | 帶圈+ = 向量串聯。帶圈x = 矩陣乘法 |
corr | 逐列取softmax(點積矩陣)。點積在變體3中的定義是x i * x j ,在變體1中是h i * s j ,在變體2中是 列i(Kw*H) * 列j (Qw*S),在變體4中是 列i(Kw*X) * 列j (Qw*X)。變體5則使用全連接層來確定係數。對於QKV變體,則點積由 sqrt(d) 歸一化,其中d是QKV矩陣的高度。 |
參考文獻
- ^ Yann Lecun. Deep Learning course at NYU, Spring 2020, video lecture Week 6. 事件發生在 53:00. 2020 [2022-03-08]. (原始內容存檔於2023-07-09).
- ^ Graves, Alex; Wayne, Greg; Reynolds, Malcolm; Harley, Tim; Danihelka, Ivo; Grabska-Barwińska, Agnieszka; Colmenarejo, Sergio Gómez; Grefenstette, Edward; Ramalho, Tiago; Agapiou, John; Badia, Adrià Puigdomènech; Hermann, Karl Moritz; Zwols, Yori; Ostrovski, Georg; Cain, Adam; King, Helen; Summerfield, Christopher; Blunsom, Phil; Kavukcuoglu, Koray; Hassabis, Demis. Hybrid computing using a neural network with dynamic external memory. Nature. 2016-10-12, 538 (7626): 471–476 [2022-06-07]. Bibcode:2016Natur.538..471G. ISSN 1476-4687. PMID 27732574. S2CID 205251479. doi:10.1038/nature20101. (原始內容存檔於2022-10-02) (英語).
- ^ Vaswani, Ashish; Shazeer, Noam; Parmar, Niki; Uszkoreit, Jakob; Jones, Llion; Gomez, Aidan N.; Kaiser, Lukasz; Polosukhin, Illia. Attention Is All You Need. 2017-12-05. arXiv:1706.03762 [cs.CL].
- ^ Ramachandran, Prajit; Parmar, Niki; Vaswani, Ashish; Bello, Irwan; Levskaya, Anselm; Shlens, Jonathon. Stand-Alone Self-Attention in Vision Models. 2019-06-13. arXiv:1906.05909 [cs.CV].
- ^ Jaegle, Andrew; Gimeno, Felix; Brock, Andrew; Zisserman, Andrew; Vinyals, Oriol; Carreira, Joao. Perceiver: General Perception with Iterative Attention. 2021-06-22. arXiv:2103.03206 [cs.CV].
- ^ Ray, Tiernan. Google's Supermodel: DeepMind Perceiver is a step on the road to an AI machine that could process anything and everything. ZDNet. [2021-08-19]. (原始內容存檔於2021-10-29) (英語).
- ^ Pytorch.org seq2seq tutorial. [December 2, 2021].
- ^ Luong, Minh-Thang. Effective Approaches to Attention-based Neural Machine Translation. 2015-09-20. arXiv:1508.04025v5 [cs.CL].
- ^ Neil Rhodes. CS 152 NN—27: Attention: Keys, Queries, & Values. 事件發生在 06:30. 2021 [2021-12-22]. (原始內容存檔於2022-10-21).
- ^ Alfredo Canziani & Yann Lecun. NYU Deep Learning course, Spring 2020. 事件發生在 05:30. 2021 [2021-12-22]. (原始內容存檔於2023-03-22).
- ^ Alfredo Canziani & Yann Lecun. NYU Deep Learning course, Spring 2020. 事件發生在 20:15. 2021 [2021-12-22]. (原始內容存檔於2023-03-22).
- ^ Robertson, Sean. NLP From Scratch: Translation With a Sequence To Sequence Network and Attention. pytorch.org. [2021-12-22].