如何利用多任務學習提升模型性能?
轉載自 | NewBeeNLP
公衆號專欄作者@上杉翔二
悠閒會 · 信息檢索
提升模型性能的方法有很多,除了提出過硬的方法外,通過把神經網絡加深加寬(深度學習),增加數據集數目(預訓練模型)和增加目標函數(多任務學習)都是能用來提升效果的手段。(別名Joint Learning,Learning to learn,learning with auxiliary task....等)
-
訓練數據有限,所以模型並不具有很好的泛化性能
-
不考慮任務之間的相關性,缺乏對不同模型之間共享信息的挖掘,使得模型訓練過程中性能下降
Multi-Task Learning(MTL)
多任務學習實質上是一種遷移機制,如何讓模型能夠同時解決多種問題,從而提高泛化準確率、學習速度和能力,模型的可理解性。特別是如何使用與其他任務的“相關性”與“差異性”,通過多個任務訓練並共享不同任務已學到的特徵表示,減輕對特定任務的過度擬合,從正則化效果中獲益,提升最終的性能,使學習的嵌入在任務之間具有通用性。
多任務學習的構建原則
-
理解建模任務之間的相關性,以構建合適的多任務方案。
-
同時對多個任務的模型參數進行聯合學習以挖掘不同任務的共享信息。
-
但需要同時考慮不同任務會存在的差異性,如何提高模型對不同任務的適應能力。
爲什麼多任務是有效的?
-
可增加訓練樣本,且不同任務的噪音不同,同時學習多個任務能得到更通用的表達
-
可以通過其他任務來判斷學習到的特徵是否真的有效
-
對於某個任務難學到的特徵,可以通過其他任務來學習
-
多任務學習傾向於讓模型關注其他模型也關注的信息表達
-
某種程度上可以視爲正則化
常用多任務學習的主要方式
-
基於參數的共享,如神經網絡隱層參數共享,然後上層得到多個特徵完成多種任務以達到聯合訓練的目的,即loss裏面組合多個。
-
對於loss的組合的權重設置可以分爲手工調整,Gradient normalization(希望不同任務loss的量級接近,納入梯度計算權重,優點是可以考慮loss的量級,缺點是每一步都要額外算梯度)。Dynamic weight averaging,DWA希望各個任務以相近的速度來進行學習(記錄每步的loss,loss縮小快的任務權重會變小,缺點是沒有考慮量級)。Dynamic Task Prioritization,DTP希望更難學的任務可以有更高的權重。Uncertainty Weighting,讓“簡單”的任務權重更高(確定性越強的任務權重會大,而噪聲大難學的任務權重會變小)。對於loss的平衡挺講究的,也算是調參師需要掌握的東西吧,有空再新寫文章整理。
-
基於正則化的共享,如均值約束,聯合特徵學習等。比如使用低秩參數矩陣分解,即假設不同任務的參數可能會共享某些維度的特徵,那麼每個任務的參數都接近所有任務平均的參數來建模任務之間的相關性,即在loss中加入這樣的正則化來約束參數:
所以多任務的優點在於它具有很好的泛化性能,對於有些任務的數據不足問題,也能借助其他任務得到訓練,另外它還能起到正則的作用,即很難使某個任務過擬合以保證整個模型的泛化性能。
而其困難在於如何更好的對每個任務分配權重(已經有人有NAS做了...)以使其魯棒性最強,同時如何兼顧特徵共享部分和任務的特點表示,避免過擬合或者欠擬合是值得研究的。
除了一般處理多任務都是一個可學習的alpha來控制外,本篇文章將整理幾篇多任務學習的論文。
Single-Level MTL Models
單層主要有以下幾種方式:
-
「Hard Parameter Sharing」:不同任務底層共享,然後共不同任務各自輸出。當兩個任務相關性較高時,用這種結構往往可以取得不錯的效果,但任務相關性不高時,會存在負遷移現象,導致效果不理想。
-
「Asymmetry Sharing(不對稱共享)」:不同任務的底層模塊有各自對應的輸出,但其中部分任務的輸出會被其他任務所使用,而部分任務則使用自己獨有的輸出。哪部分任務使用其他任務的輸出,則需要人爲指定。
-
「Customized Sharing(自定義共享)」:不同任務的底層模塊不僅有各自獨立的輸出,還有共享的輸出。
-
「MMoE」:底層包含多個Expert,然後基於門控機制,不同任務會對不同Expert的輸出進行過濾。
-
「CGC」:這是PLE的結構(圖自騰訊在RecSys2020最佳長論文,Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations),他的不同之處在於學習一個個性和共性兩方面的信息,然後再用不同的gate來控制。
Multi-Level MTL Models
-
「Cross-Stitch Network」:用參數來控制不同任務間共享的特徵
-
「Sluice Network」:分層特徵融合網絡
-
「ML-MMoE」:MMoE的多級結構
-
「PLE」:多層萃取(基於CGC)
MMoE(Multi-gate Mixture-of-Experts)
論文:Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts
地址:https://dl.acm.org/doi/pdf/10.1145/3219819.3220007
這篇文章是對多任務學習的一個擴展,通過門控網絡的機制來平衡多任務。所謂“平衡”是因爲多任務學習中有個問題就是如果子任務之間的差異性太大了,多任務模型的效果會很差,那麼如何平衡不同的任務呢?MMoE主要有兩個共享:
-
圖a,使用shared-bottom網絡,多個上層任務共用底層網絡。
-
圖b,多個獨立模型的集成方法MoE,即每個expert network都可以認爲是神經網絡,公共一個門控網絡(One-gate MoE model),最終的輸出是所有experts的加權和。
-
圖c,MMoE,每個任務使用單獨的gating networks。即每個任務的gating networks通過最終輸出權重不同實現對experts的選擇性利用。不同任務的gating networks可以學習到不同的組合experts的模式,因此模型考慮到了捕捉到任務的相關性和區別。
通過這種multi-gate的結構能夠緩解任務間差異大的情況。
語言模型是天然無監督的多任務學習。而且鑑於目前針對BERT的改進很多(包括BERT-large等版本)都是增加了數據量,計算能力或訓練過程。
-
比如RoBERTa,精細調參,爲了優化訓練程序,從BERT的預訓練程序中刪除了結構預測(NSP)任務,引入了動態掩蔽,以便在訓練期間使掩蔽的標記發生變化。
-
比如DistilBERT學習了BERT的蒸餾版本,保留了95%的性能,但只使用了一半的參數。具體來說,它沒有標記類型和池化層的嵌入,只保留了谷歌BERT中一半的層(當然ALBERT也是等)。
-
MT-DNN與ERNIE2.0。這兩篇論文的多任務學習很有意思,接下來主要整理這兩篇文章。
MT-DNN
論文:Multi-Task Deep Neural Networks for Natural Language Understanding
地址:https://arxiv.org/abs/1901.11504
MT-DNN是結合了至少4種任務的模型:單句分類、句子對分類、文本相似度打分和相關度排序等等。
-
「單句分類」:CoLA是判斷英語句子是否語法合適、SST-2是電影評論的情感(正面or負面)。
-
「文本相似度」:STS-B對兩句話進行文本相似度打分
-
「句子對分類」:RTE和MNLI是文本蘊含任務(推理兩個句子之間的關係,是否存在蘊含關係、矛盾的關係或者中立關係),QQP和MRPC是判斷兩句話是否語義上一致,等價。
-
「相關性排序」:QNLI斯坦福問答數據集的一個版本,雖然是二分類問題,此時變成一個多排序問題,使更接近的答案排得更加靠前。
在MT-DNN的多任務學習中,也是低層的特徵在所有任務之間共享,而頂層面向豐富的下游任務。從模型結構上,從底向上的shared layers是Transformer逐步的過程,用於生成共享的上下文嵌入向量(contextual embedding layers),然後完成四種任務的預測。
ERNIE2.0
論文:ERNIE 2.0: A Continual Pre-Training Framework for Language Understanding
地址:https://arxiv.org/abs/1907.12412
ERNIE2.0的貢獻主要有1 通過大型語料庫+先驗知識。2,多任務學習逐步更新 ERNIE 模型。
-
「序列性多任務學習」。使模型能夠學習到詞彙,語法,語義信息。不同於持續學習和多任務學習,序列多任務學習在引入新的訓練任務時,先利用之前學習到的參數對模型進行初始化,再同時訓練新任務和舊任務。
-
「定製和引入了多種預訓練任務」。側重詞彙的任務(mask,大寫字詞預測,字詞-文章關係),側重結構/語法的任務(詞語重排序,語句距離),側重語義的任務(文章關係任務,信息檢索相關性任務)。如下圖,首先主要使用的任務有:
-
「Knowledge Masking Task、Capitalization Prediction Task和Token-Document Relation Prediction Task」。Knowledge Masking Task是預測被masked掉的短語和命名知識實體以學習到局部語境和全局語境的依賴關係信息。Capitalization Prediction Task是首字母大寫預測,首字母大寫的詞往往有特殊的功能。Token-Document Relation Prediction Task預測段中的token是否出現在原始文檔的其他段(segment)中,即捕獲高頻詞或線索詞。
-
「Sentence Reordering Task和Sentence Distance Task」。Sentence Reordering Task句子重排任務是爲了學習句子之間的關係。Sentence Distance Task通過文檔級的信息學習句子之間的距離。
-
「Discourse Relation Task和IR Relevance Task」。Discourse Relation Task引入2個句子之間語義或修辭關係的預測任務。IR Relevance Task學習短文本在信息檢索中的相關性。
這篇文章比較有趣的就是這個多任務連續增量學習,或持續學習(Continual learning)了,它致力於對數個任務按順序依次訓練模型,以確保模型在訓練新任務時候,依舊能夠記住先前的任務。正如人類能夠不斷地通過學習或歷史經驗積累獲得信息,從而有效地發展新的技能。
具體關於連續增量學習的對比,第一個是如何以連續的方式訓練任務,而不忘記以前所學的知識;第二個是如何更有效地學習這些預訓練任務。
-
「Continual Learning」。在訓練的每一個階段僅通過一項任務來訓練模型,如訓練任務A,在訓練任務B,一直到訓練任務Z,但是其缺點是會忘記先前學習的知識,導致最後的結果會更加偏向靠後的任務。。
-
「Multi-task Learning」。是普通的MTL,即所有任務在一起進行多任務學習,即同時訓練A,B..Z期間不做交互最後做集成。缺點是訓練完的模型只能處理這些任務,如果出現了比較新的任務,比較大的概率需要重頭開始訓練。
-
「Sequential Multi-task Learning」。當有新任務出現時,先使用先前學習的參數來初始化模型,並同時訓練新引入的任務和原始任務,如先訓練A,再訓練A,B,再訓練A,B,C,如圖中的金字塔形狀,當有新任務出現時,它也能夠快速反應做調整。
除了這種,其實還可以先(A)(B)(C)訓練,再(A,B)(B,C)(A,C),最後再(A,B,C)這種方式。有點像我們做題往往會先做單項訓練,再綜合訓練。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/jfYSWL37mO7bAFOnrD8u4w