一文看懂自然語言處理中遷移學習的現狀

本文對北美計算語言學聯合會 2019 年出版的《自然語言處理中遷移學習教程》NAACL 2019 tutorial on Transfer Learning in NLP)進行了拓展。

本文 The State of Transfer Learning in NLP最初發佈於Sebastian Ruder 個人博客,經原作者 Sebastian Ruder 授權,由 InfoQ 中文站翻譯並分享。

該教程由 Matthew Peters、Swabha Swayamdipta、Thomas Wolf 和我共同撰寫。在本文中,我將重點介紹一些重要的見解和要點,並根據最近的研究工作提供了更新。下圖展示了本文的結構:

本教程的幻燈片Colaboratory notebook代碼都可以在網上獲得。

譯註: Colaboratory 是一個 Google 研究項目,旨在幫助傳播機器學習培訓和研究成果。它是一個 Jupyter 筆記本環境,不需要進行任何設置就可以使用,並且完全在雲端運行。Colaboratory 筆記本存儲在 Google 雲端硬盤中,並且可以共享,就如同你使用 Google 文檔或表格一樣。Colaboratory 可免費使用。

引言

要了解什麼是遷移學習,請閱讀這篇博客文章《遷移學習:機器學習的下一個前沿》(Transfer Learning - Machine Learning’s Next Frontier)。我們在本文中的定義如下所示:

遷移學習是一種從源設置中提取知識並將其應用於不同目標設置的方法。

上圖是遷移學習過程的一個實例。

在短短一年多的時間裏,以預訓練語言模型形式的遷移學習,在自然語言處理中已經變得無處不在,併爲各種任務的最新進展做出了貢獻。然而,遷移學習在自然語言處理中並非新近纔出現的新事物。一個例證是命名實體識別(Named Entity Recognition,NER)任務的進展情況,如下圖所示。

上圖展示了隨着時間的推移,CoNLL-2003(English)上的命名實體識別的性能變化。

縱觀其歷史,這項任務的大多主要改進都是由不同形式的遷移學習推動的。從早期具有輔助任務的自我監督學習(Ando、Zhang,2005 年)和短語與詞簇(Lin、Wu,2009 年),再到語言模型嵌入(Peters 等人,2017 年)和預訓練語言模型(Peters 等人,2018 年Akbik 等人,2018 年Baevski 等人,2019 年)。

在當前的自然語言處理中,常見的遷移學習類型有很多種。這些可以大致按照三個維度進行分類,基於:

  1. 源和目標設置是否處理相同的任務。
  2. 源域和目標域的性質。
  3. 學習任務的順序。

我們可以在下面的分類中看到這些差異:

上圖是自然語言處理中遷移學習的分類法。(Ruder,2019 年)

順序遷移學習是迄今爲止帶來最大改進的形式。通常的做法是,使用你選擇的方法在大型未標記文本語料庫中的表示(Representations)進行預訓練,然後使用標記數據將這些表示適應於受監督的目標任務,如下圖所示:

上圖展示了順序遷移學習的一般過程。

主要主題

在如何應用這一範例中,可以觀察到幾個主要的主題:

從單詞到上下文單詞

隨着時間的推移,表示包含了更多的上下文。早期的方法,如 word2vec(Mikolov 等人,2013 年),就已經學會了每個單詞獨立於上下文的單一表示法。之後的方法將這些表示擴展到句子和文檔中(Le、Nikolov,2014 年Conneau 等,2017 年)。當前的方法學習基於單詞的上下文變化的單詞表示(McCann 等,2017 年Peters 等,2018 年)。

語言建模預訓練

許多成功的預訓練方法都是基於語言建模(Language Modelliing,LM)的變體。語言建模的優點是不需要任何人工註釋,並且許多語言有足夠的文本可用於學習合理的模型。此外,語言建模是多方面的,能夠用各種各樣的目標函數來學習句子和單詞的表示。

從淺到深

