multi-task深度神經網路如何實現,優化?

Multi-task神經網路理論上可以得到更加具有表現力的特徵,同時也能使各個任務不用單獨訓練網路參數。

以最經典的圖片分類任務為例,傳統的訓練都是針對單個任務,一張圖片對應一個類別標籤,如果現在需要對每張圖片做K個分類任務(任意一個任務都能單獨訓練網路並取得不錯的準確率),可不可以直接在最後一個特徵層後增加幾個softmax層進行多任務分類?如果可以,什麼情況下網路能收斂?此時各個任務的分類準確率與原來相比是否會上升或下降?


multi-task learning(MTL),是個很有意思的課題,在神經網路領域印象中最早的一篇相關文獻是1997年RICH CARUANA的 "Multitask Learning",其中提出了shared hidden layer的思想,大概如下圖。

論文中做了幾個圖像相關的實驗,結果比較複雜,但總體來說MTL可以比STL(single task)產生

20%-30%的提升

後面文章試圖對"why MTL works"進行解釋,相當有意思,"MTL is one way of achieving inductive transfer between tasks"。我的理解是MTL可以對同一個數據產生在不同視角進行觀察,而這些不同的視角可以互相促進,最終"reduce the number of training patterns needed to achieve some fiexed level of performance",或者說" improve the generalization"。

我覺得MTL的一個問題是訓練的效率,我自己做實驗的過程中就真的覺得訓練一個MTL的神經網路真的是nightmare,每個任務有自己的參數,而你無法直觀的知道任務A的參數會對任務B產生怎樣的影響。同時學習率(learning rate)也是一個大問題,理論上我們希望每個task都在同一個epoch內取得最好的結果,但這是很難做到的,需要大量實驗(上面提到的那篇文章中提出了一個想法,即「automates this tuning of learning rates. Instead of using a learning rate for each task that is constant throughout training, it adaptively adjusts each task』s learning rate during training based on how much progress that task has made」

另外安利一下自己做的工作,"Implicit Discourse Relation Classification via Multi-task Neural Networks",試圖在NLP領域拓展MTL,會在AAAI-16上出現,還請大家多多指教。


Multi-Task 指的是不同的但是相關的任務共享網路結構以期達到整體提高的效果。這個過程中,多任務共享的網路結構相當於一個公用的特徵提取器,多任務信息互相補充,讓公用特徵提取的更好,從而提高整體效果。舉個例子,典型的自然語言處理多任務,可以說是把 POS-Tagging,語義分析等任務綜合起來,他們共享底層網路,而又有不同的頂層網路。總體結構會提高每一個任務的效果。

題主的意思在評論的第一條,題主希望整合多個分類任務來完成多任務。但這裡有幾個問題,網路收斂是指什麼?如果只是數值穩定,那和模型沒太多關係,你可以看看是不是你的優化方法和超參數存在問題。如果是收斂到比較好的效果,這個很難說,首先,多任務網路一般很深,你必須充分的預訓練(RBM 或者 自編碼機),否則很容易陷入悲催的局部極小點。至於一般的情況,多任務都會好一些,確實也存在某些特例,沒有提高或者提高甚少。


多任務網路確實會在有限的數據下得到更好的特徵,可能原因有:多個任務相互補充,更容易發現背後的latent factor;更多的任務可能從不同方面引入了更加豐富的監督信息;同一個網路不同的任務同時訓練,可能本身是一種正則。

不同的任務對應不同的損失,不一定都是softmax,識別的,分類的,排序的,甚至同一個任務用幾個損失函數,都是可以的。

至於訓練,一般要把幾個損失寫在一個式子里,但是有的任務收斂快,有的任務收斂慢,有的任務簡單,有的任務複雜,這些目前看來全是調參的功夫。

deepid的網路,我覺得就是一個識別的任務一個排序的任務訓練出來的,可以同時多個任務訓練,也可以先訓練一個,再在另一個上finetune,都可以試試


可行倒是可行啦。說白了就是在某個地方讓網路分叉,連多個softmax沒問題,也可以從某個fc layer開始分叉,我都試過。loss weight估計要調調看。。。。

最後結果如何真的看運氣。

從有限的經驗里來看,多連點數據幫忙train(從頭上開始分個叉)會提高正確率;連不同種類的loss(這個有參考文獻)也會提高點。至於弄40個softmax,好豪放完全木有經驗。。。


為什麼做multi task,因為損失函數是少數幾種在成千上萬參數組成的複雜的方程中加約束的手段!比如我想給灰色圖像上色,直接學習當然可以。但是同時我告訴你這個圖像是草原,是天空,是海洋。網路是不是更容易分辨出該上什麼色?

至於怎麼實現,用圖結構實現的網路應該都比較容易實現吧。個人理解。。


你說的方法(在最後一個隱藏層之上放置多個並列的softmax層)是可以的。

研究收斂性並沒有什麼卵用,最後的性能要看運氣。


試過同時分類性別和年齡,測試集總體檢測率並不會比單獨分類提高,但從實用性上看,這樣模型的性能和rom size會更快和更小,更有優勢。


推薦閱讀:

如何評價陳天奇團隊新開源的TVM?
能不能給神經網路計算一個「學習進度」的指標?
沒有GPU可以做深度學習嗎?
如何看待Google的AutoML 已經學會自己編寫機器學習代碼?
北京深鑒科技基於FPGA平台的DPU架構如何?

TAG:機器學習 | 神經網路 | 深度學習DeepLearning | Caffe深度學習框架 |