deep & wide 原理

背景

與傳統搜索類似,推薦系統的一個挑戰是如何同時獲得推薦結果準確性和擴展性。推薦的內容過於精準,用戶興趣收斂,無新鮮感,不利於長久的用戶留存;推薦內容過於泛化,用戶的精準興趣無法得到滿足,用戶流失風險很大。相比較推薦的準確性,擴展性傾向於改善推薦系統的多樣性。基於這個問題,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模型就是一個廣義線性模型:
y=wTx+b y = \mathbf{w}^{T}\mathbf{x}+b
其中,特徵x=[x1,x2,,xd]\mathbf{x} = [x1,x2,⋯,xd] 是一個dd維的向量,w=[w1,w2,,wd]\mathbf{w} = [w1,w2,⋯,wd]爲模型的參數。最終在yy的基礎上增加Sigmoid函數作爲最終的輸出。
在Wide模型部分,輸入的特徵包括了原始特徵和交叉特徵。
交叉特徵的定義:
ϕk(x)=i=1dxicki \phi ^{k}(x) = \prod_{i=1}^{d}x_{i}^{c_{ki}}
其中,ckiϵ{0,1}c_{ki}\epsilon{\left \{ 0,1 \right \}}kk表示第kk個組合特徵。ii表示輸入x\mathbf{x}的第ii維特徵。ckic_{ki}表示這個第i維度特徵是否要參與第kk個組合特徵的構造。dd表示輸入x\mathbf{x}的維度。在論文中,當xi=1x_{i}=1xj=1x_{j}=1 其他值都是 0 時,就添加一個交叉特徵 1 ,由於輸入的xx是one-hot類型,交叉特徵可以理解爲任意兩個特徵的乘積。

Deep模型

Deep模型如上圖中的右側的圖所示,實際上,Deep模型是一個前饋神經網絡。深度神經網絡模型通常需要的輸入是連續的稠密特徵,對於稀疏,高維的類別特徵,通常首先將其轉換爲低維的向量,這個過程也稱爲embedding。
在訓練的時候,首先隨機初始化embedding向量,並在模型的訓練過程中逐漸修改該向量的值,即將向量作爲參數參與模型的訓練。
隱含層的計算方法爲:
al+1=f(w(l)a(l)+b(l)) a^{l+1}=f(w^{(l)}a^{(l)}+b^{(l)})
其中,ff稱爲激活函數,如ReLUs。
Deep模型特徵的輸入包括了連續的特徵和 embedding特徵,對於每個field embedding特徵採樣隨機初始化的方式。
像FM和DNN這種Embedding類的模型,可以通過學習到的低緯度稠密向量實現模型的泛化能力,包括可以實現對未見過的內容進行泛化推薦。當模型query-item矩陣比較稀疏時,模型的會過分泛化,推薦出很多無相關性的內容,準確性不能得到保證。

Wide & Deep模型的聯合訓練(joint training)

聯合訓練是指同時訓練Wide模型和Deep模型,並將兩個模型的結果的加權和作爲最終的預測結果:
訓練的方法:
P(Y=1x)=σ(wwideT[x,ϕ(x)]+wdeepTalf+b) P(Y=1\mid \mathbf{x})=\sigma (\mathbf{w}_{wide}^{T}[\mathbf{x},\phi (\mathbf{x})]+\mathbf{w}_{deep}^{T}a^{lf}+b)
在論文實驗中,訓練部分,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]。

代碼

DNNLinear組合分類器實戰

參考:
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一般是人爲的挑選一些特徵進行訓練,當中必然有一些“冗餘”的特徵,我們需要一種稀疏性較強的梯度更新方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章