在過去的幾年裏,自然語言處理中最先進的模型已經變得越來越深入。直到兩年前,大多數任務的技術水平都是 2~3 層的 BiLSTM,機器翻譯是具有 16 層的離羣值(outlier)(https://arxiv.org/abs/1609.08144">Wu 等人,2016 年)。相比之下,目前的模型,如 BERT-Large 和 GPT-2 這樣的模型,由 24 個 Transformer 組組成,最近的模型甚至更深。

預訓練與目標任務

預訓練和目標任務的選擇緊密相連。例如,句子表示對於單詞級的預測沒有用處,而基於跨度的預訓練對跨度級預測很重要。總的來說,爲了獲得最佳的目標性能,選擇類似的預訓練任務是有益的。

預訓練

爲什麼語言建模如此有效?

預訓練的語言模型所取得的巨大成功着實讓人驚訝。語言建模之所以取得成功的原因之一可能是,即使對於人類來說,這也是一項非常困難的任務。爲了有機會解決這一任務,模型需要學習語法、語義以及關於世界的某些事實。給定足夠的數據、大量的參數和足夠的計算,模型就可以完成合理的工作。根據經驗來看,語言建模比其他預訓練任務(如翻譯或自動編碼)更有效(Zhang 等人,2018 年Wang 等人,2019 年

最近對人類語言的預測率失真(predictive-rate distortion,PRD)分析(Hahn、Futrell,2019 年)表明,人類語言和語言建模具有無限的統計複雜性,但在較低水平上可以很好地近似。這一觀察結果有兩個含義:

  1. 用相對較小的模型可以得到較好的結果。
  2. 模型有很大的擴展潛力。

對於這兩個含義,我們都有經驗證據,將在下一節中出示這些證據。

樣本效率

預訓練的主要好處之一是,它減少了對帶註釋數據的需求。在實踐中,與未經訓練的模型相比,遷移學習通常可以獲得類似的性能,後者所需的樣本數量要少 10 倍或更多,如下圖 ULMFiT 模型所示的那樣(Howard、Ruder,2018 年)。

上圖中,從零開始訓練的模型(藍色曲線)與兩個預訓練模型性能爲別在標記的目標數據(橙色曲線)以及未標記的目標數據(綠色曲線)上進行微調。(Howard、Ruder,2018 年)

擴展預訓練

通常可以通過共同增加模型參數的數量和預訓練數據的數量來改進預訓練表示。隨着預訓練數據數量的增加,返回開始減少。然而,當前的表現曲線(如下圖所示),並不表示我們已經達到穩定狀態。因此,我們可以期待在更多數據上訓練更大的模型。

上圖展示了使用不同數量的 Common Crawl 數據的平均 GLUE 得分。(Baevski,2019 年)

這種趨勢的最新例子是 ERNIE 2.0XLNetGPT-2 8BRoBERTa。後者尤其發現,簡單地對 BERT 進行更長時間和更多數據的訓練,可以改善結果;而 GPT-2 減少了對語言建模數據集的困惑(雖然只有相對較小的因素)。

跨語言的預訓練

預訓練的一個主要承諾是,它可以幫助我們彌合數字語言的鴻溝,並使我們能夠學習世界上 6000 多種語言中的更多自然語言處理模型。許多關於跨語言學習的研究工作都集中在訓練不同語言中單獨的詞嵌入並學習如何排列它們(Ruder 等人,2019 年)。同樣,我們可以學習結合上下文表示(Schuster 等人,2019 年)另一種常見的方法是共享一個子詞彙表,並在多種語言上訓練一個模型(Devlin 等人,2019 年Artetxe、Schwenk,2019 年Mulcaire 等人,2019 年Lample、Conneau,2019 年)。雖然這很容易實現,而且是一個強有力的跨語言基線,但它會導致低資源語言的表示不足(Heinzerling、Strube,2019年)。特別是多語言 BERT 已經成爲最近備受關注的話題(Pires 等人,2019 年Wu、Dredze,2019 年)。儘管零樣本的性能表現強大,但專用的單語語言模型往往更有競爭力,同時更有效率(Eisenschlos 等人,2019 年)。

實際考慮

預訓練的成本很高。我們在教程中使用的 Transformer-XL 樣式模型在 8 塊 V100 圖形處理器上進行預訓練需要 5~10 個小時(若使用一塊 V100 則需要幾天的時間),才能達到良好的困惑度(perplexity)。因此,共享預訓練模型非常重要。預訓練對於超參數的選擇是相對穩健的,除了 Transformer 需要對學習率進行“熱身”外。作爲一般規則,如果數據集足夠大,模型應該沒有足夠的容量來進行過擬合。掩碼語言建模(Masked language modeling)(如 BERT)的訓練速度通常比標準的語言建模慢 2~4 倍,因爲掩碼只有一小部分單詞產生的信號會更小。

譯註:信息論中,困惑度度量概率分佈或概率模型的預測結果與樣本的契合程度,困惑度越低則契合越準確。該度量可以用於比較不同模型之優劣。

表示中有哪些內容?

表示(Representations)已經被證明,可以預測某些語言現象,例如翻譯中的對齊或句法層次。在使用語法進行預訓練時,可以獲得更好的性能;即使沒有顯式地度語法進行編碼,表示仍然可以學習一些語法的概念(Williams 等人,2018 年)。最近的工作進一步表明,語法知識可以有效地提煉到最先進的模型中(Kuncoro 等人,2019 年)。網絡架構通常決定表示中的內容。例如,已經觀察到 BERT 可以捕獲語法(Tenney 等人,2019 年Goldberg,2019 年)。不同的架構在它們捕獲的信息方面顯示了不同的分層趨勢(Liu 等人,2019 年)。

上圖展示了探究任務的一般設置,用於研究上下文詞彙表示中的語言知識。(Liu 等人,2019 年)

模型捕獲的信息也取決於你如何看待它:可視化激活或注意力權重提供了模型知識的鳥瞰圖,但側重於一些樣本;爲了預測某些特性(如上所述)而訓練分類器的探測器發現了語料庫範圍內的特定特性,但也可能會引入它們自己的偏差;最後,網絡消融(network ablations)對於改進模型非常有用,但有可能是針對特定任務的。

適應

爲了使預訓練模型適應目標任務,我們可以在幾個正交方向上進行決策:架構修改、優化方案,以及是否獲得更多的信號。

架構修改

對於架構修改,我們有兩個常規選項:

  1. 保持預訓練模型內部不變

這可以像在預訓練模型上添加一個或多個線性層一樣簡單,這通常是通過 BERT 來完成的。相反,我們也可以使用模型輸出作爲單獨模型的輸入,當目標任務需要預訓練的嵌入中不可用的交互時,例如跨度表示或跨句關係建模時,這通常是有意的。

  1. 修改預訓練模型內部架構

我們這樣做的原因之一是爲了適應一個結構不同的目標任務,比如具有多個輸入序列的目標任務。在這種情況下,我們可以使用預訓練模型來初始化儘可能多的結構不同的目標任務模型。我們可能希望應用特定於任務的修改,比如添加跳過或殘差連接(residual connections)或注意力。最後,通過在預訓練模型的隔層之間添加瓶頸模塊(“適配器”),修改目標任務參數可以減少需要微調的參數數量(Houlsby 等人,2019 年Stickland、Murray,2019 年)。

上圖中,Transformer 塊(左)中使用的適配器層(右)。(Houlsby 等人,2019 年)

優化方案

在優化模型方面,我們可以選擇哪些權重需要更新,以及更新權重的方式和時間。

哪些權重需要更新

爲了更新權重,我們可以調整或不調整(預訓練權重):

  1. 不要改變預訓練權重(特徵提取)

在實踐中,線性分類器在預訓練的表示上進行訓練的。最佳性能通常是通過不僅使用頂層的標識,而且學習層的標識的線性組合來實現的(Peters 等人,2018 年Ruder 等人,2019 年)。或者,預訓練的報時可以用作下游模型中的特徵。當添加適配器時,只訓練適配器層。

上圖中展示了在單獨的下游模型中使用預訓練模型作爲特徵。
  1. 更改預訓練權重(微調)

預訓練權重用作下游模型參數的初始化。然後,在適應階段對整個預訓練架構進行訓練。

如何以及何時更新權重

選擇順序以及如何更新權重的主要動機是,我們希望避免覆蓋有用的預訓練信息,並對語言移轉(positive transfer)進行最大化。與此相關的是災難性遺忘(catastrophic forgetting)的概念(McCloskey、Cohen,1989 年French,1999 年),如果一個模型忘記了它最初被訓練的任務,就會發生這種情況。在大多數設置中,我們只關心目標任務的性能,但這可能會因應用程序而異。

更新模型參數的指導原則是從上到下依次更新參數,包括時間、強度或與預訓練模型進行比較:

  1. 漸進式時間(凍結)

主要是從直覺上來看,在不同分佈和任務的數據上,同時訓練所有層可能會導致不穩定性,並得到很差的解決方案。相反,我們對每個層進行單獨的訓練,讓它們有時間去適應新的任何和數據。這可以追溯到早期深度神經網絡的分層訓練(Hinton 等人,2006 年Bengio 等人,2007 年)。最近的方法(Felbo 等人,2017 年Howard、Ruder,2018 年Chronopoulou 等人,2019 年)主要是在一起訓練的層組合上有所不同;所有的參數最終一起訓練。對於 Transformer 模型的解凍,尚未進行詳細的研究。

  1. 漸進式強度(較低的學習率)

我們希望使用較低的學習率來避免覆蓋有用的信息。在較低層(因爲它們獲取更多的一般信息)、在訓練早期(因爲模型仍需要適應目標分步)和訓練後期(當模型接近收斂時),較低的學習率尤爲重要。爲此,我們可以使用區分(Discriminative)微調(Howard、Ruder,2018 年),它會降低每一層的學習率,如下所示。爲了在訓練早期保持較低的學習率,可以使用三角學習率計劃表,也稱爲 Transformer 的學習率“預熱”。Liu 等人(2019 年)最近指出,“預熱”可以減少訓練早期階段的差異。

上圖中展示的是區分微調(Howard、Ruder,2018 年)。

  1. 漸進式與預訓練模型(正則化)

最小化災難性遺忘的一種方法是,利用正則化項,鼓勵目標模型參數保持接近預訓練模型的參數(Wiese 等人,CoNLL 2017Kirkpatrick 等人,PNAS 2017)。

權衡和實際考慮

一般來說,你需要從頭開始訓練的參數越多,訓練就越慢。特徵提取需要添加比微調更多的參數(Peters 等人,2019 年),因此訓練通常比較慢。然而,當模型需要適應許多任務時,特徵提取更省空間,因爲它只需在內存中存儲預處理模型的一個副本即可。適配器通過爲每個任務添加少量附加參數來達到平衡。

在性能方面,沒有哪種適應方法在每種環境下都明顯優越。如果源任務和目標任務不同,那麼特徵提取似乎更可取(Peters 等人,2019 年)。否則,特徵提取和微調通常執行類似的操作,儘管這取決於超參數調優的可用預算(微調往往需要更廣泛的超參數搜索)。有趣的是,與 LSTM 相比,Transformer 更容易進行微調(對超參數不是那麼敏感),通過微調可以獲得更好的性能。

然而,大型預訓練模型(例如 BERT-Large)在對小型訓練集的任務進行微調時,容易出現性能下降。在實踐中,觀察到的行爲通常是“開 - 關”的:從下圖中可以看出,模型要麼運行良好,要麼根本不起作用。瞭解這種行爲的條件和原因,目前還是一個有待研究的問題。

上圖爲跨 20 個隨機重新啓動的得分分佈圖。得分分別來自 BERT(紅色)和在 MNLI 上微調的 BERT(綠色)。當微調的單次任務不超過 5K 示例時,BERT 在 MNLI(綠色)上進行微調。(Phang 等人,2018年)

獲得更多信號

目標任務通常是低資源任務。我們通常可以通過組合各種信號來提高遷移學習的效果:

順序適應

如果有相關任務可用,我們可以在對目標任務進行微調之前,先在相關任務上使用更多數據對模型進行微調。這對於數據有限和類似任務的任務尤其有用(Phang 等人,2018 年),並能提高目標任務的採樣效率(Yogatama 等人,2019 年)。

多任務微調

或者,我們也可以在相關任務上與目標任務一起對模型進行共同微調。相關任務也可以是非監督的輔助任務。語言建模就是一個很好的選擇,而且已經證明,即使沒有經過預訓練,它也能有所幫助(Rei 等人,2017 年)。任務比率可以選擇性地進行“退火”,以在訓練結束時不再強調輔助任務(Chronopoulou 等人,NAACL 2019)。語言模型微調在 ULMFiT 中作爲一個獨立步驟來使用(Howard、Ruder,2018 年)。最近,即使有許多目標任務,多任務微調也帶來了改進(Liu 等人,2019 年Wang 等人,2019 年)。

數據集切片

我們可以使用僅針對數據的特定子集進行訓練的輔助頭,而不是使用輔助任務進行微調。爲此,我們首先分析模型的誤差,利用啓發式算法自動識別訓練數據中具有挑戰性的子集,然後與主頭一起訓練輔助頭。

半監督學習

我們還可以使用半監督學習方法,通過擾動(perturbation)未標記的樣本,使模型的預測更加一致。擾動可以是噪聲、掩蔽(Clark 等人,2018 年),或數據擴增,如回譯(back-translation)(Xie 等人,2019 年)。

譯註:Sennrich 等人於 2015 年提出了一個非常高效的數據增強方案,我們稱之爲 “回譯(back-translation)”,即從目標語言到源語言的輔助翻譯系統首先在可用的並行數據上進行訓練,然後用於從大的目標端的單語語料庫中生成翻譯。然後將這些翻譯的組成對以及與其相對應的參考目標(ground truth targets)用作原始翻譯系統的附加訓練數據。

組合

爲了提高性能,可以組合使用不同超參數進行微調的模型預測、使用不同與處理模型微調的模型預測、或者在不同目標任務或數據集切片進行訓練的模型預測。

提煉

最後,大型模型或模型組合可以被提煉爲一個單一的、較小的模型。該模型也可以簡單得多(Tang 等人,2019 年),或者具有不同的歸納偏向(inductive bias)(Kuncoro 等人,2019 年)。多任務微調也可以與提煉結合(Clark 等人,2019 年)。

下游應用

對大型模型進行預處理,不僅在計算方面,而且在環境問題方面都是很昂貴的(Strubell 等人,2019 年)。只要有可能,最好使用開源模型。如果你需要訓練自己的模型,請與社區分享你的預訓練模型。

框架和庫

對於共享和訪問語序努力安模型,有不同的選項可供選擇:

Hub

Hub (樞紐中心)是中央存儲庫,它爲訪問預訓練模型提供了公共 API。兩個最常見的 Hub 是 TensorFlow HubPyTorch Hub。Hub 通常使用起來很簡單;然而,它們更像是一個黑匣子,因爲模型的源代碼並不能輕易訪問到。此外,修改預訓練模型架構的內部結構可能很困難。

作者發佈的檢查點

檢查點文件通常包含預訓練模型的所有權重。與 Hub 模塊相比,模型圖仍然需要創建,並且需要單獨加載模型權重。因此,檢查點文件比 Hub 模塊更難使用,但爲你提供了對模型內部的完全控制。

第三方庫

一些第三方庫,如 AllenNLPfast.aipytorch-transformer,可以方便地訪問預訓練模型。這類庫通常能夠快速進行實驗,並涵蓋許多遷移學習的標準用例。

有關如何將這些模型和庫用於下游任務的示例,請查看幻燈片、Colaboratory notebook代碼中的代碼片段

未解決問題及未來方向

還有許多未解決的問題,以及有趣的未來研究方向。下面只是一個更新的選擇,要了解更多的信息,請查看幻燈片

預訓練語言模型的缺陷

預訓練語言模型仍然不擅長細粒度的語言任務(Liu 等人,2019 年)、層次句法推理(Kuncoro 等人,2019 年)和常識(當你把事情弄得很複雜時;Zellers 等人,2019 年)。它們在自然語言生成方面仍未取得成功,特別是無法維護長期的依賴性、關係和連貫性。經過微調後,它們也傾向於過擬合表面形式的信息,並且仍然可以被視爲“快速表面學習者”。

正如我們在上面所提到的,特別是對少量數據進行微調的大型模型很難進行優化,並且還會存在較大的差異。目前的預訓練語言模型也非常龐大。提煉和修剪是解決這一問題的兩種方法。

預訓練任務

雖然語言建模目標已經證明在經驗上是有效的,但它也有其不足之處。最近,我們發現,雙向上下文和建模連續單詞序列很重要。也許最重要的是,語言建模鼓勵關注語法和單詞的同現(co-occurrences),並且僅僅提供用於捕獲語義和長期上下文的弱信號。我們可以從其他形式的自我監督中得到啓發。此外,我們還可以設計專門的預訓練任務,明確地學習某些關係(Joshi 等人,2019 年Sun 等人,2019 年)。

總的來說,從原始文本中學習某些類型的信息可謂蜀道之難。最近的方法結合了結構化只是(Zhang 等人,2019 年Logan IV 等人,2019 年)或利用多種多模(Sun 等人,2019 年Lu 等人,2019 年)作爲兩種潛在的方法來緩解這一問題。

作者介紹:

Sebastian Ruder,供職於 EurNLP,研究科學家,研究方向爲自然語言處理遷移學習,目標是讓自然語言處理變得更容易。

原文鏈接:

The State of Transfer Learning in NLP

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章