背景
與傳統搜索類似,推薦系統的一個挑戰是如何同時獲得推薦結果準確性和擴展性。推薦的內容過於精準,用戶興趣收斂,無新鮮感,不利於長久的用戶留存;推薦內容過於泛化,用戶的精準興趣無法得到滿足,用戶流失風險很大。相比較推薦的準確性,擴展性傾向於改善推薦系統的多樣性。基於這個問題,Wide and deep 能夠兼顧準確性與擴展性。
Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右發佈的一類用於分類和迴歸的模型,並應用到了 Google Play 的應用推薦中。wide and deep 模型的核心思想是結合線性模型的記憶能力(memorization)和 DNN 模型的泛化能力(generalization),在訓練過程中同時優化 2 個模型的參數,從而達到整體模型的預測能力最優:
- 記憶(memorization):即從歷史數據中發現item或者特徵之間的相關性。
- 泛化(generalization):即相關性的傳遞,發現在歷史數據中很少或者沒有出現的新的特徵組合。
在推薦系統中,記憶體現的準確性,而泛化體現的是新穎性。
Wide & Deep模型
Wide & Deep模型的結構如下圖所示:
Wide & Deep模型中包括兩個部分,分別爲Wide部分和Deep部分,Wide部分如上圖中的左圖所示,Deep部分如上圖中的右圖所示。Wide起記憶功能, Deep起泛化功能,可以認爲:WideDeep = LR + DNN。
Wide模型:
Wide模型如上圖中的左側的圖所示,實際上,Wide模型就是一個廣義線性模型:
其中,特徵 是一個維的向量,爲模型的參數。最終在的基礎上增加Sigmoid函數作爲最終的輸出。
在Wide模型部分,輸入的特徵包括了原始特徵和交叉特徵。
交叉特徵的定義:
其中,。表示第個組合特徵。表示輸入的第維特徵。表示這個第i維度特徵是否要參與第個組合特徵的構造。表示輸入的維度。在論文中,當、 其他值都是 0 時,就添加一個交叉特徵 1 ,由於輸入的是one-hot類型,交叉特徵可以理解爲任意兩個特徵的乘積。
Deep模型
Deep模型如上圖中的右側的圖所示,實際上,Deep模型是一個前饋神經網絡。深度神經網絡模型通常需要的輸入是連續的稠密特徵,對於稀疏,高維的類別特徵,通常首先將其轉換爲低維的向量,這個過程也稱爲embedding。
在訓練的時候,首先隨機初始化embedding向量,並在模型的訓練過程中逐漸修改該向量的值,即將向量作爲參數參與模型的訓練。
隱含層的計算方法爲:
其中,稱爲激活函數,如ReLUs。
Deep模型特徵的輸入包括了連續的特徵和 embedding特徵,對於每個field embedding特徵採樣隨機初始化的方式。
像FM和DNN這種Embedding類的模型,可以通過學習到的低緯度稠密向量實現模型的泛化能力,包括可以實現對未見過的內容進行泛化推薦。當模型query-item矩陣比較稀疏時,模型的會過分泛化,推薦出很多無相關性的內容,準確性不能得到保證。
Wide & Deep模型的聯合訓練(joint training)
聯合訓練是指同時訓練Wide模型和Deep模型,並將兩個模型的結果的加權和作爲最終的預測結果:
訓練的方法:
在論文實驗中,訓練部分,Wide使用Follow-the-regularized-learder(FTRL)+L1正則, Deep使用了AdaGrad。
聯合訓練和模型集成要進行區分,他們有着以下兩點區別:
訓練方式。 集成模型的子模型部分是獨立訓練,只在inference階段合併預測。而聯合訓練模型是同時訓練同時產出的。
模型規模。集成模型獨立訓練,模型規模要大一些才能達到可接受的效果。而聯合訓練模型中,Wide部分只需補充Deep模型的缺點,即記憶能力,這部分主要通過小規模的交叉特徵實現。因此聯合訓練模型的Wide部分的模型特徵較小。
度量的標準
度量的指標有兩個,分別針對在線的度量和離線的度量,在線時,通過A/B test,最終利用安裝率(Acquisition);離線則使用AUC作爲評價模型的指標。
實驗結果
wide和deep 對於推薦系統都很重要。 Wide 線性模型可以通過交叉特徵記憶稀疏特徵;Deep模型可以通過embedding 生成看不見的特徵。
apps的推薦系統
本文將上述的Wide & Deep模型應用在Google play的apps推薦中。
對於類別特徵,通過詞典(Vocabularies)將其映射成向量;對於連續的實數特徵,將其歸一化到區間[0,1]。
代碼
參考:
https://blog.csdn.net/google19890102/article/details/78171283
https://www.jianshu.com/p/dbaf2d9d8c94
https://zhuanlan.zhihu.com/p/57247478
https://blog.csdn.net/u010352603/article/details/80590129
待解決:
問題:
1、怎麼選擇交叉特徵?
2、對於連續特徵是否需要歸一化
4、深度神經網絡模型通常需要的輸入是連續的稠密特徵,爲什麼?
DNN幾乎不需要特徵工程。通過對低緯度的dense embedding進行組合可以學習到更深層次的隱藏特徵。但是,缺點是有點over-generalize(過度泛化)。推薦系統中表現爲:會給用戶推薦不是那麼相關的物品,尤其是user-item矩陣比較稀疏並且是high-rank(高秩矩陣)
6、深度部分的公式不對
9、FTRL
10、AdaGrad
12、在聯合訓練的時候,爲什麼wide和deep的方法不一樣
說一下我的理解。deep的時候模型採用的dnn,dnn的網絡是稠密型網絡不適合採用FTRL等產生稀疏參數的方法。而LR一般是人爲的挑選一些特徵進行訓練,當中必然有一些“冗餘”的特徵,我們需要一種稀疏性較強的梯度更新方法。