推荐系统中如何做多目标优化
在做推薦系統的過程中,我們希望同時優化多個業務目標。比如電商場景中,希望能夠在優化GMV的基礎上提高點擊率,從而提高用戶的粘性;在信息流場景中,希望提高用戶點擊率的基礎上提高用戶關注,點贊,評論等行為,營造更好的社區氛圍從而提高留存。因此推薦系統做到后期,往往會向多目標方向演化,承擔起更多的業務目標。下面就介紹幾種多目標相關的算法。其中有些是筆者實踐過取得了線上的收益,有些是最新的論文中提出的新的解決方案,文章沒有公式,易于理解,拿出來和大家一起討論。
A. 通過sample weight進行多目標優化
該方法是多目標的0.1版本,是rank主模型上的微調,以實現多目標。這里以信息流場景為例,我們的主目標是feed的點擊率,用戶在feed上的任何點擊行為都被認為是正反饋。與此同時,在feed中的點贊功能是我們希望boost的功能。此時點擊和點贊都是正樣本(點贊本身也是一種點擊行為),但是點贊的樣本可以設置更高的sample weight。模型訓練在計算梯度更新參數時,梯度要乘以權重,對sample weight大的樣本給予更大的權重。直觀理解,對于sample weight大的樣本,如果預測錯誤就會帶來更大的損失。通過這種方法能夠在優化某個目標(點擊率)的基礎上,優化其他目標(點贊率)。實際AB測試會發現,這樣的方法,目標A會受到一定的損失換取目標B的增長。通過線上AB測試和sample weight調整的聯動,可以保證在可接受的A目標損失下,優化目標B,實現初級的多目標優化。
- 優點:
- 模型簡單,僅在訓練時通過梯度上乘sample weight實現對某些目標的boost或者decay
- 帶有sample weight的模型和線上的base模型完全相同,不需要架構的額外支持,可以作為多目標的第一個模型嘗試。
- 缺點:
- 本質上并不是對多目標的建模,而是將不同的目標折算成同一個目標。相關的折算可能需要多次AB測試才能確定。此處有點難理解,設置sample weight,本質上是用base樣本去度量其他樣本。比如認為一個點贊算兩次點擊。比如在視頻中停留了5min是等價于2次對視頻的點擊行為等。
- 從原理上講無法達到最優,多目標問題本質上是一個帕累托尋找有效解的過程。有很多文章給出多目標的數學建模,如[1]。我們后續從這些文章中給出更詳細的證明。
B. 多個模型 stacking
這個思路是也是很直接的。我們有多個優化的目標,每個優化的目標都有一個獨立的模型來優化。可以根據優化目標的不同,采用更匹配的模型。如視頻信息流場景中,我們用分類模型優化點擊率,用回歸模型優化停留時長。不同的模型得到預測的score之后,通過一個函數將多個目標融合在一起。
最常見的是weighted sum融合多個目標,給不同的目標分配不同的權重。當然,融合的函數可以有很多,比如連乘或者指數相關的函數,這里和業務場景和目標的含義強相關,可以根據自己的實際場景探索。
- 優點:
- 模型簡單
- 缺點:
- 線上serving部分需要有額外的時間開銷,通常我們采用并行的方式請求兩個模型進行融合。
- 多個模型之間相互獨立,不能互相利用各自訓練的部分作為先驗,容易過擬合。
C. Shared bottom NN model多個模型stacking會帶來更多的訓練參數,導致模型的規模變大。這種情況在NN模型中更為常見,從而帶來過擬合的風險。因此在基于深度學習的推薦模型中,引入了shared bottom layer來加強參數共享。多個目標的模型可以聯合訓練,減小模型的參數規模,防止模型過擬合。具體模型結果如下:
但是問題也顯而易見,由于不同的任務最終預測的目標不同。而共享參數一定程度上限制了不同目標的特異性,最終訓練的效果就會打折扣。因此Shared bottom NN model能夠成功的前提,是預測的目標之間的相關性比較高。這樣參數共享層不會帶來太大的損失。在[2]中有相關的實驗證明,當任務的相關性越高,模型的loss會下降,模型的準確度才會更高。所以,在文獻[3]的中,也提出了一些任務之間相關性衡量的方法,以及如何在眾多任務中選擇合適的任務子集做多目標學習。
在參數共享中,還有一類方法是soft parameter sharing的方法。
在這個NN的場景中,通過給模型參數之間距離加正則化,鼓勵參數趨于一致,從而減小過擬合的風險,同時也為訓練樣本少的模型提供一些先驗信息。但是在實際的推薦系統多目標優化中,沒有看到類似的模型結構,可能是因為線上serving的時候計算量顯著高于shared bottom NN model,且效果也不一定好。
D. MMoE?MMoE是Google的研究人員提出的一種NN模型中多目標優化的模型結構[2]。在Recsys 2019中,我們也發現,Google已經將MMoE用在Youtube中進行視頻相關推薦[4]。MMoE為每一個模型目標設置一個gate,所有的目標共享多個expert,每個expert通常是數層規模比較小的全連接層。gate用來選擇每個expert的信號占比。每個expert都有其擅長的預測方向,最后共同作用于上面的多個目標。
此處我們可以將每一個gate認為是weighted sum pooling操作。如果我們選擇將gate換成max操作。x為輸入,g(x)中分量最大值對應的expert被唯一選中,向上傳遞信號。如果g(x)與input無關,則模型退化成多個獨立的NN模型stacking,這樣就便于我們更方便理解模型的進化關系。Recsys 2019 Google的文章,是在shared bottom layer上面增加MMoE層。這樣做是為了減少模型的復雜度,降低訓練的參數數量。只不過此處的shared bottom layer層數很少,推薦系統中特征的輸入非常稀疏,input對應的參數維度很大,因此先作用于淺層的shared bottom layer,有利于減小上層MMoE的模型復雜度,也減少線上serving的開銷。
先介紹這些多目標相關的優化算法,這些算法中A,C是經過業務驗證可行的算法,大家可以優先嘗試。歡迎大家留言討論。
[1] 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. ACM, 2019: 20-28.
[2] 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. ACM, 2018: 1930-1939.
[3] Ruder S. An overview of multi-task learning in deep neural networks[J]. arXiv preprint arXiv:1706.05098, 2017.
[4] Zhao Z, Hong L, Wei L, et al. Recommending what video to watch next: A multitask ranking system[C]//Proceedings of the 13th ACM Conference on Recommender Systems. ACM, 2019: 43-51.
總結
以上是生活随笔為你收集整理的推荐系统中如何做多目标优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐算法三视角:矩阵,图,时间线
- 下一篇: 胆囊炎能不能吃桂圆