筆記內容是參考 台大李宏毅老師 【機器學習 2021】自注意力機制 (Self-attention) (上)【機器學習 2021】自注意力機制 (Self-attention) (下)【機器學習 2021】Transformer (上)【機器學習 2021】Transformer (下) 課程內容

Self-attention

為何需要 Self-attention ?

  • 過去 CNN 是輸入單一向量 (vector),但有些情況 (ex. 語意識別、語音辨識) 輸入可能是不固定長度的向量集合 (set of vectors)

  • Q: One-hot Encoding 為何不適合用來處理文字?

    A: 使用 One-hot Encoding 會導致各個詞彙間沒有關係,可使用 Word Embedding 方式處理

  • Self-attention 的輸出可以是與輸入長度相同的結果,也可以是一個 label,也可以是長度不固定的 sequence

什麼是 Self-attention ?

架構

  • 其中 Self-attention 層是可以重複出現的,即經過 Fully-Conntected (FC) 層後能再接 Self-attention

  • 最知名的相關文章:Google - Attention is All You Need

如何運作?

  • 整體架構:
  • 單一向量 ($a^1 \rightarrow b^1$): 計算各個向量間的關聯程度

關聯程度計算

  • 關聯程度 ($\alpha$) 的計算方法有很多種,而 Transformer 論文中採用的是 Dot-product 方式計算,其他也有如 Additive 等其他方式
  • Dot-product 方法中,主體為 q (query),其他的為 k (key),並分別進行內積 (inner product),最後將各個 attention score 過 Soft-max (其他 activation function 亦可) 最後再將結果乘上 $v^n$ 並加總即可得到 $b^n$

Multi-head Self-attention

  • 尋找不同的相關性,將 $q$, $k$, $v$ 分別乘上 $n$ 個矩陣得到 [$q^{i, 1}$, $q^{i, n}$], [$k^{i, 1}$, $k^{i, n}$] 和 [$v^{i, 1}$, $v^{i, n}$] 接著將同一個 head 的 $q$, $k$, $v$ 相乘得到 $b^{i, n}$,將這些矩陣和 $W^0$ 相成得到 $b^i $

Positional Encoding

  • 原先的 Self-attention 並沒有 位置 的觀念,我們可以將不同位置設置 vector $e^i$,再將 $e^i$ 加入至 $a^i$ 中便可以解決問題

和 CNN 的差別

  • CNN 可以被視為一種 簡化版的 Self-attention,在 CNN 中我們只考慮 receptive field 內的資訊,而 Self-attention 中我們考慮整張圖片的資訊
  • 換句話說,Self-attention利用 attention 機制像是能 機器自己學出 receptive field,設定參數得當的話我們可以做出和 CNN 一樣的結果
  • 可以參考論文 On the Relationship between Self-Attention and Convolutional Layers

和 RNN 的差別

應用於 Graph

  • Graph 中 edge 已經暗示關聯性,不必在用 Network 尋找猜測,可以只計算有 edge 相連的 node
  • GNN 可以參考之前課程 中文 - I中文 - II

Self-attention 延伸資料

Transformer

什麼是 Transformer?

  • 和 NLP 中的 BERT 模型非常相關
  • Transformer 是一種 seq2seq (Sequence-to-Sequence) 的模型,其 Output 長度不一定 (無法準確回答長度的單位),由機器自己決定

應用場景

  • 應用範例:語音辨識、文字翻譯、語音翻譯 (直接對語音進行翻譯,因為部分語言,如:台語 並不具備文字)
應用場景 - NLP (Natural Language Processing)
應用場景 - Multi-class Classification
應用場景 - Object Detection

架構

  • seq2seq 模型是由 EncoderDecoder 組成,其簡化架構可參考圖

Encoder 架構

  • Encoder 是給定一排向量輸出一排向量,RNNCNN都能做到,而 Transformer中是採用 Self-attention
  • Transformer 的 Encoder 可以簡易理解為由多層的 Block 組成,而每一個 Block 是將原向量經過 Self-attention 輸出向量後,經過 FC (Fully Connected) 層得到輸出
  • 原 Transformer 實際操作更為複雜,向量經過 Self-attention 層後再加上原 Input
    得到新輸出 (稱為 Residual Connection),接著過 Layer Normalization (計算 平均值 $\mu$ 和 標準差 $\sigma$ 後標準化 $x_i^\prime = \frac{x_i - \mu}{\sigma}$),再將結果過 FC (Fully Connected) 層 (同樣為 Residual Connection 架構) 後最後過 Layer Normalization 得到 Block 輸出

Decoder 架構 - Autoregressive (AT)

  • 讀入 Encoder 結果至 Decoder 後,會先在其開頭加上 BOS (Begin of Sentence) 特殊 token,結尾也加上 END token,開頭向量經過 Decoder 後得到長度為 Vocabulary Size 的向量,其中包含各個選項 (ex. 中文的方塊字) 的可能性,選擇可能性最大的為結果 接著將前項結果加入 Input 中,繼續過 Decoder 得到結果
  • Decoder 實際架構如圖,和 Encoder 類似,主要多了 Mask (在過 Self-attention 的過程時,只能用前面已知的 $a_1$, …, $a_{n-1}$ 計算 attention)

Decoder 架構 - Non-autoregressive (NAT)

  • AT 一次產生一個字不同, NAT 採用一次產生一個句子的方法
  • Q: 如何知道長度?
    A: 先用一個 Classifier 吃 Encoder 的內容,輸出 Decoder 的長度;也可以硬塞一個固定長度的 BOS,在輸出結果中尋找 END 斷句
  • 優點:平行處理,速度較快,且較能控制輸出長度
  • 缺點:實際上常常不如 AT 的結果 (原因:Multi-modality),最近成為熱門研究改善結果
  • 參考內容:[DLHLP 2020] Non-Autoregressive Sequence Generation (由助教莊永松同學講授)

Encoder - Decoder

  • Cross-attention 中讀取 Encoder 輸出為 kv,而 Decoder 前部分的輸出為 q,相乘後之結果過 Fully Connected (FC)

訓練

  • 和分類很類似,盡量將結果的 cross entropy 最小化

Copy Mechanism

Guided Attention

  • 某些任務 (如:語音辨識、語音合成) 沒辦法接受缺漏,Guided Attention 有固定的 Attention 方式,可以解決缺漏的問題
  • Greedy Decoding 不一定會得到最好的結果,而 Beam Search 便是為此產生 (僅在某些情況下效果好)

Scheduled Sampling

模型總結

延伸閱讀