天天看點

《Wide & Deep Learning for Recommender Systems》論文筆記

推薦系統 CTR預估 CVR預估

0、概述

線性模型被廣泛地應用于回歸和分類問題,具有簡單、快速和可解釋性等優點,但是線性模型的表達能力有限,經常需要人工選擇特征和交叉特征才能取得一個良好的效果,但是實際工程中的特征數量會很多,并且還會有大量的稀疏特征,人工篩選特征和交叉特征會很困難,尤其是交叉高階特征時,人工很難實作。DNN模型可以很容易的學習到高階特征之間的作用,并且具有很好的泛化能力。同時,DNN增加embedding層可以很容易的解決稀疏特征的問題。文章将傳統的LR和DNN組合構成一個wide&deep模型,既保留了LR的拟合能力,又具有DNN的泛化能力,并且不需要單獨訓練模型,可以友善模型的疊代。

1、Wide&Deep解決什麼問題

在推薦系統(包括推薦、計算廣告)中,當使用者來到平台時,需要向使用者展示适合使用者的物品(商品、廣告等),通常的做法是先從海量的物品庫(通常是上億數量)中,篩選出一些跟使用者興趣最相關的物品(通常是千級規模),這個過程叫做召回,召回可以是機器學習模型或者規則;然後再對這上千的物品進行排序,進而展示給使用者。是以推薦系統也經常被叫做搜尋排序系統。整個系統流程如圖:

《Wide & Deep Learning for Recommender Systems》論文筆記

排序的規則有很多,主要是依據業務的目标而言,例如點選、購買等。wide&deep可以應用到此類目标的排序問題中,最經典的就是CTR預估。

2、現有模型的問題

提到CTR預估,最經典的應該是LR模型了,LR模型簡單、快速并且模型具有可解釋,有着很好的拟合能力,但是LR模型是線性模型,表達能力有限,泛化能力較弱,需要做好特征工程,尤其需要交叉特征,才能取得一個良好的效果,然後工業中,特征的數量會很多,可能達到成千上萬,甚至數十萬,這時特征工程就很難做,并且特征工程是一項很枯燥乏味的工作,搞得算法工程師暈頭轉向,還不一定能取得更好的效果。

DNN模型不需要做太精細的特征工程,就可以取得很好的效果,已經在很多領域開始應用了,DNN可以自動交叉特征,學習到特征之間的互相作用,尤其是可以學到高階特征互動,具有很好的泛化能力。另外,DNN通過增加embedding層,可以有效的解決稀疏資料特征的問題,防止特征爆炸。推薦系統中的泛化能力是很重要的,可以提高推薦物品的多樣性,但是DNN在拟合資料上相比較LR會較弱。

為了提高推薦系統的拟合性和泛化性,可以将LR和DNN結合起來,同時增強拟合能力和泛化能力,wide&deep就是将LR和DNN結合起來,wide部分就是LR,deep部分就是DNN,将兩者的結果組合進行輸出。

3、Wide&Deep模型

wide&deep模型主要分成兩部分,wide部分就是傳統的LR模型,deep部分就是DNN,整個模型的結構如下圖:

《Wide & Deep Learning for Recommender Systems》論文筆記

上圖中最左邊是傳統的LR模型,最右邊是DNN模型,中間的是将LR和DNN結合起來的wide&deep模型。

3.1 Wide部分

wide部分就是LR模型,傳統的LR模型:

用 X=[x1,x2,x3,...,xd] X = [ x 1 , x 2 , x 3 , . . . , x d ] 表示一個有d個特征的樣本, W=[w1,w2,w3,...,wd] W = [ w 1 , w 2 , w 3 , . . . , w d ] 表示模型的參數, b b 表示bia,yy表示預測值,有 y=WTX+b y = W T X + b 。

在實際中往往需要交叉特征,對于這部分定義如下:

ϕk(X)=∏i=1dxCkii,cki∈0,1 ϕ k ( X ) = ∏ i = 1 d x i C k i , c k i ∈ 0 , 1

用 ϕk ϕ k 表示第 k k 個交叉特征,CkiCki表示是第 k k 個交叉特征的一部分。

最終的wide部分為:

y=WTX+b+∑k=1Nwd+kϕky=WTX+b+∑k=1Nwd+kϕk

3.2 Deep部分

deep部分就是一個普通的神經網絡結構,隻不過在這個網絡中增加embedding層用來将稀疏、高維的特征轉換為低維、密集的實數向量,可以有效地解決次元爆炸。先将原始特征經過embedding層轉化後,再送入DNN的隐藏層,隐藏層之間的關系定義為:

al+1=f(Wlal+bl) a l + 1 = f ( W l a l + b l )

上面 l l 表示隐藏層數,ff表示激活函數,可以是sigmoid、Relu、than等,目前最常用的是Relu函數。

3.3 Wide join Deep

将wide部分的輸出和deep部分的輸出相加通過sigmoid函數輸出進行預測。整個模型的預測定義如下:

P(Y=1|X)=σ(WTwide[X,ϕ(X)]+WTdeepal+b) P ( Y = 1 | X ) = σ ( W w i d e T [ X , ϕ ( X ) ] + W d e e p T a l + b )

3.4 wide&deep的訓練方式

wide&deep模型中,wide部分和deep部分是同時訓練的,不需要單獨訓練任何一部分。GBDT+LR模型中GBDT需要先訓練,然後再訓練LR,兩部分具有依賴關系,這種架構不利于模型的疊代。

Join training和ensemble training的差別:(1)ensemble中每個模型需要單獨訓練,并且各個模型之間是互相獨立的,模型之間互相不感覺,當預測樣本時,每個模型的結果用于投票,最後選擇得票最多的結果。而join train這種方式模型之間不是獨立的,是互相影響的,可以同時優化模型的參數。(2)ensemble的方式中往往要求存在很多模型,這樣就需要更多的資料集和資料特征,才能取得比較好的效果,模型的增多導緻難以訓練,不利于疊代。而在wide&deep中,隻需要兩個模型,訓練簡單,可以很快的疊代模型。

3.5 工程上的實作

目前Tensorflow中已經提供了wide&deep模型的API,參見 https://www.tensorflow.org/tutorials/wide_and_deep,并且官方提供了一個Demo,工程上可以很快的搭建起wide&deep模型。

4 思考

如果你是為業務第一次做CTR預估模型,建議嘗試先用交叉特征+LR經典模型取得一個良好的效果,之後可以引入FM來替換交叉特征部分。最後可以考慮采用以下模型優化:

  • GBDT+LR:Facebook提出的CTR預估方法
  • wide&deep:Google 2016年提出的CTR預估方法,目前最主流的方法,很多公司都在用,建議一定去嘗試
  • DeepFM:華為諾亞方舟實驗室和哈工大 2017年提出的CTR預估方法
  • Deep&Cross:Google 2017年提出CTR預估方法,據說會比wide&deep更好,目前還沒有大量應用
  • FFM:台灣大學提出的對FM進行優化的方法,FM可以看成是FFM的一個特例

繼續閱讀