深度自適應性Transformer

深度自適應性Transformer

論文標題:

Dept-Adaptive Transformer

Maha Elbayad, Jiatao Gu, Edouard Grave, Michael Auli

論文鏈接:

https://arxiv.org/pdf/1910.10073.pdf

收錄情況:

Under review for ICLR2020

MT下的大模型

之前我們也討論過當前深度學習存在的一個問題:模型無腦堆大,一般就能取得更好的效果。

大的模型可以在困難實例上表現更好,但小模型也能夠在簡單實例上表現不錯,比如就回答一個“Thank y ou”。

另一方面,大模型的推理速度也會變慢,我們希望能夠在這種模型下取得不失效果的(包括困難實例)提高推理速度。

本文提出一種深度自適應性的Transformer方法:在推理的時候,對每個生成的token,選擇特定的decoder層去輸出,而不是必須走到最後一層。本文貢獻如下:

  • 本文提出深度自適應(depth-adaptive)的Transformer結構,能夠在推理時對每個待生成的字符自動選擇decoder layer去做分類;
  • 本文能夠在不失效果的情況下顯著提高推理速度;
  • 本文提出了多種方法去預測decoder深度,發現一個簡單的Possion分類器能夠取得比較好的效果。

動態計算(Dynamic Computation)

首先介紹一下要使用的符號。(x,y)表示給定的源句子-目標句子對,模型的encoder得到源句子的編碼s=(s_1,s_2,……,s_{|x|}),然後對N層decoder,在時間t,接受y_t的詞向量,然後依次往上傳:

深度自適應性Transformer


然後傳統的Transformer會在最後一層進行分類:

深度自適應性Transformer


這裡有兩點要注意:

  • 對每個時間t,y_t一定要經過N層decoder
  • 最後的分類器W是唯一的。

除了傳統Transformer之外,一個簡單的想法是,對每個字符,可以選擇在中間某層1≤n≤N做分類,這稱為動態計算(Dynamic Computation):

深度自適應性Transformer


同上,現在要注意的兩點是:

  • y_t到達第n層就輸出了,不再往上走(就算走也沒意義)
  • 對每一層n,其分類器W_n是不同的(當然也可以相同,這個後面說)

好了,下面就需要對每個y_t,我們想讓它在哪一層n退出(Exit)了。本文提出了兩種方法(見下圖):

  • 對齊訓練(Aligned Training) :該方法假設當前步之前的所有隱藏層單元h^{n-1}_{1:t}都看得到,然後用它們去計算N個loss項:
深度自適應性Transformer


  • 混合訓練(Mixed Training):實際上,對齊訓練是不合現實的,這是因為不是所有的y_t都是在第N層輸出,比如y_t可能在第n
  • 那麼一個simple的想法是,上面的隱藏單元直接copy第n層的就可以了,具體見下圖(b)。具體來說,我們先對句子y採樣M個退出序列 。對每個序列m,公式就可以寫為(省略了m):

深度自適應性Transformer


下一個問題是,怎麼採樣退出序列。

深度自適應性Transformer

自適應深度估計(Adaptive Depth Estimation)

本節回答上面這個問題。本文考慮了兩種方法:

(1)以序列為基礎(sequence-specific),即對同一個序列內的每個字符,它們都在同一層退出;

(2)以字符為基礎(token-specific),一個序列內的每個字符可能在不同層退出。

為此,我們使用q_t去建模在第t步時,對應的退出層的參數分佈,即q_t(n)是y_t在第n層退出的概率。這個概率使用下式優化:

深度自適應性Transformer

其中q*_t是真實分佈(具體怎麼優化、真實分佈是什麼下面講)。所以,整體的損失就是:

深度自適應性Transformer

以序列為基礎的自適應深度

在以序列為基礎的自適應深度下,由於一個序列內每個字符的退出層都是一樣的,所以我們不考慮下標t。我們使用下面的式子得到分佈q:

深度自適應性Transformer


那麼,真實分佈q*又怎麼得到呢?本文又提出兩種方法:

  • 基於似然度(Likelihood-based): 這種方法使用整個序列的最大似然對應的退出層,並使用Dirac delta函數。
深度自適應性Transformer

此外,還可以加入一個正則項鼓勵更低的退出層:

深度自適應性Transformer


  • 基於正確性(Correctness-based): 似然雖好,但不能判斷最大的似然是不是正確的序列,所以,基於正確性的方法選擇這樣的退出層。 它是滿足賦予正確字符最大分數的最低的層。
  • 具體來說,對每個層,我們計算在該層上所有正確預測的字符數,然後選擇最大正確數的一層,並同樣加上正則項:

以字符為基礎的自適應深度

以字符為基礎的自適應深度方法對每個字符,需要分別判斷它們要在哪一層推測,即要得到q_tqt。本文考慮兩種方法:

  • 多項分佈(Multinomial):
  • 泊松二項分佈(Poisson Binomial):

深度自適應性Transformer


同樣地,下面要考慮真實分佈q^*_tqt∗:

  • 基於似然度: 同上,在每一步tt,我們選擇這樣的層:在這個層退出的時候,似然得到最大:
深度自適應性Transformer

但是顯然,這種方法是貪心做法,我們還想要考慮未來的字符,所以本文考慮 一個光滑化(smoothed)似然,它考慮附近的幾個字符:

深度自適應性Transformer


  • 基於正確性: 和基於似然的相同,我們有:
深度自適應性Transformer


  • 基於自信度(Confidence Thresholding) :所謂自信度θn,就是噹噹前的輸出最大得分超過它時,就以當前層n退出。換句話說,就是當前層n足夠自信的時候,就把這一層作為當前字符的退出層。

下圖是幾種不同方法的示意圖:

深度自適應性Transformer

實驗

本文在數據集IWSLT'14 De-En和WMT'14 En-Fr上實驗,實驗設置詳見論文。下表是對齊訓練和混合訓練的效果實驗結果,實驗在IWSLT De-En上進行,報告BLEU值。

深度自適應性Transformer

可以看到,對齊訓練方法竟然幾乎全面碾壓混合訓練方法,這是因為對齊訓練方法不會copy其他層的hidden states。下面我們統一使用對齊訓練方法。

然後,下圖是在IWSLT14 De-En上速度和效果的比較圖,其中C表示correctness-based oracle, LL表示Likelihood-based oracle:

深度自適應性Transformer

而下圖是在WMT14 En-Fr上的比較圖:

深度自適應性Transformer

從這兩個圖可以看到,用對齊訓練方法得到的模型,在n≥2的時候,差不多就能超過baseline模型(傳統Transformer),而Possion方法大體上比多項分佈好。

下圖是一個實例,綠色的是退出層,灰色的是概率得分。顯然,大部分字符都不必走完6層,這說明加快了推理的速度。

深度自適應性Transformer

小結

本文就Transformer提出了一種深度自適應性的推理方法,能夠加速推理時的速度,同時還不失效果。

在訓練時,有兩種策略(對齊訓練和混合訓練);在推理時,也有兩種策略(序列為基礎和字符為基礎),並且各自都有選擇退出層的不同方法。本文探索了以上策略,取得了比較好的結果。


分享到:


相關文章: