CTR預估模型之DeepFM

2016年google推出了wide&deep模型之後,基本上就成爲了各大推薦系統的標配。該模型既能學習到低階的記憶性,又能學習到高階部分的泛化性,所以整體效果來說是比較好的。

但是它有個麻煩的地方,那就是wide部分需要較多的特徵工程工作。這一點對於人員緊張的小廠來說還是不太方便。而FM具有自動學習交叉特徵的能力,同時其使用的隱變量也可以跟Deep部分一起共享。所以也就有了DeepFM這個模型,用FM來代替wide部分。

FM

詳細介紹見FM簡介

對比FM和Wide&Deep的Wide部分:

優點:

  • 無需特徵工程,這一點對於搭建端到端模型來說比較重要。
  • 不要求交叉特徵共同在樣本出現過,使得在稀疏場景下也能學習到交叉特徵

缺點:

  • 可解釋性不如wide
  • 計算高階交叉時需要對全員做交叉,wide則可以通過特徵工程選擇部分交叉特徵

DeepFM

儘管FM做了特徵交叉,但是整體而言還是屬於比較低階的特徵,模型學習到的主要還是特徵共現性,即記憶特徵。要想提高模型的泛化能力,還是需要加入Deep部分。

DeepFM論文中做了跟很多其他模型的對比,個人覺得比較有意義的就是和FM、wide&deep這兩者的對比(其他模型感覺是拿來湊數的)。整篇文章凸顯兩個優勢:

  1. 端到端模型訓練,無需特徵工程和預訓練
  2. 同時捕捉到高階和低階特徵

FM Part

DeepFM的低階部分由FM組成。論文的FM部分看起來像是個一層的神經網絡,實際上yFMy_{FM}還是用的FM傳統的計算trick公式得到的.(注意這層網絡的名字叫FM Layer)

Deep Part

DeepFM的高階部分由MLP組成。假如我們有n個特徵(FM中的Field概念),隱變量爲k維,則deep部分的輸入即是把這n個k維的隱變量拼一起。[V1,V2,...Vn][V_1, V_2, ... V_n], 其中Vi=[vi1,vi2,...vik]V_i = [v_{i1}, v_{i2}, ... v_{ik}]

Combine

分別得到yFMy_{FM}yDNNy_{DNN}後,最終模型的輸出爲: y^=sigmoid(yFM+yDNN)\hat{y} = sigmoid(y_{FM} + y_{DNN}). 搭建模型的時候需要注意,k維的隱變量是FM和Deep一起共享的。

模型實現:search-deeplearning/models/DeepFMEstimator

參考了ChenglongChen/tensorflow-DeepFM的實現,其中FM和MLP部分輸出的各自是一個tensor,通過concate一起在喂入最後一層網絡。

即:y^=sigmoid(W(final)([yFM,yDNN])+b(final))\hat{y} = sigmoid(W^{(final)}([y_{FM}, y_{DNN}]) + b^{(final)})

參考資料:

  1. Factorization Machines
  2. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章