DNN中多任务学习概述
為什么大公司搜索推薦都用CTR/CVR Cotrain的框架?
一元@煉丹筆記我們平時做項目/競賽的時候,一般都是單指標(biāo)優(yōu)化的問題,很多時候我們模型的評估指標(biāo)也是單個指標(biāo),例如AUC, GAUC, FP等等。而我們在做此類問題的時候都是盡可能去直接優(yōu)化這些指標(biāo),如果不行就會嘗試著看能不能設(shè)計某種近似的優(yōu)化函數(shù)來對其優(yōu)化,最后再使用一堆模型的集成來達(dá)到我們的目的,一般這么做就可以帶來非常好的效果。
但是很奇怪的是,我進(jìn)入公司做搜索推薦時,和很多大廠搞搜索推薦的朋友交流發(fā)現(xiàn),阿里,頭條,騰訊,百度,京東的朋友很多情況下都是用的CTR/CVR的Cotrain的深度大模型,而不會單獨(dú)去直接優(yōu)化某個指標(biāo)。舉個簡單的例子來說,
有個任務(wù)的優(yōu)化指標(biāo)是提升曝光到購買的預(yù)測準(zhǔn)確性,如果沒有任何參考,我們一般就會直接用購買的標(biāo)簽作為1,未被購買的標(biāo)簽作為0,然后做二分類。但是很多時候大家并不會這么做,大多數(shù)時候都會設(shè)計一個CTR和CVR進(jìn)行Cotrain的模型進(jìn)行模型的訓(xùn)練與預(yù)測,而且最終的效果往往也會比上面的效果要好很多。這個時候,很多朋友和我一樣都會十分好奇,究竟為什么這么做的效果會更好呢?
二分類的做法本身沒有任何問題,但這么做我們會忽略很多可能給我們模型帶來進(jìn)一步提升的信息。這些信息很多來自于相關(guān)的任務(wù),通過共享相關(guān)任務(wù)的表示,我們可以使我們的模型在原始任務(wù)上做的更好,這種方法我們稱之為多任務(wù)學(xué)習(xí)(MTL),除了上面說的搜索推薦領(lǐng)域,多任務(wù)學(xué)習(xí)還經(jīng)常出現(xiàn)在自然語言處理,計算機(jī)視覺等領(lǐng)域。
Rich Caruana把MTL描述為:MTL improves generalization by leveraging the domain-specific information contained in the training signals of related tasks.動機(jī):啟發(fā)式理解
為多任務(wù)學(xué)習(xí)的動機(jī)是什么呢?
- 生物上:我們可以把MTL是由人類學(xué)習(xí)啟發(fā)的,對于學(xué)習(xí)新的任務(wù)時,我們通過學(xué)習(xí)相關(guān)任務(wù)獲得的知識來輔助我們進(jìn)行新任務(wù)的學(xué)習(xí)。
- 教育學(xué)上:我們先學(xué)習(xí)一些任務(wù)然后獲得必要的技能來掌握更多復(fù)雜的技術(shù)。
所以我們可以把多任務(wù)學(xué)習(xí)看作是歸納式遷移。歸納式遷移通過引入一個歸納式的bias來提升我們模型的效果。例如我們最常見的L1正則,可以使我們獲得一個系數(shù)的解。在MTL中, 歸納式的bias是由輔助任務(wù)提供的。
兩種經(jīng)典MTL學(xué)習(xí)方式
到目前為止,Deep Learning中最常見的兩種MTL方法是Hard parameter sharing 和Soft parameter sharing。
Hard parameter sharing
Hard parameter sharing是最常見的,它對所有的任務(wù)都共享某些隱藏層,比如ESMM算法中共享Embedding層等。Hard parameter sharing可以大大降低過擬合的風(fēng)險,實(shí)際上,共享參數(shù)的過擬合風(fēng)險是order N的。其中N是任務(wù)的個數(shù)。這也較易理解,因為我們的任務(wù)越多,我們模型就需要尋找到某一種表示能盡可能捕捉所有任務(wù)的信息, 所以學(xué)習(xí)到的信息會更加通用,從而降低我們模型過擬合的風(fēng)險。
Soft parameter sharing
在Soft parameter sharing中,每個任務(wù)都有自己對應(yīng)的參數(shù),模型參數(shù)之間的距離被用來鼓勵不同任務(wù)之間參數(shù)是相似的,例如,我們可以加入范數(shù)用于L2正則。DNN中的Soft parameter sharing的很多約束都受正則技術(shù)的啟發(fā)。
為什么MTL是有效的呢?
在上面我們給出了MTL的啟發(fā)式解釋,但是還是不夠解釋MTL的有效性。此處我們更加深入的分析潛在的機(jī)制。我們先假設(shè)我們有兩個相關(guān)的任務(wù)A和B,他們共享一個相同的淺層表示F。下面我們再給出幾種解釋。
隱式數(shù)據(jù)擴(kuò)充(Implicit data augmentation)
MTL很高效的增加我們用于模型訓(xùn)練的樣本的大小,因為所有的任務(wù)都是帶有一些噪音的,所以如果我們只在單個任務(wù)上進(jìn)行訓(xùn)練,那么我們的模型會帶有較大的噪音,尤其是當(dāng)數(shù)據(jù)較臟的時候;而我們?nèi)绻窃诙鄠€任務(wù)上進(jìn)行學(xué)習(xí)訓(xùn)練,我們最終學(xué)出來的中間表示將會具有更好的泛化性。
注意力集中(Attention focusing)
如果一個任務(wù)是非常noisy的或者數(shù)據(jù)是高維并且受限的,那么模型對于模型區(qū)分相關(guān)和不相關(guān)的特征將會較為困難。MTL可以利用多個任務(wù)提供的額外的信息找出相關(guān)和不相關(guān)的特征。
竊取(Eavesdropping)
一些特征G對于某些特定任務(wù)是非常易于學(xué)習(xí)的,但是對于另外一個任務(wù)A可能卻很難學(xué),而這種難學(xué)可能是由于特征和任務(wù)A的關(guān)系較為復(fù)雜等原因造成的,通過多任務(wù)學(xué)習(xí),我們可以令任務(wù)B去學(xué)習(xí),而最簡單的方式就是通過hints去做這件事。
偏差(Bias)表示
MTL使模型偏向于其他任務(wù)也喜歡的表示。這也將有助于模型在未來推廣到新的任務(wù),因為假設(shè)空間在足夠多的訓(xùn)練任務(wù)中表現(xiàn)良好,只要它們來自相同的環(huán)境,對于學(xué)習(xí)新任務(wù)也會有很好的效果。
正則
MTL通過引入一個歸納偏差起到正則的作用。因此,它降低了過擬合的風(fēng)險以及模型的Rademacher復(fù)雜性,即其擬合隨機(jī)噪聲的能力。
非神經(jīng)網(wǎng)絡(luò)中的MTL
為了更好地理解MTL在DNN中的任務(wù),我們看看MTL在現(xiàn)有工作中的情況,特殊地,此處主要討論MTL兩種流行性的說法:
- 通過范數(shù)正則化實(shí)現(xiàn)任務(wù)間的稀疏性;
- 對任務(wù)之間的關(guān)系進(jìn)行建模;
文獻(xiàn)中的許多MTL方法處理都是同質(zhì)的(homogenous)設(shè)定:它們假設(shè)所有任務(wù)都與單個輸出相關(guān)聯(lián),例如,多個類的MNIST數(shù)據(jù)集通常被轉(zhuǎn)換為10個二進(jìn)制分類任務(wù)。最近的方法處理更現(xiàn)實(shí)的、異構(gòu)的環(huán)境,其中每個任務(wù)對應(yīng)于一組唯一的輸出。
Block稀疏正則化(Block-sparse regularization)
許多模型關(guān)于參數(shù)做了一些稀疏的假設(shè),很多工作假設(shè)所有的模型共享一個小的特征集合,也就是說只有部分特征是被所有任務(wù)使用,所以有些工作將L1范數(shù)用于MTL設(shè)定里面,當(dāng)然也可以施加其他的約束。
學(xué)習(xí)任務(wù)之間的關(guān)系
在多任務(wù)學(xué)習(xí)(MTL)中,因為共享的特征層是在多個任務(wù)中共享的,所以這些特征需要盡可能在多個任務(wù)中都有效。之前有很多多任務(wù)學(xué)習(xí)都假設(shè)這些任務(wù)之間是非常相關(guān)的。但是,我們并不能保證每個任務(wù)都強(qiáng)相關(guān),而這種情況下, 在無關(guān)的任務(wù)中共享信息可能會對我們模型的性能帶來不必要的影響,這也稱之為negative transfer。
所以我們需要利用先驗知識來輔助我們判斷任務(wù)之間是否相關(guān)。這個時候最簡單的可以想到的就是對各個任務(wù)進(jìn)行聚類,而聚類的任務(wù)約束最簡單的就是類間與類內(nèi)距離的計算等,有興趣的可以閱讀相關(guān)的論文。
模型中應(yīng)該共享什么?
在上面的分析中,我們從啟發(fā)式的角度(動機(jī)),機(jī)器學(xué)習(xí)的角度(正則)以及一些經(jīng)驗中分析來了模型共享的問題。那么我們改在模型中共享什么呢?
在之前Deep Learning的MTL工作中,我們都是預(yù)先定義哪些層用作共享,這么做經(jīng)常會導(dǎo)致模型沒法泛化到其他的任務(wù)中。Hard parameter共享是1996年Caruana提出的,一種沿用了20多年,這種方法確實(shí)在很多任務(wù)中取得了非常好的效果,但是如果任務(wù)之間的關(guān)系不強(qiáng),效果往往不盡如人意。因此,最近的方法著眼于學(xué)習(xí)共享什么,并且通常優(yōu)于硬參數(shù)共享。此外,賦予我們的模型學(xué)習(xí)任務(wù)層次結(jié)構(gòu)的能力是有幫助的,特別是在需要不同粒度的情況下。如何學(xué)習(xí)任務(wù)之間的交互也是非常有價值的。
輔助任務(wù)
除了共享層的設(shè)計,MTL還需要設(shè)計Cotrain使用的損失函數(shù)。MTL如果是在本身需求就是多任務(wù)的問題中沒有任何問題,但如果我們的原先的任務(wù)就是單任務(wù)的,那么我們?nèi)绾螌ふ乙粋€合適的輔助任務(wù)并利用多任務(wù)學(xué)習(xí)來從中獲益呢?
一些案例
下面的案例大多是成功的,所以可以從中窺探一些輔助任務(wù)設(shè)計的方式技巧。
1. Related task
將相關(guān)任務(wù)作為MTL的輔助任務(wù)。Caruana(1998)將預(yù)測不同道路特征的任務(wù)作為輔助任務(wù),用于預(yù)測自動駕駛汽車的轉(zhuǎn)向方向;使用頭部姿勢估計和面部屬性推斷作為面部路標(biāo)檢測的輔助任務(wù);聯(lián)合學(xué)習(xí)查詢分類和web搜索;Girshick(2015)聯(lián)合預(yù)測圖像中對象的類別和坐標(biāo)等等都是經(jīng)典的案例。
2. Hints
MTL可以用來學(xué)習(xí)原始任務(wù)并不能非常好學(xué)習(xí)的特征,一種有效的方案就是使用hints,也就是說,使用輔助任務(wù)來對該特征進(jìn)行預(yù)測。這種策略的成功案例有:在NLP中,預(yù)測一個輸入的句子是否包含有正或者負(fù)的語義單詞來作為語義分析任務(wù)的輔助任務(wù)。
3. Representation learning
MTL中輔助任務(wù)的目標(biāo)是使模型能夠?qū)W習(xí)對主任務(wù)共享或有幫助的表示。到目前為止討論的所有輔助任務(wù)都是隱式的:它們與主任務(wù)密切相關(guān),學(xué)習(xí)它們可能會使模型學(xué)習(xí)有益的表示。更明確的建模是可能的,例如,通過使用已知的任務(wù),使模型能夠?qū)W習(xí)可遷移的表示。Cheng等人采用的語言建模目標(biāo)。
4. Focusing Attention
同樣,輔助任務(wù)可以用于將注意力集中在網(wǎng)絡(luò)通常忽略的圖像的部分上。例如,對于學(xué)習(xí)駕駛(Caruana,1998),單個任務(wù)模型通常會忽略車道標(biāo)記,因為這些標(biāo)記僅構(gòu)成圖像的一小部分,并不總是存在的。然而,作為輔助任務(wù)的車道標(biāo)線預(yù)測,迫使模型學(xué)習(xí)表示它們;然后,該知識也可以用于主要任務(wù)。類似地,對于人臉識別,人們可能會學(xué)習(xí)預(yù)測面部標(biāo)志點(diǎn)的位置作為輔助任務(wù),因為這些通常是與眾不同的。
5. 使用未來預(yù)測現(xiàn)在
在許多情況下,有些功能只有在預(yù)測完成后才可用。例如,對于自動駕駛汽車,一旦汽車經(jīng)過障礙物和車道標(biāo)線,就可以進(jìn)行更精確的測量。Caruana(1998)也給出了肺炎預(yù)測的例子,之后將獲得更多的醫(yī)學(xué)試驗結(jié)果。對于這些示例,附加數(shù)據(jù)不能用作特性,因為它在運(yùn)行時不能作為輸入使用。然而,它也可以作為輔助任務(wù),在訓(xùn)練期間向模型傳授附加知識。
6. Adversarial
通常,相關(guān)任務(wù)的標(biāo)記數(shù)據(jù)不可用。然而,在某些情況下,我們可以獲得一個與我們想要實(shí)現(xiàn)的相反的任務(wù)。這些數(shù)據(jù)可以利用對抗性損失,它不尋求最小化,而是最大化使用梯度反轉(zhuǎn)層的訓(xùn)練誤差。這種設(shè)置最近在域適應(yīng)(domain adaptation)方面取得了成功。在這種情況下,對抗性任務(wù)是預(yù)測輸入的域;通過反轉(zhuǎn)對抗性任務(wù)的梯度,對抗性任務(wù)的損失最大化,這對主任務(wù)是有利的,因為它迫使模型學(xué)習(xí)無法區(qū)分域的表示。
什么輔助任務(wù)是有幫助的?
在實(shí)踐中,我們很難判定什么輔助任務(wù)可以帶來幫助。尋找一個合理的有幫助的輔助任務(wù)往往需要基于假設(shè):我們的輔助任務(wù)和我們的主要任務(wù)在某種程度上是相關(guān)的,它對于我們對主要任務(wù)的預(yù)測是有幫助的。
可是兩個任務(wù)怎么算是相似的或者相關(guān)的呢?到目前為止還沒有一個十分明確的定義。
- Caruana(1998)將兩個任務(wù)定義為相似,如果它們使用相同的特征來做出決策。
- Baxter(2000)僅從理論上論證了相關(guān)任務(wù)共享一個共同的最優(yōu)假設(shè)類,即具有相同的歸納偏差。
- Xue等人(2007)指出,如果兩個任務(wù)的分類邊界,即參數(shù)向量接近,則兩個任務(wù)是相似的。
- ...
盡管在理解任務(wù)相關(guān)性方面取得了早期的理論進(jìn)展,但在這一目標(biāo)方面并沒有取得太大進(jìn)展。任務(wù)相似性不是二分類問題,而是存在于一個頻譜上。相似的任務(wù)越多,對MTL的幫助就越大,而相似性越小的任務(wù)對MTL的幫助就越小。
允許我們的模型學(xué)習(xí)每個任務(wù)共享什么可以讓我們暫時避免理論的缺乏,甚至可以更好地利用相關(guān)性較低的任務(wù)。然而,我們還需要在多任務(wù)學(xué)習(xí)方面發(fā)展一個更原則性的任務(wù)相似性概念,以便知道我們應(yīng)該選擇哪些任務(wù)。
一些研究也發(fā)現(xiàn),對于NLP中的序列標(biāo)記問題,具有緊湊和均勻的標(biāo)簽分布的輔助任務(wù)更加好,這一點(diǎn)我們已在實(shí)驗中證實(shí)。此外,研究發(fā)現(xiàn),對于那些在輔助任務(wù)不穩(wěn)定的情況下快速穩(wěn)定下來的主要任務(wù),收益更大。
然而,到目前為止,這些實(shí)驗的范圍是有限的,而最近的研究結(jié)果只是為深入理解神經(jīng)網(wǎng)絡(luò)中的多任務(wù)學(xué)習(xí)提供了一條線索。
小結(jié)
因為多任務(wù)學(xué)習(xí)(MTL)目前越加流行, 那么為什么多任務(wù)學(xué)習(xí)是有效的?本文從啟發(fā)式的角度以及5種不同的角度對其進(jìn)行來分析。而MTL在Deep的框架種核心需要考慮兩點(diǎn),一個是共享層的設(shè)計,一個是輔助loss的設(shè)計,而上面也給出了6種不同的成功案例,都非常值得建議。
雖然我們說了這么多,但其實(shí)我們對于任務(wù)的理解,包括相似性,關(guān)系,層次以及MTL的益處仍然是受限的,更多的是基于一種啟發(fā)式的理解,我們還需要更為深刻的理解。
參考文獻(xiàn)
總結(jié)
以上是生活随笔為你收集整理的DNN中多任务学习概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArcFace 同款商品识别的克星
- 下一篇: 推荐搜索系统论文干货集锦(持续更新)