二. 介紹
Transformer是2017發表的一個NMT的模型,為seq2seq的架構,過去seq2seq的內部大部分使用rnn等序列的網路,這樣的網路有其缺點,就是無法平行運算,必須等到前一時間點的資料計算完才能計算下一個時間點的資料。Transformer改變這樣的作法,讓資料可以平行運算,而且整個架構就只有attention而已,所以paper名稱才會叫Attention Is All You Need。
三. Model
Model 的部分如下:
- Encoder與Decoder:
跟過去的encoder與decoder架構差不多,架構圖如下:
左邊的紅框框為encoder的架構:
- 由2個部分組成,第一部分是multi-head-attention組成,第二部分是feed-forword network組成,這樣是一層encoder,在本篇使用6層
- 第二部分只比第一部分多了一塊mask multi-head attention,為何會多一個mask呢,其實就是讓模型在訓練decoder的時候,不樣讓模型之後的輸出是甚麼,舉個例子: ouput今天有一句話經斷詞後為[‘我’, ‘今天’, ‘很’, ‘帥’],他會依序進入decoder,所以第一個詞是'我',其用意就是看'我'這個詞與input的句子哪個詞最相關(也就是attention的用意),確保後續的詞並不會影響前面在訓練的詞。
2. Attention:
這篇attention最基本的架構是'Scaled-Dot-Product Attention',如下圖:
主要利用Q與K來計算這個詞對詞的重要性,這樣其實有一個好處,在一開始encoder的地方就在處理attention的部分,以上述的例子[‘我’, ‘今天’, ‘很’, ‘帥’],會算出'我'(Q)對'我'(K)的分數,'我'對'今天'的分數,以此類推,最後經過softmax乘上value(就是‘我’, ‘今天’, ‘很’, ‘帥’),得到的分數作相加,相加的意義其實就是說'我'這個詞在其他位置詞的重要性,最後得到的向量其實會很接近'我'這個詞的向量,由此每個詞會得到新的向量,這個向量是考慮過自己在其他詞的重要性的涵義。這也就是自我注意力(self-attention)機制吧圖對應到的公式如下:
論文認為做多次'Scaled Dot-Product Attention'可以考慮詞在不同空間映射的重要性,在本論文中做了8次的’Scaled Dot-Product Attention’,圖與公式如下:
這邊可以稍微說明一下q、k、v是怎麼來的,這邊的q、k、v是詞經過embedding後會經過3個線性權重(layer)得到的值,這個線性權重是需要跟模型一起train的,這三個線性權重分別為上圖WQ、WK及WV,那前面明明是小寫為何變成大寫,其實q代表一個詞向量經過線性權重而已,Q代表將每個詞合在一起,這樣的好處就是平行運算,直接做dot,而不用一個詞一個詞去算,如下圖:
K跟V也是一樣的道理,下圖是某一youtube截圖,看這個應該可以理解這邊的K Q V分別代表什麼,其實都是代表一樣的句子:
整個self-attention的流程可以看成某個詞對應到的其他詞的重要性,如果這邊還是不太清楚流程也可以參考這篇[3]:
在這篇論文當中會把attention用在encoder中以及decoder中,encoder會把Q跟K傳給decoder,V則是經過mask multi-head attention的vector,這邊記住,encoder的最後一層一定會output到每一層decoder,我認為這邊也是讓decoder每層去了解在encoder的attention的資訊。
3. Position Encoding:
論文考慮Position Encoding的意義是希望可以將位置的資訊考慮進去,因為transformer並無考慮,所以在將詞轉成embedding後加入Position Encoding,論文是用sin與cos,但目前我也不清楚具體做法為何~~~如果有人可以解釋一下我會很感謝XD
四. 訓練的設定
- Optimizer: 使用adam
- Dropout = 0.1
- Label smoothing: 因為預測下個字的訓練方式的Label大多是one-hot的表示方式,但這樣有一個問題,就是預測這個單詞一定要是1,其他一定要是0,而導致模型會太過有自信,做法就是讓1的值變小一點點,0的值變大一點點
五. 實驗結果
可以看出來transformer的結果是非常好的,base的model是將訓練的最後5個model去做average,big是對最後20個model去做average,做average的好處是希望可以得到最好的function,根據李弘毅老師在2017的ML課程[4]當中有解釋到如何調整你的模型,我覺得滿有用的,我把連結放到參考資料上~~
以上算是我對一些比較難懂地方的理解,但其實也有細節還不清楚~~若上述有描述錯誤的地方歡迎指證~~
六. 參考資料
[1] Vaswani, A., et al. “Attention Is All You Need. arXiv 2017.” arXiv preprint arXiv:1706.03762.
[2] https://www.youtube.com/watch?v=z1xs9jdZnuY&t=726s
[3] http://jalammar.github.io/illustrated-transformer/
[4] https://www.youtube.com/watch?v=D_S6y0Jm6dQ&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49&index=5