wide&deep模型演化


推薦系統模型演化

LR-->GBDT+LR

FM-->FFM-->GBDT+FM|FFM

FTRL-->GBDT+FTRL

Wide&DeepModel (Deep learning era)

將從以下3方面進行模型分析:

1.why(模型設計背后的原理)

2.how(具體怎么設計,如何應用)

3.discussion(模型討論)

Wide&Deep

  • why

Memorization 和 Generalization

假如你設計了一個外賣推薦系統gugu,用戶睡覺醒來需要點個外賣,推薦系統推薦給用戶了一個烤肉飯,用戶如果購買了就標記為1,否則為0(說明不是一個好的推薦)。點擊率預估就是衡量推薦系統的一個線下指標。

wide(memorization)

​ 那如何對用戶合適的商品呢,我們需要記住用戶的愛好。所以,你設計了幾個相關的特征,用一個簡單的線性模型學習這些特征的權重組合,模型會預測對特定產品的點擊概率, gugu2.0上線了。一段時間后,用戶吃膩了,需要換個口味,但是模型只記住了特定的模式。對一些訓練集中未出現的組合特征,由於模型沒有見過,記憶中沒有關於這個特征的信息,導致模型單一,用戶就會不滿意。

deep(generalization)

​ 為了推薦一些新的食物而且和用戶之前點的食物相關,但是要口味不一樣。模型需要能都捕捉到食物之間的內在聯系,普通的離散特征無法滿足這一要求,embedding引入了低維稠密向量表示離散特征的方法,相似的食物在embedding的一些維度上可能是一樣的。比如口水雞和椒麻雞,經過embedding用4個維度[雞肉,辣,麻,甜]表示

[0.52,0.23,0.312,0.002] [0.52,0.23,0.45,0.002]

使用embedding后的稠密向量,可以充分挖掘不同食物的相似性,可以做出新的合理的推薦,使用前饋神經網絡進行學習,對於沒有見過的特征,由於深度學習的泛化能力,模型也可以做出不錯的預測。但是你發現模型會過度泛化,當用戶的行為比較稀疏時,gugu會推薦一些相關性較小的食物。

wide+deep

​ 為什么不同時進行memorization和generalization呢?Wide&Deep聯合線性模型和深度模型,利用兩個模型的優點進行聯合訓練。

  • how

input

wide: 包括sparse類型的特征以及cross類型的特征等。原始輸入特征和手動交叉特征

deep: 稠密特征,包括real value類型的特征以及embedding后特征

training

wide: \(y=wx+b\)

deep: \(a^{(l+1)}=f(w^{(l)}a^{(l)}+b^{(l)})\)

joint: \(P(Y=1 | \mathbf{x})=\sigma\left(\mathbf{w}_{w i d e}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}_{d e e p}^{T} a_{f}^{\left(l_{f}\right)}+b\right)\)

Wide部分用FTRL+L1來訓練;Deep部分用AdaGrad來訓練。 使用BP算法采用joint train的方式訓練。

  • discussion

1.利用wide和deep組合,wide手動交叉特征,deep對離散進行embedding

2.對wide部分進行改進,自動化交叉特征,DeepFM,DCN

3.embedding在線訓練得到,可否離線預訓練

4.deep部分進行改進,AFM

離散值低階vector-wise交互;連續值高階bit-wise交互
vector-wise和bit-wise文末有解釋

DeepFM

連續值離散化,低階vector-wise組合,高階bit-wise組合

DCN

  • why

FM可以自動組合特征,但也僅限於二階叉乘。告別人工組合特征,並且自動學習高階的特征組合呢

\(x1x2x3\)

  • how

擬合殘差

\[\mathbf{x}_{l+1}=\mathbf{x}_{0} \mathbf{x}_{l}^{T} \mathbf{w}_{l}+\mathbf{b}_{l}+\mathbf{x}_{l}=f\left(\mathbf{x}_{l}, \mathbf{w}_{l}, \mathbf{b}_{l}\right)+\mathbf{x}_{l} \]

為什么work?

\[\boldsymbol{x}_{1}=\boldsymbol{x}_{0} \boldsymbol{x}_{0}^{T} \boldsymbol{w}_{0}+\boldsymbol{x}_{0}=\left[\begin{array}{c}{x_{0,1}} \\{x_{0,2}}\end{array}\right]\left[x_{0,1}, x_{0,2}\right]\left[\begin{array}{c}{w_{0,1}} \\{w_{0,2}}\end{array}\right]+\left[\begin{array}{c}{x_{0,1}} \\{x_{0,1}}\end{array}\right]=\left[\begin{array}{c}{w_{0,1} x_{0,1}^{2}+w_{0,2} x_{0,1} x_{0,2}+x_{0,1}} \\{w_{0,1} x_{0,2} x_{0,1}+w_{0,2} x_{0,2}^{2}+x_{0,2}}\end{array}\right] \]

\[\begin{aligned}\boldsymbol{x}_{2} &=\boldsymbol{x}_{0} \boldsymbol{x}_{1}^{T} \boldsymbol{w}_{1}+\boldsymbol{x}_{1} \\&=\left[\begin{array}{l}{w_{1,1} x_{1,1}^{2}+w_{1,2} x_{1,1} x_{1,2}+x_{1,1}} \\{w_{1,1} x_{1,2} x_{1,1}+w_{1,2} x_{1,2}^{2}+x_{1,2}}\end{array}\right]\end{aligned} \]

  • discussion
  1. 顯示的高階特征組合,特征組合階數隨着網絡深度增加而增加

  2. 復雜度線性增長,相比DNN更快

  3. 利用最后的高階組合特征,實際高層特征組合已經包含了低層的組合,考慮單層的組合引入最后的計算

  4. 特征交互還是bit-wise,對模型記憶能力提升是否有幫助

  5. 是否真的學到了高階特征交互?輸出是輸入的標量乘積

