亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

機器之心發表於2020-10-27

亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

自然語言處理領域,BERT 是一個里程碑式的進展。只需要新增一個單層線性分類器和一個簡單的微調策略,它就能在多項任務中達到優異的效能。但另一方面,BERT 的應用也面臨很多問題,如規模大、推理速度慢、預訓練過程複雜。研究人員已經做了許多嘗試來提取一個更簡單的子架構,希望這個子架構能夠保持原始 BERT 的優異效能,同時簡化預訓練過程,縮短推理時間。這些研究取得了不同程度的成功。然而,他們提取的這些子架構在準確率方面仍然低於原始架構的實現,而且架構引數集的選擇往往看起來很隨意。

雖然這個問題在計算上很難解決,但 de Wynter 最近的一項研究表明:存在一種近似演算法——更具體地說,一種完全多項式時間近似模式(FPTAS)——在一定條件下能夠有效地提取出具有最優保證的此類集合。

在本文中,來自 Amazon Alexa 團隊的研究者將提取 BERT 最優子架構引數集這一問題細化為三個指標:推斷延遲、引數大小和誤差率。該研究證明:BERT 具備 strong AB^nC 屬性,可滿足這些條件組合,使上述演算法表現得像 FPTAS。然後,研究者從一個高效能的 BERT 變體中提取了一個最優的子架構,稱為 Bort,其大小是 BERT-large 的 16%,在 CPU 上的推理速度提升到原來的 8 倍。

亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

  • 論文地址:https://arxiv.org/pdf/2010.10499.pdf

  • GitHub地址:https://github.com/alexa/bort/

亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

儘管 FPTAS 可以確保找到表現最優的架構,但它返回的是在上述三個指標上表現最優的架構引數集,而不會輸出一個訓練到收斂的架構。因此,研究者對 Bort 進行了預訓練,發現與原先的訓練相比,預訓練速度有了明顯的提高:在相同的 GPU、資料集大小也相當的情況下,Bort 訓練了 288 小時,BERT-large 訓練了 1153 小時,而 RoBERTa-large 訓練了 24,576 小時。

研究者還在 GLUE、SuperGLUE 以及 RACE 公共 NLU 基準上對 Bort 進行了評估。結果表明,與 BERT-large 相比,Bort 在所有這些基準上都獲得了顯著提高,提升幅度從 0.3% 到 31% 不等。

研究者在 GitHub 上開源了訓練模型以及程式碼:https://github.com/alexa/bort/

Bort:BERT 的「最優」子架構

Bert 是一種基於 transformer 的雙向全連線架構,它包括一個依賴於詞彙量的嵌入層(BERT 的詞彙量 V = 28,996 tokens)、包含 Transformer 的 D 編碼器層,以及一個輸出層。BERT 架構剛推出時有兩個變體:

  • BERT-large(D = 24 編碼器層、A = 16 注意力頭、H = 1,024 隱藏層大小、I = 4,096 中間層大小);

  • BERT-base(D =12、A = 12、H = 768、I = 3072)。

在形式上,令 Ξ 表示包含四元組 <D, A, H, I>(即架構引數)數值有效組合的有限集合。與 de Wynter (2020b) 的研究一致,該研究將 BERT 架構族描述為某個函式的陪域(codomain),如下公式 1 所示:

亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

演算法

該研究想要找出一個架構引數集 ξ = <D, A, H, I>,對推理速度 i(b(X; ·))、引數量 p(b(·; W) 和誤差率 e(b(X; W^∗ ), Y ) 這三個度量指標進行最佳化。

de Wynter (2020b) 表明, 對於任意架構而言,這都是一個 NP-Hard 問題。de Wynter (2020b) 中的 FPTAS 是一種近似演算法,該演算法依賴於對 i(·)、p(·) 和 e(·, ·) 代理函式的最佳化,這三個代理函式分別表示為 iˆ(·)、pˆ(·) 和 eˆ(·, ·)。執行過程中將它們表示為 Ξ 的函式,並透過選擇一個引數最多、推理時間最長的架構 T∈B(T 被稱為極大點,maximum point)和 W - 係數指標對它們進行標量化處理,具體如下公式 2 所示:

亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

求取 i(·) 和 p(·) 的代理相對簡單,事實上,亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍的代理必須透過損失函式來獲得。同樣地,保證執行時和可逼近性依賴於兩個額外的輸入引數:選定的最大訓練步數量 n > 0,預期間隔大小 1 ≤  ≤ |Ξ|。ϵ 的的選擇直接影響該近似演算法求得解的質量。

知識蒸餾進行預訓練

儘管 FPTAS 能夠確保我們獲得描述最優子架構的架構引數集,但如何高效預訓練引數化模型仍是一個待解決問題。

根據以往的研究(詳見論文第二章)可以得出結論,使用知識蒸餾(KD)來預訓練上述語言模型可以在前述評估指標上達到良好的效能。鑑於代理誤差函式 eˆ(·, ·) 是關於極大點的交叉熵,因此將上述評估透過 KD 進行擴充套件是很自然的事情。

該研究還比較了 Bort 架構的自監督預訓練和基於 KD 的預訓練,發現與另一種方法相比,使用學生模型的最後一層和教師模型之間的一個簡單交叉熵就足以找到一個優秀模型,該模型可以獲得更高的遮蔽語言模型(MLM)準確率和更快的預訓練速度。

評估

為了驗證在經過最佳子架構提取過程之後,Bort 是否保留了 BERT 和 RoBERTa 的強大泛化效能,研究者在 GLUE、SuperGLUE 基準以及 RACE 資料集上微調了 Bort。結果表明,Bort 比其他類似 BERT 的壓縮模型要好得多,在多個任務上的效能都大大優於其他模型

GLUE

GLUE(Generalized Language Evaluation benchmark)包含一組常見的自然語言任務。主要是側重於自然語言推理(NLI),它由十個資料集組成。

研究者透過在所有任務中新增單層線性分類器來微調 Bort,但 CoLA 除外。在 CoLA 中,研究者發現在 Bort 和分類器之間新增額外的線性層可以提高收斂速度。研究者使用 Agora 對所有任務進行了微調。

結果如表 4.15 所示。除了 QQP 和 QNLI 以外,Bort 幾乎在所有任務上表現優異,它的效能比其他基於 BERT 的同等模型要好得多。相比於 BERT-large,Bort 的效能提高了 0.3%-31%。研究者將這種提升歸功於 Agora 的微調,因為它允許模型更好地學習每個任務的目標分佈。

亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

SuperGLUE

SuperGLUE 包含一組常見的自然語言任務,它由十個資料集組成。

研究者透過新增單層線性分類器來微調 Bort,並在所有任務中執行 Agora 至收斂。結果如表 5 所示:Bort 在除了 ReCoRD 以外的所有任務中獲得了超越或媲美 BERT-large 的結果

亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

RACE

RACE 資料集是一個文字閱讀的多項選擇題資料集,經過專業註釋,被分成兩個資料集:RACE-H(從高中考試題目中提取的資料集)和 RACE-M(從初中考試題目中提取的資料集)。

與之前實驗一樣,研究者透過新增單層線性分類器來微調 Bort,並執行 Agora 進行收斂。

結果如表 6 所示。總體而言,Bort 獲得了良好的結果,在兩個任務上都比 BERT-large 的效能高出 9-10%

亞馬遜:我們提取了BERT的一個最優子架構,只有Bert-large的16%,CPU推理速度提升7倍

相關文章