機器學習2021 - 自注意力機制(Self-Attention)
機器學習2021 - 自注意力機制(Self-Attention)¶
自注意力機制(Self-Attention)是一種常見的網路架構,主要用於處理輸入為一組向量序列(Sequence of Vectors),且序列長度可能變化的問題。它在自然語言處理(NLP)如 BERT 和 Transformer 架構中扮演了核心角色。
一、 自注意力機制的目標與輸入/輸出¶
目標: 自注意力機制旨在讓模型在處理序列中的每一個輸入向量時,能夠考量到整個輸入序列的上下文資訊。
輸入與輸出結構: 自注意力機制接受一串向量序列 A (例如 a1,a2,a3,a4) 作為輸入,並輸出另一串向量序列 B (例如 b1,b2,b3,b4)。輸出的向量 bi 必須是考量了所有輸入向量 a1 到 a4 之後才產生的
這種輸入輸出長度相同的任務類型,稱為序列標註(Sequence Labeling),常見應用包括詞性標記(POS Tagging)或語音辨識的簡化版。
二、 運作細節:Q、K、V 的產生與注意力分數計算¶
自注意力機制的運作核心是為每個輸入向量 a_i 產生三個不同的向量:Query (Q)、Key (K) 和 Value (V)。
1. 產生 Q、K、V 向量¶
每個輸入向量 ai 都會乘上三個不同的矩陣 Wq、Wk、Wv(這些矩陣是網路中需要學習的參數),來生成對應的 qi、ki、和 vi:
Query (q):用來詢問(查詢)序列中其他向量的相關性。
-
qi=ai×Wq
Key (k):用來匹配 Query,以計算彼此之間的關聯程度。 -
ki=ai×Wk
Value ($v$):包含實際的資訊內容,用於後續的加權求和。 -
vi=ai×Wv
2. 計算注意力分數 (α)¶
為了計算輸出 b_2,我們以 a_2 產生的 q_2 作為主角,去對序列中所有的 Key (k_1 到 k_4) 計算注意力分數(Attention Score, α)。
注意力分數通常透過 Dot Product(內積)來計算,以衡量 Query 與 Key 之間的關聯性。例如,Query q2 與 Key k1 之間的關聯性 α2,1 為 q2⋅k1
這個過程會產生一組分數:α2,1,α2,2,α2,3,α2,4。
3. 歸一化(Normalization)¶
接著,這些原始注意力分數會進行歸一化,通常是使用 Softmax 函數,得到最終的注意力分數 α′。雖然 Softmax 是最常見的,但也可以選擇其他的操作,例如 ReLU。
4. 產生輸出向量 (b_i)¶
得到歸一化後的注意力分數 α′ 之後,將這些分數分別乘上對應的 Value 向量,並全部加總,就得到了輸出向量 bi
bi=j∑αi,j′×vj
例如,計算 $b_2$ 時: b2=α2,1′×v1+α2,2′×v2+α2,3′×v3+α2,4′×v4
透過這個加權求和(Weighted Sum)的過程,關聯性越強(α′ 越高)的 Value 向量,對最終 bi的貢獻就越大。
重要特性: 所有的輸出向量 b1 到 b4可以在一次運算中同時被計算出來,這提供了 Self-Attention 相對於 Recurrent Neural Network (RNN) 巨大的平行化優勢。
三、 矩陣乘法的表示方式¶
整個自注意力機制的操作可以被視為一連串的矩陣乘法。
整個 Self-Attention 流程可以總結為: I→Q,K,V→QKT→A→A′→O
在這個過程中,唯一需要透過訓練資料找出的未知參數就是 W^q, W^k 和 W^v
四、 進階與變形¶
1. 多頭自注意力機制 (Multi-head Self-attention)¶
Multi-head attention 是一種廣泛使用的進階版本。它基於「相關性」具有多種不同形式的考量。
- 多頭生成: 產生不只一組 Q、K、V 向量,而是多組(例如 qi,1,qi,2)
- 獨立計算: 每個頭(Head)獨立運作,只使用它自己的 Q、K、V 集合來計算注意力分數和輸出向量(例如 bi,1,bi,2)
- 結果整合: 最終將所有頭的輸出結果(如 bi,1 和 bi,2)串接起來,再通過一個線性轉換(矩陣乘法),得到最終的輸出 bi
2. 位置編碼 (Positional Encoding)¶
原始的 Self-Attention 機制缺乏位置資訊;它認為序列中 a1 和 a4 的距離與 a2 和 a3 的距離是相同的(天涯若比鄰)。
為了解決這個問題,需要引入位置資訊:
- 為序列中的每一個位置 i 設定一個位置向量 e_i。
- 將這個 ei 向量加到輸入向量 ai 上 (ai+ei)。
- Positioning Encoding 可以是人工設計的(如使用神奇的 sin/cos 函數,最早用於 Transformer),也可以是根據資料學出來的。
3. 與其他架構的比較¶
與 CNN 比較:
- Self-Attention 可以被視為比 CNN 更具彈性的架構。
- 在 CNN 中,網路只能考慮固定的、人工劃定的感受野(receptive field)範圍內的資訊。
- 在 Self-Attention 中,模型透過 Attention 機制自動找出相關的像素或位置,等同於讓機器自己學出感受野的形狀和範圍。
-
Self-Attention 由於彈性較大,當訓練資料量不足時,可能更容易發生 overfitting;而在資料量充足時,其表現通常優於 CNN。
與 RNN 比較: -
Self-Attention 很大程度上已經取代了 RNN 在許多應用中的角色。
- ◦ 平行化 (Parallelization): RNN 必須依序處理序列(先算 b1 才能算 b2),因此無法平行化;而 Self-Attention 可以一次同時計算所有輸出向量 b1 到 b4,因此運算效率更高
- 長距離依賴 (Long-distance dependency): 即使是雙向 RNN,遠端的資訊也必須一路存在記憶體中傳遞;但 Self-Attention 只需要 Query 與 Key 能夠匹配,就能輕易地從序列上極遠的向量中抽取資訊
- 應用範圍: 自注意力機制不僅限於 NLP,它也可以應用在語音處理(如 Truncated Self-attention 以應對長序列)、影像處理,以及 Graph 結構上(通常會結合邊緣資訊限制 Attention 的計算範圍,形成 Graph Neural Network 的一種變形)。
Comments
Loading comments…
Leave a Comment