谷歌 | 多任务学习,如何挑选有效的辅助任务?只需一个公式!
文 | 小偉
編 | 小軼
前言
說到多任務學習,大家都不陌生,不管是在學術界還是工業界都已經有了很多成熟的探索與應用。在理想的多任務學習中,各個任務對彼此應當是有益的,所有任務相互促進,從而達到超過單任務學習的效果。
但理想歸理想,實際情況卻并非如此。簡單的把一堆任務堆積在一起往往會降低模型最終的性能,所以在多任務學習中,如何去有效地識別哪些任務在訓練時結合在一起可以對彼此有益 成為了很關鍵的問題。
顯而易見,我們可以直接搜索所有任務組合在一起構成的參數空間(N個任務對應2^N-1種可能性),但指數級的復雜度實在是讓人無法接受。Google最近的這篇文章就對這個問題做出了比較好的解答。它提出了一種在多任務學習中高效決定哪些任務應當劃分到一組進行訓練的方法,在大規模的 Taskonomy 計算機視覺數據集上,不僅可以把測試集的 loss 降低10.0%,訓練速度也是之前任務分組 SOTA 的 11.6 倍。
論文標題:
Efficiently Identifying Task Groupings for Multi-Task Learning
論文鏈接:
https://arxiv.org/abs/2109.04617
概覽
總體來看,訓練可以分為四個部分:
首先我們用一個單獨的多任務模型來把所有任務結合在一起訓練
其次在訓練的過程中我們會計算不同任務之間的親和度(Inter-Task Affinity)
當模型過完一遍所有的訓練數據并且計算出任務兩兩之間的親和度之后,我們通過某種算法來對任務進行分組,使得親和度之和最大
最后我們用分組之后的任務來進行訓練以及預測。
第一部分與第四部分很容易理解,下面我們來具體看一下第二部分以及第三部分。
任務間親和度
整個算法中最最關鍵的概念就是這個“任務間親和度”了。任務間親和度(Inter-Task Affinity),直白一點的講的話,就可以理解為:在多任務學習中,用一個值來量化一個任務 對另一個任務 的正面或者負面影響。
那具體怎么衡量呢?在本文中,作者提出:用任務 對共享參數的梯度更新對另一個任務 的 loss 影響的程度 來衡量兩個任務的親和度。
形式化地表達就是:考慮任務集合 , 共享參數 ,以及任務 的參數 , 其中 對于一個batch的訓練數據 , 整體的訓練loss
其中 是任務 對應的loss 那么對于在訓練時刻 的一個batch的訓練數據 , 當我們用某個任務 的loss對共享參數 進行一次梯度更新后,得到新的共享參數
然后我們就可以用新的共享參數 , 訓練數據 以及另一個任務 的參數 來計算共享參數更新之后任務 的新loss
與共享參數更新之前任務 的舊loss 進行比較,就可以得到任務 對任務 的親和度
如果親和度大于0,說明任務 對共享參數的此次梯度更新會降低另一個任務 的loss,對應著正面影響; 相反如果小于0,說明 對共享參數的更新會提高 的loss,對應著負面影響。
這樣,我們對訓練數據進行一次迭代,就可以獲得最終所有任務 兩兩之間的親和度。
任務分組
不要忘記我們最終的目標是——把任務進行分組。在得到任務兩兩之間的親和度之后,我們要怎么對任務進行分組呢?
我們先定義兩個概念:
目標任務(Serving-time Task):也就是最后真正要測試的任務。它是所有任務集合 的子集。
任務親和度(Task Affinity):對于某個任務 來說,其任務親和度為 所屬的組內其他所有任務對其親和度之和。
這樣,分組問題就轉化為:把所有任務劃分為 組,使得所有目標任務的任務親和度之和最大。文中提出我們可以通過利用分支定界法或者0-1整數規劃來解決該問題。
然而很悲傷的是,這是一個NP-hard問題。當任務數量較多時,時間復雜度會非常高。
實驗結果
實驗結果非常給力(TAG是本文方法),總結一下的話主要有一下兩點:
TAG分組方法比之前分組方法的多任務學習效果更好,在CelebA上有更少的測試錯誤以及在Taskonomy上有更低的測試loss
TAG分組方法更加高效,訓練速度可以是之前方法的10幾甚至20多倍
總結
本文提出了一種只需要對訓練數據進行一次迭代就可以計算出任務間親和度的方法,利用該親和度來衡量任務間的相互影響并進行任務組的劃分,在多任務學習的效果以及效率上都超過了之前方法很多。作者同時也希望這篇文章可以給多任務學習中任務組的劃分帶來更多的關注,希望可以在這一方向上有更多的探索與發展。
思考
雖然多任務學習不管是在學術界還是工業界都已經有了比較成熟的應用,但現在多任務學習還是比較依賴于充足的先驗知識,很多情況下都需要人事先判斷任務之間是不是可以相互促進的。然而人的知識畢竟是有限的,所以很多情況下并不能做出很準確的判斷以及劃分,從而對多任務學習的性能造成負面的影響。所以如果能有一種可以簡易快捷的判斷幾個任務是不是應該結合在一起學習的方法,相信會給多任務學習帶來質的提高,它的應用也會更加的廣泛與方便。
從剛才的介紹我們也可以看出,雖然本文的方法只需要對訓練數據進行一次迭代就可以對任務進行分組,但復雜度還是蠻高的(親和度計算以及組的劃分),所以感覺如何把復雜度再降低一些將會是非常有前景的未來研究方向。
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
總結
以上是生活随笔為你收集整理的谷歌 | 多任务学习,如何挑选有效的辅助任务?只需一个公式!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 写Rap,编菜谱,你画我猜……这些 AI
- 下一篇: 共同一作,会被认可吗?