【2020。07】Meta-learning for Few-shot Natural Language Processing: A Survey

這篇論文科普了下什麼是meta learning:

meta learning天生就是去解決few-shot問題的,其目標是讓模型在有豐富標註的多個任務上學習,從而去解決一個只有少量標註的新任務(在新任務上只有少量steps微調或者不微調)。meta learning先收集一堆tasks,把這些tasks視作樣本,然後訓練一個模型來適應所有任務,最終能夠在新的task上work well。meta learning假定training tasks和new task都取樣於同一個分佈,在訓練過程中,一個training task從該分佈中取樣,其中包括K個帶標的樣本。新的task同樣也有K個labeled examples,還有大量unlabeled的測試資料。每個訓練任務和new task的labeled examples的數量都是K,是為了保證同分布。訓練任務中的K個labeled examples叫做support set。注意,meta learning並不是去解決某一個特定的task,而是當它在一個new task學的很好的時候,新來一個task,它同樣能繼續學更好。

meta learning和transfer learning的區別:transfer learning是一種研究領域,也就是task a helps task b,而meta learning更多是一種方法,這種方法也可以用來搞transfer learning。另外,技術上說,transfer learning中的預訓練並不是專門針對於few shot task,而meta learning的目的則是讓target few shot task work well。還有就是,meta learning通常假設訓練任務和目標任務的分佈相同,也就說這些任務本質都是相同的問題,可能只是domain不同而已。遷移學習沒有這麼嚴格,比如預訓練任務和下游任務可以不是同樣的任務。

meta learning和multitask learning的區別:遷移學習通常是從源任務到目標任務的順序實現的,多工學習是同時訓練所有任務。元學習也依賴於一組訓練任務,也是一種多工學習。多工學習的傳統目標是學習一個經過良好訓練的模型,該模型可以推廣到目標任務;元學習試圖學習一種有效的學習演算法 to learn the target task quickly。在多個任務中,多工學習可能更有利於資料量更大的任務。由於元學習將任務視為訓練示例,因此理想情況下,訓練任務越多越好。然而,多工學習可能會在同時完成過多工的培訓中遇到越來越多的挑戰。

meta learning一般有兩種方法:metric based和optimization based。基於最佳化的方法為神經模型學習了一個很好的引數初始化點,從中可以通過幾個梯度下降步驟(給定少量樣本)達到新任務的最佳點。對於每個訓練任務,基本原理是“如何在訓練中微調模型,使其在驗證中表現良好”。這裡主要學習metric-based的方法。

基於度量的元學習(或稱為“度量學習”)學習資料點(x)之間的距離函式,以便透過將test instances與K個labeled examples進行比較來對其進行分類。“距離函式”通常由兩部分組成:一個就是編碼器,一個就是相似度度量。如果在訓練任務中很好地學習了距離函式,它就可以在目標任務中很好地工作,而無需進行微調。

基於度量的一般有幾種方法:孿生網路,沒有經過專門的訓練,就是用神經網路來編碼兩個case(分別來自k labeled data和test case),然後sigmoid輸出是不是同一個類。匹配網路,第一個基於度量的元學習演算法,用於解決few-shot問題。匹配網路本質上是一種引數化最近鄰演算法,也就是給定支援集:k個標記樣本「xi,yi」,根據輸入樣本的相似度去加權,得到:目標樣本的label與標記樣本的label之間多相似,從而標記出目標樣本的label。原型網路:不用cosine度量,用歐氏距離。將test case和classes進行比較,而不是support examples。關係網路:也就是把兩個case編碼然後打分,打分函式是一個神經網路,而不是之前的歐氏距離。

在NLP上面,特別是分類任務上,一般是把一種分類label視作一個任務。具體可以分成兩種:一種是在不同問題上執行元學習去解決新問題。一種是在同一個問題下面執行元學習。這裡主要將第二種。同一個問題是指:一個數據集中的多個類別,每個類別是一個task;或者同一個任務的不同領域,每個領域是一個task,比如情感分類的不同資料集。前面是在若干類別上訓練,然後泛化到沒看過的類別上。後面是在若干領域上訓練,泛化到沒看過的領域上。

【EMNLP2021】Single-dataset Experts for Multi-dataset Question Answering

這篇文章主要研究的是怎麼同時利用多個source datasets來提高模型在域內的準確率,以及unseen target dataset上的zero-shot和few-shot效能。傳統的多資料集訓練主要方法是基於模型在驗證集上的準確率來動態取樣不同資料集的樣本,研究物件主要是怎麼更好地取樣不同資料集的樣本。這篇文章的動機在於:利用不同資料集共享的transformer backbone來學習跨任務的知識,利用adapter來學習特定任務的知識。比較直觀的動機。分成了兩個階段訓練:第一階段,按照傳統的動態取樣的方法取樣完資料集後,聯合最佳化:預訓練模型的引數,span分類器的引數,介面卡的引數。等到各個資料集上的驗證準確率下降就停止。然後第二階段固定預訓練模型的引數,分別微調每個資料集上的分類器和介面卡引數,這樣得到了若干套引數。最後就是怎麼去融合。in domain方面,直接用in domain的資料集的測試集測試就好,引數就是對應的引數。unseen target datasets上,對於zero-shot,直接把各個資料集的引數平均來初始化新的分類器和介面卡。對於few-shot,不是直接平均了,而是加權平均,權重係數在目標資料集上學習,就是在目標資料集上的測試loss越大的引數,則佔比權重就越小。最後效果很驚豔,三種實驗都超過了傳統的多資料集baseline和單資料集微調,特別是zero-shot和few-shot效果很好。值得注意的是,如果直接在每個資料集上單獨訓練adapter,而不事先聯合最佳化的話,那麼不同資料集上的adapter的引數差異會變大,從而引數平均以後的效果並不好。這篇文章提出的二階段微調和引數融合方式值得學習。