本篇文章將介紹在機器學習中效果比較好的一種模式,
多任務學習(Multi task Learning,MTL)。已經有一篇機器之心翻譯的很好的博文介紹多任務學習了: 共享相關任務表徵,一文讀懂深度神經網絡多任務學習,寫的非常詳細,但是我在看的時候會覺得略有點晦澀。所以我準備寫的這篇呢,想用大白話介紹一下多任務學習解決的問題是什麼,具體是怎麼做的,有哪些優勢。並且這篇博文中不準備寫相關paper的總結和簡介。接下來從以下幾個方面介紹MTL:
- 定義及與其他機器學習任務的區別(單任務、multi label多標籤、multi class多類別)
- 什麼是相關任務
- 共享表示
- 優勢
- 應用方向
1、定義及與其他機器學習任務的區別
1.1 單任務學習與多任務學習
既然要介紹多任務學習,那麼就必須要提到與之對應的單任務學習。
我們平時接觸最多的那些機器學習算法基本都是單任務學習,即專注於一個學習目標。
如上圖所示,有4個獨立的神經網絡,每個網絡針對同樣的輸入只有一個輸出函數(優化目標),這四個網絡之間沒有任何連接,所以每個網絡之間的表示層是獨立的,彼此訓練的隱層對其他網絡的訓練沒有任何影響,這種方式就叫做單任務學習(Single Task Learning,STL)
而多任務學習,顧名思義,學習目標有多個。如上圖所示,把四個任務放在一起進行學習,他們共享了同一個模型空間,或者換句話說,他們用了
共享表示層(shared representation)。在訓練過程中,四個任務全都會對這個共享模型造成影響。1.2 multi task多任務&multi label多標籤 & multi class多類別
這三個名詞裡都帶有multi,於是很多人會把他們搞混。下面解釋一下這三種之間的區別。
multi class:多分類問題,可選類別有多個但是結果只能分到一類中,比如一個人他是孩子、少年、中年人還是老人。
multi label:打多個標籤,或者說進行多種分類,還是拿人舉例啊,一個人,他可以被打上標籤{青年,男性,畫家}這些標籤。如果還有一個人他也是青年男性,但不是畫家,那就只能打上標籤{青年,男性}。
它和多任務學習不一樣,它的目標不是學習出一個共同的表示,而是多標籤。
multi task:訓練模型的時候目標是多個相關目標共享一個表徵,比如人的特徵學習,一個人,既可以從年輕人和老人這方面分類,也可以從男人女人這方面分類,這兩個目標聯合起來學習人的特徵模型,可以學習出來一個共同特徵,適用於這兩種分類結果,這就是多任務學習。
2、 什麼是相關任務
multi task同時學習多個相關任務,並且具有相當的優勢。同時,我們在做多任務學習時,有時關注的點在某個主要任務上,其他的共同學習的任務可能更多的只是起到幫助作用,這些起到幫助作用的任務叫做輔助任務 。輔助任務與主任務越相關,那麼起到的效果可能會越好。
那麼什麼是相關任務?比較大白話的解釋有:
(1)如果兩個任務是處理輸入的相同函數,但是在任務信號中加入獨立的噪聲,很明顯這兩個任務是相關的。
(2)如果兩個任務用於預測同個個體的屬性的不同方面,這些任務比預測不同個體的屬性的不同方面更相關。
(3)兩個任務共同訓練時能夠相互幫助並不意味著它們是相關的:有時通過在後向傳播網絡的一個額外輸出加入噪聲可以提高泛化能力,但是這個噪聲任務與其它任務不相關
那麼比較學術嚴謹一些的定義有:
(1)使用相同的特徵做判斷的任務
(2)共享相同的最優假設空間,即擁有相同的歸納偏置(having the same inductive bias)
(3)F-相關(F-related): 兩個任務的數據可以從一組分佈變換 F 得到的固定概率分佈生成
(4)任務的分類邊界接近,也就是參數向量(parameter vectors)接近
任務是否相似不是非0即1的。越相似的任務,收益越大。但即使相關性不佳的任務也會有所收益。不過任務之間的相似性對我們在選擇輔助任務 上還是有絕對的幫助的。
3. 共享表示 (shared representation)
共享表示的目的是為了提高泛化(improving generalization),一般來說有兩種
1)、基於參數的共享 (Parameter based):比如基於神經網絡的MTL,高斯處理過程。
2)、基於約束的共享 (regularization based):比如均值,聯合特徵(Joint feature)學習(創建一個常見的特徵集合)。
神經網絡中MTL的共享表示有兩種方式
3.1 hard參數共享
它是神經網絡MTL中最常見的一種方式,即在所有任務之間共享隱藏層,同時保留幾個特定任務的輸出層。這種方式很大程度上降低了過擬合的風險,因為同時學習的工作越多,模型找到一個含有所有任務的表徵就越困難,而過擬合某特定原始任務的可能性就越小。
3.2 soft參數共享
每個任務有自己的參數和模型,最後通過對不同任務的參數之間的差異加約束,表達相似性。比如可以使用L2進行正則, 跡範數(trace norm)等。
4、優勢
為什麼多個相關的任務放在一起學習就可以提升學習效果?關於這個問題,有很多解釋。這裡列出其中一部分。
(1)、多個任務一起學習時,有相關部分也有不那麼相關的地方,在學習一個任務時,與它不相關的部分就相當於是加入一些噪聲,而加入噪聲可以提升模型的泛化能力。
(2)、單任務學習時容易陷入局部最優,而多任務學習中不同任務的局部最優解處於不同的位置,通過相互作用,可以逃離局部最優 。
(3)、增加任務會影響網絡參數的更新,比如增加額外的任務增加了隱層的有效的學習率,具體取決於每個任務輸出的錯誤反饋權重。可能較大的學習速率提升了學習效果
(4)某些特徵可能在主任務不好學習(比如以很複雜的方式與特徵進行交互,或被其他因素抑制),但在輔助任務上這個特徵好學習到。可以通過輔助任務來學習這些特徵,方法比如hints(預測重要特徵)
(5)通過學習足夠大的假設空間,在未來某些新任務中可以有較好的表現(解決冷啟動),前提是這些任務都是同源的。
(6)多個任務在淺層共享表示,引入歸納偏置作為正則化項。因此,它降低了過擬合的風險以及模型的 Rademacher 複雜度(即適合隨機噪聲的能力)
5、應用場景
多任務學習在傳統機器學習和深度學習方向都有很多應用,這裡就不一一舉例了。
深度學習網絡是具有多個隱層的神經網絡,在深度學習網絡中應用多任務學習是一種很自然的想法。機器視覺領域有廣泛的多任務學習應用,主要方式包括:
1)多個任務並行輸出,同時做分類和迴歸或使用不同的損失函數;
2)多個任務像流水線一樣,輔助任務附加在主任務後面等。
參考博文:
http://sebastianruder.com/multi-task/index.html
https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650728311&idx=1&sn=62b2dcc82657d1ce3bf91fd6a1197699&chksm=871b2309b06caa1fa314e3807d84cdb32eb34419341ba26e037dabe90909ca4a9f480b6eeac2&scene=21&token=630103414&lang=zh_CN#wechat_redirect
https://blog.csdn.net/zaf0516/article/details/90380732
https://blog.csdn.net/lqfarmer/article/details/73322878
https://blog.csdn.net/laolu1573/article/details/78205180#2