梯度手術(shù)-多任務(wù)學(xué)習(xí)優(yōu)化方法[NeurIPS 2020]

本文首發(fā)于公眾號(hào)“我AI”,歡迎關(guān)注,共同進(jìn)步。

分享一篇NeurIPS 2020上關(guān)于多任務(wù)學(xué)習(xí)的論文。

在之前的一篇文章《“一心多用”的方法——多任務(wù)學(xué)習(xí)》中,對(duì)多任務(wù)學(xué)習(xí)(Multi-task Learning,MTL)的背景、應(yīng)用、挑戰(zhàn)做了一些簡(jiǎn)單的介紹。在文章末尾,還提了我個(gè)人認(rèn)為的待研究的方向:

針對(duì)這些挑戰(zhàn),在多任務(wù)學(xué)習(xí)的領(lǐng)域中,可以從以下幾個(gè)研究方向考慮能做一些工作:

????1. 多任務(wù)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)

????2. 多任務(wù)損失函數(shù)設(shè)計(jì)

????3. 輔助學(xué)習(xí)(任務(wù)的篩選方法)

????4. 多任務(wù)網(wǎng)絡(luò)的訓(xùn)練方法

今天分享的這一篇論文,便是從第4點(diǎn)“多任務(wù)網(wǎng)絡(luò)的訓(xùn)練方法”著手,提出名為PCGrad的方法,在訓(xùn)練多任務(wù)模型時(shí),通過(guò)調(diào)整梯度,盡量降低任務(wù)之間的干擾。并且,這一方法與模型無(wú)關(guān):它可以與其他多任務(wù)網(wǎng)絡(luò)結(jié)構(gòu)相結(jié)合,進(jìn)一步提升多任務(wù)學(xué)習(xí)的性能。

圖源[1]

首先需要明確的是,在多任務(wù)網(wǎng)絡(luò)的訓(xùn)練過(guò)程中,需要解決一些什么問(wèn)題。

假設(shè)有下式中的兩個(gè)優(yōu)化任務(wù),對(duì)應(yīng)損失函數(shù)分別為L(zhǎng)1和L2,θ對(duì)應(yīng)模型的參數(shù)(在這個(gè)例子中做了簡(jiǎn)化,只考慮兩個(gè)參數(shù)θ1和θ2)。對(duì)多任務(wù)學(xué)習(xí)而言,優(yōu)化目標(biāo)是學(xué)習(xí)模型的參數(shù)θ,以最小化L(L1與L2的和)。

式源[1]

定義了這一簡(jiǎn)化的問(wèn)題后,下圖(a)可視化了這一多任務(wù)學(xué)習(xí)問(wèn)題的目標(biāo)空間(即L和(θ1, θ2)的關(guān)系),圖(b)和圖(c)分別為任務(wù)1和任務(wù)2的目標(biāo)空間,即為圖(a)的拆解版。其中,顏色越深的位置表示損失函數(shù)L越小。

圖源[1]

對(duì)于一個(gè)任務(wù)1+任務(wù)2的多任務(wù)問(wèn)題,其目標(biāo)空間為下圖(d):最深顏色的一條線為兩個(gè)任務(wù)共有的目標(biāo)最優(yōu)(損失最小)區(qū)域。

圖源[1]?(d)中箭頭朝向表示梯度的方向,箭頭長(zhǎng)度表示梯度的大小

為了解決這一多任務(wù)的優(yōu)化問(wèn)題,一個(gè)naive的做法是:使用經(jīng)典的優(yōu)化器,分別對(duì)兩個(gè)任務(wù)的損失函數(shù)進(jìn)行梯度計(jì)算得到g1和g2,然后進(jìn)行向量加法得到最終的梯度g (參見(jiàn)下面的Definition 4)。

這一做法存在顯著的問(wèn)題,在上圖(d)中兩個(gè)箭頭的起點(diǎn)處,進(jìn)行梯度計(jì)算,得到任務(wù)1梯度g1的紅色向量(在該點(diǎn)處任務(wù)1的目標(biāo)空間比較陡峭(參見(jiàn)上圖b),故梯度大)和任務(wù)2的梯度g2的藍(lán)色向量(在該點(diǎn)處任務(wù)2的目標(biāo)空間比較平緩(參見(jiàn)上圖c),故梯度?。?。這兩個(gè)任務(wù)的梯度向量:

1. 數(shù)值相差巨大;

2. 方向南轅北轍。

因此,簡(jiǎn)單的對(duì)梯度進(jìn)行向量加法雖然看似能夠整體上優(yōu)化損失函數(shù),但并不能達(dá)到多任務(wù)學(xué)習(xí)的優(yōu)勢(shì),因?yàn)樯鲜鰡?wèn)題可能帶來(lái):

1. 減速訓(xùn)練過(guò)程;

2. 帶來(lái)性能下降,無(wú)法達(dá)到最優(yōu)點(diǎn)。

具體來(lái)說(shuō),可以將問(wèn)題分解為:

1. 梯度沖突:不同任務(wù)梯度之間但更新方向不同,定義上來(lái)說(shuō),當(dāng)cosθ<0時(shí),兩個(gè)梯度存在沖突;

圖源[1]

2. 存在主導(dǎo)梯度:兩個(gè)任務(wù)的梯度,雖然方向并不沖突,但其中一個(gè)梯度數(shù)值上遠(yuǎn)大于另一個(gè)梯度,則較大梯度會(huì)形成主導(dǎo)從而影響較小梯度。文中定義一個(gè)梯度幅值相似度(gradient magnitude similarity),用于衡量?jī)蓚€(gè)梯度的大小差異;

3. 高曲率:在高曲率的位置,主導(dǎo)任務(wù)的性能提升會(huì)被高估,其性能下降會(huì)被低估。

已有的一些改進(jìn)方法,不能很好的解決上述的三個(gè)問(wèn)題,例如:對(duì)不同任務(wù)的損失函數(shù)增加權(quán)重(通過(guò)經(jīng)驗(yàn)、或者通過(guò)Uncertainty的計(jì)算[2]),但這只改變了梯度的數(shù)值差異。

這篇論文的作者提出的PCGrad (projecting conflicting gradients)方法,同時(shí)處理數(shù)值和方向的差異。下圖(e)中,通過(guò)PCGrad與Adam的結(jié)合,能夠沿著空間中正確的優(yōu)化方向找到最小損失的點(diǎn)。

圖源[1]

簡(jiǎn)單來(lái)說(shuō),就是要處理沖突的梯度(下圖a),將第i個(gè)任務(wù)的梯度投影到與第j個(gè)任務(wù)正交的方向(下圖b),或者相反(下圖c)。下圖d表示的是對(duì)不沖突的梯度,不做處理。

圖源[1]

算法流程如下

1. 對(duì)一個(gè)batch中對(duì)每個(gè)任務(wù)Ti,隨機(jī)采樣一個(gè)其他任務(wù)Tj,計(jì)算Ti和Tj對(duì)應(yīng)梯度向量之間的余弦相似度;

2. 如果余弦相似度為正,表示梯度無(wú)沖突,不做梯度修改。若為負(fù),表示是相互沖突的梯度,根據(jù)下式計(jì)算投影;

3. 重復(fù)上述步驟,直到這一batch中的任務(wù)遍歷完成;

4. 最終的梯度方向?yàn)椋队昂蟮奶荻认蛄恐汀?/p>

圖源[1]?PCGrad的梯度更新流程

論文還提供了兩個(gè)定理及其詳細(xì)證明,論述了PCGrad方法的收斂性(定理一)以及其相較于標(biāo)準(zhǔn)梯度下降方法能達(dá)到更低誤差(定理二):

這里不講定理和證明部分,分享一些我個(gè)人認(rèn)為有意思的前提條件

1. 任務(wù)的損失函數(shù)是凸的且可微的,凸(convexity)對(duì)于神經(jīng)網(wǎng)絡(luò)方法來(lái)說(shuō)雖然不滿足,但是很多用于神經(jīng)網(wǎng)絡(luò)的優(yōu)化方法也是基于凸的假設(shè);

2. 定理2的(a)表示,兩個(gè)梯度的方向沖突不能太小,且兩個(gè)梯度的幅值差異要足夠大,否則可能影響收斂效果;

3. 定理2的(b)表示,多任務(wù)的曲率H有下界,且曲率需要足夠大;

4. 定理2的(c)表示,學(xué)習(xí)的步長(zhǎng)/學(xué)習(xí)率要足夠大,并且這個(gè)值與曲率有關(guān),曲率越大,步長(zhǎng)也要越大。因此,在使用PCGrad方法時(shí),需要設(shè)置較大的學(xué)習(xí)率。

雖然并不是說(shuō)不滿足上述前提條件就一定不work了,但在一定程度上對(duì)于算法的應(yīng)用效果能夠給予分析的參考。

最后,來(lái)看一看實(shí)際的實(shí)驗(yàn)效果。作者在多個(gè)計(jì)算機(jī)視覺(jué)領(lǐng)域監(jiān)督學(xué)習(xí)數(shù)據(jù)集和機(jī)器人領(lǐng)域強(qiáng)化學(xué)習(xí)數(shù)據(jù)集上做了實(shí)驗(yàn),均取得了好的效果。具體可以查閱原文,這里摘錄一個(gè)在CityScapes和NYUv2數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果:通過(guò)和其他多任務(wù)學(xué)習(xí)的方法(例如Cross-Stitch,?MTAN,Uncertainty)進(jìn)行結(jié)合,能夠取得更好的性能。

表源[1]
表源[1]

總結(jié)一下

1. 代碼開(kāi)源在[3]中;

2. 要說(shuō)這一方法有什么明顯的缺點(diǎn)或者代價(jià)呢,那就是會(huì)帶來(lái)額外的訓(xùn)練時(shí)間和顯存占用

3. 但這一方法總體思路清晰(提出了優(yōu)化中的三個(gè)問(wèn)題并針對(duì)性解決),實(shí)現(xiàn)簡(jiǎn)單,并且模型無(wú)關(guān),能夠與其他多任務(wù)方法共同使用;

4. 類(lèi)似的思路,或許也可以用于其他領(lǐng)域,比如說(shuō)持續(xù)學(xué)習(xí)、或者多模態(tài)學(xué)習(xí)中。

參考資料:

[1]?Tianhe Yu, Saurabh Kumar, Abhishek Gupta, Sergey Levine, Karol Hausman, and Chelsea Finn. Gradient surgeryfor multi-task learning, 2020.

[2]?Alex Kendall, Yarin Gal, and Roberto Cipolla. Multi-task learning using uncertainty to weigh losses for scenegeometry and semantics, 2018.Al

[3]?https://github.com/tianheyu927/PCGrad

- END -

新朋友們可以看看我過(guò)往的相關(guān)文章?

【相關(guān)推薦閱讀】

“一心多用”的方法——多任務(wù)學(xué)習(xí)

多模態(tài):自動(dòng)駕駛中的多模態(tài)學(xué)習(xí)

模式識(shí)別學(xué)科發(fā)展報(bào)告丨前言

深度學(xué)習(xí)在計(jì)算機(jī)視覺(jué)中應(yīng)用的三大問(wèn)題

從2018到2020的AI發(fā)展預(yù)測(cè)

本文首發(fā)于公眾號(hào)“我AI”,歡迎關(guān)注,共同進(jìn)步。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容