1. 程式人生 > 其它 >Transformer架構記錄(二)

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]聯絡;如發現文中內容侵犯到您的權利,請聯絡作者予以處理。