領域泛化(domain generalization)和未知泛化(zero-shot domain generalization):探討模型「無所不能」背後的秘密

Martin Huang
15 min readApr 9, 2024

--

自從GPT-4(或3.5)推出之後,大家對於以它為代表的大型語言模型(Large Language Model,LLM),在各種領域和任務都能有一定程度以上的表現讚嘆不已。同一時間,我想有些人也會有疑問吧?「為什麼模型能突然取得這麼大的突破」?本來只能做語言相關處理的模型,怎麼突然可以畫這個、規劃那個,還可以變出井井有條的敘述或計畫出來?

或許,這和領域泛化(domain generalization)和未知泛化(zero-shot generalization)有關聯。

深度學習模型從發展以來,長時間都是限制在特定的任務上的。這不是因為研究人員沒有野心,而是從預設和模型實際的表現得到這樣的設定[1]。預設是「資料獨立且同分布」(independent and identically distributed,iid),模型實際的表現呢,當然就是把訓練好的模型直接拿去做其他任務了。例如,一個物件偵測模型,訓練的時候是用晴天的圖片,那模型在雨天的情境下,是不是還能有一樣的辨識能力?如果訓練的時候只有狗這項分類,模型能不能偵測貓?用訓練圈選人的模型,能不能直接拿來圈選醫學影像?甚至,訓練分類的模型,能不能用在圈選任務?

延伸閱讀:弱監督式學習(1)(2)

領域泛化(domain generalization)

其中一個比較直觀的做法是「領域適應」(domain adaptation),即收集一部分接下來的任務會遇到的資料,來幫助模型調整(不見得需要有標註)。然而,實際情況是常常連這樣的資料都缺少,因為連人類專家也不知道實際的資料分布狀況,或者有人類也不知道的類別。在生醫領域,這樣的狀況算是常見的,因為還有太多醫學未知的狀況存在。

因應這個狀況,「領域泛化」(domain generalization,DG)便被提出[2]。核心概念是利用一個或多個相關但獨立領域的資料訓練模型,以便讓模型能在更廣泛的狀況下(out of distribution,OOD)被使用。

定義問題

我們有來自i個具相似分布,但彼此可被區分的資料來源

並從其各自取得一定的訓練樣本(sample)

其獨立且同分布(iid)於資料來源i。我們的測試樣本

亦iid於其資料分布

且通常有標註。此分布亦相似但可被區隔於訓練資料來源

模型任務是藉由訓練資料,能預測測試資料。

方法

以下舉一兩個領域泛化的方法。具體細節要再找這些方法對應的文章出來看,而且個人認為並沒有一個解決所有情境的公式解,必須針對應用情境和資料性質,以及模型種類,做對應的選擇和調整。這就是工程師的價值所在,也是我認為只憑ChatGPT就想取代工程師寫程式是癡人說夢的關鍵。

領域標齊(Domain alignment)

概念是如果能夠在不同領域或任務學到一些不變的特徵,這些特徵在新的領域或未知分類上應該也是不變的。需要領域標註。

接著有兩個問題:

  1. 標齊哪些項目?

方才取樣的樣本,其於該領域出現的機率為P(X,Y),可以拆解成

在P(Y|X)P(X)的狀況,領域標齊假定不同領域間造成分布的差異來自於P(X),而P(Y|X)則是不變的。所以要標齊的是P(X),即邊際分布(marginal distribution,指包含部分變量的機率分布,在此為X)。要符合這樣的狀況,X必須是Y的成因,或者說X直接對於Y有影響。但如果是Y對於X有影響,那改變P(X)也會改變P(Y|X)。因此,另一個做法是標齊P(Y),因為在這個狀況中,反而是P(X|Y)不受影響。

2. 怎麼標齊?

縮小差距。這個差距當然是看人為定義,例如較簡單的是平均差,或變異數。複雜一點的,有contrastive loss(常用在電腦視覺類的任務)、KL divergence(機器學習看分布差異使用)。還有一個做法是使用對抗式網路(adversarial learning),因為其discriminator的性質,天然適合用來監督差距是否縮得夠近,近到discriminator無法判斷,就成功了。

另一個做法是不看差距,而直接看特徵 — 看他的參數。因為如果有在不同任務上共通的特徵,他對應的參數應該是比較固定的。這個參數可以由編碼-解碼(encoder-decoder)的過程獲得,encoder可以是同一個,但decoder就根據任務不同而有調整。這個方法就是多任務訓練(multi-task learning)。

Meta learning (元學習?好怪的翻譯…我想翻成統合學習)

在台灣的醫學統計領域,前陣子有一段時間很流行「統合分析」,英文是meta-analysis。其研究方法的目的,在於根據多篇相同或高度相似的臨床試驗或觀察型研究中,找到某個處置和預後,或者是某些因子之間的關聯性。在這裡,meta learning跟多任務學習有關連,目標也是找到一個「能以少量樣本就能建立足以適應對應樣本的任務的模型」的演算法。所以meta learning找的不是對應任務的模型,而是能快速找到對應任務模型的方法。就這些涵義來說,我覺得翻成統合學習蠻恰當的。

假設我們有多個任務,來自於一個關於任務的分布p(T)。訓練時,從任務分布中取出一任務Ti,並從中取得k個樣本。模型在這些樣本訓練之後,會在同一任務下取得其他樣本做測試。演算法的目標,則是尋找能讓測試誤差(test error)最快降低的模型參數。最後,評估模型的表現時,會用訓練期間沒用過的,也來自p(T)的任務,看看模型在該任務上的表現。

在meta learning之中,有一個流行的演算法叫做model-agnostic meta learning(MAML)[3]。它和其他meta learning方法的區別在於它能結合各種模型,而不僅限於RNN。和上面提到多任務訓練的概念類似,它要鼓勵模型去學會可共用於不同任務間的特徵。由於許多模型都是基於梯度下降法來更新權重,MAML也利用梯度下降法來尋找適合的模型。因為要快速讓模型新任務,所以其參數對於任務要很敏感,它可以隨著調整梯度下降的方向,只要些微調整就能鉅大的改善模型表現,但又不會造成過度配適(overfitting)。

假定一個模型fθ具有參數θ。從p(T)中抽出任務若干,每一任務取出K個樣本。在第一個新任務Ti,參數變為θi’。模型使用梯度下降更新參數,其簡式為

α為梯度下降的速率,或步長,可做為超參數設定,也可用meta learning學道適當的數值。其後面的項即為梯度,由損失函數偏微分構成。在這個任務學的差不多的時候(損失函數來到local,或更理想的global minimal),評估並紀錄fθi’在這個任務的表現(用同一個損失函數,但用和剛剛訓練不一樣的樣本)

然後換下一個任務。然後反覆這個操作,直到抽出的若干任務完成。此時我們握有各fθi’在各任務的表現,他們都是從一開始的fθ經由個任務,透過訓練迭代更新來的。所以,我們最後把它加總,再對θ偏微分,就可以得到總梯度。這個梯度的目的是告訴模型,保留其中有跨任務,共通性的參數(因為其損失會較低)。利用這個梯度,我們可以更新θ,然後再進到下一輪的訓練。

β是meta learning的步長。整個過程裏面牽涉到雙重梯度,增加計算資源和時間,因此也有提出只用一層梯度的做法[3][4],在某些資料集上的表現還不錯。

自動編碼(Autoencoder)

這個概念其實也和自然語言有關。把目前可見的特徵(visual space)編碼到另一個空間(語意空間,semantic space),可以得出各種對模型而言可分辨的特徵。之後再把想要的特徵轉回目前的可見特徵,變成人類可理解的形貌,在自然語言就是對應的詞彙,在電腦視覺就是分類/物件偵測等等[5]。如果用在領域泛化,則在semantic space須有至少兩部分:一是共通的(invariant),即不因任務或資料所處領域而改變的特徵。另一則是可變的(variant),依任務或資料所處領域而改變。視情況也可能再加一個部分:按照分類(class)而改變的特徵[6]。

一個基本的自動編碼fΘ的示意圖如下[7]:

圖1. Autoencoder

θ輸入x和輸出的向量^x皆位於維度x的空間(visual space,但兩者未必相等)。h位於維度y的空間(semantic space或middle space)。w和v皆為映射,分別帶有x × y和y × x個權重。h和^x與x的關係式可寫為

其中σ為啟動函數,encoder和decoder之間未必要用相同的。

在領域泛化,自動編碼多半搭配多任務學習(multi-task autoencoder,MTAE)的方式,其輸出層對應不同任務而有多個,如下圖。

圖2. 多任務學習自動編碼。圖片來源:[7]

由圖2可以得知W還是一個,但轉到輸出的V則視任務而不同。這裡的任務未必是指任務種類(如分類/偵測/圈選),也不一定是指分類差異(如分類的貓/狗/房屋/人),而可以只是來自原本資料集中的一些變化而已。例如第一個任務是數字分類,第二個還是數字分類,只是資料集裡的數字被旋轉了;第三個資料集也是數字,但可能加了一些雜訊。就MTAE的角度,它必須抓到一個核心,而任務之間的差異,只是源自於核心的變形(transformation/ corrupted)而已。以上面數字分類的例子來說,MTAE就要知道核心在於每個數字,而旋轉或雜訊,都只是數字的變形。

假設一組資料

為來自第l個領域的n_l筆資料,l為總共M個領域(任務)的其中之一。來自各領域的資料組可合為一個矩陣X,位於維度為n_l × d_x的空間。

為其第i列,其每一筆資料剛好對應一個領域(x_i¹ … x_i^M)。由於多任務學習,同一組輸入x_i^l按照領域會對應到不同的輸出(x_i¹ … x_i^M)。我們可以把所有的輸入-輸出對串接成矩陣:

其中X-和X-^l都屬於N × x的空間,N為各領域n^l之和。接著,把資料套入先前自動編碼的式子:

殊途同歸 — 訓練編碼器在不同領域的輸入, 經過編碼和解碼之後,找到共同的輸出 — 也就是不變的部分。損失函數寫為

其他方法

如資料增量(data augmentation)、集合式學習(ensamble learning)、自監督式學習(self-supervised learning)、強化學習(reinforcement learning),一些常聽到的做法也都可以做到domain generalization。

未知泛化(zero-shot (domain) generalization)

前面提到領域泛化在最後評估效能時,仍需有少量的樣本訓練,讓模型能快速適應任務。未知泛化就是沒有樣本!最後評估時,模型看到的樣本只有測試集,沒有訓練集。

圖3. 未知泛化。圖片來源:[5]

定義問題

一個領域位於特徵和標註聯合分布的空間之中。訓練資料(Xij,Yij)來自第i個領域,隸屬P^i_XY空間且屬於分布μ。在領域泛化,測試資料(X^Tij, Y^Tij)來自空間P^T且仍屬於分布μ,但在未知泛化,測試資料將屬於另一個分布ν。ν有一部分未出現在μ的標註,但在其他標註和特徵的分布上則相同。

假設(X,Y)皆從其對應的分布抽出,且為i.i.d。Y_tr是訓練資料的標註分類,而Y_tst為測試資料的標註分類,在未知泛化的情況下,

方法

先聲明這是其中一種方法。他是從領域泛化的角度切入,所以可以看成是無學習版的領域泛化。另外還有其他zero shot learning的方法,這邊暫時不討論。

核心觀念和領域泛化一樣,要有一個不隨領域改變的特徵。但要怎麼做到找到連未知的領域或分類也能共用的特徵?它借用自然語言的概念:有類似字根的分類標籤,意義上比較相近。如果把每個分類標籤都視為分類標籤空間的子空間,那類似字根的分類標籤,其空間之間的距離較近。在自然語言中,有個很重要的文字向量概念(word2vec),意即把文字視為向量,則類似意義的字,其向量較接近(內積較大)。除此之外,類似字根的分類標籤,其對應在視覺意義上的特徵也是較為接近的。例如老鷹和白頭翁都有翅膀;但松鼠沒有。

因此,負責特徵萃取的函數fθ和該分類標籤文字向量的距離,可以視為一種衡量叢集領域的概念。例如所有鳥的分類,翅膀的特徵和他們都大約有一定範圍內(較小)的距離。相對的,鳥爪和松鼠這類分類標籤的距離,一定比和鳥類遠。所以這個做法,其實是用文字標籤向量化來做cluster。如果今天有一個新的分類標籤是鴿子,如果有萃取到翅膀特徵,那模型會自動抓取比較接近對應距離的標籤叢集來判斷,也就是鳥類。當然,如果要這樣做,還是要知道新分類的文字向量,所以在[6]裡,他們有用word2vec來做。(也就是說,不可能完全沒有新分類的一丁點資訊就能讓模型判斷)

針對特徵萃取函數fθ和該分類標籤文字向量的距離之損失函數如下:

其中w[Yij]為分類標籤的文字向量。利用這個損失函數,我們可以和前面領域泛化的訓練方式結合,讓它變成未知泛化的訓練模式。例如在MTAE上,我們有一個編碼fΘ和多個解碼gΦn。基於原本的損失函數之上,我們可以加上未知泛化的損失函數:

其中

在自然語言模型上的意義

自然語言模型的發展中,有一段時間其實是著重在預測字:例如遮住一個句子的某個字,要模型根據其他的字,預測這個字最可能是什麼。當然,自然語言的任務類型很多:例如語意分析(sentiment analysis)、文意萃取、改寫等等。但在訓練模型預測文字的過程中,模型本身可能也隱含的學會了一些文字間的關係,或者文句的架構。這些可能可以應用在其他任務上。如果進一步把這些文字組成資料-標籤的格式,儘管文字的內容對應的任務不同,但也有可能讓模型學會更多的任務形式,甚至進一步,能在未曾見過的任務中表現良好[8]。

具體一點說,利用多任務學習,模型可能可以做到好的泛化。這些資料-標籤的格式,就是問答,換成在GPT上,就是提示(prompt)。所以所謂的詠唱魔法,其實本質上就是從資料-標籤格式轉化出來的。但GPT在訓練時可能沒有刻意以多任務的方式進行,至少在目前還沒有。若是刻意以多任務訓練的方式進行自然語言模型訓練,或許在特定的情境下,小模型也有機會打敗大語言模型。

以上就是這次討論泛化相關的一些心得整理。這個方向感覺還蠻有潛力的,或許未來是模型發展的方向之一,因為過往也累積不少研究。

參考資料

[1] Zhou et al., Domain Generalization: A Survey. arXiv:2103.02503v7, 12 Aug 2022.
[2] Blanchard et al., Generalizing from Several Related Classification Tasks to a New Unlabeled Sample. NeurIPS, 2011.
[3] Finn et al., Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks. arXiv:1703.03400v3
[4] Nichol et al., On First-Order Meta-Learning Algorithms. arXiv:1803.02999v3
[5] Maniyar et al., Zero Shot Domain Generalization. arXiv:2008.07443v1
[6] Ilse et al., DIVA: Domain Invariant Variational Autoencoders. arXiv:1905.10427v2
[7] Ghifary et al., Domain Generalization for Object Recognition with Multi-task Autoencoders. arXiv:1508.07680v1
[8] Sanh et al., Multitask Prompted Training Enables Zero-Shot Task Generalization.

--

--

Martin Huang

崎嶇的發展 目前主攻CV,但正在往NLP的路上。 歡迎合作或聯絡:martin12345m@gmail.com