論文地址:https://arxiv.org/pdf/1706.03762
程式碼地址:https://github.com/huggingface/transformers
目錄
- Introduction
- Background
- Model Architecture
- Encoder
- LN and BN
- Decoder
- Attention
- Multi-head Attention
- Feed-Forward
- Postion Encoding
- Encoder
- Why self-attention
Introduction
- RNN,LSTM 處理時序資訊的侷限性:無法並行,部分歷史資訊會在後面丟棄
- 編碼器與解碼器結構
- proposed transformer:純注意力機制
Background
- CNN 替換 RNN:無法對時序資訊進行建模——自注意力可以解決;CNN 可以多個輸出通道——多頭注意力機制
- Memory-Network
Model Architecture
圖 1:Transformer 架構
- Encoder:$\text{input}(x_1,...,x_n) \rightarrow \text{output: } \boldsymbol{z}=(z_1,...,z_n) $,其中 \(z_t(1 \le t \le n)\) 為 \(x_t\) 的向量表示
- Decoder:$\text{input}(z_1,...,z_n) \rightarrow \text{output: } \boldsymbol{y}=(y_1,...,y_m) $:一個一個生成(auto-regression),上一時刻輸出為下一時刻輸入
Encoder
2 個子層:\(LayerNorm(x+Sublayer(x)) * 2\),每一層輸出均為 512 維
LN and BN
- 如果 feature 長度不同:BN 更加不穩定!
- 預測過程
- BN:要記錄全域性的 \(\mu\) 和 \(\sigma\),如果有的 feature 很長訓練沒見過,\(\mu\) 和 \(\sigma\) 就不合適了
- LN:每個樣本內部計算,不受全域性影響,受長度影響很小
Decoder
3 個字層:\(LayerNorm(x+Sublayer(x)) * 3\),自迴歸
Attention
圖 2:dot-product attention 結構
其中 \(Q,K\) 是 \(d_k\) 維,\(V\) 是 \(d_v\) 維,attention計算公式:
\[\text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d_k}})V
\]
為什麼是 scaled dot-product attention?
- 因為點乘非常簡單,兩次矩陣乘法易於平行計算
- 當 \(d_k\) 比較大,\(\text{softmax}(QK^T)\) 分佈發散,梯度比較小收斂慢
Mask 操作
\(QK^T\) 後將 \(t\) 位置之後變為很小的負數(如\(-1e10\)),softmax 後為 0
Multi-head Attention
能夠學習到不同的投影,不同特徵。計算公式如下:
\[\text{MultiHead}(Q,K,V)=\text{Concat}(head_1,...,head_n)W^o
\]
\[where \ \ \ head_i=\text{Attention}(QW_i^Q,KW_i^K,VW_i^V)
\]
Feed-Forward
\[\text{FFN}(x)=max(0,xW_1+b_1)W_2+b_2
\]
Postion Encoding
加入時序資訊:
\[\text{PE}(pos,2i)=\sin(pos/10000^{2i/d})
\]
\[\text{PE}(pos,2i+1)=\cos(pos/10000^{2i/d})
\]