Self-attention & Transformer 筆記
筆記內容是參考 台大李宏毅老師 【機器學習 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 的差別
- 現今
RNN
很大部分都可被Self-attention
取代 RNN
較難考慮前面紀錄的 vector,且無法被平行處理輸出 (速度慢)- 可以參考論文 Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention
- 本學期並無介紹
RNN
,可以參考之前的課程 中文 或 English
應用於 Graph
Self-attention 延伸資料
- https://arxiv.org/abs/2009.06732
- https://hackmd.io/@abliu/BkXmzDBmr (網路上搜尋查得其他人的筆記)
Transformer
什麼是 Transformer?
- 和 NLP 中的
BERT
模型非常相關 Transformer
是一種 seq2seq (Sequence-to-Sequence) 的模型,其 Output 長度不一定 (無法準確回答長度的單位),由機器自己決定
應用場景
- 應用範例:語音辨識、文字翻譯、語音翻譯 (直接對語音進行翻譯,因為部分語言,如:台語 並不具備文字)
應用場景 - NLP (Natural Language Processing)
- 在 NLP 場景中,很多問題可以視為
Question Answering (QA)
的問題,而 QA 問題可以用 seq2seq 模型解決 (可參考文章 The Natural Language Decathlon: Multitask Learning as Question Answering 和 LAMOL: LAnguage MOdeling for Lifelong Language Learning) - 針對特定任務客製化模型能較單純 seq2seq 模型有更好的結果,可參考 DLHPL 2020 Spring
應用場景 - Multi-class Classification
- 參考文章:Order-free Learning Alleviating Exposure Bias in Multi-label Classification、Order-Free RNN with Visual Attention for Multi-Label Classification
應用場景 - Object Detection
架構
- seq2seq 模型是由
Encoder
和Decoder
組成,其簡化架構可參考圖
Encoder 架構
- Encoder 是給定一排向量輸出一排向量,
RNN
、CNN
都能做到,而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
輸出為k
和v
,而Decoder
前部分的輸出為q
,相乘後之結果過Fully Connected (FC)
層
訓練
- 和分類很類似,盡量將結果的 cross entropy 最小化
Copy Mechanism
- 不一定要學會「產生每一個字」,而是學會「產生一個詞」。舉例:
User: 我是 xxx
Bot: xxx 你好,很高興認識你 - 參考文章:Incorporating Copying Mechanism in Sequence-to-Sequence Learning
Guided Attention
- 某些任務 (如:語音辨識、語音合成) 沒辦法接受缺漏,
Guided Attention
有固定的 Attention 方式,可以解決缺漏的問題
Beam Search
- Greedy Decoding 不一定會得到最好的結果,而
Beam Search
便是為此產生 (僅在某些情況下效果好)
Scheduled Sampling
- 解決訓練過程中可能出現錯誤,最終導致「一步錯,步步錯」的問題 => 在 Decoder 中加入些錯誤資訊反而能讓結果更好
- 參考文章:Scheduled Sampling for Sequence Prediction with Recurrent Neural Networks、Scheduled Sampling for Transformers、Parallel Scheduled Sampling
模型總結
延伸閱讀
如果您喜歡我的文章,歡迎幫我在下面按5下讚!感謝您的鼓勵和支持!
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 FawenYo!
評論