Sean talks

Attitude is everything

0%

Attention Is All You Need (part 1)

這一篇 Paper 在碩士生涯中出現的次數也不下10次了吧,畢竟它在 NLP 領域上扮演的角色實在是太重要,整理之前的論文筆記、心得與參考資料,藉著入伍前 8 個小時再來複習一次 🙆🙆 (應該沒有哪個菜兵會幹這種事吧)。

Introduction

本篇作者提出 Transformer, 一種完全基於 self-attention 機制的序列模型架構。

目前被廣泛運用在閱讀理解、資料摘要等任務中。

Transformer 與傳統學習語言模型的 RNN 架構 Seq2Seq 模型不同,其透過 Self-Attention 機制計算出輸出的特徵向量表示,
相較於 RNN 類模型需要等待上一個狀態的輸出向量進行當前狀態的計算,Transformer 的運算方式透過與序列中所有單位元計算可以有效提升模型運算的效率。

Query / Key / Value

在注意力模型中,我們假設輸入模型的序列資料為 ($x_1, x_2, … , x_n$)
輸出隱藏狀態向量序列為 ($h_1, h_2, … , h_n$)
透過注意力權重(attention weight) 乘以輸入序列資料,接著取加權平均得到情境特徵向量(Context Vector),最後即可使用 $C_t$ (t 表狀態) 計算考慮注意力權重的輸出句子 ($y_1, y_2, … , y_n$)。

如此我們也可以說是,將每一個輸入序列作為 Query、位址作為 Key,透過計算狀態 Q 與 K 的相似性得到對於元素 Value 的權重係數,接著乘上 V 進行加權求和得到 Context Vector。

Scaled Dot-Product attention

延續上述提到 K, Q, V 的概念, 在Transformer 中使用的 Self-Attention 將其視為同一個輸入,並藉由各自的向量矩陣 $(W_K, W_Q, W_V)$ 投影轉換輸入得到 K, Q, V。

接著,注意力權重的計算方式則可以表示為以下公式:

$Attention(Q, K, V) = softmax(QK^T/\sqrt{d_k})V$ (a.)

其中 $1/\sqrt{d_k}$ 是一個標準化的計算步驟以防止計算結果過大, $d_k$ 則為 K 的向量維度大小。

Multi-head attention

接著,論文中進一步提出 Multi-head attention 的機制以捕捉在不同向量空間中序列資料所可能包含的訊息。

實際的操作方法是將 K, Q, V 線性投影到 h 個不同的向量空間,並個別進行 Scaled Dot-Product attention 運算得到 h 個 attention head,最後將 h 個矩陣接合(Concat.) 並藉由 weighting matrix 得到輸出矩陣 $Z$ 。

References

Attention Is All You Need

[論文] Attention Is All You Need

Seq2seq pay Attention to Self Attention: Part 2(中文版)

Attention机制详解(二)——Self-Attention与Transformer