Transformer中到底做了什麼?

Transformer中到底做了什麼?

Transformer在論文《Attention is All You Need》中被提出,後來應用於BERT,實現了深度文本語義預訓練模型。

參考代碼如下:

  1. tensor2tensor github
  2. bert github

簡單來說,transformer就是利用 self-attention 實現了在某個任務下句子中詞與詞的關聯性。
下面是根據bert中transformer的代碼畫的流程圖,首先明確一下圖中各名稱的含義:
在這裏插入圖片描述
圖中可以看出,transformer包含兩個主要的部分,self-attention部分和intermediate部分,可以通過兩個殘差連接和LayerNorm層劃分開。(其中黃色表示輸入,藍色表示有參數的部分,綠色表示殘差連接+LN)
在這裏插入圖片描述
attention就主要是下面這個公式,不熟悉的話可以參考blog:The Illustrated Transformer
在這裏插入圖片描述
self-attention部分包含了一個self-attention層,和一個全連接輸出層(dense),其中self-attention層展開如下圖所示,其中黃色的部分表示模型的輸入,藍色的部分表示裏面有參數,其實就是Q/K/V分別經過一個全連接層,Q和K的結果做向量積,得到attention對齊矩陣,然後使用position或者句子長度之類的生成一個attention-mask,讓不希望影響最後結果的部分的softmax值爲零,bert代碼中attention-mask遮蓋部分取值爲-10000,最後經過softmax得到attention矩陣,也就是V中每個單詞對Q中每個單詞如何影響,最後用attention矩陣對V加權平均,得到與Q中每個單詞對應的向量表示。
在這裏插入圖片描述
下圖爲計算好的attention矩陣,在bert中每句話前面會加一個CLS,後面會加SEP,其餘使用PAD填充到最大句子長度。其中PAD對應的向量就是要被mask遮蓋的部分,可以使用真實句子長度計算,最後得到的與每個單詞對應的向量爲,attention概率分佈與向量V(self-attention中與Q相同)的加權求和。

在這裏插入圖片描述

所以理論上,經過訓練CLS對應的向量,是包含了整個句子的語義特徵的,所以在bert中可以只用CLS對應的向量作爲後續finetune分類器的依據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章