Transformer (變形金剛,大霧) 三部曲:RNN 的繼承者

講講最近深度學習里面的后期之秀吧,Transformer(和變形金剛沒有半毛錢關系)

話說自公元二零一三年,深度學習網(wǎng)絡一枝獨秀,自機器學習王國脫穎而出,帶動了人工智能領域的發(fā)展。其中它最主要的兩大家,卷積網(wǎng)絡(CNN)循環(huán)網(wǎng)絡(RNN),因其獨特的性質(zhì),分別在計算機視覺和自然語言處理領域得到廣泛使用。

然而這兩大家卻都還是上世紀就被提出來了,本世紀雖有創(chuàng)新,卻也逃脫不了這兩大家的干系。前有 RNN 的變種樹狀的遞歸網(wǎng)絡 (Recursive Neural Network),后有卷積網(wǎng)絡里的 ResNet,InceptNet 這些變種,外加對它們的一些訓練技巧。

于是乎,說到學習深度學習,實際上主要就在學習 CNN 和 RNN。近來,Google 提出了一種新的架構 Transformer,徹底顛覆了過去的理念,沒用到 CNN 和 RNN,主要是一種叫做 Attention (注意力)機制的結(jié)構組成。用更少的計算資源,取得了比過去的結(jié)構更好的結(jié)果。

提出 Transformer 的論文,Attention is All You Need (你只需要注意力就行) 也在去年被封 NLP 領域的年度最佳論文。于是 Transformer 一下子就火起來了,在很多任務有取代 RNN 的趨勢。之前自己投的論文也被審稿人吐槽怎么不用 Transformer.

而本篇要介紹的就是 Transformer,還有之后比較成功的兩個變體,Weighted Transformer 以及 Universal Transformer.

進入正題之前,先來介紹一下 RNN 序列到序列(seq2seq) 架構,以及注意力機制。這樣更便于我們理解之后的 Transformer 如何取代它。

經(jīng)典架構:RNN + Seq2Seq + Atten

之前 Twitter 上有人開過玩笑,深度學習使得 NLP 領域太過簡單粗暴,無論什么問題用 seq2seq + atten 都能解決。這里說的 seq2seq 是 sequence to sequence 的簡稱,一般默認的結(jié)構是由 RNN 組成的編碼器和解碼器,再加上在之間的注意力機制 (atten)。

關于 RNN 的詳細知識參考我之前的文章《吳教授的循環(huán)神經(jīng)網(wǎng)絡(RNN)課堂》,而關于 seq2seq 也可以參考《神經(jīng)機器翻譯概覽:基準模型與改進(上)》。

首先需要知道,在沒有注意力機制之前,用 seq2seq 架構翻譯是這樣的。先是編碼器,按照順序處理源句,得到一個描述(representation)向量,然后解碼器利用這個描述,來翻譯出整個句子。然而這導致了信息的大量丟失,特別是對一些長的句子,和有不同語序的語言對。比如下面這個。

可以發(fā)現(xiàn),要把 “l(fā)ike” 翻譯成 “好き(suki)”,得經(jīng)歷很長的距離,這中間會混入噪音,還會丟失有用信息,所以很難翻譯準確。

即使之后,加了部分注意力機制來輔助翻譯,也會因為對關系的捕捉不足,而出現(xiàn)翻譯失誤。因為在這樣的翻譯任務中,需要發(fā)現(xiàn)的關系有三種:

  1. 源句內(nèi)部的關系;

  2. 目標句內(nèi)部的關系

  3. 源句和目標句之間的關系。

而這樣的 seq2seq,只在捕捉源句和目標句之間關系用注意力機制進行了捕捉,而源句內(nèi)部和目標句內(nèi)部還是在用 RNN,從一邊到另一邊這樣捕捉關系(好一點的用雙向 RNN),但這樣并不夠直接,特別是對一些距離遠的關系捕捉很差。

除了對遠距離關系難以學習的不足以外,RNN 還有一點不足,那就是訓練慢。因為它默認是按時序來進行處理的,所以得一個個詞從左到右看過去,這樣導致 RNN 不能像 CNN 一樣,充分利用 GPU 的并行運算優(yōu)勢。

值得一提的是,為了解決 RNN 的訓練問題,F(xiàn)acebook 的研究人員有提出 CNN 的 seq2seq 架構,使得訓練速度更快,但是性能并沒有得到太大的提高。

