Learning Deep Transformer Models for Machine Translation :如何加深transformer機器翻譯模型

如果你還不知道transformer是什么,那你在NLP領域就已經非常的out了,別看我的博客了,趕緊去看這位大神介紹transformer:https://jalammar.github.io/illustrated-transformer/

1. 介紹

由于機器翻譯任務中,transformer的表現(xiàn)非常好,目前有兩種繼續(xù)研究的方向。一種是加寬,比如transformer BIG模型(這個模型是啥),這是目前機器翻譯的SOA。還有一種是加深,本文作者就是站這一邊的,他們認為加深模型才是王道,能夠取得比transformer BIG更好的效果(這個主張是符合深度學習的直覺的,因為同等參數(shù)數(shù)量的情況下,多層神經網絡結構在擬合函數(shù)時比單層更強)。

本文主要內容就是兩個transformer的結構設計以便解決深度網絡訓練的問題(梯度爆炸和梯度消失)和一堆參數(shù)的實驗分析。transformer的結構設計包括:

1. pre-norm的結構設計:就是在transformer的殘差加和層,用公式推導+實驗的方式證明了先正則再加和的方式比先加和后正則的方式要好

2. 把多層transformer的輸入輸出改變,每一層的transformer的輸入變成前n層的線性組合(類似attention的思想)。這種設計作者稱之為DLCL(Dynamic Linear Combination of Layers)

作者的源代碼已經開源,鏈接為:https://github.com/wangqiangneu/dlcl

2. 設計思想

一般來說這部分內容對大佬沒什么用,但是對小白來說是拓寬視野的好機會,所以還是看一下。用神經網絡完成機器翻譯的任務是目前(2019年)的SOA,最早是用RNN來完成,后面逐漸有人把每個時間序列的隱層加深到4-8層。最近,基于self-attention的transformer在幾個大的數(shù)據集上取得了更優(yōu)異的表現(xiàn)。特別是那些加寬之后的transformer,擁有更多的隱層(也被稱之為Transformer-Big),而單純的加深網絡并沒比淺層(相對淺)表示表現(xiàn)更好。模型真的是越深越好嗎?這個問題還是沒有結論的。

對于經典的transformer結構來說,加深網絡訓練并不容易,因為經典transformer本身就已經非常深了(有6層,每層又包含兩個隱層,更何況后面還有個多層的decoder)。如下圖所示:


image.png

眾所周知,由于梯度爆炸/消失的問題,這么深層的網絡是不容易訓練的。我們也注意到,單純的加深網絡并不能提升模型效果,反而會給訓練帶來極大的困難。

有一項加深transformer的研究成功訓練了一個16層的模型[1],我們就順著這項研究的思路繼續(xù),以期得到更深度的模型。因為encoder對模型的效果影響力更大,并且需要的計算量更小,所以作者主要研究的是如何把encoder加深。

3. 模型改造

OK,有了背景分析,有了研究思路,作者是如何改進的呢?

3.1 pre-norm VS post-norm

大家都知道,transformer中使用了多層網絡,這種結構本身就難以訓練(誤差的難以通過這么深層的模型傳導),為了解決這一問題,transformer使用了ResNet中類似的residual單元。residual單元的結構(虛線就是residual)如下:


image.png

計算公式如下:


image.png

其中xl是該sub-layer的輸入,xl+1是該sub-layer的輸出,yl是后處理函數(shù)之前的中間結果。f是后處理函數(shù),F(xiàn)是sub-layer。θl是sub-layer的參數(shù)。這種處理方式y(tǒng)l 和 xl+1是直接連在一起的。除了這些,還有一個normalization層(記為LN:layer normalization)。norm層有兩種結構:

post-norm:所謂post-norm就是先加和,后正則,公式如下:

image.png

pre-norm:所謂pre-norm就是先正則,后加和,公式如下:

image.png

而式4其實就是不進行任何后處理,具體到式1/2上就是:

image.png

那么到底哪一種更好呢?作者進行了一個簡單的分析:假設ε是誤差,那么post-norm的梯度傳導公式(求導)如下:

image.png

可以看到,式5中有兩個連乘項,第二個連乘項是帶1的,其實也就是最后乘出來帶有一個常數(shù)項1(也就是梯度等于0的可能性比較小,不過還是有梯度爆炸的可能)。而第一個連乘項是不帶任何常數(shù)的,很容易造成梯度爆炸或者梯度消失的問題。也就是說post-norm每一層都要對誤差進行一次求梯度

而pre-norm的梯度計算如下:

image.png

CV的同學肯定很眼熟吧,這就是resnet的梯度遞推公式嘛,這種結構因為把連乘變成了連加,因此降低了梯度爆炸/消失的風險。這就相當于在誤差和每一層之間建立了一個直連通道,使誤差的傳遞盡可能少的受到層級堆疊的影響。

其實自己推一下pre-norm公式,換一種表示方法(不就是相當于F和LN兩個函數(shù)合并成一個函數(shù)嘛),再跟式5比較一下,還可以發(fā)現(xiàn)pre-norm就是僅包含式5的第二個連乘項而已。帶來梯度爆炸/消失風險的主要是式5的第一個連乘項。

作者用pre-norm結構成功訓練了20層的transformer,而post-norm就不行。說明這種結構還是比較合理的。

3.2 DLCL(Dynamic Linear Combination of Layers)

在transformer中使用residual結構是常見操作,作者認為可以把residual結構看做帶有歐拉離散值的常微分方程的特例(這個到底是啥意思我看不懂,請參考這個文獻[2])。歐拉方法是常微分方程最常用的一階解法,只是不夠精確。文獻[3]分析說可能是因為僅僅使用了一個預處理步。在神經網絡模型中,residual結構的這種“單步”的特性讓模型“遺忘”了遠距離的層。如果模型很深的話,就不容易從底層抽取到特征。

因此作者引入了讓低層直連高層的結構,希望用這種結構可以獲取到低層的信息。這種結構作者稱之為Dynamic Linear Combination of Layers(DLCL)。經典的transformer結構是層層堆疊的,每一層的輸入是上一層的輸出,之前有研究[4]把前面所有層線性組合起來:級0~L層的輸出為{ y0,,,,,,yL},那么第L+1層的輸入為:

image.png

其中,g函數(shù)是一個線性層,可以把y0~yL線性組合得到一個輸出值。對于pre-norm來說,可以定義為:

image.png

其中Wkl+1是一個可以學習的線性參數(shù)矩陣。相應的,post-norm可以定義為:

image.png

類似的結構之前有人提出來過,不過他們要么是每一層是之前層的均值(dense residual connection),要么是跟elmo的思想一樣只對最后一層進行學習(所謂的transparent attention)。

image.png

所以作者認為自己的思路還是一種總結與創(chuàng)新。

4. 實驗與分析

4.1 數(shù)據集

作者使用的機器翻譯的數(shù)據集是德譯英 中譯英數(shù)據集,包括:WMT’16 English-German (En-De) 、NIST’12 Chinese English (Zh-En-Small)、WMT’18 Chinese-English (Zh-En-Large)。

對于En-De任務,作者使用了4.5M的預處理數(shù)據,這些數(shù)據已經tokenize了,并且經過了byte pair encoded(BPE)處理(所謂的BPE就是字節(jié)壓縮算法的一種,把常用的連續(xù)字節(jié)用一個字符替換,以達到加快計算速度的目的。類似的算法還有wordpiece),并且用一個共享詞庫做了32K的merge操作(詞庫中出現(xiàn)頻次低于5的單詞都被去掉了)。使用newstest2013作為驗證集,newstest2014作為測試集。

對于Zh-En-Small任務,作者使用NIST’12 OpenMT中一部分bitext,NIST MT06做驗證集,MT04, MT05, MT08做測試集。分詞工具是NiuTrans。去除超過100單詞的長句之后,最終得到1.9M的句子對。同樣用那個32k operations的共享詞庫,最終得到44K的中文單詞和33K的英文單詞。

對Zh-En-Large任務,用了跟[5]同樣的16.5M數(shù)據集,包括7.2M句子的CWMT數(shù)據集和4.2M的UN 和News-Commentary數(shù)據集。還有5M句子的回譯單語言NewsCraw2017數(shù)據集。具體可以參考文獻[5]。

4.2 評估方法

使用結束之前的最后5個模型參數(shù)的均值作為最終模型(據說這種方法可以提升模型表現(xiàn))。使用beam search的時候,對德譯英使用的beam size為4,length penalty為0.6。中譯英使用的beam size為6,length penalty為1.0。

4.3 模型與超參數(shù)

這一部分實在是太繁瑣了,不翻譯了,直接貼圖吧。

image.png
image.png

需要說明的是,DLCL的方法僅應用在每個隱層,不用于隱層的sub-layer。不過有個問題,那就是由于單個GPU的內存不足以支撐4096的batch size。


