承接上文: 鏈接:多目標優化概論及基礎算法ESMM與MMOE對比 這次這篇文章寫點實用的。可以當做推薦算法工程師面試的考前突擊,也可以當做面試官的面試題庫。ESSM和MMOE都是最基本的算法,相當於多目標優化的入門級的讀物。越經典越需要細嚼,溫故而知新嘛。 這些題目和答案都是我自己在看論文過程中自我提問和自我回答總結出來的。如果有不同看法和答案,歡迎留言交流,互為增長,互相啟發。 細節篇:
第一問題集:
ESSM提出他解決了兩個核心問題:1、樣本選擇偏差,訓練的CVR的時候是點轉數據集,但線上推理的時候是曝轉數據;2、數據稀疏問題,轉化數據比點擊數據少10倍以上,模型訓練是欠擬合的。問題:ESSM是怎么解決這兩個問題的,例如數據稀疏問題的,如果說他直接對曝點數據建模,數據是非常稀疏的,再上深度學習模型,肯定欠擬合,訓練好的模型很多模型參數都是原始隨機初始化的數,怎么處理?
答案: 這個問題就是ESSM全部內容的實質。
如圖所示,我們來回答問題。第一,防止欠擬合,導致訓練好的模型參數中太多初始化隨機數的方法是:他訓練一個CTR模型,用訓練好的CTR模型結構的參數共享給CVR模型,不准確一點說,就是在訓練好的CTR模型上,finetune一下來訓練CVR,當然,finetune后的模型也要滿足CTR的loss要求。第二,接下來是最核心的東西了。這個圖其實是一個網絡結構,輸出兩個分支,logit_CTR,logit_CVR,然后,點擊再轉化是p(CTCVR),按照物理意義,點擊再轉化就是條件概率,值等於p(CTR)*p(CVR)。訓練:CTR數據集是完備的,在這個數據集上,將label從點擊換成轉化,就是轉化訓練集,直接對爆轉建模,但轉化數據是點擊后才能轉化,因而模型的pred=logit_CTR * logit_CVR。Loss = pred-label_cvr。在線預測:由於預測是直接預測轉化的概率,跟點擊沒有關系,因而,預測拿來排序的預測值是logit_CVR,而不是p(CTCVR)。這樣訓練和預測巧妙騰挪,對真實的曝轉建模了。 第二問題集
MMOE一個模型有幾個Loss?他跟多標簽分類學習有什么區別?既然是多目標,多個專家網絡,直接多個模型不是更好的解決問了嗎? 答案:
搞清這些問題,需要從多目標優化的業務需求和真實數據場景講起。所謂的多目標優化,是指真實業務場景中,一次排序展示,需要得到多個結果。例如電商的相關推薦,希望一次推薦排序好的商品,既能讓用戶點擊,也能讓用戶下單,甚至還能讓用戶滿意(好評)。又如一次新聞(視頻)推薦,如果光考慮點擊,可能一些獵奇的標題黨更搶流量;我們希望點擊,希望用戶瀏覽時間長;並且還希望用戶喜歡這個內容,轉發或者收藏就更牛了。 理解了這個點,就不會考慮多個目標用多個模型了,首先,線上實時排序,不可能多個模型部署,這樣耗時太高;其次訓練管理多個模型的數據集,也是在工業界的最大成本。大數據集存儲多份,不合適。當然,最重要的不是這個,而是核心的算法精度訴求:多個模型,每個模型預測一個值,拿來綜合排序,由於每個模型是單獨訓練的,因而他們的排序序列是互斥的,容易顧此失彼,專注點擊的模型+專注轉化的模型<max(CTR,CVR)是有可能存在的。即1+1< 大1,因此,多目標優化就是要解決這個顧此失彼的問題,讓一個模型成為多面手。 跟多標簽學習的關系:其實本質是相同的,只是多標簽學習更多是分類,多目標學習你可以是分類,也可以是回歸。 MMOE的loss個數,就跟目標個數是一樣的,然后加一起訓練。 宏觀層面
第三問題集
這兩個方法有什么異同?我現在既要點擊好,又要轉化多,還要成交金額高,怎么選?我如果就CTR和CVR兩個目標,哪個方法效果更好? MMOE在ESSM之后出來,本質解決的問題是ESSM解決不了的問題,就是現在這個需求:三個目標怎么學。ESSM是學CTR和CVR的,CTR和CVR是緊相連的,但GMV不太一樣,跟商品單價相關,跟買家下單量有關。跟CTR和CVR的相關性有但小不少。 因此,如果目標相差迥異,只能用MMOE,ESSM是專門解決CTR和CVR兩個目標聯合訓練的。這個是他們兩個方法的核心不同點。 如果你的目標就是CTR和CVR,那么MMOE訓練CVR時,是會出現欠擬合的,因為他沒有共享模型參數,因此,這個時候ESSM比MMOE效果好不少。