【NLP】--- Transformer流程及原理


Transformer 在《Attention is All You Need》 提出的新模型. 改善了RNN訓練慢的缺點, 能有效提升模型精確率.

一. Transformer組成

Transformer是由一系列的 encoder 和 decoder 所組成, 當然decoder的數量是和decoder相等的, 在論文中都是6.

1.1. 輸入單詞預處理

  1. 通過embedding方法將句子中的一系列單詞轉換爲一系列詞向量
  2. 對上一步驟得到的一系列詞向量進行Positional Embedding處理, 引入位置信息,得到輸入 Encoder 的詞向量

1.2. Encoder

由兩個主要功能層組成:

爲了使網絡具有一定的深度(DNN), 故引入 Residuals 模塊——即分別在兩個主要功能層後加入一個 Add & Normalize 層, 示意圖如下:

作爲 Encoder 的輸出, 是兩個向量:

此小部分詳見 Multi-Headed-Attention 模塊

  • Key Vector
  • Value Vector

1.3. Decoder

由三個主要功能層組成:

與Encoder中 Self-Attention 不同的是, Decoder中的 Self-Attention只關注當前t時刻時(從0開始計時), 已經生成得到的前t個單詞, 即指被允許處理輸出序列中更靠前的那些位置. 在進行softmax步驟前, 其會把之後的位置設爲-inf來表示隱藏.

同樣, 爲了增加網絡的深度, 也引入 Residuals, 即同樣增加 Add & Normalize 層, 示意圖如下:

1.4. 總體流程

二. Transformer 部分機制詳解

2.1. Positional Embedding

該方法能夠擴展到看不見的序列長度處!!!

2.1.1. Positional Embedding原理

爲了使模型能夠理解輸入語句中單詞的順序, 故提出Positional Embedding, 爲每個單詞生成一個對應的位置向量, 然後將得到的詞嵌入向量加上對應的位置向量, 得到基於時間步的詞嵌入向量.

2.1.2. 位置向量生成原理

PE(pos,2i)=sin(pos100002idmodel)PE(pos,2i+1)=cos(pos100002idmodel)PE_{(pos, 2i)}=\sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}}) \\ PE_{(pos, 2i+1)}=\cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}})

2.1.3. 效果圖

可以看到在中心位置分成了兩半,因爲左半部分的值由一個正弦函數生成,右半部分由余弦函數生成,然後將它們連接起來形成了每個位置的編碼向量

2.2. Multi-Headed-Attention

參見我的blog

2.3. Encoder-Decoder Attention

工作原理類似Multi-Headed Attention機制, 但是隻會從之前層生成 Query Vector, 而Key Vector和Value Vector都是從Encoder的輸出中獲取.

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