image.png

所以作者想了辦法,用兩次2048的batch做一次更新來代替一次4096的batch(為什么你的模型不收斂?因為你不夠有錢---GPU內存不足,又不夠聰明---想不到用兩次batch疊加來達到增大單次batch的目的,絕望)。作者發(fā)現(xiàn),更深的模型和更大的batch有利于模型的訓練。最終的結果都是batch =8192, lr = 2×10-3 ,warm up = 16,000。

4.4 實驗結果

image.png

表1中是WMT En-De任務中作者的模型跟基于self-attention的現(xiàn)有模型的對比??梢钥吹?,transformer big 比 基礎版的transformer的BLEU更高(這個指標是專門用于評價機器翻譯效果的,分別計算candidate句和reference句的N-grams模型, 然后統(tǒng)計其匹配的個數(shù)。這種比較方法是與語序無關的)。


image.png

如上圖所示,作者的模型如果采用post-norm,效果會好于base 和big 的版本。經典版本的transformer能達到的模型層數(shù)不超過20層,在這個層數(shù)上,底層的梯度已經接近0了。而post-norm可以在25層獲得最佳效果。

用pre-norm的話,L=20的時候效果比baseline高1.8。這說明pre-norm比post-norm更容易訓練。當達到30層的時候,pre-norm的效果又有了0.4個BLEU的提升。盡管這個最好效果跟[6]相同,但是作者的模型比[6]的模型所花的訓練時間要少3.5倍。

跟transparent transformer相比,作者的模型也更好。在不同任務上模型的表現(xiàn)如下:

image.png

可以看到,作者的模型在不同的任務上都有更佳的表現(xiàn)(雖然這個提升比較小)。

5. 分析

5.1 encoder層數(shù)分析

image.png

可以看到作者的模型隨著encoder層數(shù)的增加計算速度線性下降。不過就算是30L的模型,計算速度依然比baseline 的transformer big快,因為編碼過程獨立于beam search,并且只進行一次。

5.2 decoder

image.png

關于decoder的層數(shù),作者也做了分析,上圖可以看到層數(shù)的增加對指標的影響有限,而且會極大的降低計算速度。

5.3 銷蝕分析

image.png

可以看到,把作者設計的結構挨個去掉的話,模型表現(xiàn)會下降。這說明作者的設計是必要的。

5.4 DLCL權重可視化

image.png

可以看到….看不出什么規(guī)律。差不多就是越后面的層越稀疏吧,后面的層不會利用前面的所有層。

6. 結論

1. 更深的模型確實會有更佳的表現(xiàn),比加寬模型的transformer big更好(起碼說明加深模型這個思路不會比加寬更差)。而且模型小,計算起來更快。準確的說:模型小1.6倍,訓練速度快3倍,預測速度快10%。

2. 如何得到更深的模型?正確使用norm層,用pre而不是post。并且作者解釋了其中的原理。

3. 作者加入了DLCL的結構,并用對比試驗證明了這個結構的有效性。

參考文獻

[1] Ankur Bapna, Mia Chen, Orhan Firat, Yuan Cao, and Yonghui Wu. 2018. Training deeper neural machine translation models with transparent attention. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing, pages 3028–3033.

[2] Tian Qi Chen, Yulia Rubanova, Jesse Bettencourt, and David K Duvenaud. 2018b. Neural ordinary differential equations. In S. Bengio, H. Wallach, H. Larochelle, K. Grauman, N. Cesa-Bianchi, and R. Garnett, editors, Advances in Neural Information Processing Systems 31, pages 6572–6583. Curran Associates, Inc.

[3] J C Butcher. 2003. Numerical Methods for Ordinary Differential Equations. John Wiley & Sons, New York, NY

[4] Uri M Ascher and Linda R Petzold. 1998. Computer methods for ordinary differential equationsand differential-algebraic equations, volume 61. Siam.

[5] Qiang Wang, Bei Li, Jiqiang Liu, Bojian Jiang, Zheyang Zhang, Yinqiao Li, Ye Lin, Tong Xiao, and Jingbo Zhu. 2018a. The niutrans machine translation system for wmt18. In Proceedings of the Third Conference on Machine Translation: Shared Task Papers, pages 528–534.

[6] Myle Ott, Sergey Edunov, David Grangier, and Michael Auli. 2018. Scaling neural machine translation. In WMT, pages 1–9. Association for Computational Linguistics.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容