選自arXiv,作者:Adrian de Wynter、Daniel J. Perry,機器之心編譯
提取 BERT 子架構是一個非常值得探討的問題,但現有的研究在子架構準確率和選擇方面存在不足。近日,來自亞馬遜 Alexa 團隊的研究者細化 BERT 子架構提取過程,並提取了一個最優子架構 Bort,它的大小僅為 BERT-large 的 16%,CPU 上的推理速度卻提升到了原來的八倍。

在自然語言處理領域,BERT 是一個里程碑式的進展。只需要添加一個單層線性分類器和一個簡單的微調策略,它就能在多項任務中達到優異的性能。但另一方面,BERT 的應用也面臨很多問題,如規模大、推理速度慢、預訓練過程複雜。研究人員已經做了許多嘗試來提取一個更簡單的子架構,希望這個子架構能夠保持原始 BERT 的優異性能,同時簡化預訓練過程,縮短推理時間。這些研究取得了不同程度的成功。然而,他們提取的這些子架構在準確率方面仍然低於原始架構的實現,而且架構參數集的選擇往往看起來很隨意。
雖然這個問題在計算上很難解決,但 de Wynter 最近的一項研究表明:存在一種近似演算法——更具體地說,一種完全多項式時間近似模式(FPTAS)——在一定條件下能夠有效地提取出具有最優保證的此類集合。
在本文中,來自 Amazon Alexa 團隊的研究者將提取 BERT 最優子架構參數集這一問題細化為三個指標:推斷延遲、參數大小和誤差率。該研究證明:BERT 具備 strong AB^nC 屬性,可滿足這些條件組合,使上述演算法表現得像 FPTAS。然後,研究者從一個高性能的 BERT 變體中提取了一個最優的子架構,稱為 Bort,其大小是 BERT-large 的 16%,在 CPU 上的推理速度提升到原來的 8 倍。

論文地址:https://arxiv.org/pdf/2010.10499.pdf
GitHub地址:https://github.com/alexa/bort/

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

演算法
該研究想要找出一個架構參數集 ξ = ,對推理速度 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 所示:

求取 i(·) 和 p(·) 的代理相對簡單,事實上,

的代理必須透過損失函數來獲得。同樣地,保證運行時和可逼近性依賴於兩個額外的輸入參數:選定的最大訓練步數量 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 的微調,因為它允許模型更好地學習每個任務的目標分佈。

SuperGLUE
SuperGLUE 包含一組常見的自然語言任務,它由十個資料集組成。
研究者透過添加單層線性分類器來微調 Bort,並在所有任務中運行 Agora 至收斂。結果如表 5 所示:Bort 在除了 ReCoRD 以外的所有任務中獲得了超越或媲美 BERT-large 的結果。

RACE
RACE 資料集是一個文字閱讀的多項選擇題資料集,經過專業註釋,被分成兩個資料集:RACE-H(從高中考試題目中提取的資料集)和 RACE-M(從初中考試題目中提取的資料集)。
與之前實驗一樣,研究者透過添加單層線性分類器來微調 Bort,並運行 Agora 進行收斂。
結果如表 6 所示。總體而言,Bort 獲得了良好的結果,在兩個任務上都比 BERT-large 的性能高出 9-10%。