Transformer:沒錯,你只需要注意力機制

因為這只是科普文,所以我會盡量用自己的理解來說,當然能讀懂公式是最好的。

首先先說說自己對 Transformer 理解,我認為它最大的改進有如下幾點:

  1. 提出用注意力機制來直接學習源語言內(nèi)部關系和目標語言內(nèi)部關系,而不是像之前用 RNN 來學;

  2. 對存在多種不同關系的假設,而提出多頭 (Multi-head) 注意力機制,有點類似于 CNN 中多通道的概念;

  3. 對詞語的位置,用了不同頻率的 sin 和 cos 函數(shù)進行編碼。

所以之后我也就圍繞著這三點來講,想了解更具體,還是去讀論文和代碼吧。

首先說說核心構件,多頭注意力機制。先來看看注意力機制的基本組成,如下圖。

注意力機制的運算需要三部分,query,keys,values。一般來說 keys 和 values 相同,便于更廣義上的理解分成兩個。計算過程大概是這樣:

  1. 先用 query 和所有的 keys 值相乘(也能用其他一些運算),于是每個 key 都能得到一個值;

  2. 上面得到的值可以看做是每個 key 的權重,為了使得權重加起來等于1,這里需要用 softmax 壓一下得到注意力評分(attention score)

  3. 最后用評分和相對應的 value 值相乘,決定哪個 value 比較重要,再相加,就得到想要的注意力向量了。

論文中用到的注意力機制公式如下,Q,K,V 分別是 query,key,value 的矩陣,除以根號 d 是為了更好的數(shù)值運算:

了解了一般的注意力機制,那么多頭注意力機制就很好理解了。它相當于有多組這樣的注意力機制,對 Q K V 之間的不同關系進行提取,最后再把得出的結(jié)果拼接起來。為了保證多樣性,還給每組注意力機制增加了不同的線性變換層來先處理 Q K V。

公式表達:

之后來看看論文中 Transformer 的整體結(jié)構。

這張圖,特別想直接摔電腦,但現(xiàn)在我們只需要看箭頭和注意力機制模塊就可以了。會發(fā)現(xiàn),對應之前提到的三種關系:源句內(nèi)部關系,目標句內(nèi)部關系,源句和目標句之間關系,多頭注意力機制也剛好有三個,分別學習這三種關系。

首先從中間把整張圖切開,左邊有輸入 (input)的看做是 seq2seq 的編碼器,而右邊就是解碼器了。

來看看編碼器,非常簡單。

首先是輸入源句,轉(zhuǎn)換成向量,加入位置編碼,然后利用多頭注意力學習源句內(nèi)部的關系,傳入一個前向?qū)樱‵eed Forward),這是為了讓網(wǎng)絡內(nèi)的向量互動更多,學到更復雜的關系。其余一些跳躍的箭頭,Add 和 Norm 什么的只是訓練技巧。

之后看解碼器:

image.png

比編碼器要復雜些,但也就中間多了個注意力模塊。我們輸入目標句子,轉(zhuǎn)化成向量,加入位置編碼,然后用第一個多頭注意力機制學習目標句內(nèi)部之間的關系,之后將向量和編碼器端傳過來的向量一起傳入第二個注意力機制,來學習目標句和源句之間的關系,再如編碼器一樣傳入前向?qū)?。最后在一個線性變換之后,用 softmax 得出概率向量,并給出預測的值。

這就是最初的 Transformer 模型了,那它實際的表現(xiàn)呢。在機器翻譯任務上,相比起之前的模型,它取得了更高的 BLEU 分數(shù),同時卻只用了更少的計算資源(英語法語任務差距達到幾十倍)。

Weighted Transfomer: 加權就是加強,沒錯就是這樣

在最初的 Transformer 后不久,最成功的 Transformer 的變種模型便是,Weighted(加權的) Transformer。

在整體上架構和上面提到的 Transformer 差不多,最主要的不同是對注意力機制的處理。在 Transformer 中,先通過多頭注意力機制來學習多個不同方面特征,然后拼接起來傳給一個線性層。

而 Weighted Transformer 則是通過兩種權重值,并且將一些不同的線性層放入注意力機制中,使得各個頭(head)更加多樣,互動更加強。

兩個權值分別是κ和α,κ 是在多頭注意力機制后,對每個頭進行權值加成,論文中稱為 concatenate weight (拼接權重,但我并沒發(fā)現(xiàn)有對多頭進行拼接的操作,有懂的可以告訴我。) 而 α 是將 κ 加權處理后再經(jīng)過一層前饋處理(就是上面的 Feed Forward,F(xiàn)FN)的值再次進行加權,最后將這些頭直接加起來。

公式如下:

這篇論文中將這種注意力機制叫做,multi-branch attention (多支注意力機制)。值得注意的一點是,在 Weighted Transformer 中并不是三處都是用相同的多支注意力機制,在解碼器捕捉目標語言內(nèi)部關系的注意力機制就只用了普通的注意力機制,不知道是刻意為之還是什么。

Universal Transformer: 通用 Transformer

最近 Transformer 又得到新的突破,在谷歌大腦實習的 Mostafa Dehghan 提出更強大的 Transformer 模型:Universal Transformer,比之前的 Weighted Transformer 更進一步。

首先是比起前兩篇更加規(guī)范化了,模型里面的基本模塊,主要由多頭注意力機制和轉(zhuǎn)換函數(shù)組成。這篇論文中最主要的 idea 是,Transformer 最主要是利用注意力機制通過查看相關信息,對每個位置詞語的向量進行不停的精煉。論文中幾個創(chuàng)新點是:

  1. 基本模塊很簡潔,多頭注意力機制加轉(zhuǎn)換函數(shù),不停堆疊對詞語向量進行精煉;

  2. 每一次精煉就是一個 step ,加上句子里的位置,就會產(chǎn)生一個二維的位置坐標,論文中對這個位置進行了向量化,并且加入了運算中(但是我并沒有懂這樣做的用途,因為使用的只有最后一層的);

  3. 假設一句話中每個詞需要精煉的程度不一樣,利用 Adaptive Computation Time 方法來使得對需要多次精煉的多次精煉,而對已經(jīng)精煉足夠多次的不予處理。

基本模塊中的公式如下:

而其中 t 等于 0的時候,也就是 H_0 的時候表示的就是詞向量,之后按照上面的公式計算。

在對二位坐標進行編碼時,使用的是如下公式:

關于 Adaptive Computation Time 可以讀這篇論文《Adaptive computation time for recurrent neural networks》。

實驗結(jié)果對比

關于這三個 Tranformer 模型,在英德翻譯上的對比如下表:

可以看到這三個模型依次變得更強。當然 Universal Transformer 還有其他一些強處,比如說在之前的 Transformer 不擅長的一些任務上也取得了很好的成績,具體查看論文。

結(jié)語

我相信,未來 Transformer 將會成為趨勢,成為主流的模型,因為眾多實驗都證明了它的有效性?;蛟S之后,RNN 會變得像 Sigmoid 激活函數(shù)一樣,成為教科書上的“經(jīng)典”,也或許 RNN 會得到改進在一些特定任務上取得到更好的應用吧。

參考

  1. Paper Dissected: “Attention is All You Need” Explained

  2. Attention Is All You Need

  3. WEIGHTED TRANSFORMER NETWORK FOR MACHINE TRANSLATION

  4. Universal Transformer

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 近日,谷歌官方在 Github開放了一份神經(jīng)機器翻譯教程,該教程從基本概念實現(xiàn)開始,首先搭建了一個簡單的NMT模型...
    MiracleJQ閱讀 6,446評論 1 11
  • 9. 循環(huán)神經(jīng)網(wǎng)絡 場景描述 循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network)是一種主流的深度學習...
    _龍雀閱讀 2,928評論 0 3
  • 今天做完深度學習的論文分享,將這篇論文記錄下來,以便日后回顧查看。PS:簡書不支持 MathJax 編輯公式,簡直...
    是neinei啊閱讀 94,358評論 15 66
  • ???? ? ? ?? ? ? ?? ? ? ?? ?? ? ??? ? ? ? ? ?? ? ? ? ??? ?...
    杰克老弟閱讀 270評論 0 0
  • 二級office 按照新大綱,需要學習的內(nèi)容有[6]:計算機的基礎知識,Word的功能和使用 ,Excel的功能和...
    清醒不了的人閱讀 682評論 0 1