NLP——圖解Transformer

結構圖解

爲了更有層次的掌握Transformer結構,下面通過由高到低,由外到裏的形式來一步步展開Transformer。 首先把Transformer看成一個翻譯工具,一個黑匣子,它的結構如下圖:輸入原文(綠色) 通過Transformer得到輸出譯文(紫色)。
在這裏插入圖片描述

打開Transformer這個黑匣子,得到下圖。此時可以看到Transformer由Encoder和Decoder兩大塊組成。
在這裏插入圖片描述
進一步展開Transformer的Encoder和Decoder可以得到下圖。此時可以看到Transformer裏面的Encoder和Decoder分別是由6層Encoder和Decoder堆疊而成的。
在這裏插入圖片描述
進一步展開Transformer的單層Encoder和Decoder可以得到下圖。每層Encoder又包括Self-Attention子層和Feed Forward子層,每層Decoder層又包括Self-Attention子層(Mask)、Encoder- Decoder Attention子層和Feed Forward子層。
在這裏插入圖片描述
把Self-Attention子層也展開就得到了Transformer論文中給出的Transformer的結構圖(左下圖) 了。其中Multi-Head Attention展開如中下圖,Multi-Head Attention中的Scaled Dot-Product Attention進一步展開如右下圖。
在這裏插入圖片描述

過程圖解

下面通過圖解的方式來儘可能地講清楚Transformer的完整過程。

1. Word embedding + Position encoding

• Inputs首先根據該語言詞彙表的大小轉成V維的one-hot向量v1;
• 根據one-hot向量和詞嵌入模型(預訓練好或者隨機初始化)查找相應詞向 量v2;
• v2添加位置編碼向量信息(訓練或用規則)得到帶有位置信息的向量v3。
在這裏插入圖片描述
在這裏插入圖片描述

2. Encoder

上一步得到的v3向量作爲Encoder1的輸入,經過Self-Attention層得到Attention 的輸出,再經過Feed Forward自動生成Encoder1的輸出,Encoder1的輸出作爲 Encoder2的輸入,以此類推,一直進入到頂層Encoder,輸出矢量組成的列表 ,然後將其轉化爲一組attention的集合(K,V)。至於attention的計算以及其他細節請參照上一節內容。
在這裏插入圖片描述
在這裏插入圖片描述

3. Decoder

上一步Encoder輸出的attention的集合(K,V)將被送入到每個Decoder的 Encoder-Decoder attention模塊作爲K,V的輸入(Q取Decoder中Self-Attention的 輸出)。至於Decoder中的Self-Attention實現過程同Encoder的Self-Attention,重複6層,最後頂層Decoder輸出浮點數向量列表。
在這裏插入圖片描述
在這裏插入圖片描述

4. Final Linear + Softmax

頂層Decoder也是一個隱層,輸出是2048或1024(這裏只是打個比方)的隱層。 那麼這些隱層節點怎樣對應到輸出的詞呢? 首先,我們對每種語言會有一個固定的詞表,比如這個語言到底有多少個詞, 比如中文裏有2萬詞、3萬詞、5萬詞。對網絡隱層會先過一個線性的投射層,去把它投射到一個詞表大小的向量維度,形成一個詞表大小向量,我們在這個向量基礎上做softmax,把它轉成概率。比如是3萬的詞,去選取裏面概率最大的那個詞作爲我們實際的輸出,這裏面第五位是最大的,它會輸出一個am,這樣就 達到了通過Encoder輸出隱層來去實際生成一個詞翻譯的效果。
在這裏插入圖片描述
在這裏插入圖片描述

5. loss function

Transformer的訓練優化目標是概率的交叉熵cross entropy,以cross entropy作爲梯度更新的優化目標。下圖(左)是優化目標的loss隨着訓練的輪數的變化情況,因爲是entropy,所以是穩定下降的過程。相應的,翻譯的評價目標Bleu值是匹配度加權的分數,Bleu值越高越好,它隨着訓練過程的進行會有一個逐步向上升的過程。訓練的優化目標就是這樣的,通過交叉熵的優化來提升Bleu,就能實現翻譯效果優化的過程。
在這裏插入圖片描述
最後貼上Multi-Head Self Attention的計算流程圖。
在這裏插入圖片描述

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