文章目錄
- 動機
- 模型
-
- Encoder
- Decoder
- 總結
之前看了Google發表的Transformer的相關論文,雖然距離論文發表已經過去了三年,但是Transformer的效果仍然沒有被超越。為了讓自己之後能夠迅速回憶起Transformer的相關内容,是以記錄了這篇論文筆記記錄一下自己閱讀論文的筆記。
動機
在Transformer提出之前,正常情況下都是使用RNN模型來處理機器翻譯任務。使用RNN來做機器翻譯任務存在兩個缺點:
(1)由于輸入的sequence長度很長,是以對于目前詞來說對其影響最大的是鄰近的詞。但是一個句子中對一個單詞有影響的單詞不一定就在其附近
(2)其次使用RNN模型其計算速度過慢,通常輸出一個端到端的句子就需要耗費極大的記憶體同時難以進行并行化計算
而Google提出的Transformer模型就是為了解決這兩個缺點:
1.使用Attention機制代替LSTM的各種控制單元,讓模型去學習句子中各個單詞的互相影響
2.Transformer由于具有參數共享的相同模型層,是以相較于RNN具有極高的并行化操作
模型
Transformer的總結架構如下

簡單記錄一下Transformer的架構(之後進行詳細的補充)
總體來看Transformer分為兩個部分:Input Module 與 Output Module
本質上Transformer就是個 Encode-Decode 的過程
Encoder
Input Module包括 N=6 個編碼器(N=6實驗效果最好)
Encode就是一個Attention的過程,三個矩陣 Q K V 就是這個Encoder的核心。
Input的原始輸入是經過Embedding層後的詞向量矩陣(一個句子)
經過三個權重矩陣得到每個詞向量的 q 、k、 v (矩陣就是用來并行化計算的)
然後使用self-attention機制得到每個詞向量的表示 z
使用殘差網絡加上原始向量再進行正則化喂入前向傳播網絡,就這樣經過6層Encoder就得到輸入句子的表示
Decoder
這一部分等之後再進行補充
總結
Transformer的一些細節在此就不再贅述,同時PyTorch也對Transformer進行了很好的封裝(當然也封裝的很死)。總的來說Transformer可以說是在AI相關領域完成任務很好的模型,根據李宏毅老師的說法,在科研界CNN與RNN能做的任務基本被Transformer洗過了一遍,由此可見Transformer的強大,當然Transformer在很多地方還是不能取代之前兩個模型的。
附上一篇講解Transformer非常好的部落格Transformer詳解