Transformer架構記錄(二)
在 Transformer架構記錄(一)中,得到了一句話的數字表示 X,下面將 X 輸入到Encoder的第一個Encoder-block中對其做進一步處理。
一個完整的Encoder-block如下圖所示:
一個完整的Encoder-block由兩個子模組構成,分別為Multi-Head Attention + Add&Norm 組成的第一子層,Feed Forward + Add&Norm 組成的第二子層。
Multi-Head Attention + Add&Norm 第一子層
1.1 Multi-Head Attention
Multi-Head Attention的輸入為 X (當然,排在後面的Encoder-block的Multi-Head Attention的輸入為前一個Encoder-block第二子層Add&Norm的輸出);
Multi-Head Attention的輸出記為 X_mha(X_mha與X的size相同);
具體從 X 到 X_mha 見 “Transformer架構記錄(三)”。
1.2 Add&Norm
Add&Norm的輸入為 X 與 X_mha,處理流程如下:
X_add_1 = X + X_mha(此處理解為普通的矩陣加法, X_add_1 、 X 、 X_mha的size相同)
這是一種殘差連線處理方法;
X_norm_1 = LayerNorm( X_add_1 ) ,X_norm_1 、 X_add_1 、 X 、 X_mha的size相同;
Layer Normalization 會將每一層神經元的輸入都轉成均值方差都一樣的,這樣可以加快收斂。
Feed Forward + Add&Norm 第二子層
2.1 Feed Forward
Feed Forward的輸入為第一子層Add&Norm的輸出,本例中為 X_norm_1 ,
Feed Forward對X_norm_1的處理為:X_ff = max(0, X_norm_1W_1 + b_1)W_2 + b_2 (X_ff 、 X_norm_1 、 X_add_1 、 X 、 X_mha的size相同)
2.2 Add&Norm
Add&Norm的輸入為 X_norm_1 與 X_ff,處理流程如下:
X_add_2 = X_norm_1 + X_ff(X_add_2 、X_ff 、 X_norm_1 、 X_add_1 、 X 、 X_mha的size相同
X_norm_2 = LayerNorm( X_add_2 ) (X_norm_2 、 X_add_2 、X_ff 、 X_norm_1 、 X_add_1 、 X 、 X_mha的size相同)
最終一個Encoder-block的輸出為X_norm_2,它與該Encoder-block的輸入 X 的size相同;即每個Encoder-block的輸入與輸出的大小一致。
第一個 Encoder block 的輸入為句子單詞的表示向量矩陣,後續 Encoder block 的輸入是前一個 Encoder block 的輸出,最後一個 Encoder block 輸出的矩陣就作為 整個Encoder部分的輸出,如下圖所示:
下期預告:Multi-Head Attention的詳細
作者: python之家
出處: http://www.cnblogs.com/pythonfl/
本文版權歸作者和部落格園共有,轉載時請標明本文出處;如對本文有疑問,歡迎郵件[email protected]聯絡;如發現文中內容侵犯到您的權利,請聯絡作者予以處理。