多任務學習算法綜述


在做客戶經營、精准營銷、推薦等業務場景中往往會遇到數據稀疏,樣本選擇偏差的問題

一、《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》 簡稱:ESMM,paper下載地址:https://arxiv.org/pdf/1804.07931.pdf。

  這篇文章主要介紹在電商推薦、廣告等領域經常會需要對點擊之后的轉化(CVR)進行預估,而在預測CVR的過程中,會出現數據稀疏和樣本選擇偏差的問題:如下圖所示:

                          

 

所謂樣本選擇偏差指的是:訓練樣本與預測樣本的分布不一致,從上圖可以清楚看出,訓練樣本是用戶點擊之后的樣本(點擊之后轉化作為正樣本,未轉化作為負樣本),這樣的樣本選擇空間就局限於用戶點擊之后的樣本空間,但我們最后在預測的時候往往是需要預測全量樣本空間。

所謂數據稀疏指的是:推薦系統展現給用戶的商品數量要遠遠大於被用戶點擊的商品數量,同時有點擊行為大部分都是活躍用戶貢獻的,占所有用戶非常小的一部分。這就是所謂的訓練數據稀疏的問題,高度稀疏的訓練數據使得模型的學習變得相當困難。

在這樣的背景下,阿里的工程師們提出如下解決方案:

                      

 

主要思路就是缺什么補什么,前面分析不是說CVR模型訓練樣本相比全量樣本空間小的嗎,所以就引入曝光到點擊的CTR過程來輔助訓練,網絡中通過共享底層的Embedding來進行信息共享。個人理解是將整個用戶轉化鏈路能夠形成end to end的模型進行擬合。

二、MMOE【https://dl.acm.org/doi/pdf/10.1145/3219819.3220007】

如下圖所示,我們經常簡單的多任務模型往往是如下(a)所示,通過共享Embedding層來實現信息共享。圖(b)則是針對不同的任務,有多個專家進行學習,並通過一個門控制(Attention機制貌似也可以,后面實現PLE我采用的是Attention機制替代gate),門控制機制可以決定不同的任務哪些專家作用的程度。圖(c)表示的意思是說多個任務有多個專家進行學習,最終每個任務都有一個專門的gate門控制控制每個專家對不同任務的貢獻程度。

                

 

圖C就是MMOE的主要思想。但是我們不難發現,

1、圖C中專家在學習的時候,不同的任務可以update的參數只有一個門控制來提高,其他參數更新的話,必然還是引起其他任務的性能。所示MMOE還是存在一定程度“蹺蹺板”現象。

2、圖a,b,c都是共享層的專家學習,並把所有的專家都用於不同的任務學習,各任務之間特有的信息就很難去表征。

MOE、MMOE存在的問題是說底層的專家都是作為不同的任務輸入,若某個任務更新了專家的參數,則會影響到其他任務的學習。

三、PLE 

針對MMOE存在的蹺蹺板的問題,主要原因是每個專家都作為所有任務的輸入,導致單個任務調整參數對其他任務造成的影響,於是,騰訊的專家們提出了CGC和PLE兩個框架。其中PLE是基於CGC的基礎之上,增加了全聯接層提取不同專家之間交叉特征。而CGC的主要核心思想是說每個任務都有特有的專家部分和不同任務之間共享的專家部門,由這兩個部分最終決定某一個任務的結果。模型在學習的時候可以同時更新特有的專家和公共部分的專家,從而達到消除蹺蹺板的影響。下面可以詳細介紹如下:

1、CGC的網絡結構

                        

 

從CGC的網絡結構圖可以看出,TaskA主要通過ExpertsA 和Experts Shared兩個部分決定,TaskB則由ExpertsB和Experts Shared兩個部分決定。Experts外接門控制(softmax)作為結果,這個部分稱之為Tower,最終,多個Tower決定最終的結果。

2、PLE網絡

                          

 

PLE與CGC最主要的區別就是在CGC的基礎之上,增加了Multi-level Extraction Networks(多層特征提取網絡),所謂多層提取網絡則是多個專家提取特征模塊。即多個下面的模塊:

                      

 

3、個人思考

針對上面的網絡模塊,個人認為,門控制改成Attention是不是會更好一些,Attention是否會更加聚焦單任務,於是我在PLE的基礎上,針對門控制部分做了一些修改,改成Attention的方式。最終將其應用到實際的業務場景中,模型能帶來28%的提升。

 

四、多任務學習模型訓練的坑:不同任務之間梯度大小差異較大引起模型訓練速度不一致,最終導致模型無法有效的學習。

多任務在學習的時候,一般都是通過不同任務之間的Loss加權求和得到最終的Loss,模型在更新的時候,則通過對該Loss求導去更新不同的任務。這里面可能存在的問題是有些任務對應的梯度較大,學習速度較快,很快收斂;有些任務梯度較小,學習速度較慢,收斂速度較慢。如下所示:

                    

 

問題:在實際模型訓練過程中,往往會不同任務的loss差異大導致模型更新不平衡的本質原因在於梯度大小;

解決辦法:

1、通過修改不同任務的權重W可以改善問題

2、通過對不同任務的梯度進行處理,從而改善不同任務更新速度不一致的問題。常用的方法是梯度歸一化(grad Norm)

梯度歸一化的主要目的讓不同任務對應的梯度差異控制在一定范圍內,從而控制多任務網絡的訓練,訓練的模型才可以以相同的速度學習。最終可以避免某個單個任務收斂了,另外一個任務還在收斂的路上的問題。該問題會導致:

(1)模型訓練的效率低,最終運行時間由最復雜的任務決定。

(2)復雜任務收斂的過程中,已收斂的任務對應最優解可能會變差。

下面主要講一下GradNorm具體的實現方法:【論文地址:https://arxiv.org/pdf/1711.02257.pdf】

            

 

如上圖右邊所示,我們需要計算Lgrad對應的grad norm之后的loss的值,並作用到不同任務中去。下面分部講解一下如何計算,以及如何不同任務不同步長的方式更新參數:

(1)計算不同任務對應的Gw(t)值。該值是對應每個任務的loss加權之后,並計算L2范數。每個任務對應一個

                

(2)計算上面對應的平均值

                  

 

(3)定義不同任務訓練步長(訓練速度)

                   

 

                  

 

(4)最后計算grad norm之后的梯度

                  

 

整體的訓練過程如下圖所示:

              

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM