神經翻譯筆記4擴展d. 遷移學習概述與前BERT時代的NLP預訓練模型

本節仍然是爲了系列筆記的完整性而做,主要介紹遷移學習的概念,以及BERT出現之前NLP領域兩個重要的預訓練模型ULMFit和ELMo

遷移學習

本節完全來自於Sebastian Ruder博士論文的第三章。原文一共有90頁,本文作爲轉記,完全覆蓋原文的所有內容有些困難,所以只能有所取捨——例如原文引用了大量相關工作,本文由於篇幅的限制,只能通通略去,因此強烈建議有興趣的朋友也閱讀原文,順藤摸瓜

在經典的有監督學習中,如果要爲某個任務或某個領域AA訓練模型,一般會假設我們對此任務/領域有足夠數據,而且也只能預期模型在同樣的任務/領域上能夠取得不錯的效果——也就是說,前提假設是數據都是獨立同分布(i.i.d.)的。如果任務或者領域變了,就要重新收集數據,重新從頭訓練模型。如果新的任務/領域沒有足夠數據,傳統的有監督學習方法就不再適用,這時就需要遷移學習的幫忙,因爲這種方法可以把相關任務/領域(稱爲源任務/源領域)的知識提取出來,應用在目標任務/目標領域上。通常情況下,我們假設對目標任務/領域,有少量有標籤數據,或者大量無標籤數據

爲了更簡潔的描述,可以引入一些符號定義和例子。記領域爲D\mathcal{D},由特徵空間X\mathcal{X}和該特徵空間上的邊緣概率分佈P(X)P(X)組成,其中X={x1,,xn}XX = \{x_1, \ldots, x_n\} \in \mathcal{X}。以文檔分類問題爲例,如果使用詞袋模型,X\mathcal{X}就是所有文檔表示組成的空間,xix_i是第ii個文檔的向量表示,XX是一個隨機變量,表示用來訓練的文檔樣本集合。即D\mathcal{D}可以表示爲一個元組

D={X,P(X)} \mathcal{D} = \{\mathcal{X}, P(X)\}

對給定的領域D\mathcal{D},任務T\mathcal{T}包含一個標籤空間Y\mathcal{Y}、一個先驗分佈P(Y)P(Y)和一個條件概率P(YX)P(Y|X),其中條件概率通常從訓練數據中學到。仍以分檔分類問題爲例,此時Y\mathcal{Y}是所有可能的標籤組成的集合,即{True,False}\mathtt{\{True, False\}}。所以T\mathcal{T}也可以表示爲一個元組

T={Y,P(Y),P(YX)} \mathcal{T} = \{\mathcal{Y}, P(Y), P(Y|X)\}

使用上面的記號,並以SS表示“源端”,TT表示“目標端”,則遷移學習可以分爲五大應用場景,分別爲

  • PX(YS)PT(YT)P_X(Y_S) \not= P_T(Y_T),源任務和目標任務標籤的先驗分佈不同
  • PX(YSXS)PT(YTXT)P_X(Y_S|X_S) \not= P_T(Y_T|X_T),源任務和目標任務的條件概率分佈不同,例如兩者的類別不平衡
  • YSYT\mathcal{Y}_S \not= \mathcal{Y}_T,兩個任務的標籤空間不同,即在目標任務中有新的標籤需要打出。該場景通常和場景1、2一起出現。這裏引出的一個重要的額外問題是,兩個任務是同時學習,還是順序學習。同時學習多個任務,稱爲多任務學習
  • PS(XS)PT(XT)P_S(X_S) \not= P_T(X_T),源領域和目標領域的邊緣概率分佈不同,一個典型例子是文檔討論的主題不同。這種場景通常被稱作領域適配,也通常和場景1、2一起出現
  • XSXT\mathcal{X}_S \not= \mathcal{X}_T,源領域和目標領域的特徵空間不同,例如文檔使用了兩種語言。在NLP領域裏,這種場景可以看做是跨語言學習或者跨語言適配

在[PanJialin2009]的基礎上,NLP領域遷移學習的分類可如下圖所示。其中跨語言學習部分可參考本專欄前面的內容,本文主要介紹剩餘三類遷移學習,即多任務學習、順序學習和領域適配

NLP領域的遷移學習類型

多任務學習(MTL)

機器學習的目的通常是爲某個確定任務訓練模型,但是如果聚焦於某個任務,多少會顧此失彼,忽略某些可以幫助我們在其他方面做得更好的信息。如果可以在相關的任務之間共享一些表示方法,就可以讓模型有更好的泛化能力,這種方法稱爲多任務學習,也被稱爲聯合學習(joint learning)、L2L(learning to learn)等。通常情況下,如果優化問題有多個損失函數,則就在做多任務學習了

在深度學習語境下,多任務學習可以通過隱藏層的硬參數共享/軟參數共享來達到

  • 硬參數共享:最常見的手段,在所有任務間共享隱藏層,對不同的任務設置不同輸出層。硬參數共享能極大地降低過擬合的風險
  • 軟參數共享:每個任務有自己的模型自己的參數,對不同模型參數間的距離施加正則化來引導它們學到相似的參數

輔助任務

儘管常見的多任務學習在實施時是引入多個損失函數一起優化,但即便在常見的,只優化一個損失函數的場景下,也有機會通過輔助任務來提升模型效果。常見的輔助任務可以分爲如下四類:

  • 統計的。這類輔助任務是要預測輸入數據底層的統計信息,例如對序列標註任務,同時預測詞彙的頻率,使得模型不會在常見詞和罕見詞之間共享表示信息

  • 選擇性無監督的(selective unsupervised)。例如對情感分析任務,預測句子是否包含某個領域無關的正向/負向情感詞

  • 有監督的。例如使用與主任務相關的任務、對抗訓練、反向訓練(例如機器翻譯,英法翻譯系統同時用法英數據訓練)、對輸出進行預測、用未來信息預測當前信息等(還有一個quantization smoothing,沒太明白)。NLP各領域裏,典型的輔助任務選取有如下實例

    • 語音識別,常用音素識別(phonetic recognition)和幀級別狀態分類(frame-level state classification)
    • 機器翻譯,常用多語言聯合學習,也有人將機器翻譯和序列標註或命名實體識別相結合,或者做將圖像描述做輔助任務
    • 多語言任務,也可以將多種語言模型聯合起來訓練
    • 語義分析,通常是將不同的形式化結果聯合學習
    • QA與閱讀理解,通常是將某個複雜端到端模型的不同部分一起學習,例如聯合學習一個句子選擇模型和一個答案生成模型
  • 無監督的。例如引入一些通用任務(如語言模型)來進行表示學習,或者學習序列模型的初始狀態

爲什麼多任務學習能夠有效

假設有兩個相關的任務AABB,兩者依賴於一個共同的隱藏層表示FF,多任務學習的有效性可以從如下幾方面來闡述

  • 隱含地做了數據增強。不同任務有不同的噪聲模式,模型同時學習兩個任務可以忽視數據相關的噪聲,學到更普遍的表示結果(個人任務這個更像是正則化)
  • 能集中注意力。如果任務噪聲很大,或者數據量小而維度高,則很難讓模型區分相關和不相關特徵。多任務學習可以幫助模型聚焦於有用的特徵,因爲此時其它任務可以提供一些額外的“證據”來幫助區分哪些特徵有用,哪些沒用
  • “竊聽”。模型在學習任務AA時,這個任務可能受特徵GG影響明顯,但是由於AAGG的交互比較複雜,或者其它特徵干擾,使得模型在只學習AA時難以學到GG,然而在學習BB時卻可以容易學到。多任務學習允許模型“竊聽”,通過BB學到本來難學的特徵
  • 表示偏差。多任務學習使模型更傾向於其它任務也傾向的表示結果。因此同時模型在未來也能更好泛化
  • 正則化。多任務學習通過引入歸納偏置,使得自己本身就是一個正則項,因此可以減少過擬合風險

順序遷移學習

在順序遷移學習場景下,源端任務和目標端任務不同,訓練分別按順序進行,而不是像多任務學習那樣多個模型聯合優化。順序遷移學習的目標是將訓好的模型(模型由源端任務訓練得到)所擁有的知識轉移到目標模型上,以提高目標模型的性能,其在以下三個場景會比較有效

  • 兩個任務所需要的數據不能同時得到
  • 源端任務所擁有的數據遠多於目標任務所擁有的
  • 需要適配多個目標任務

順序遷移學習一般包含兩個階段

  • 預訓練階段,模型在源端任務上訓練,耗費的資源比較多,不過只需要訓練一次。爲了最大化順序遷移學習的效率,通常要在源端任務上訓練一個通用表示,使其能助益於多個目標任務。可以把預訓練和多任務學習結合爲多任務預訓練,這樣學到的知識可泛化性更強。根據源端任務監督信號的不同來源,可以將源端任務分成三類
    • 傳統監督任務(traditional supervision,個人感覺就是有監督任務)。已有工作如在資源豐富平行語料上訓練機器翻譯模型,然後應用於低資源語言對;預訓練一個詞性標註模型然後用來分詞;在開放領域上訓練QA模型然後用在專業領域上,等等。由於有監督任務需要大量標註數據,這類任務是否適合作爲預訓練任務,需要打一個問號
    • 遠距離監督任務(distant supervision,個人感覺更像是半監督任務)。其使用啓發式方法和專業知識來自動獲取大量有噪聲的有監督數據。已有的工作有通過訓練模型預測emoji/emoticon/連詞/話語標記(如but、because等詞)來做預訓練。與之相似的還有自監督學習,只不過前者只有一部分數據有標籤(而且還混雜噪聲),標籤由預設模式產生,而後者是自動爲所有訓練樣本生成標籤。有時認爲語言模型就是一種自監督學習
    • 無監督任務。與前述任務類型不同,無監督任務擴展性更強,接近於人類的學習方法,不需要有標籤數據。有監督任務由於標籤的存在,因此學習過程只需要讓模型捕捉對任務有幫助的表示,而無監督學習由於沒有明確的目標,需要模型把握更寬泛的知識結構和語言的意思,因此學到的知識更可遷移。NLP領域裏的無監督預訓練有很長的歷史,它們很多都是NLP的基礎方法,關注從無標籤數據中學習單詞的表示,例如大名鼎鼎的Word2vec、GloVe等等。這些方法通常可以分爲兩種:使用語言模型的一種變種,或者使用矩陣分解獲得一個單詞共現矩陣
  • 適配階段,學到的知識遷移到目標任務上,這個過程通常很快(與多任務學習不同,多任務學習訓練目標模型時比較耗費資源)。適配有三種方法:特徵提取、微調和殘差適配
    • 特徵提取:預訓練模型權重保持不變,送入下游任務
    • 微調:作爲下游任務的初始化參數,但是訓練過程中也更新預訓練模型。微調適用於源任務和目標任務相似的場景,而特徵提取則相反。2017年左右針對微調提出的一種新技術殘差適配(residual adapter),在預訓練模型的層之間插入新的參數,且要求參數數量要小。這些參數與模型其它部分通過殘差連接,這樣模型在訓練時可以跳過對下游任務沒有幫助的適配器。微調時通常不希望對模型改動太大,因此通常有如下集中策略
      • 將學習率調小
      • 對模型施加一些懲罰項,例如對預訓練模型參數和新模型參數的差值施加L2懲罰
      • 固定若干層使其參數不變,例如只微調模型的最後一層,或者在訓練早期保持模型底層不變

終生學習(Lifelong learning)

當順序遷移學習應用於多個任務時,稱作終生學習,也被稱作學習如何學習(learning to learn)或元學習(meta-learning)。終生學習中,源任務和目標任務不再涇渭分明,而是順序學習TT個任務。終生學習模型通常包含兩個成分

  • 知識庫(KB),用來存儲在過去的任務中學習到的信息,這些信息可以用來求解接下來的任務。所存儲的信息通常有三種形式
    • 功能型,即存儲每個任務的訓練樣本。代價昂貴,但是比較簡單,因此最常用
    • 關係型,存儲從前面任務中提取的概念、模式和關係,需要模型有更強的抽象能力
    • 表示型,即過去的信息以學到的參數存儲起來,也可以是模型的隱藏狀態
  • 學習者(learner)

終生學習可以看做是一種在線的多任務學習,其在NLP裏最常用的兩個領域是信息提取和情感分析。

此外,原文將元學習看做是終生學習的一種手段,其中,元學習最常用的策略是使用一個獨立的控制器來控制基模型的學習過程,例如Wolf2018使用一個高層LSTM來更新語言模型的權重。另一種策略是進行“元優化”,以學習模型參數爲目標,其生成的初始化參數可以讓模型在下游任務上的微調更容易。這類工作的開山鼻祖是模型不可知論元學習(Model-Agnostic Meta-Learning, MAML),有人將其用在低資源機器翻譯上(Gu2018)。元學習的基本思路是通過反覆模擬適配場景來學習一個好的初始化參數。由於在大數據集上微調的代價太大,所以元學習基本都用在少樣本學習(few-shot learning)場景

領域適配

(本小節引用文獻相對細碎,建議直接閱讀原文)

機器學習領域通常假設訓練數據和測試數據獨立同分布,但是當模型被應用於真實環境下時,這樣的假設就無法成立了,所以需要領域適配。領域適配不需要模型在所有任務上普遍表現得好,只需要對特定任務發揮出色就可以。與順序遷移學習不同,領域適配通常要用在大量無標籤樣本上,所以需要的是無監督方法。具體地,這些方法可以分爲三類

基於表示的方法

基於表示的方法試圖修改數據的底層表示,或是要基於領域相似度找出在源領域和目標領域都存在的特徵,或是要在兩個領域的共享低維空間中表示數據

領域相似度

可以通過讓兩個領域的特徵分佈儘量相似來嘗試進行領域適配(只需要丟掉在目標數據中不存在的特徵就可以)。最常見的分佈相似性度量方法是KL散度(Kullback-Leibler divergence):DKL(PSPT)=ExPS[logPS(x)logPT(x)]D_{\rm KL}(P_S||P_T) = \mathbb{E}_{ {\bf x}\sim P_S}[\log P_S({\bf x}) -\log P_T({\bf x})],其餘還有JS散度(Jensen-Shannon divergence)、Rényi散度、MMD(Maximum Mean Discrepancy)、Wasserstein距離和A\mathcal{A}距離等

數據加權和數據選擇

可以通過某些方法度量目標數據各樣本與已有訓練集中各樣本的相似度。如果利用相似度對訓練數據給出權重,影響其對損失函數的貢獻,則這種方法爲數據加權;如果設定閾值,淘汰掉一批不相關的數據,則這種方法爲數據選擇。機器翻譯領域中常用數據選擇的方法,例如通過語言模型打分進行篩選(原文中大量的方法都出現在統計翻譯時代)

自標註技術

自標註技術是半監督學習的一種,核心思路是在有標籤數據上訓練模型,然後讓這個模型給未標註數據打上“僞”標籤,然後用帶有真僞標籤的數據混合,訓練更好的模型。在混合時,對帶有僞標籤的數據,通常使用一個閾值選擇置信度比較高的。在此基礎上,還有一些其他自標註技術,例如

  • 聯合訓練(Co-training),選擇兩組條件獨立特徵集合,要求每個集合中的特徵強到足夠能訓練一個模型。在初始兩個模型訓練好以後,在每一輪迭代過程中,只有被某一個模型有足夠信心分類的數據被添加到另一個模型的訓練集裏,也就是兩個模型各自爲另一個模型不確定的數據貼標籤
  • 民主聯合訓練,對聯合訓練的改進,不再使用獨立的特徵集,而是使用不同結構的模型,來引入不同的歸納偏置
  • 三角訓練,可以看做是民主聯合訓練的特例。使用bootstrap抽樣爲三個不同結構的模型準備好訓練集,分別訓練初始模型。然後,對無標籤數據,如果有兩個以上模型給它的標籤是一致的,那麼它就被加入到訓練集中。當三個分類器都不變化時,訓練結束

本節最後一個小節講述了多源領域適配,不過引用的工作更加瑣碎,這裏就不介紹了

前BERT時代的兩種經典RNN預訓練模型

