Machine Learning - Self-Attention & Transformer
惡補 ML https://www.youtube.com/watch?v=Ye018rCVvOo&list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J
Self-Attention
先前提到的 Input
都只是一個 Vector
,然而很多時候,模型吃的是 一組 Vector,又稱 Vector Set
、Sequence
,又可以分成三類
- 每個
Vector
有一個Label
,輸入的數量等於輸出的數量,稱為Sequence Labeling
- ex:
Pos-Tagging
- ex:
- 整個
Sequence
只有一個Label
- ex:
Sentiment Analysis
- ex:
- 機器自己決定要有幾個
Label
- ex:
Sequence-to-Sequence
、Machine Translation
- ex:
對於 Sequence Labeling
,如果像前面提到的 CNN
一樣,每個 Vector
都是獨立的,可能會忽略掉 Vector
之間的關係 (Context)。你也可以把整個 Sequence
丟到 CNN
裡面,但參數量、計算量都會超大,又久又容易 Overfitting
,因此有了 Self-Attention
Self-Attention
的概念是,對於每個 Vector
,都會有一個 Query
、Key
、Value
,然後透過 Query
和 Key
的 Dot Product
來計算 Attention Score
,再透過 Softmax
來計算 Attention Weight
,最後再把 Value
乘上 Attention Weight
來得到 Output
Softmax
是最常見的,不過也可以用別的Activation Function
Attention Weight
會讓Model
知道哪些Vector
是重要的,哪些是不重要的
Multi-Head Self-Attention
相關這件事情可能有很多種形式,為了要找到資料中不同種類的相關性,可以用 Multi-Head Self-Attention
- Head 的數量也是
Hyperparameter
Positional Encoding
Self-Attention
並不會考慮到 Position
,因此需要加上 Positional Encoding
,讓 Model
知道 Vector
的位置
Truncated Self-Attention
有時候 Sequence
會超長,造成 Attention Matrix
太大,計算量太大,甚至 Train 不起來,因此可以用 Truncated Self-Attention
,只考慮某距離以內的 Vector
,不考慮太遠的 Vector
Self-Attention vs CNN
一般圖片都是用 CNN
來處理,但其實 CNN
是 Self-Attention
的一種,只是 CNN
會考慮到 Local Pattern
,而 Self-Attention
會考慮到 Global Pattern
Self-Attention
就是一種更彈性的 CNN
,因此在訓練資料很大的時候,Self-Attention
可能比 CNN
更好
Self-Attention vs RNN
現在 RNN
幾乎被 Self-Attention
取代,因為 RNN
有兩大缺陷
Long-Term Dependency
的問題,當Sequence
很長時,很容易忘記越早輸入進來的資料- 只能
Sequential
計算,無法平行運算
Transformer
是一個 Sequence-to-Sequence
的模型,由機器自己決定輸出的長度,常用在 Machine Translation
、Speech Recognition
、Speech Translation
、Chatbot
大部分的 NLP 問題都可以直接看成 QA
問題,而 QA
問題都可以看成 Sequence-to-Sequence
的問題,只要把 Question
和 Context
組合在一起,丟進 Sequence-to-Sequence
的模型裡面,就可以得到答案。但是 NLP 的問題中,客製化模型的表現通常會更好。
有很多應用都可以硬用 Sequence-to-Sequence
的模型,像是 Syntacic Parsing
,可以把這棵樹轉成 Sequence
,直接塞進 Sequence-to-Sequence
的模型裡。其他還有 Multi-label Classification
、Object Detection
等
Sequence-to-Sequence Structure
Transformer 的 Encoder 就像一位記憶力超強的老師,他把一整本書(你的輸入句子)讀完,並且整理出一本精華筆記(Encoder 的輸出)。
然後,Decoder 是一個學生,他想要用自己的話來解釋這本書的內容(生成輸出句子)。
但這位學生不會一次就把整本書背出來,而是一步一步地問老師:「接下來我要怎麼說?」
每當學生說出一個單詞,他就會回頭看看老師的筆記(Cross-Attention),確認自己沒說錯,然後再繼續下一個單詞。
所以,Encoder 負責總結資訊,Decoder 負責一步步產生句子,並透過 Cross-Attention 確保自己說的話合理。