本文作者沈博魁是史丹佛本科生/準博士生,也是 CVPR 2018 最佳論文《Taskonomy:Disentangling Task Transfer Learning》的共同二作。鑑於作者在 Poster Session時發現很多人對Taskonomy的理解有偏差,沈博魁在知乎寫了一篇Taskonomy的中文解讀,希望能對大家有幫助。很多專業詞彙的中文翻譯可能有偏差,希望大家見諒。如果有問題,歡迎大家評論私信。
➤ 細節請檢視知乎文章:https://zhuanlan.zhihu.com/p/38425434
➤ Taskonomy的網站:taskonomy.stanford.edu
梗概
人類的視覺具備多種多樣的能力,計算機視覺界基於此定義了許多不同的視覺任務。長遠來看,計算機視覺著眼於解決大多數甚至所有視覺任務,但現有方法大多嘗試將視覺任務逐一擊破。這種方法造成了兩個問題:
第一,逐一擊破需要為每一項任務收集大量資料,隨著任務數量的增多,這將會是不可行的。
第二,逐一擊破會帶來不同任務之間的冗餘計算和重複學習。
一般來說,逐一擊破的策略忽略了視覺任務之間的關聯性,比如法線(Surface Normals)是由深度(Depth)求導得來,語義分割(Semantic Segmentation)又似乎和遮擋邊緣測試(Occlusion edge detection)有著千絲萬縷的關聯。基於上述兩個問題,我們希望能有效測量並利用視覺任務之間的關聯來避免重複學習,從而用更少的資料學習我們感興趣的一組任務。
Taskonomy是一項量化不同視覺任務之間關聯、並利用這些關聯來最優化學習策略的研究。如果兩個視覺任務A、B具有關聯性,那麼在任務A中習得的representations理應可為解決任務B提供有效的統計資訊。由此我們通過遷移學習計算了26個不同視覺任務之間的一階以及高階關聯。
如圖一,如果有預測法線的網路和預測遮擋邊緣測試的網路,我們可以通過結合兩個網路的representations來快速通過少量資料解決Reshading和點匹配 (Point matching)。基於這些關聯,我們利用BIP (Binary Integer Programming) 求得對於一組我們感興趣的任務,如何去最優分配訓練資料量。比如,如果想最高效地解決10個問題,利用Taskonomy提供的學習策略可以減少2/3的訓練資料量。
方法
簡單概括,方法分為兩個大階段,四個小步。
第一大階段涉及前三小步,我們要量化不同視覺任務之間的關聯,並將任務關聯表達成一個affinity matrix(關聯矩陣)。
第二大階段,也就是最後一小步,我們對求得的affinity matrix進行最優化,求得如何最高效地去學習一組任務。這個最高效的策略會由一個指向圖 (directed graph) 來表示,我們稱此指向圖為Taskonomy。詞語上Taskonomy是Task (任務) 和 Taxonomy (分類論) 的合併簡稱。
>>>> 問題定義
首先,我們來定義我們想要解決的問題。我們想在有限的監督預算γ下最大化我們在一組目標任務(target tasks) T = {t1,...,tn}上的表現。同時,我們有一組起始任務 (source tasks) S,其定義為我們可從零學習的任務。監督預算γ的定義為多少起始任務我們願意從零開始學習(從零開始學習需要收集大量資料,監督預算表達了我們所面對的金錢、計算力和時間上的限制)。其中,
T \ S 代表了我們感興趣但不能從零學習的任務,比如一個只能有少量資料的任務。
S \ T 代表了我們不感興趣但可以從零學習(來幫助我們更好的學習?)的任務,如jigsaw、colorization等自我監督的視覺任務。
T ∩ S 代表了我們既感興趣又能從零學習的任務,但因為從零學習會消耗監督預算,我們希望從中選擇出符合預算的一組從零學習,餘下的通過少量資料的遷移學習來實現。
我們稱 V = T ∪ S 為我們的任務詞典 (task dictionary)。最後,我們對視覺任務t的定義為一個基於圖片的方程 f(t)。
如下圖所示,我們收集了一個有四百萬張圖片的資料題,每張圖片均有26個不同視覺任務的標註 (ground truth)。這26個任務涵蓋了2D的、3D的和語義的任務,構成了本項research的任務詞典。因為這26個任務均有標答,S也為這26個任務。
下面,我們進入第一大階段,量化視覺任務的關聯。
>>>> 第一步:從零學習
對於每個起始任務,我們為其從零開始學習一個神經網路。為了能更好地控制變數從而比較任務關聯,每個任務的神經網路具有相似的encoder-decoder結構。所有的encoder都是相同的類ResNet50結構。因為每個任務的output維度各不相同,decoder的結構對不同的任務各不相同,但都只有幾層,遠小於encoder的大小。
(注:CVPR poster session期間有人問起,decoder泛指readout functions,比如classification的FC Layers也算為decoder)
>>>> 第二步:遷移學習
如上圖所示,對於每一對起始任務 s ∈ S 和目標任務 t ∈ T,我們將以s的representation作為輸入來學習t。我們將凍結任務s的encoder 引數,並基於encoder的輸出 (representations) 學習一個淺層神經網路read out function。
如下圖所示,對於t,不同的起始任務的representation會對遷移表現造成不同的影響。更具關聯的s會為t提供更有效的統計資訊,從而僅用1/60的訓練資料(相較於從零學習)就能取得不錯的結果;相反不具備關聯的s則並不能有此表現。因此,我們認為基於s的representation的遷移學習在t任務中的表現可以很好地代表了s之於t的關聯性。
上述遷移代表了任務之間一對一的關聯,我們稱其為一階關聯。如下圖,幾個任務之間可能具有互補性,結合幾個起始任務的representations會對解決目標任務起到幫助。因此,我們也研究了任務之間多對一的關聯,我們稱其問高階關聯。在這種情況下,我們concatenate幾個起始任務的representation當作目標任務的輸入,其餘細節跟上段類似。
因為高階的任務組合數量太大,我們基於一階表現選擇了一部分的組合進行遷移學習。對於小於五階的高階,我們根據一階的表現,將前五的所有組合作為輸入。對於n > 5階,我們選擇結合一階表現前n的起始任務作為輸入。
>>>> 第三步:Ordinal Normalization
這一步的目標為用一個affinity matrix量化任務之間的關聯。雖然從上步習得的遷移網路中我們獲得了許多的loss值 ,但因這些loss值來自於不同的loss 函式,它們的值域有很大差別。
如果我們把這些loss值直接放入一個矩陣(上圖左,縱軸為目標任務、橫軸為起始任務),那麼這個矩陣內的值及其不均勻,並不能有效反應任務之間的關聯。同時,簡單的線性規範化也並不能解決問題,因為任務的loss值和表現並不構成線性關係(0.01的l2 loss並不代表其表現兩倍好於0.02)。
由此,我們採用Ordinal Normalization(基於序數的規範化)來將loss值轉換為關聯度。該方法基於運籌學中的AHP (Analytic Hierarchy Process)。具體細節見論文或知乎,概括來講,affinity matrix中的第 (i, j) 個值為利用第 i 個起始任務遷移後,其網路有多大的機率表現好於用第 j 個網路(我們在下文稱其為 i 對於 j 的勝率)。
至此第一大階段完結,我們通過上述affinity matrix量化了任務之間的關聯性。
>>>> 第四步:BIP最優化
最後一步,我們要基於affinity matrix求得如何最有效地學習一組我們感興趣的任務。我們可以這個問題想象成一個subgraph selection的問題:選擇一些任務從零學習,剩下的任務用少量資料進行遷移學習,具體遷移學習的策略由subgraph中的edge來決定(對一條directed edge,起始點代表我們從零學習的一個任務,終點代表要進行遷移的目標任務)。基於此,我們可以通過解如下最優化問題來得到最優解:
這個最優問題有三個限制條件。
1. 如果我們選擇了一個遷移,那麼遷移的起始任務(可能為高階起始集)和目標任務均要出現在subgraph中
2. 每個目標任務有且僅有一個遷移(我們將從零學習在途中定義為從自己到自己的遷移,即一條自己到自己的edge)
3. 不超過監督預算
這三個限制條件的具體數學表達如下:
至此,我們通過解最優subgraph selection從而獲得了最有效遷移學習策略,如下圖:
實驗結果
Taskonomy專案訓練了3000+個神經網路,總耗時~50000小時的GPU。從零學習消耗120k張圖片,遷移學習為16k張圖片。
我認為現有公眾號對Taskonomy翻譯中最不準確的是對Taskonomy實驗部分的評論。如文章一開頭所說,Taskonomy的目標為用有限的監督預算來最有效地解決一組任務,並不是將state of the art提高百分之幾。本文想宣揚的中心思想是計算機視覺界應注重視覺任務間的關聯性,並讓這些關聯性為我們所用。回到本文的具體用途,Taskonomy的用途有兩個:
1. Taskonomy作為解決一組任務的方法。
2. 用Taskonomy的任務詞典解決一個只有少量資料的新任務。
以下試驗結果分為兩個部分,分別對應以上兩點。
>>>> 一:解決一組任務
如何衡量Taskonomy解決一組任務的有效性?我們設定了兩個評判標準。
1. 遷移獲利 (Gain) : 如果我們不進行遷移學習,我們只能基於少量的資料從零學習。遷移獲利是指遷移學習相較於從零學習的勝率(見Ordinal Normalization部分)。
2. 遷移質量 (Quality) : 用少量資料遷移學習相較於用大量資料從零學習的勝率。
下圖是Taskonomy的遷移獲利 (左) 和質量 (右) 的圖表。兩圖的縱軸為所有目標任務,橫軸為監督預算,勝率在0-1之間。可見,對於一個26個任務的目標集,在只有一半甚至1/3的監督預算時,Taskonomy計算出的監督分配會使整體表現遠遠打敗從零學習(遷移獲利),並近似於(勝率超過40%)大量資料完全監督學習(遷移質量)。
>>>> 二:解決新任務
對於解決新任務,我們可以把我們任務詞典裡的目標任務當作一個新任務,模擬只有少量資料的情況。實驗結果如下,我們可以發現Taskonomy的表現超過了現有的行業pretrained features(包括imagenet fc7)。
總結
在Taskonomy專案裡,我們的目標是著眼於一組任務,並利用任務之間的關聯性減少總體資料使用量。為此,我們量化了視覺任務的關聯性,並基於求得的affinity matrix最優化得到如何分配任務監督資料量。實驗表明,視覺任務之間確實存在很強的關聯性,我們能通過更少的資料很好地解決一組任務。