注意力機制是人工神經網路中一種模仿認知注意力的技術。這種機制可以增強神經網路輸入資料中某些部分的權重，同時減弱其他部分的權重，以此將網路的關注點聚焦於資料中最重要的一小部分。資料中哪些部分比其他部分更重要取決於上下文。可以透過梯度下降法對注意力機制進行訓練。 類似於注意力機制的架構最早於 1990 年代提出，當時提出的名稱包括乘法模組（multiplicative module）、sigma pi 單元、超網路（hypernetwork）等。注意力機制的靈活性來自於它的 軟權重 特性，即這種權重是可以在執行時改變的，而非像通常的權重一樣必須在執行時保持固定。注意力機制的用途包括神經圖靈機中的記憶功能、中的推理任務、Transformer 模型中的語言處理、Perceiver（感知器）模型中的多模態資料處理（聲音、影像、影片和文字）。 概述 假設我們有一個以索引 i 排列的標記（token）序列。對於每一個標記 i，神經網路計算出一個相應的滿足 sum_i w_i1 的非負軟權重 w_i。每個標記都對應一個由詞嵌入得到的向量 v_i。加權平均 sum_i w_i v_i 即是注意力機制的輸出結果。 可以使用查詢 鍵機制（querykey mechanism）計算軟權重。從每個標記的詞嵌入，我們計算其對應的查詢向量 q_i 和鍵向量 k_i。再計算點積 q_i k_j 的 softmax 函式便可以得到對應的權重，其中 i 代表當前標記、j 表示與當前標記產生注意力關係的標記。 某些架構中會採用多頭注意力機制（multihead attention），其中每一部分都有獨立的查詢（query）、鍵（key）和值（value）。 語言翻譯示例 下圖展示了將英語翻譯成法語的機器，其基本架構為編碼器 解碼器結構，另外再加上了一個注意力單元。在圖示的簡單情況下，注意力單元只是迴圈層狀態的點積計算，並不需要訓練。但在實踐中，注意力單元由需要訓練的三個完全連線的神經網路層組成。這 三層分別被稱為查詢（query）、鍵（key）和值（value）。 圖例 標籤 描述 100 語句最大長度 300 嵌入尺寸（詞維度） 500 隱向量長度 9k 10k 輸入、輸出語言的詞典大小 x Y 大小為 9k 與 10k 的獨熱詞典向量。x x 以查詢表實現。Y 是解碼器 D 線性輸出的 argmax 值。 x 大小為 300 的詞嵌入向量，通常使用或 word2vec 等模型預先計算得到的結果。 h 大小為 500 的編碼器隱向量。對於每一計算步，該向量包含了之前所有出現過的詞語的資訊。最終得到的 h 可以被看作是一個 句 向量，傑弗裡辛頓則稱之為 思維向量（thought vector）。 s 大小為 500 的解碼器隱向量。 E 500 個神經元的迴圈神經網路編碼器。輸出大小為 500。輸入大小為 800，其中 300 為詞嵌入維度，500 為迴圈連線。編碼器僅在初始化時直接連線到解碼器，故箭頭以淡灰色表示。 D 兩層解碼器。迴圈層有 500 個神經元，線性全連線層則有 10k 個神經元（目標詞典大小）。單線性層就包含 500 萬（50010k）個引數，約為迴圈層引數的 10 倍。 score 大小為 100 的對準分數 w 大小為 100 的注意力權重向量。這些權重為 軟 權重，即可以在前向傳播時改變，而非只在訓練階段改變的神經元權重。 A 注意力模組，可以是迴圈狀態的點積，也可以是查詢 鍵 值全連線層。輸出是大小為 100 的向量 w。 H 500100 的矩陣，即 100 個隱向量 h 連線而成的矩陣。 c 大小為 500 的上下文向量 H w，即以 w 對所有 h 向量取加權平均。 下表是每一步計算的示例。為清楚起見，表中使用了具體的數值或圖形而非字母表示向量與矩陣。巢狀的圖形代表了每個 h 都包含之前所有單詞的歷史記錄。在這裡，我們引入注意力分數以得到所需的注意力權重。 步 x h H 編碼器輸出 大小為 5001 的向量，以圖形表示 s 解碼器提供給注意力單元的輸入 對準分數 w 注意力權重 softmax 分數 c 上下文向量 Hw y 解碼器輸出 1 I 30px I 的向量編碼 2 love 30px I love 的向量編碼 3 you 30px I love you 的向量編碼 4 解碼器尚未初始化，故使用編碼器輸出 h3 對其初始化 30px 63 32 25 5 5 94 02 04 0 0 94 30px 02 30px 04 30px je 5 s4 15 39 57 5 5 11 01 88 0 0 11 30px 01 30px 88 30px t 6 s5 28 64 32 5 5 03 95 02 0 0 03 30px 95 30px 02 30px 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（愛）。 變體 注意力機制有許多變體：點積注意力 dotproduct attention）、QKV 注意力（querykeyvalue attention）、強注意力（hard attention）、軟注意力（soft attention）、自注意力（self attention）、交叉注意力（cross attention）、Luong 注意力、Bahdanau 注意力等。這些變體重新組合編碼器端的輸入，以將注意力效果重新分配到每個目標輸出。通常而言，由點積得到的相關式矩陣提供了重新加權係數（參見圖例）。 1 編碼器 解碼器點積 2 編解碼器 QKV 3 編碼器點積 4 編碼器 QKV 5 Pytorch 示例 圖例 標籤 描述 變數 XHST 大寫變數代表整句語句，而不僅僅是當前單詞。例如，H 代表編碼器隱狀態的矩陣 每列代表一個單詞。 S T S 解碼器隱狀態，T 目標詞嵌入。在 Pytorch 示例變體訓練階段，T 在兩個源之間交替，具體取決於所使用的教師強制（teacher forcing）級別。 T 可以是網路輸出詞的嵌入，即 embedding argmax FC output。或者當使用教師強制進行訓練時，T 可以是已知正確單詞的嵌入。可以指定其發生的機率（如 12）。 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 KwH 列 j QwS，在變體 4 中是 列 i KwX 列 j QwX。變體 5 則使用全連線層來確定係數。對於 QKV 變體，則點積由 sqrt d 歸一化，其中 d 是 QKV 矩陣的高度。 參考文獻 Category 機器學習