#人工智慧# 研究背景、動機
深度學習做NLP問題的方法,大多基本上是先將句子分詞,然後將每個詞轉化為對應的詞向量序列,於是每個句子就都對應一個詞嵌入矩陣
X=\left(x_1,x_2,{...,x}_t\right) ,其中
x_i 代表著第i個詞的詞向量,維度為d。因此,我們的問題就自然轉化為如何編碼這些序列資訊了。
在Transformer該論文提出之前,幾乎所有主流的翻譯模型或者NLP模型都是建立在複雜的迴圈神經網路(Recurrent Neural Network, RNN),包括其變體長短記憶RNN(LSTM)和門控迴圈單元(GRU),或卷積神經網路(Convolution Neural Network)seq2seq框架的基礎上的。
遞迴神經網路(RNN),特別是長-短期記憶(LSTM)和門控遞迴神經網路(GRU),已經作為序列建模(如機器翻譯,智慧對話等)的最新方法被不斷地探索。傳統的基於RNN的神經網路模型,利用先前隱藏狀態
h_{t-1} 和位置t的輸入的函式生成隱藏狀態
h_t 。如下圖:關於RNN,[LSTM,GRU]可以看我前面的blog
RNN-based網路這種固有的順序特性無法使模型在訓練過程中有較好的並行化,雖然能透過一些技巧在計算效率方面取得顯著的提高,同時也提高了模型效能。然而,順序計算的基本約束仍然存在。所以,在傳統的基於RNN的Encoder-Decoder結構中,一般都需要結合Attention機制來提高模型的效能。另外, 我認為RNN無法很好地學習到全域性的結構資訊(即使是變體LSTM和GRU),因為它本質是一個自迴歸的馬爾科夫決策過程,以及仍然存在的梯度消失、梯度爆炸等問題(個人理解)。
而另一種CNN-based的主流方法,雖然方便並行,也一定程度上能捕捉一些全域性資訊,但是其本身還是擅長捕捉區域性的結構資訊(透過層疊來增大感受野),對於距離很遠的兩位置間的相關性捕捉存在一定的困難。而且完全基於CNN的Seq2Seq模型非常佔記憶體,在大資料量上引數調整並不容易。
為了解決上述問題,谷歌team提出了一個新的的模型結構---Transformer,它完全依賴於Attention機制來捕捉輸入和輸出之間的全域性依賴關係。Transformer在訓練的時候可以並行化,減少訓練時間,並且模型的質量也有了一個顯著的提高。本文我認為主要包括三個亮點:
1. 不同於以往主流機器翻譯使用基於RNN的seq2seq模型框架,該論文完全用self-attention機制代替了RNN構建了模型。
2. 模型設計巧妙,提出了多頭自注意力(Multi-headed self-attention)機制方法,在encoder和decoder中大量的使用了多頭自注意力機制(Multi-headed self-attention),並且進行了視覺化展示,便於理解。
3. 在WMT2014語料中的英德和英法任務上取得了非常好的結果,並且訓練速度比主流模型更快。(現在來看,主流的NLP預訓練模型底層基本都用Transformer作為特徵提取層了,並且Transformer對業界的啟發不僅僅侷限於NLP領域,還影響了許多和序列建模任務相關的task。)
為了更好的閱讀,下面將文章從word裡截圖過來,(知乎格式看著太不舒服了)。
解決思路Transformer結構如下圖(取自ppt):
AttentionScaled Dot-Product Attention的示意圖如下所示:
最後,總結一下self-attention的整個網路結構圖,幫助我們理解:
Position-wise Feed-Forward NetworksPosition EmbeddingWhy Self-Attention結果如下:
實驗部分首先在機器翻譯任務上進行了實驗,資料為WMT 2014,一個English-to-German的翻譯任務。實驗設定如下:
實驗結果如下:
總結與思考到此,整篇論文的核心思想和創新點已經基本說清楚了,本論文主要是集中闡述了一個Transformer模型架構,它使用attention完全代替了傳統的RNN和CNN結構,它完全基於注意機制,並且在兩個機器翻譯任務上的實驗表明,這種模型在質量上優於其他模型,同時具有更高的並行性和更少的訓練時間。該論文的主要的創新點就是它表明了self-attention在機器翻譯(甚至是一般的 Seq2Seq 任務)的序列編碼上是相當重要的,而之前關於 Seq2Seq 的研究基本都只是把注意力機制用在解碼端。Attention 層的好處是能夠一步到位捕捉到全域性的聯絡,因為它直接把序列兩兩比較,而相比之下,RNN 需要從頭推才能捕捉到,而 CNN 則需要透過層疊來擴大感受野,這是 Attention 層的明顯優勢。 此外,Transformer工作不僅對nlp領域帶來啟發,同樣引起了其他需要處理序列資料的領域,比如資料探勘、推薦系統,並在近年來引起了大量研究。
同時,該論文也引起了我的一些思考,我認為Transformer:
對位置資訊的建模仍然不足。雖然文章中透過使用position embedding來緩解這個問題,但是並沒有根本地解決該問題。Transformer在機器翻譯上的表現比較好,可能是機器翻譯這個任務並不特別強調語序,因此 Position Embedding 所帶來的位置資訊已經足夠了,而且其評測指標 BLEU 也並不特別強調語序。因此,可能需要探索其他能夠更好的編碼位置資訊的方法來進一步提升Transformer的表達能力。有的任務並不是完全需要全域性的結構資訊,有的任務可能只需要區域性資訊,這時候使用Transformer可能會帶來問題,因此在使用時需要特別注意。或許將self-attention結構和RNN、CNN等結構混合使用可能可以更好的融合他們各自的優勢,產生更好的效果呢?