Self-Attention
- 可以解決上述問題,可以一層就看到長期資訊,且可以平行化。
- x¹, …, x⁴: input
- 先通過 embedded (乘上 W), 再來通過 self-attention layer: 乘上三個不同的 transformation 得到 q, k, v.
- 機制: 每個 q 對每個 k 做 attention (概念為計算每個 q, k 的匹配程度)
- 接著通過 softmax,計為:
- 針對上述結果乘上 v ,即 weighted-sum:
平行化
Multi-head Self-attention
- 以 2 heads 為例:原本的 q, k, v 會再分裂成兩個,分裂的方式可透過乘上兩個不同的矩陣達成
- 在做 q, k 相乘的時候有些微的差別:分裂的第一個 q (i,1)只會跟其他第一個分裂的 k (j, 1)相乘
- 原本的 b_i 只有一個,但是現在有兩個 b(i, 1) & b(i, 2) ,可以在透過乘上一個矩陣把它降維
- 優點:每個 Head 可以看不同資訊,如某些看短期、長期,多個 Head 可以讓其各司其職,做自己想做的事情
Self-Attention Layer 的特性
- Input 的 sequence 順序是不重要的 (因為是對 input 的每個 vector 做 self-attention),但是這不是我們想要的結果
- 解決方式:Positional Encoding
多加上 e_i 的資訊 (為人手動設定的值)。但是為什麼不是 Input 直接 Append 一個 one-hot 的 vector ? 其實這個行為和上述意義是等價的:
Self-Attention 在 seq2seq 是如何被使用
- 可以用 Self-Attention 來取代 RNN:
Transformer
- 有些名詞: Input Embedding, Positional Encoding, Multi-Head Attention 都講過了,這邊介紹其他名詞
- Add & Norm:這邊就只是把沒有/有通過 Attention 的值相加起來後做 Layer Norm
- Feed Forward:兩層 Transformation + Relu
- Masked:Attend on the generated sequence
心得
從介紹中很明顯可以知道 Self-Attention 特別的地方就是透過 query & key 來量測相似度,再根據相似度來 Scaling (i.e. Weighted Sum) value。