前文對遷移學習作了一個簡單的介紹,其中在順序遷移學習部分,提到這種遷移學習方法大致可以分爲兩步,即預訓練和微調。自2013年Mikolov提出word2vec開始至2018年以前,基於神經網絡的NLP方法所使用的的預訓練“模型”基本上都是基於詞向量的。詞向量使得人們可以不再僅以0-1獨熱向量表示詞語,而是可以獲得詞語的稠密表示,且可以通過一些向量運算發現詞之間的關係。但是詞向量模型的產生結果通常是一組獨立於上下文的詞向量,表示能力不夠強。在2018年初,ULMFiT和ELMo兩種基於LSTM的預訓練模型相繼問世,不僅在詞的基礎上引入了上下文信息,還通過多層結構同時引入了語法和語義信息。2018年底BERT的問世更是使NLP的預訓練模型進入了一個新的時代,其與其子孫直至本文寫作之日(2020年6月)仍繁榮不衰。由於BERT基於Transformer結構和自注意力機制,本系列文章尚未涉及,因此本文先介紹這之前兩種經典的預訓練模型ULMFiT和ELMo

ULMFiT

ULMFiT(Universal Language Model Fine-tuning)也是由Ruder提出,試圖將CV領域裏比較成熟的遷移學習技術引入NLP。在這之前,NLP領域已經有一些基於語言模型的預訓練工作,但是這些工作需要大量領域相關文檔微調,而且語言模型容易在小數據集上過擬合,在對分類問題微調時又容易災難性遺忘。ULMFiT就是爲了解決這樣的問題而誕生

ULMFiT使用的是一個有三個隱藏層的雙向AWD-LSTM,分三步解決具體問題:

  1. 預訓練語言模型。在這個階段,不區分具體問題領域,直接在收集到的通用語料上訓練。這一步的目的是讓各個層捕捉語言的整體特徵。原文中的實驗所用數據是Wikitext-103,有1億個詞
  2. 目標領域語言模型微調。目的是學習任務相關的語言特徵
  3. 目標任務分類器微調。此時要保持模型底層參數不變,調整上層。此時需要引入兩個額外的線性層,每層使用批歸一化BN,ReLU做中間層激活函數,輸入是預訓練模型最後一個隱藏層狀態的池化結果,輸出使用softmax激活來獲得所有類別的概率分佈。這兩層是從頭開始學習

示意圖如下圖所示

ULMFiT示意圖

在目標領域上微調語言模型時,原文引入瞭如下技術

分層微調(discriminative fine-tuning, discr)。動機是網絡的不同層捕捉的信息類型不同,因此被微調的程度也應不同,這種方法可以通過對不同層設置不同學習率來實現。設頂層學習率爲η(L)\eta^{(L)},實踐表明各底層遵循η(l1)=η(l)/2.6\eta^{(l-1)} = \eta^{(l)} / 2.6的設置效果較好

斜三角學習率(slanted triangular learning rates, STLR)。目的是讓模型快速收斂到合適區域,然後緩慢微調。學習率調整策略具體爲

cut=Tcut_fracp={t/cutif t<cut1tcutcut(1/cut_frac1)otherwiseηt=ηmax1+p(ratio1)ratio \begin{aligned} cut &= \lfloor T \cdot cut\_frac \rfloor \\ p &= \begin{cases} t/cut & {\rm if\ }t < cut \\ 1 - \frac{t-cut}{cut \cdot (1/cut\_frac - 1)} & {\rm otherwise}\end{cases} \\ \eta_t &= \eta_{max} \cdot \frac{1 + p\cdot (ratio - 1)}{ratio} \end{aligned}

各參數的意義爲:

  • TT爲訓練總共要進行的迭代次數
  • cut_fraccut\_frac爲一個0到1之間的數,由cut_fraccut\_fracTT計算的cutcut決定在訓練過程中,前cutcut步學習率線性遞增,cutcut步後線性遞減
  • ratioratio是最大學習率ηmax\eta_{max}與所允許最小學習率之間的比值

原文采用的配置是cut_frac=0.1, ratio=32, ηmax=0.01cut\_frac = 0.1,\ ratio=32,\ \eta_{max} = 0.01

在目標領域上微調分類模型時,除了上述兩種技巧,還額外使用瞭如下方法

  • 連接池化,即送進新的線性層的輸入實際是三個向量的拼接,分別是最後一個時刻TT的隱藏狀態h(T)\boldsymbol{h}^{(T)}、前面若干時間步(時間步多到能填滿顯存)所有狀態的最大池化結果和這些狀態的平均池化結果
  • 逐層解凍,即不馬上同時微調所有層,而是先從最上層開始(因爲其所蘊含的通用知識最少),在第一個epoch先只微調最上層,下一個epoch解凍次上層,微調兩層……以此類推
  • 文本分類的BPTT,將文檔分割爲長度固定的batch,大小爲bb,在每個batch開始之時,模型用前一個batch的最終狀態初始化

原文通過一系列實驗,得出如下結論

  • 遷移學習對少樣本學習,效果很好
  • 預訓練對大中小數據集均有效,甚至可以降低一半錯誤率
  • 結構簡單,未經精細調參的語言模型也可以達到比較好的效果。使用普通RNN語言模型且不加dropout,在大數據集上錯誤率僅比精調過的AWD-LSTM低一個點
  • 語言模型微調、分類器微調這兩步均有效,且對小數據集效果更明顯
  • 使用雙向模型可以進一步提升模型效果

ELMo

ELMo這一名字是Embeddings from Language Models的縮寫,從名字可以看出ELMo是通過訓練語言模型而得到詞向量。不過這裏所說的語言模型並非傳統的、根據上文信息推斷下一個詞的語言模型,而是雙向的語言模型,這樣可以更好地捕捉單詞的上下文信息。

對於給定的標識符tkt_k,使用LL層雙向語言模型可以得到2L+12L+1個向量表示
Rk={xkLM,hk,jLM,hk,jLMj=1,,L}={hk,jLMj=0,,L} \begin{aligned} R_k &= \{\boldsymbol{x}_{k}^{\rm LM}, \overrightarrow{\boldsymbol{h}}_{k,j}^{\rm LM}, \overleftarrow{\boldsymbol{h}}_{k,j}^{\rm LM} | j = 1, \ldots, L \} \\ &= \{\boldsymbol{h}_{k,j}^{\rm LM}|j=0, \ldots, L\} \end{aligned}

其中hk,0LM\boldsymbol{h}_{k,0}^{\rm LM}是嵌入層,hk,jLM=[hk,jLM;hk,jLM]\boldsymbol{h}_{k,j}^{\rm LM} = \left[\overrightarrow{\boldsymbol{h}}_{k,j}^{\rm LM};\overleftarrow{\boldsymbol{h}}_{k,j}^{\rm LM}\right]是每個雙向LSTM隱藏層隱藏狀態拼接後的結果。ELMo會把得到的這些表示組合成一個向量以傳遞給下游任務,即
ELMoktask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLM \boldsymbol{ELMo}_k^{\rm task} = E\left(R_k; \Theta^{\rm task}\right) = \gamma^{\rm task}\sum_{j=0}^L s_j^{\rm task}\boldsymbol{h}_{k,j}^{\rm LM}

其中stask\boldsymbol{s}^{\rm task}是使用softmax歸一化的權重,意義是控制各層向量的貢獻比例,在下游任務中訓練;γtask\gamma^{\rm task}是一個縮放因子,使得ELMo得到的向量尺度可以與下游任務相吻合。原文建議在每個隱藏層先做一個層歸一化操作,然後再訓練權重值。此外,加入適量的dropout,以及嘗試加入L2正則化對ELMo的效果都有提升作用

得到ELMo的詞向量表示以後,下游任務對輸入序列的每個標識符tkt_k不再只使用獨立於語境的詞向量xk\boldsymbol{x}_k,而是將其與ELMo詞向量ELMoktask\boldsymbol{ELMo}_k^{\rm task}拼接。對於某些任務,將隱藏層向量與ELMo詞向量拼接也有好處。由於大多數NLP任務所使用的神經網絡結構其底層都是相同的,因此ELMo詞向量的適用領域非常廣泛。此外實驗表明,在下游任務上微調ELMo,語言模型的效果會顯著提升

具體地,ELMo的體系結構爲

  • 輸入層使用基於字符的CNN來構建初始的詞嵌入(無上下文信息),共2048個濾波器,使用2層高速公路網絡1,輸出層512維
  • 隱藏層是兩層雙向LSTM,每個單元4096維
  • 輸出層是512維全連接層

網絡使用殘差連接,正向反向LSTM共享輸入(詞嵌入矩陣)和輸出(softmax)

實驗表明,ELMo詞向量中低層的部分更多捕獲了單詞的語法信息,高層部分更多捕獲了單詞的語義信息

討論:微調還是不調,這是一個問題

本節來自於Ruder論文的7.2節。原文即對比了上面提到的2018年上半年明星模型ELMo和下半年明星模型、開創NLP預訓練模型新紀元的BERT,因此感覺結論更廣泛,更有實效性

對於預訓練模型,通常有兩種使用方法:

  • 特徵提取(EX):固定模型參數不變,整體傳給下一個任務。優點是計算量更小
  • 微調(FT):在新任務上繼續訓練修改模型參數。優點是適應性強,適用於多個不同任務

原文將ELMo和BERT應用在了若干任務中,包括命名實體識別、情感分析、自然語言推理、同義句識別(paraphrase detection)和語義相似度檢測,對比的基線模型使用了Skip-thoughts提取句子向量作爲特徵。兩者效果均顯著超越極限模型,對於ELMo,EX效果好於FT,但是對BERT則相反(不過BERT做EX的效果仍然優於ELMo做EX的效果)。對此,原文作了若干分析

  • 根據CV的經驗,當目標任務與原始任務較遠時,FT通常效果不佳。BERT微調後在語義相似度檢測上表現好,是因爲這個任務與BERT預訓練時要對下一句話做預測相關;ELMo微調後在句子對相關的任務(自然語言推理、同義句識別和語義相似度檢測)上效果不佳,是因爲這些任務和語言模型離得有點遠
  • LSTM難以對句子對之間的交互關係建模,除非引入額外的注意力機制;如果讓BERT對句對中的兩個句子分別編碼,效果也會下降,所以BERT的表示中實際編碼了句子間的關係
  • 在預訓練模型上再加入新的參數,然後微調,會讓模型效果變差。如果加入新的參數後,先固定預訓練模型本身的參數,訓練幾輪新的參數再解封預訓練模型一起微調,模型效果仍然會下降(所以認爲不是新參數隨機初始化的鍋)
  • ELMo的微調比較難,需要仔細設置超參數

(這裏沒有記錄全部結論)

參考文獻

  • Ruder Ph. D. Thesis
  • [PanJialin2009]: Pan, S. J., & Yang, Q. (2009). A survey on transfer learning. IEEE Transactions on knowledge and data engineering, 22(10), 1345-1359.
  • [ULMFit]: Howard, J., & Ruder, S. (2018, July). Universal Language Model Fine-tuning for Text Classification. In Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) (ACL 2018) (pp. 328-339).
  • [ELMo]: Peters, M. E., Neumann, M., Iyyer, M., Gardner, M., Clark, C., Lee, K., & Zettlemoyer, L. (2018). Deep contextualized word representations. In Proceedings of NAACL-HLT (pp. 2227-2237).

  1. 高速公路網絡[Srivastava2015]有點像LSTM門機制和殘差網絡的組合體,簡單說就是學習一個線性變換T(x,WT)=σ(WTTx+bT)T(\boldsymbol{x}, \boldsymbol{W}_T) = \sigma(\boldsymbol{W}_T^\mathsf{T}\boldsymbol{x} +\boldsymbol{b}_T),使得輸出由兩部分組成,一部分是隱藏層變換後的狀態,一部分是原始輸入。即y=hT(x,WT)+x(1T(x,WT))\boldsymbol{y} = \boldsymbol{h}\odot T(\boldsymbol{x}, \boldsymbol{W}_T) + \boldsymbol{x} \odot (\boldsymbol{1}-T(\boldsymbol{x}, \boldsymbol{W}_T)) ↩︎

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