
作者 | 志陽、文靜
來源 | 阿裡技術公衆号
一 背景
1 多任務多目标學習
多任務(Multi Task Learning)是深度學習時代非常普遍的模組化方式。在NLP、CV、CTR諸多領域有非常廣泛的應用。
多目标(Multi Objective Learning)是MTL中的一種。在業務場景中,經常面臨既要又要的多目标問題。而多個目标常常會有沖突。如何使多個目标同時得到提升,是多任務多目标在真實業務場景中存在的意義。如下圖,視訊推薦任務,既要點選率又要完播率;電商排序,既要點選率又要轉化率。如今,CTR預估領域采用多任務多目标是非常主流的模組化方式。值得我們深入研究。
首先來厘清一些名詞概念。如下圖,解釋了Multi-Task 與 Multi-Label等相關概念的關系。
Multi-Task learning:多任務學習模組化多個任務之間的關聯關系,任務輸入可以是不同的feature/sample,如BERT的MLM預訓練任務與NSP任務,兩個任務先後訓練,輸入是不同的feature和sample。這是Multi-Input & Multi-Output (MIMO) 的類型,常用的訓練模式是pre-train+finetuning 和 多任務co-train交替訓練。
Multi-Label learning:還有一種是Single-Input & Multi-Output (SIMO) ,就是非常常見的Multi-Label Learning,模組化相同feature、相同Sample上多個label之間的關系。也常稱之為多目标Multi-Objective。如CV領域中,對同一image,可以同時對semantic classification,depth regression,instance regression等諸多經典任務目标共同學習。CTR領域,對同一輸入樣本同時預估點選率、轉化率多個目标。常用的訓練模式是Joint-train的模式,形式化地表達如下:
其中\theta^{sh}是多任務共享參數,\theta^{t}是任務t 的獨享參數,Joint-train的總Loss是各個子任務對應Loss的帶權求和。本文後面稱的多任務多目标學習,預設是這種模組化方式。
2 優勢&挑戰
多目标共同學習的結果,有4種狀态,如下示意圖。“well done”: 最好的狀态,所有share任務實作共同提升。“還不錯”:其次的狀态,所有任務不降低,至少一個任務提升。如果是主任務 + 輔助任務的搭配,能夠實作犧牲輔助任務達到主任務提升的效果,也是well done。“不理想”:跷跷闆現象,任務有漲有跌。“無法接受”:負遷移現象,所有任務都不如從前。
多任務多目标學習的優勢:有潛力做到“還不錯”和“well done”。
多任務多目标學習的挑戰:
(1)如何把“無法接受”和“不理想”兩個狀态往“還不錯”和“well done”遷移;
(2)最大限度激發“還不錯”和“well done”的效果;
共享參數!1 + 1 > 2 【還不錯/well done】
共享參數在效果 + 性能層面帶來很多優勢。效果層面,多任務的優勢通過隐式資料增強達到。多個相關任務共同學習,參數共享,互相借鑒,緩解某些任務的樣本稀疏帶來的過拟合現象,獲得更好的泛化性能。在性能層面,多任務較N個單任務網絡參數量總和顯著降低,在實時預測場景下MTL模型效率也更高。
共享參數! 1 + 1 < 1 【無法接受/不理想】
多任務多目标為了實作 1+1>2,在任務參數空間上設定了假設,例如:任務參數應該彼此靠近,w.r.t.一些距離度量,共享一個共同的機率先驗,或駐留在一個低維子空間或流形。當所有任務都是相關的時候,這些假設可以很好地工作,但是如果在不相關的任務之間發生資訊共享,則大機率導緻效果下降,出現跷跷闆、負遷移現象。
是以,引出了領域研究的核心問題:如何能夠利用好“共享參數”,讓多個任務和諧共存、相輔相成、相得益彰?
二 多任務多目标方案概覽
研究上述核心問題,有兩個方向,一個是Architectures,一個是Optimization Strategy,如下圖所示。
Architectures從網絡結構設計方向思考哪些參數共享,在什麼位置,如何共享。
Optimization Strategy多目标優化政策從loss、Gradient的視角去思考任務與任務之間的關系。平衡loss體量(Magnitude),調節loss更新速度(velocity),優化Gradient更新方向(direction)。在微觀層面緩解梯度沖突,參數撕扯,在宏觀層面達到多任務的balance。
1 多任務多目标網絡結構設計
Architectures從網絡結構設計方向思考哪些參數共享,在什麼位置,如何共享。合理的共享網絡結構設計對于效果提升有舉足輕重的作用。至今,多任務的研究焦點依然在于如何結合任務來設計共享結構。本文主要介紹CTR領域的多任務結構。如上圖,較為常見的結構有Share-Bottom【hard】,無需贅述。2018年google提出MMOE,将hard的參數共享變成多個expert,通過門控來控制不同loss對每個expert的影響,2019年google提出SNR,借助簡單的 NAS(Neural Architecture Search),對 Sub-Network 進行組合,為不同目标學習各自的網絡結構。2020年tencent提出PLE,在MMOE的基礎上增加了各任務獨有的Expert。
如下圖,是Share Bottom、MMoE、PLE的網絡結構和簡單說明,細節不展開。
- Shared Bottom->MMoE:MMoE将shared bottom分解成多個Expert,然後通過門控網絡自動控制不同任務對這些Expert的梯度貢獻。
- MMoE->PLE:PLE在MMoE的基礎上又為每個任務增加了自有的Expert,僅由本任務對其梯度更新。
演進是朝着一個更加靈活的參數共享方向,思考為什麼這樣的演進可以帶來效果的提升?我們常看到效果提升對解釋是:不同的expert負責學習不同的資訊内容,然後通過gate來組合這些資訊,通過不同任務gate的softmax的熱力分布差異,來表明expert對不同的目标各司其責,進而提升了效果。如果将視角從宏觀切換到微觀,從“更加靈活的參數共享”這個角度來看,MMoE對參數使用了“化整為零”的政策,PLE則是“化整為零+各有所得”。
如下圖,更加形象地了解,在Share Bottom的結構上,整個共享參數矩陣如同品質較大的物體,在梯度更新的環節,兩個loss反向計算的梯度向量分别是g1和g2,是這個物體收到的兩個不同方向不同大小的力,這兩個力同時來挪動這個物體的位置,如果在多次更新中兩個力大機率方向一緻,那麼就能輕松達到和諧共存、相輔相成。反之,多個力可能出現彼此消耗、互相抵消,那麼任務效果就會大打折扣。在這樣的背景下,使得“如何選取設計多個任務,考慮任務之間相關性”成為Share-Bottom MTL能夠取得成功的關鍵因素。
MMoE做了一個聰明的事情,“化整為零”。把一個共享參數矩陣化成多個結合gate的共享Expert,這樣不同的loss在存在互相沖突的時候,在不同的expert上,不同loss可以有相對強弱的表達,那麼出現互相抵消的情況就可能減少,呈現出部分experts受某task影響較大,部分experts受其他task主導,這種“各有所得”的狀态。但是MMoE并不保證“各有所得”,PLE增加了spcific experts,保障“各有所得”,能夠在“共享參數”的撕扯争奪上,有了最基礎的保障。
在我們自己的資料集上,做了一個簡單對比。3個預估目标,CTR、CVR、R3。Share-Bottom出現了翹翹闆現象,但是PLE能夠實作多目标的共赢現象,下表展示了模對于single task的相對提升。
未來,CTR領域多任務多目标的更新,我認為依然會朝着“更加靈活的參數共享”來提升效果。“化整為零”的方式更加靈活(例如,根據任務任務之間的相似性來動态決定共享參數的多和少,相似的任務多share一些,不太相似的任務少share一些),“個有所得”的途徑更加多樣(例如,從expert視角來動态确定目前時刻受哪個task主導)。
2 多任務多目标優化政策
Optimization Strategy多目标優化政策從loss、Gradient的視角去思考任務與任務之間的關系。在微觀層面緩解梯度沖突,參數撕扯,在宏觀層面達到多任務的balance。如下表列出了目前常見的方法【後文會詳細介紹其中幾種方法的原理和推導】。
我們對相關文獻的調研總結後,認為多任務多目标優化政策主要focus在三個問題:
Magnitude(Loss量級):Loss值有大有小,出現取值大的Loss主導的現象,怎麼辦?
Velocity (Loss學習速度): 任務有難有易,Loss學習速度有快有慢,怎麼辦?
不同任務因為樣本的稀疏性、學習的難度,在學習過程中,存在學習速度不一樣的情況。不加以調整,可能會出現某個任務接近收斂甚至過拟合的時候,其他任務還是欠拟合的狀态。
Direction(Loss梯度沖突):多個Loss的反向梯度,更新方向沖突,出現翹翹闆、負遷移現象,怎麼辦?
不同Loss對共享參數W_{sh}進行更新, 梯度有大小、方向,相同參數被多個梯度同時更新的時候,可能會出現沖突,導緻互相消耗抵消。就會出現跷跷闆、甚至負遷移現象。
後文,将分别從網絡結構和優化政策兩個方向,抽一些文章來分享一下。
三 多任務多目标網絡結構
MMoE:Google KDD 2018,提出後就成為了CTR領域MTL的标配。
這個文章中,有一個非常有意思的做法:人工控制兩個任務的相似度,然後觀測不同網絡結構在不同任務相似度的表現效果。得出一個結論:MMoE在多任務之間的的相關性( relatedness )比較低的時候,效果也能很不錯。
如下圖,首先OMoE 和 MMoE的效果都是明顯好于Baseline,表明化整為零的Experts對效果提升有非常重要的作用。近一步,如果任務相關度非常高(Correlation = 1.0),則OMoE和MMoE的效果近似,但是如果任務相關度很低(Correlation = 0.5),則OMoE的效果相對于MMoE明顯下降,說明MMoE中的Multi-gate的結構對于任務差異帶來的沖突有一定的緩解作用。
SNR:Google AAAI 2019,對MMoE的改進,但沒有找到官方開源,目前follow的相關工作不多。
這個文章的思路與網絡自動搜尋(NAS)接近。多任務各自采用哪些sub-network,動态學習出來。可見的收益主要寄希望于能夠自動學習出來相似任務能夠共享多一些。
PLE :Tencent RecSys 2020, 對MMoE的改進,結構簡潔,效果顯著。
在MMoE的基礎上,為每個任務增加了自己的specific expert,上文中已經解釋了為什麼specific expert為什麼有效。看下圖右上角的子圖,PLE是唯一做到多任務共赢“well done”。MMoE是唯一做到“還不錯”【一平一漲】。其餘方法是跷跷闆現象。Hard Sharing是負遷移。觀察在不同相似度的多任務上,PLE都表現優秀。
四 多任務多目标優化政策
1 UncertaintyWeight
文章:《Multi-task learning using uncertainty to weigh losses for scene geometry and semantics》
這個文章估計是多目标Loss優化政策中,最常被提及的方法。但是目前在我們的任務上,沒有取得明顯的效果【ps. 據大多數使用過的同學回報,都是沒啥效果的】。
文章希望直接模組化單個任務中的uncertainty,然後通過uncertainty來指導權重的調節。
經驗tips:loss大->uncertainty多->權重小,loss小->uncertainty少->權重大。這個在我們自己的實驗中也得到了驗證,甚至會出現loss小的那個任務的權重是其他loss大的任務的權重的幾十倍情況(如CTR、CVR、Pay目标模組化的時候,Pay的loss量級最小,這個方法給了Pay目标非常大的權重,導緻很快出現過拟合。)而且因為後面log項的存在,會使總的loss可能出現為負的情況。如果你的多任務設計,需要使用這個屬性:loss大->uncertainty多->權重小,loss小->uncertainty少->權重大,那麼這個方法可以嘗試套用一下(我們也嘗試過分類 + 回歸的多任務,回歸任務Loss大,UncertaintyWeight給予小權重,整體效果正向)。
2 GradNorm
3 DWA
文章:《End-to-End Multi-Task Learning with Attention》
定義了一個名額來衡量任務學習的快慢,然後來指導調節任務的權重。
用這一輪loss除以上一輪loss,這樣可以得到這個任務loss的下降情況用來衡量任務的學習速度,然後直接進行歸一化得到任務的權重。當一個任務loss比其他任務下降的慢時,這個任務的權重就會增加,下降的快時權重就會減小。是隻考慮了任務下降速度的簡化版的Gradient normalization,簡單直接。
經驗tips:對最終能夠達到的收斂狀态,沒有啥影響。
4 PE-LTR
文章:《A Pareto-Efficient Algorithm for Multiple Objective Optimization in E-Commerce Recommendation》
淘系主搜2019年的文章。首先需要白話一下問題模組化。多任務的loss公式是可以模組化為了多目标優化的,也就是優化可能沖突的目标的集合。
滿足這些條件的solution,被稱之為一個 Pareto Stationary Point【所有帕累托最優都是Pareto Stationary Point,但反之不一定成立】。上述優化問題,可以轉化成為
轉化後的解釋就是,找到一組w,能夠盡量平衡各任務在共享參數部分的梯度。如果優化到0,就滿足了KKT條件,沒有優化到0,也能找到一個方向是降低全局所有任務的總Loss。
新優化目标仍然是一個難解的二次規劃問題。論文提出一個兩步求解算法來解這個問題。1、隻考慮等式限制來放松問題,然後通過解析解來獲得松弛後問題的解。但是此時得出的解可能是不滿足不等式限制。2、投影步,從第一步獲得可行解中獲得一個滿足所有限制條件的有效解。
經驗tips:目前源碼demo是開源的,但目前并非開箱即用的狀态,我們優化适配到自己場景中,在每一輪疊代中,各個任務的w取值,頗為穩定,但目前還沒有在我們的場景中取得理想的效果。
這個方法是探索任務級别的平衡關系,求解w。WWW 2021年微信文章《Personalized Approximate Pareto-Efficient Recommendation》提出來在視訊推薦任務中不同使用者在意側重的目标(視訊點選率 vs 視訊完播率)是不一樣的,求解的w不應該是在任務次元,而是每個使用者樣本,都應當有自己的一組w。這個出發點是有價值的,但在我們的業務中,更有價值的可能是按照人群group來得到自己的一組w,如新使用者更加注重引導點選,老使用者更家注重引導交易,如消費品行業更加注重交易,非消行業着重引導詢盤,實作多目标共同增長。國家/行業/使用者分層等群體目标差異的優化,也是一個有意思有價值的點。
5 PCGrad & GradVac
文章:PCGrad -《Gradient Surgery for Multi-Task Learning》,GradVac - 《Gradient Vaccine: Investigating and Improving Multi-task Optimization in Massively Multilingual Models》
這兩篇文章是Google近期的研究,PCGrad投ICLR 2020被拒後,投中NIPS 2020。這個文章首次直面gradient沖突源頭。采用簡單、直接的方式做gradient調整。ICLR 2021 GradVac是PCGrad的改進,應用在多語種機器翻譯任務上。
PCGrad指出MTL多目标優化存在3個問題:1. 方向不一緻,導緻撕扯,需要解決;2. 量級不一緻,導緻大gradients主導,需要解決;3. 大曲率,導緻容易過拟合,需要解決。本文以方向不一緻作為切入點,打破這個問題。怎樣打破的? 白話一下首先通過cosine相似度來定義兩個任務在共享參數上是否是沖突的,如下圖,conflicting是夾角大于90度,non-conflicting是小于90度。如果兩個兩個梯度向量存在沖突,則把 gi 向量中與 gj 沖突的分量給減去。剩下的則是沒有沖突的部分。這就是核心。
GradVac應用在機器翻譯領域,給出了3個非常有意思的觀察:
1.梯度的相似性 vs language相似性 => close tasks enjoy similar loss geometries, Gradient Similarities reflect language proximities
a.任務是翻譯任務,不同的翻譯語料共享一個大模型。如上圖熱力圖,每一個格子的得分含義是:Baltic翻譯成en的任務對應的gradient,與 Turkic翻譯成en任務對應的gradient 之間的cosine similarity
b.語言越相近,gradient的cosine similarity也越相似。
2.梯度的相似性與模型效果正相關
a.回答一個問題:相似性越高的任務進行joint trainnig,是否能夠帶來更好的效果?
i.答案是肯定的! 相似度越高的任務進行MTL的訓練,效果是更好的。
ii.有研究表明en-x相對于x-en是更加困難的,從下面的gradient similarity也可以觀察到,x-en的梯度相似性更高。
iii.以en-fr pair作為錨點,分别加入相似性更高的/更低的任務去聯合訓練得到不同的模型。然後都在相同的測試集合en-fr上進行評估【以en-fr為主人物,其他語種對為輔助任務】,去對比gradient similarity更高的pair 和 更低的pair,觀察他們在BLEU名額上的效果,添加相似性更高的語種作為輔助人物會有更好的效果。
3.梯度相似性随着訓練步驟和網絡層級(transformer的layer)在不斷的演變
a.随着訓練step的改變:gradient similarity會逐漸收斂到一個水位
b.随着layer的改變:x-en【越靠近輸出位置的layer,越相似】,en-x 【越低level相似】,因為都是從en出發的,這個容易解釋,也make sense。
我覺得這些觀察非常重要,GradVac本身怎樣做,甚至都顯得沒那麼重要了。白話一下GradVac的做法
- PCGrad隻是設定了一個下界。讓兩個任務的cosine相似度至少是大于等于0的,不能出現負數。這個下界非常容易達到。
- 基于上文提及的觀察3,兩個任務的真實相似度,其實是會逐漸收斂到一個水位。這個值可以認為是兩個任務的真實相似度。
- 兩個任務的Gradinet相似度,應當去靠近這個相似度,而不是隻滿足PCGrad設定的下界。
經驗tips:改造代碼,嘗試中,目前沒有可分享的經驗。有後續再追加。
五 小結
多任務多目标出現跷跷闆、負遷移現象,微觀的梯度沖突是本質。不論是從Architecture 還是 Optimization strategy兩個次元來優化更新,殊途同歸,都是要緩解沖突,減少多任務間的内耗。
總結一下,從實踐角度來看,要做一個共赢的多任務多目标模型,技術層面幾點經驗tips:
(1)網絡結構backbone,目前優選PLE;
(2)多任務的設計和構造,要考慮任務間的相似性;如主 + 輔任務,輔助任務和主任務的關系需要考慮;
- 目前還沒有一種權威的方法或者名額來度量任務與任務之間的相似性,那麼實操中,怎麼辦?【PS. 多任務間的相似性度量,應該也是一個有意思的研究點】
- 多任務兩個Loss,隻訓練其中一個Loss,另一個Loss也在緩慢下降! => 任務相關(get)
- 三個loss,ctr/cvr/contra loss, 僅僅 training ctr/cvr主任務loss,觀察另一個輔助contra loss也會跟随下降。實驗表明引入這個輔助loss一起train會帶來很好的離線效果提升。
- 多任務兩個Loss,隻訓練其中一個Loss,另一個Loss沒有變化甚至波動增加! => 如果不是刻意而為之,慎重聯合
(3)優化政策方面,留意多個Loss的量級,如果差異很大,注意限制和控制;上圖contra loss 與 ctr cvr的loss,差了一個量級。
(4)梯度沖突的解決,一種技能是pareto,另一種是以pcgrad為代表的直接對梯度進行調整的方法,可選用。
多任務多目标的優化,有兩種典型的方式:
- 主任務 + 主任務:解決業務場景既要又要的訴求;多個任務都要漲;
- 主任務 + 輔任務:輔助任務為主任務提供一些知識資訊的增強,幫助主任務提升;
不同的業務訴求下,會有任務目标不同的側重、關聯、取舍。多任務多目标,有非常多的組合盲盒,等待打開。
Reference
本文中提及到的參考文獻如下
- Kendall A, Gal Y, Cipolla R. Multi-task learning using uncertainty to weigh losses for scene geometry and semantics[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7482-7491.
- Rosenbaum C, Cases I, Riemer M, et al. Routing networks and the challenges of modular and compositional computation[J]. arXiv preprint arXiv:1904.12774, 2019.
- Tang H, Liu J, Zhao M, et al. Progressive layered extraction (ple): A novel multi-task learning (mtl) model for personalized recommendations[C]//Fourteenth ACM Conference on Recommender Systems. 2020: 269-278.
- Ma J, Zhao Z, Yi X, et al. Modeling task relationships in multi-task learning with multi-gate mixture-of-experts[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 1930-1939.
- Chen Z, Badrinarayanan V, Lee C Y, et al. Gradnorm: Gradient normalization for adaptive loss balancing in deep multitask networks[C]//International Conference on Machine Learning. PMLR, 2018: 794-803.
- Liu S, Johns E, Davison A J. End-to-end multi-task learning with attention[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 1871-1880.
- Lin X, Chen H, Pei C, et al. A pareto-efficient algorithm for multiple objective optimization in e-commerce recommendation[C]//Proceedings of the 13th ACM Conference on recommender systems. 2019: 20-28.
- Xie R, Liu Y, Zhang S, et al. Personalized Approximate Pareto-Efficient Recommendation[C]//Proceedings of the Web Conference 2021. 2021: 3839-3849.
- Yu T, Kumar S, Gupta A, et al. Gradient surgery for multi-task learning[J]. arXiv preprint arXiv:2001.06782, 2020.
- Wang Z, Tsvetkov Y, Firat O, et al. Gradient vaccine: Investigating and improving multi-task optimization in massively multilingual models[J]. arXiv preprint arXiv:2010.05874, 2020.
- Sener O, Koltun V. Multi-task learning as multi-objective optimization[J]. arXiv preprint arXiv:1810.04650, 2018.
- Ruder S. An overview of multi-task learning in deep neural networks[J]. arXiv preprint arXiv:1706.05098, 2017.
- Vandenhende S, Georgoulis S, Van Gansbeke W, et al. Multi-task learning for dense prediction tasks: A survey[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2021.
資料庫核心概念
資料庫,簡而言之可視為電子化的檔案櫃——存儲電子檔案的處所,使用者可以對檔案中的資料運作新增、截取、更新、删除等操作。資料庫管理系統(Database Management System,簡稱DBMS)是為管理資料庫而設計的電腦軟體系統,一般具有存儲、截取、安全保障、備份等基礎功能 要想學習資料庫,需要了解SQL、索引、視圖、鎖等概念,本節課帶你走進資料庫。
點選這裡,檢視課程~