連續值離散化,高階bit-wise組合

xDeepFm

  • why

傳統特征工程缺點:

1.好的特征需要專家知識

2.大數據量下無法無法手動交叉特征

3.手動交叉特征的無法泛化

FM對所有特征組合,引入噪聲;FNN、PNN聚焦於高階特征,忽略了低階特征;

DNN學習高階特征交互,但是學習到特征交互是隱含的,bit-wise級的,那么DNN是否真的有效在高階特征處理上?CIN被設計在vector-wise級進行學習高階特征

embedding: 不同樣本的長度不同,但embedding維度是一樣的

隱式高階特征:bit-wise

顯示高階特征交互: DCN,輸出受限於和x0的交互、bit-wise

CIN(Compressed Interaction Network(CIN))

DCN沒有有效的學習到高階特征交互,輸出是x0的標量乘積

\[\begin{aligned} \mathrm{x}_{i+1} &=\mathrm{x}_{0} \mathrm{x}_{i}^{T} \mathrm{w}_{i+1}+\mathrm{x}_{i} \\ &=\mathrm{x}_{0}\left(\left(\alpha^{i} \mathrm{x}_{0}\right)^{T} \mathrm{w}_{i+1}\right)+\alpha^{i} \mathrm{x}_{0} \\ &=\alpha^{i+1} \mathrm{x}_{0} \end{aligned} \]

但是標量並不意味着線性!!!

  • how

bit-wise到vector-wise

顯示交互

復雜度非指數級增長

\[\mathrm{X}_{h, *}^{k}=\sum_{i=1}^{H_{k-1}} \sum_{j=1}^{m} \mathrm{W}_{i j}^{k, h}\left(\mathrm{X}_{i, *}^{k-1} \circ \mathrm{X}_{j, *}^{0}\right) \]

取前一層的\(H_{k-1}\)的個vector,與輸入層的 [公式] 個vector,進行兩兩Hadamard乘積運算,得到\(H_{k-1}*m\)個 vector,然后加權求和

[公式] 層的不同vector區別在於,對這\(H_{k-1}*m\)個 vector 求和的權重矩陣不同。 \(H_k\)即對應有多少個不同的權重矩陣\(W^k\)

1.為什么做Hadamard積

保持維度不變,做到vector-wise級交互

2.vector-wise交互

網絡的每一層計算是以embedding向量的方式進行哈達瑪積,保持embedding的結構

3.每一層的輸出由當前輸入和隱狀態共同決定,類RNN

4.類CNN(裝飾)

sum pooling 有效性:\(p_{i}^{k}=\sum_{j=1}^{D} \mathrm{X}_{i, j}^{k}\)

當只有一層,sum pooling就是兩兩向量的內積之和,降為FM

組合

\[\hat{y}=\sigma\left(\mathbf{w}_{\text {linear}}^{T} \mathbf{a}+\mathbf{w}_{d n n}^{T} \mathbf{x}_{d n n}^{k}+\mathbf{w}_{\operatorname{cin}}^{T} \mathbf{p}^{+}+b\right) \]

線性單元、DNN、CIN;記憶、泛化、記憶+泛化

1.CIN如何顯示的執行特征交互

2.必須組合顯示和隱式表達嗎

3.xDeepFm參數設置影響

  • discussion

1.特征交叉利用稠密向量進行,是否存在一個網絡進行離散高階向量級特征交互

2.交互深度改進,殘差,全局信息觀

連續值離散化,高階bit-wise組合,CIN高階vector-wise組合

bit-wise VS vector-wise

假設隱向量的維度為3維,如果兩個特征(對應的向量分別為(a1,b1,c1)和(a2,b2,c2)的話)在進行交互時,交互的形式類似於f(w1 * a1 * a2,w2 * b1 * b2 ,w3 * c1 * c2)的話,此時我們認為特征交互是發生在元素級(bit-wise)上。如果特征交互形式類似於 f(w * (a1 * a2 ,b1 * b2,c1 * c2))的話,那么我們認為特征交互是發生在特征向量級(vector-wise)。
\(x1=(a1,b1,c1),x2=(a2,b2,c2)\)

bitwise: \(f(w1*a1*a2,w2*a2*b2,w3*a3*b3)\)

vector-wise: \(f(w(a1*a2,a2*b2,a3*b3))\)

explicitly VS implicitly

顯式的特征交互和隱式的特征交互。以兩個特征為例xi和xj,在經過一系列變換后,我們可以表示成 wij * (xi * xj)的形式,就可以認為是顯式特征交互,否則的話,是隱式的特征交互。

reference:

https://zhuanlan.zhihu.com/p/55234968

Cheng H T, Koc L, Harmsen J, et al. Wide & deep learning for recommender systems[C]//Proceedings of the 1st workshop on deep learning for recommender systems. ACM, 2016: 7-10.

Guo H, Tang R, Ye Y, et al. DeepFM: a factorization-machine based neural network for CTR prediction[J]. arXiv preprint arXiv:1703.04247, 2017.

Wang R, Fu B, Fu G, et al. Deep & cross network for ad click predictions[C]//Proceedings of the ADKDD'17. ACM, 2017: 12.

Lian J, Zhou X, Zhang F, et al. xdeepfm: Combining explicit and implicit feature interactions for recommender systems[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2018: 1754-1763.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM