一文匯總:推薦系統(tǒng)中多任務學習的優(yōu)化思路
?多任務學習是推薦系統(tǒng)中非常常見的一個問題。推薦系統(tǒng)中,經(jīng)常要對多個目標進行預測,比如點擊率、轉(zhuǎn)化率、觀看時長等等。將這些任務聯(lián)合學習,希望通過不同的監(jiān)督信息,互相增強各自目標的擬合能力。但是同時,不同目標之間又不一定是正向關系,可能存在負向遷移問題,存在蹺蹺板現(xiàn)象。因此,如何最好的發(fā)揮多任務學習的作用,達到各個任務聯(lián)合最優(yōu),一直是一個推薦系統(tǒng)領域的核心研究問題。
這篇文章就給大家匯總一下,推薦系統(tǒng)中常見的多任務學習解決思路。整體可以分為參數(shù)共享/私有方式、梯度平衡、表征學習優(yōu)化等幾個方面。
1.參數(shù)共享/私有方式
不同任務之間如何進行參數(shù)的共享,哪些參數(shù)又該作為該任務的私有參數(shù),這個方面一直是多任務學習中的一個核心研究點。最早的文章由谷歌等機構發(fā)表在KDD2018 Modeling task relationships in multi-task learning with multi-gate mixture-of-experts,這篇文章提出了一種基于門控的多專家網(wǎng)絡(MMoE),解決多任務學習問題。在底層網(wǎng)絡中,有多個并行的NN網(wǎng)絡,每個NN網(wǎng)絡就是一個expert。每個任務的預測使用這些expert的加權求和得到,權重由一個門控網(wǎng)絡根據(jù)輸入樣本生成。通過這種方式,各個expert是參數(shù)共享的,能夠最大限度共享各個任務的信息,同時通過gate針對不同任務側(cè)重各自的expert,實現(xiàn)一定程度的參數(shù)隔離,緩解各個任務之間的負向影響。
SNR: Sub-Network Routing for Flexible Parameter Sharing in Multi-Task Learning(AAAI 2019)是谷歌提出的另一篇多任務學習網(wǎng)絡結構。SNR相比MMoE更加靈活,主要體現(xiàn)在把各個Expert拆成了更細的粒度,把每個專家拆成多層,每層之間都能進行路由,使得NN網(wǎng)絡的任務間共享私有機制更加靈活。
Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations(RecSys 2020)是騰訊在2020提出的一種多專家網(wǎng)絡結構。之前的多專家網(wǎng)絡所有Expert都是各個任務共享的,只靠Gate控制各個任務對于各個expert的使用程度,仍然比較容易出現(xiàn)蹺蹺板現(xiàn)象。為了緩解這個問題,PLE提出了在網(wǎng)絡中加入組個每個任務獨立,不和其他任務共享的參數(shù)。通過這種方式,讓每個任務有自己獨立的參數(shù)空間,大幅緩解了多任務學習中的蹺蹺板現(xiàn)象。
2.梯度平衡
由于不同任務的數(shù)據(jù)分布不同,各個任務在反向傳播時的梯度也不同。這就可能出現(xiàn),某些任務的梯度非常大,把學習過程主導了,導致其他任務學習不好的情況。為了解決這類問題,一些工作專門研究如何設計更好的優(yōu)化器,平衡各個任務之間的梯度。
MetaBalance: Improving Multi-Task Recommendations via Adapting Gradient Magnitudes of Auxiliary Tasks(WWW 2022)提出了一種梯度平衡的方法。本文面臨的問題是,引入輔助任務提升主任務,但是輔助任務梯度過大導致主導了訓練,反而影響了主任務效果的問題。為了解決這個問題,文中采用范數(shù)來約束輔助任務的梯度,讓輔助任務梯度的范數(shù)和主任務盡可能一致。范數(shù)的計算采用滑動平均的方法,計算歷史累積范數(shù)的滑動平均值,防止單次范數(shù)計算波動較大。通過,直接約束范數(shù)的結果可能并不是最優(yōu)的梯度更新方式,因此文中還引入了一個系數(shù),融合范數(shù)約束前后的梯度。
AdaTask: A Task-Aware Adaptive Learning Rate Approach to Multi-Task Learning(AAAI 2023)提出了在Adam、Adagrad等優(yōu)化器中,引入考慮多任務之間梯度大小的信息,讓這些優(yōu)化器在多任務學習的優(yōu)化中平衡不同任務的梯度大小。整體的實現(xiàn)思路為,原來大Adagrad等方法會根據(jù)歷史梯度信息調(diào)整每個參數(shù)的學習率。本文的AdaTask在此基礎上,增加了一個任務維度,也就是每個任務、每個參數(shù),根據(jù)歷史梯度信息調(diào)整下一步的學習率。
3.表征學習優(yōu)化
多任務聯(lián)合學習的一個核心目的,就是為了讓利用多個任務的目標,共同更新底層表征,提升底層表征的表達能力,進而提升各個任務的效果。在谷歌的文章Can Small Heads Help? Understanding and Improving Multi-Task Generalization(WWW2022)中,提出了一個多任務表征學習的矛盾點。一般多任務學習都由共享參數(shù)和私有參數(shù)兩部分組成,如果私有參數(shù)量太小,就會導致存在負向遷移的各個任務之間效果互相影響,降低整體多任務學習的效果。如果私有參數(shù)量太大,模型的自由度很高,底層表征就無法學到兼容各個任務的信息了。
為了解決這個問題,本文提出了在每個任務的原始輸出head基礎上,增加一個小的輸出head,這個小的輸出head也擬合對應的任務,作為輔助塔。其目的是縮小私有head參數(shù)的參數(shù)量,以此實現(xiàn)讓底層表征必須抽取出多任務共享的信息,進而提升多任務底層表征的泛化能力。
