03.03 數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

在「 」中有簡單介紹 Attention,Self-Attention 以及 Multi-Head Attention,都只是在直觀上介紹 Attention 的作用,如何能夠像人的視覺注意力機制那樣,記住關鍵信息,並且也介紹了 Self-Attention 機制如何能通過對自身注意力加權來學習句子內部結構以及一些語法特徵。

現在,我還要打算繼續詳細講解 Attention,主要講解 Transformer 中的 Multi-Head Attention 如何實現?通過圖解加說明來講解。

Self-Attention

上一節我們講到,Self-Attention 的 Query=Key=Value,即 Q,K,V 三個矩陣都來自同一個輸入,而 Attention 計算過程如何呢?

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

Attention 機制實質上就是一個尋址過程,通過給定一個任務相關的查詢 Query 向量 Q,通過計算與 Key 的注意力分佈並附加在 Value 上,從而計算 Attention Value,這個過程實際上是 Attention 緩解神經網絡複雜度的體現,不需要將所有的 N 個輸入都輸入到神經網絡進行計算,而是選擇一些與任務相關的信息輸入神經網絡,與 RNN 中的門控機制思想類似。

Attention 機制計算過程大致可以分成三步:

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

上面講述了 Attention 的通用計算過程,也講述了注意力分數計算的多種選擇,那麼在 Transformer 中,採用哪種呢?答案就是:Scaled Dot-Product Attention

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

上圖所示就是 Scaled Dot-Product Attention 的簡圖,可以看到輸入的 Q,K,V 都相同。

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

可以看到 Scaled Dot-Product Attention 有個縮放因子 √dk,為什麼要加這個縮放因子呢?

如果 dk 很小, additive attention 和 dot-product attention 相差不大。

但是如果 dk 很大,點乘的值很大,如果不做 scaling,結果就沒有 additive attention 好。

另外,點乘結果過大,使得經過 softmax 之後的梯度很小,不利於反向傳播,所以對結果進行 scaling。

我們在上一節中簡單提到 Self-Attention 能夠捕獲長距離依賴,並且能夠學習到句子內部結構及語法,那麼 Self-Attention 的計算流程又是如何呢?

Step 1

首先給出信息輸入:用 X = [x_1, x_2, ..., x_n] 表示 N 個輸入信息,通過線性變換得到 Q,K,V 三個向量的初始表示:

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

Step 2

計算自注意力得分,假設我們正在計算下圖中的第一個單詞 “ Thinking” 的自注意力,則我們需要計算 “Thinking” 這個單詞對句子中每個單詞的評分。分數決定了當我們在某個位置對單詞進行編碼時,要在輸入句子的其他部分上投入多少注意力。

通過將 Q 和 各個單詞的關鍵字向量 K 進行點積計算分數,因此,如果我們正在處理位置 #1 上的單詞的自我注意,則第一個分數將是 q1 和 k1 的點積。第二個分數是 q1 和 k2 的點積。

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

Step 3

對 Step 2 中計算的分數進行 Scale,這裡通過除以 8 ( 論文中 dk=64,這可以讓模型有更穩定的梯度,默認值是 64,也可以是其它值 ),將結果進行 softmax 歸一化。

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

Step 4

利用得分分別乘以 v1, v2 後得到一個加權後的值,將這些值加起來得到 z1。這就是這一層的輸出,仔細感受一下,用 Q, K 去計算一個 thinking 對 thinking,machine 的權重,用權重乘以 thinking, machine 的 V 得到加權後的 thinking,machine 的 V,最後求和得到針對各個單詞的輸出 z。

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

多頭注意力機制

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

論文中表明,將模型分為多個頭,形成多個子空間,可以讓模型去關注不同方面的信息。上圖中Multi-Head Attention 就是將 Scaled Dot-Product Attention 過程做 H 次,再把輸出合併起來。

多頭注意力機制的公式如下:

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

在 Transformer 中,Encoder 的輸出會作為 Decoder 的輸入,Encoder 的輸出是 K,V,Decoder 的上一層輸入的 Q。

數學公式 + 圖解:從 Self-Attention 到 Multi-Head Attention

總結

Transformer 用 自注意力機制的原因在上文有提到過,注意力機制的 Transformer 模型在機器翻譯任務中優於 RNN。利用多頭注意力擴展了模型集中於不同位置的能力,因此也賦予 Attention 多種子表達方式。



分享到:


相關文章: