Multi-task Learning and Beyond: 過去,現在與未來

點擊上方,選擇星標置頂,每天給你送乾貨

閱讀大概需要20分鐘

跟隨小博主,每天進步一丟丟

來自 | 知乎   作者 | 劉詩昆

鏈接 | https://zhuanlan.zhihu.com/p/138597214

編輯 | 深度學習這件小事

近期 Multi-task Learning (MTL) 的研究進展有着衆多的科研突破,和許多有趣新方向的探索。這激起了我極大的興趣來寫一篇新文章,嘗試概括並總結近期 MTL 的研究進展,並探索未來對於 MTL 研究其他方向的可能。

這篇文章將順着我 18 年碩士論文:Universal Representations: Towards Multi-Task Learning & Beyond 的大體框架,並加以補充近期新文章的方法,和未來新方向的討論。

Disclaimer: 在碩士論文裏提及的自己的文章均爲當時未發表的 preliminary results,對於任何人想要了解論文裏的細節請直接參看發表的 conference 文章。

Multi-task Learning 的兩大研究分支

在絕大部分情況下,MTL 的研究可以歸類爲以下兩個方向,一個是 MTL Network 網絡設計;另一個是 MTL Loss function 損失函數設計。我們以下對於這兩個方向進行詳細解讀。

Multi-task Learning Network Design / What to share? [網絡設計]

在起初,MTL 的網絡設計通常可以列爲兩種情況:Hard parameter sharing 和 soft parameter sharing。

Hard-parameter sharing -- 現在是幾乎所有做 MTL 不可缺少的 baseline 之一,就是將整個 backbone 網絡作爲 shared network 來 encode 任務信息,在最後一層網絡 split 成幾個 task-specific decoders 做 prediction。Hard-parameter sharing 是網絡設計參數數量 parameter space 的 (並不嚴格的,假設不考慮用 network pruning) lower bound,由此作爲判斷新設計網絡對於 efficiency v.s. accuracy 平衡的重要參考對象。

Soft-parameter sharing -- 可以看做是 hard-parameter sharing 的另外一個極端,並不常見於現在 MTL 網絡設計的比較。在 soft-parameter sharing 中,每一個任務都有其相同大小的 backbone network 作爲 parameter space。我們對於其 parameter space 加於特定的 constraint 可以是 sparsity, 或 gradient similarity, 或 LASSO penalty 來 softly* constrain 不同任務網絡的 representation space。假設我們不對於 parameter space 加以任何 constraint,那麼 soft-parameter sharing 將塌縮成 single task learning。

任一 MTL 網絡設計可以看做是找 hard 和 soft parameter sharing 的平衡點:1. 如何網絡設計可以小巧輕便。2. 如何網絡設計可以最大幅度的讓不同任務去共享信息。


MTL network design is all about sharing.

  • Cross-Stitch Network

Cross-Stitch Network 是過去幾年內比較經典的網絡設計,也已常用於各類 MTL 研究的baseline 之一。其核心思想是將每個獨立的 task-specific 網絡使用 learnable parameters (cross-stitch units) 以 linear combination 的方式連接其中不同任務的 convolutional blocks。

Visualisation of Cross-Stitch Network

對於任務 A 與 B,每個 convolutional block 輸出層,我們將計算:

通過這樣的運算,下一個 convolutional block 的輸入層則爲.

啓發於 Cross-stitch 的設計,NDDR-CNN 也有類似的思路。然而不同的是,對於中間層的 convolutional block 的信息融合,他們採用了 concatenate 並通過 [1 x 1] 的 convolutional layer 來 reduce dimensionality。這樣的設計使得每個任務的 channel 都可以與其他不同 index 的 channel 交融信息,而規避了原始 Cross-stitch 只能 infuse 相同 channel 信息的侷限性。當 NDDR 的 convolutional layer weights 的 non-diagonal elements 是 0 的話, NDDR-CNN 則數學上等價於 Cross-Stich Network。

Cross-Stitch Network 和 NDDR-CNN 的最大弱勢就是對於每個任務都需要一個新的網絡,以此整個 parameter space 會對於任務的數量增加而線性增加,因此並不 efficient。

  • Multi-task Attention Network

基於 Cross-stitch Network efficiency 的缺點,我後續提出了 Multi-task Attention Network (MTAN) 讓網絡設計更加小巧輕便,整個網絡的 parameter space 對於任務數量的增加以 sub-linearly 的方式增加。

Visualisation of Multi-task Attention Network

MTAN 的核心思想是,assume 在 shared network encode 得到 general representation 信息之後,我們只需要少量的參數來 refine task-shared representation into task-specific representation, 就可以對於任意任務得到一個很好的 representation. 因此整個網絡只需要增加少量的 task-specific attention module,兩層 [1 x 1] conv layer,作爲額外的 parameter space 來 attend 到 task-shared represenation。整個模型的參數相對於 Cross-Stitch Network 來說則大量減少。

  • AdaShare

AdaShare 則更是將 MTL 網絡設計的 efficiency 做到的極致。與其增加額外的 conv layer 來 refine task-shared representation,AdaShare 將單個 backbone 網絡看做 representation 的整體,通過 differentiable task-specific policy 來決定對於任何一個 task,否用去更新或者利用這個網絡的 block 的 representation。

Visualisation of AdaShare

由於整個網絡是應用於所有任務的 representation,因此 network parameter space 是 agnostic 於任務數量,永遠爲常數,等價於 hard-parameter sharing。而搭接的 task-specific policy 是利用 gumbel-softmax 對於每一個 conv block 來 categorical sampling "select" 或者 "skip" 兩種 policy,因爲整個 MTL 的網絡設計也因此會隨着任務的不同而變化,類似於最近大火的 Neural Architecture Search 的思想。

  • MTL + NAS

MTL-NAS 則是將 MTL 和 NAS 結合的另外一個例子。他搭載於 NDDR 的核心思想,將其拓展到任意 block 的交融,因此網絡搜索於如何將不同 task 的不同 block 交融來獲得最好的 performance。

Visualisation of MTL-NAS

我個人更偏向 Adashare 的搜索方式,在單個網絡裏逐層搜索,這樣的 task-specific representation 已經足夠好過將每一個 task 定義成新網絡的結果。由此, MTL-NAS 也躲不掉網絡參數線性增加的特點,不過對於 MTL 網絡設計提供了新思路。

MTL + NAS 和傳統的 single-task NAS 會有着不同需求,和訓練方式。

1.MTL+NAS 並不適合用 NAS 裏最常見的 two-stage training 方式:以 validation performance 作爲 supervision 來 update architecture 參數,得到 converged architecture 後再 re-train 整個網絡。因爲 MTL 的交融信息具備 training-adaptive 的性質, 因此 fix 網絡結構後,這樣的 training-adaptive 信息會丟失,得到的 performance 會低於邊搜邊收斂的 one-stage 方式。換句話說,訓練中的 oscillation 和 feature fusion 對於 MTL 網絡是更重要的,而在 single task learning 中,並沒有 feature fusion 這個概念。這間接導致了 NAS 訓練方式的需求不同。 

2.MTL+NAS is task-specific. 在 NAS 訓練中,要是 dataset 的 complexity 過大,有時候我們會採用 proxy task 的方式來加快訓練速度。最常見的情況則是用 CIFAR-10 作爲 proxy dataset 來搜好的網絡結構,應用於過大的 ImageNet dataset。而這一方式並不適用於 MTL,因爲對於任一任務,或者幾個任務的 pair,他們所需要的 feature 信息和任務特性並不同,因此無法通過 proxy task 的方式來加速訓練。每一組任務的網絡都是獨特和唯一的。

我相信在未來 MTL 網絡設計的研究中,我們會得到更具備interpretable/human-understandable 的網絡特性,能夠理解任務與任務之間的相關性,和複雜性。再通過得到的任務相關性,我們可以作爲一個很好 prior knowledge 去 initialise 一個更好的起始網絡,而由此得到一個更優秀的模型,一種良性循環。

A Better Task Relationship  A Better Multi-task Architecture


Multi-task Learning Loss Function Design / How to learn? [損失函數設計與梯度優化]

平行於網絡設計,另外一個較爲熱門的方向是 MTL 的 loss function design, 或者理解爲如何去更好得 update 網絡裏的 task-specific gradients。

對於任意 task i, 我們有損失函數:,其中爲 task-specific learning parameters.那麼,我們需要找到一組很好的來 optimise 所有 task i 的 performance。其中最爲簡單且直接的方式則爲 equal weighting: ,也就是默認每一個 task 對於 representation 的 contribution 是相同的。

  • Weight Uncertainty

Weight Uncertainty 是最早幾篇研究 MTL loss function design 的文章之一。這篇文章 assume 在每個 model 裏存在一種 data-agnostic task-dependent uncertainty 稱之爲 Homoscedastic uncertainty。(這種說法其實非常的古怪,只有劍橋組喜歡這麼稱呼。)而通過 maximise log -likelihood of the model prediction uncertainty 可以來 balance MTL training。這裏的 likelihood (通常 parameterised by Gaussian) 可以看做是 relative confidence between tasks。

對於任何 model prediction y, 我們定義 Gaussian likelihood of model:其中這裏的爲 learnable noise scalar (Gaussian variance),那麼我們需要 maximise:

由此我們可以得到新定義的 loss function:

.

最後推導的公式非常簡潔,也因此用在很多 MTL benchmark 裏。

然而這篇文章有着非常大的爭議,其中最著名的一點是作者對於如此簡單的公式卻一直拒絕開源,並且無視大量其他 researchers 的郵件對於 implementation 的細節詢問,惹怒了不少同行(包括我)。此外,weight uncertainty 非常依賴於 optimiser 的選擇,在我個人實驗裏,我發現有且僅有 ADAM optimiser 可以讓 weight uncertainty 正確收斂,而在其他 optimiser 上 weight uncertainty 沒有任何收斂趨勢。這篇博客 則更爲指出,這個 weight uncertainty 公式可以直接得到 closed-form solution:當 learnable is minimised, 整個 loss function 將轉化成 geometric mean of task losses,因此再次對於這裏 uncertainty assumption 可行性提出了質疑。

  • GradNorm

GradNorm 則爲另外一篇最早期做 MTL loss function 的文章。GradNorm 的實現是通過計算 inverse training rate: 下降速率,作爲 indicator 來平衡不同任務之間的梯度更新。

我們定義爲 W 參數在 weighted multi-task loss 在 t step 上計算到梯度的 L2-norm; mean task gradient 爲; relative inverse training rate 爲  。GradNorm 通過以下 objective 來更新 task-specific weighting:

其中 則爲理想的梯度 L2-norm (作爲 constant), 來調整 task-specific weighting.  作爲一個平衡超參, 越大則 task-specific weighting 越平衡。由於每次計算 需要對所有 task 在每個 layer 進行 backprop,因此非常 computational expensive。由此,作者就以計算最後一層的 shared layer 作爲 approximation 來加快訓練速度。

  • Dynamic Weight Average

由於 GradNorm 在計算 task-specific weighting 上需要運算兩次 backprop 因此在 implementation 上非常複雜。我後續提出了一個簡單的方法,只通過計算 loss 的 relative descending rate 來計算 task weighting:

這裏的則通過計算兩個相鄰的 time step 的 loss ratio 作爲 descending rate。因此越小,收斂速率就越大,任務就越簡單,得到權重也就越小。

  • MTL as Multi-objective Optimisation

之前介紹的幾個 task-weighting 方法都基於一些特定的 heuristic,很難保證在 MTL optimisation 取得 optimum. 在 MTL as Multi-objective Optimisation 裏,作者將 MTL 問題看做是多目標優化問題,其目標爲取得 Pareto optimum.

Pareto optimum 是指任何對其中一個任務的 performance 變好的情況,一定會對其他剩餘所有任務的 performance 變差。作者利用了一個叫 multiple gradient descent algorithm (MGDA) 的方法來尋找這個 Pareto stationary point。大致方式是,在每次計算 task-specific gradients 後,其得到 common direction 來更新 shared parameter s。這個 common direction 如果存在,則整個 optimisation 並未收斂到 Pareto optimum。這樣的收斂方法保證了 shared parameter 不會出現 conflicting gradients 讓每一個任務的 loss 收斂更加平滑。

  • Other heuristic methods

對於 MTL loss function 的設計,還有其他不同的 heuristic 方法,或基於任務的難易性 (Dynamic Task Prioritization), 或直接對於計算到的任務梯度進行映射,防止出現任務梯度之間的 conflicting gradients 情況 (Gradient Surgery)。

但在各式各樣的 MTL loss function design 裏,很難出現其中一個方法在所有數據集裏都 outperform 其他方法的情況。甚至,在部分數據集裏,最簡單的 equal task weighting 也表現得較爲優異。一方面,task weighting 的有效性非常依賴於 MTL 網絡本身的設計;此外 task weighting 的更新也依賴於數據集和 optimiser 本身。假設如果核心目標僅僅是取得最好的 MTL performance,那我建議應該花更多的時間去研究更好的網絡而不是 task weighting。但不可否認的是,task weighting 的研究可以更好的幫助人們理解任務之間的相關性和複雜性,以此反過來幫助人們更好的設計模型本身。


Auxiliary Learning -- Not all tasks are created equal [輔助學習]

跟 MTL 高度相關的一個方向被稱之爲 Auxiliary learning (AL, 輔助學習):他的訓練過程與 MTL 完全一致。唯一的不同是,在 Auxiliary Learning 裏,只有部分任務的 performance 是需要被考慮的 (primary task),其他(輔助)任務 (auxiliary task) 的存在的意義是,幫助那部分需要被考慮的任務學習到更好的 representation。

  • Supervised Auxiliary Learning

Auxiliary Learning 存在的普遍性其實遠超於我們的想象。比如,MTL 其實就是一種特殊形式的 AL,我們可以把其中任意一個 task 作爲 primary task,其他剩餘的 task 看作爲 auxiliary task。在 MTL 裏,我們默認所有 task 與 task 存在一種 mutual beneficial 的關係,因此所有 learning tasks 都 benefit 到這種相關性。

Auxiliary Learning 還應用在很多領域裏,比如 這篇文章 發現在訓練 depth 和 normal prediction 的同時,可以有效的幫助 object detection 的精確度。或者 這篇文章 發現在做 short sequence 的重建時,可以幫助 RNN 更有效的訓練 very long sequence。

在 supervised auxiliary learning 的 setting 中,整個網絡和任務的選擇非常依賴於人類的先驗知識,並不具備絕對的普遍性。

  • Meta Auxiliary Learning

考慮 supervised auxiliary learning 對於任務選擇的侷限性,我後續提出了一種基於 meta learning 的方法來自動生成 auxiliary task,我把這種方法稱之爲 Meta Auxiliary Learning (MAXL)。

在傳統的 supervised auxiliary learning,我發現有這樣如下兩個規律:

1.假設 primary 和 auxiliary task 是在同一個 domain,那麼 primary task 的 performance 會提高當且僅當 auxiliary task 的 complexity 高於 primary task。

2.假設 primary 和 auxiliary task 是在同一個 domain,那麼 primary task 的最終 performance 只依賴於 complexity 最高的 auxiliary task。

這裏對於 task 的 complexity 的定義比較 tricky 並不 general,目前我只考慮了最簡單的圖片分類的情況:細分類任務的 complexity 是高於粗分類任務。

比如在下圖,我們看到貓,狗兩類的分類的信息,直覺上一定低於細分類,約克夏,波斯貓之類更爲細節的信息。而分類貓狗所需要的信息是分類細分類的子集,因此得出了規律 2.

再由於規律 2,我們只需要考慮最簡單的兩個任務訓練的情況:primary task 和 auxiliary task 各爲一個任務。因此在這裏,我們”生成“一個好的 auxiliary task的問題,也就可轉化爲對任意輸入圖片,我們需要有一個好的網絡去生成好的細分類標籤。

Visualisation of MAXL

因此在 MAXL 框架裏,我們有兩個網絡:一個網絡是 multi-task network 類同於 hard parameter sharing 來做 multi-task training。另外一個網絡是 label-generation network 來生成細分類標籤,給 multi-task network 作爲 auxiliary task 的 prediction label。

於是對於 Multi-task network ,我們需要做以下更新:

對於 label-generation network  , 我們需要通過 meta update 的方式做以下更新:

其中,

這裏,代表了 meta update,來通過 maximise validation performance of primary task 來尋找最好的 auxiliary label。這裏的 second derivative trick 類同於經典 meta learning 算法 MAML 的梯度更新。

在 label-generation network 裏還存在一個 hyper-parameter  代表人類定義的 dataset hierarchy。假設我們在做簡單的二分類,那麼 則意味着將第一個類再細分成 2 類,第二個類再細分成 3 類。那麼 label-generation network 就以這樣的 hierarchy 通過 masked version of softmax 來生成相應的合適的 auxiliary label。於是 multi-task network 就在進行兩個分類任務:primary task 是二分類,auxilairy task 是五分類。

通過 MAXL,我們發現他可以對這樣的圖片分類任務有着一定的效果提升。我們後續 visualize 生成的標籤,發現在一些簡單的數據集裏有着人類可理解的 clustering 含義。

在上圖中,上半部分是 CIFAR-100 的分類,下半部分是 MNIST 的分類。其中這三類 auxiliary class 中的圖片是通過 label-generation network 生成在這個 class 裏 5 個 confidence 最高的圖片。

在較爲複雜的 CIFAR-100 數據集中,我們很難理解 MAXL 的分類到底在幹什麼。而在 MNIST 中,我們可以發現 不同粗細的 數字 3,不同方向的 數字 9,有無中間的 horizontal bar 的數字 7 cluster 到了一起。這種有趣的現象開拓了一個新穎的方向,對自動化輔助任務生成的探索。

  • Self-supervised Auxiliary Learning: Learning to X by Y

Auxiliary learning 還可以應用在 self-supervised learning 中,假設對於 primary task 和 auxiliary task 都沒有任何 human label。這裏的 self-supervised training 跟跟 supervised auxiliary task 一樣,是有效得利用了人類先驗知識對於部分任務組合的特性。

較爲常見的組合是:depth 和 ego-motion 的 prediction 可以在時間上具備 consistency。同樣利用 time consistency 的還有 colorisation 和 tracking, feature learning 和 ego-motion.

同樣的這樣的 consistency 也可以存在基於 RL 的robot learning 裏,例如 grasping 和 pushing,或者 robot manipulation。


總結

終於到總結了!近些年來 MTL 的研究出現了很多新穎且有價值的工作,但是對於任務自身的理解,和任務之間關係的理解還是有很大的不足和進步空間。在 Taskonomy 裏,作者嘗試了上千種(大量 CO2 排放)任務的組合來繪製出不同任務之間的關係圖。但是真實 MTL 訓練中,我相信這種關係圖應該隨着時間的變化而變化,且依賴網絡本身。因此,如何更好得通過任務之間的關係去優化網絡結構還是一個未解之謎,如何設計/生成輔助任務並通過 MTL 更好得幫助 primary task 也並未瞭解透徹。希望在後續的研究中能看到更多文章對於 MTL 的深入探索,實現 universal representation 的最終願景。

添加個人微信,備註:暱稱-學校(公司)-方向,即可獲得1. 快速學習深度學習五件套資料2. 進入高手如雲DL&NLP交流羣記得備註呦

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