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
如何運作?
關聯程度計算
- 關聯程度 (
) 的計算方法有很多種,而 Transformer 論文中採用的是Dot-product
方式計算,其他也有如Additive
等其他方式 - 在
Dot-product
方法中,主體為q (query)
,其他的為k (key)
,並分別進行內積 (inner product),最後將各個 attention score 過 Soft-max (其他 activation function 亦可)最後再將結果乘上
並加總即可得到
Multi-head Self-attention
Positional Encoding
和 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
架構
Encoder 架構
- Encoder 是給定一排向量輸出一排向量,
RNN
、CNN
都能做到,而Transformer
中是採用Self-attention
Transformer
的 Encoder 可以簡易理解為由多層的Block
組成,而每一個Block
是將原向量經過Self-attention
輸出向量後,經過FC (Fully Connected)
層得到輸出- 原 Transformer 實際操作更為複雜,向量經過
Self-attention
層後再加上原 Input
得到新輸出 (稱為 Residual Connection),接著過Layer Normalization
(計算 平均值 和 標準差 後標準化 ),再將結果過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
的過程時,只能用前面已知的 , …, 計算 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 entropy 最小化
Copy Mechanism
- 不一定要學會「產生每一個字」,而是學會「產生一個詞」。舉例:
User: 我是 xxx
Bot: xxx 你好,很高興認識你 - 參考文章:Incorporating Copying Mechanism in Sequence-to-Sequence Learning
Guided Attention
- 某些任務 (如:語音辨識、語音合成) 沒辦法接受缺漏,
Guided Attention
有固定的 Attention 方式,可以解決缺漏的問題
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!
評論
Gitalking ...