推荐系统XDeepFM模型--DeepFM和DCN升级版
xDeepFM模型
- 目標:
- 引言:
- xDeepFM模型介紹:
- Compressed Interaction Network(CIN)
- xDeepFM
- 復雜度分析
- Experiment
- 產(chǎn)出:
- Conclusion
- 參考資料:
目標:
學習模型xDeepFM模型,包含我個人的一些理解。深入理解模型。結合卷積神經(jīng)網(wǎng)絡CNN理解模型原理。昨晚想了一晚上才想通,都失眠了。
微軟亞洲研究院2018年提出xDeepFM模型,可以理解為對DeepFM和DCN升級版。
- 相對于DeepFM,升級為自動構建高階交叉特征
- 相對于DCN,從bit級別的交叉升級vector級別的交叉特征。
缺點:
- 計算量(時間復雜度)比前兩者高。
引言:
xDeepFM模型,論文地址為:https://arxiv.org/abs/1803.05170
預測性系統(tǒng),特征工程至關重要。特征工程中,挖掘交叉特征是至關重要的。交叉特征指的是兩個或多個原始特征之間的交叉組合。例如,在新聞推薦場景中,一個三階交叉特征為AND(user_organization=msra,item_category=deeplearning,time=monday_morning),它表示當前用戶的工作單位為微軟亞洲研究院,當前文章的類別是與深度學習相關的,并且推送時間是周一上午。
傳統(tǒng)的推薦系統(tǒng)中,挖掘交叉特征主要依靠人工提取,這種做法主要有以下三種缺點:
- 1)重要的特征都是與應用場景息息相關的,針對每一種應用場景,工程師們都需要首先花費大量時間和精力深入了解數(shù)據(jù)的規(guī)律之后才能設計、提取出高效的高階交叉特征,因此人力成本高昂;
- 2)原始數(shù)據(jù)中往往包含大量稀疏的特征,例如用戶和物品的ID,交叉特征的維度空間是原始特征維度的乘積,因此很容易帶來維度災難的問題;–embeding技術不可少。
3)人工提取的交叉特征無法泛化到未曾在訓練樣本中出現(xiàn)過的模式中。–不自動化。
因此自動學習特征間的交互關系是十分有意義的。目前大部分相關的研究工作是基于因子分解機的框架,利用多層全連接神經(jīng)網(wǎng)絡去自動學習特征間的高階交互關系,例如FNN、PNN和DeepFM等。其缺點是模型學習出的是隱式的交互特征,其形式是未知的、不可控的;同時它們的特征交互是發(fā)生在元素級(bit-wise)而不是特征向量之間(vector-wise),這一點違背了因子分解機的初衷。
來自Google的團隊在KDD 2017 AdKDD&TargetAD研討會上提出了DCN模型,旨在顯式(explicitly)地學習高階特征交互,其優(yōu)點是模型非常輕巧高效,但缺點是最終模型的表現(xiàn)形式是一種很特殊的向量擴張,同時特征交互依舊是發(fā)生在元素級(bit-wise)上。
我們用下圖來回顧一下DCN的實現(xiàn):
元素級(bit-wise)和特征向量(vector-wise)的意思
- bit-wise VS vector-wise
假設隱向量的維度為3維,如果兩個特征(對應的向量分別為X1=[a1,b1,c1]X 1=[a1,b1,c1]X1=[a1,b1,c1]和X2=[a2,b2,c2]X2=[a2,b2,c2]X2=[a2,b2,c2]的話)在進行交互時:- bit-wise 的交互,比如DCN,基本上就是把X1,X2X 1,X2X1,X2直接展平,拼接層一個一維的更長的向量,具體就是[a1,b1,c1,a2,b2,c2][a1,b1,c1,a2,b2,c2][a1,b1,c1,a2,b2,c2],然后再進行特征的高階交互時,也是基于[a1,b1,c1,a2,b2,c2][a1,b1,c1,a2,b2,c2][a1,b1,c1,a2,b2,c2]這個長向量進行的。所以叫基于位的高階交互。
- vector-wises是以向量為單位進行的交互,比如DeepFm就是人為的把X1,X2X 1,X2X1,X2進行點積,產(chǎn)生如下的效果[X1T,X2T]=[[a1,b1,c1],[a2,b2,c2]][X1 ^{T},X2 ^{T}]=[[a1,b1,c1], [a2,b2,c2]][X1T,X2T]=[[a1,b1,c1],[a2,b2,c2]]
, 如果特征交互形式類似于 f(w1?a1?a2,w2?b1?b2,w3?c1?c2)f(w_{1} * a_{1} * a_{2},w_{2} * b_{1} * b_{2} ,w_{3} * c_{1} * c_{2})f(w1??a1??a2?,w2??b1??b2?,w3??c1??c2?)這樣的效果,那么我們認為特征交互是發(fā)生在特征向量級(vector-wise)。
explicitly VS implicitly
- 顯式的特征交互和隱式的特征交互。以兩個特征為例xix_{i}xi?和xjx_{j}xj?,在經(jīng)過一系列變換后,我們可以表示成wi,j?(xi?xj)w_{i,j} * (x_{i} * x_{j})wi,j??(xi??xj?)的形式,就可以認為是顯式特征交互,否則的話,是隱式的特征交互。
微軟亞洲研究院社會計算組2018年提出了一種極深因子分解機模型(xDeepFM),不僅能同時以顯式和隱式的方式自動學習高階的特征交互,使特征交互發(fā)生在向量級,還兼具記憶與泛化的學習能力。是對Wide&Deep模型的升級。
xDeepFM模型介紹:
Compressed Interaction Network(CIN)
為了實現(xiàn)自動學習顯式的高階特征交互,同時使得交互發(fā)生在向量(vector)級上,文中首先提出了一種新的名為壓縮交互網(wǎng)絡(Compressed Interaction Network,簡稱CIN)的神經(jīng)模型。在CIN中,隱向量是一個單元對象,因此我們將輸入的原特征和神經(jīng)網(wǎng)絡中的隱層都分別組織成一個矩陣,記為X0X_{0}X0? 和 XkX_{k}Xk? 。CIN中每一層的神經(jīng)元都是根據(jù)前一層的隱層以及原特征向量推算而來,其計算公式如下:
其中點乘的部分計算如下:
怎么理解這個公式,特別是X0X_{0}X0?的作用是啥?這里的X0X_{0}X0?再乘以wHiw_{Hi}wHi?得到的wHi?X0w_{Hi}*X_{0}wHi??X0?可以看做是一個D?1D*1D?1維的卷積核,類比CNN模型中,我們一般采用2X2的卷積核,分別對圖片進行掃描,這里也可以類似的理解。
看下卷積升級網(wǎng)絡的操作:
類比:
這里詳細詳細展示了,用wHi?X0w_{Hi}*X_{0}wHi??X0?當卷積核,產(chǎn)生最后的高階向量。其中,X0X_{0}X0?的每一列和Xk?1X_{k-1}Xk?1?的每一列相乘,都采用了不同的權重wHi,mw_{Hi,m}wHi,m?,所以權重向量還是比較大的,這個可以考慮類似于CNN卷積神經(jīng)網(wǎng)絡的共享權重,進行簡化好,后續(xù)在探究。
作者原文中畫的圖太難看懂了,這里就不貼了,還是這個哥們幫忙理解的。
CIN的宏觀框架可以總結為下圖:
可以看出,它的特點是:
- 最終學習出的特征交互的階數(shù)是由網(wǎng)絡的層數(shù)決定的。因為每一層都是和X0X_{0}X0?做卷積,所以每增加一層,就相當于X0X_{0}X0?的階數(shù)增加1。
- 每一層隱層都通過一個池化操作連接到輸出層,從而保證了輸出單元可以見到不同階數(shù)的特征交互模式。
- 同時不難看出,CIN的結構與循環(huán)神經(jīng)網(wǎng)絡RNN是很類似的,即每一層的狀態(tài)是由前一層隱層的值與一個額外的輸入數(shù)據(jù)計算所得。不同的是,CIN中不同層的參數(shù)是不一樣的,而在RNN中是相同的;RNN中每次額外的輸入數(shù)據(jù)是不一樣的,而CIN中額外的輸入數(shù)據(jù)是固定的,始終是X0X_{0}X0?。----RNN也能幫忙理解。
可以看到,**CIN是通過(vector-wise)**來學習特征之間的交互的,還有一個問題,就是它為什么是顯式的進行學習?我們先從X1X_{1}X1? 來開始看,X1X_{1}X1? 的第hhh個神經(jīng)元向量xh1x_{h}^{1}xh1?可以表示成 :
X1X_{1}X1? 可以看成是X0X_{0}X0?自己跟自己做卷積。然后把mmm個向量的乘積全部相加。
進一步,X2X_{2}X2? 的第hhh個神經(jīng)元向量可以表示成:
最后,第k層的第h個神經(jīng)元向量可以表示成:
因此,我們能夠通過上面的式子對特征交互的形式進行一個很好的表示,它是顯式的學習特征交叉。即對每個特征都進行了高階的相互組合再乘積。
xDeepFM
將CIN與線性回歸單元、全連接神經(jīng)網(wǎng)絡單元組合在一起,得到最終的模型并命名為極深因子分解機xDeepFM,其結構如下圖:
- 集成的CIN和DNN兩個模塊能夠幫助模型同時以顯式和隱式的方式學習高階的特征交互
- 集成的線性模塊LR和深度神經(jīng)模塊DN也讓模型兼具記憶與泛化的學習能力。
值得一提的是,為了提高模型的通用性,xDeepFM中不同的模塊共享相同的輸入數(shù)據(jù),這點在DCN模型中已經(jīng)有過討論。至少Wide變種模型和Deep模型輸入相同,可以提升模型的學習速度。
而在具體的應用場景下,其他模塊可以接入各自不同的輸入數(shù)據(jù),例如,線性模塊中依舊可以接入很多根據(jù)先驗知識提取的交叉特征來提高記憶能力,而在CIN或者DNN中,為了減少模型的計算復雜度,可以只導入一部分非稀疏的數(shù)值特征。
復雜度分析
假設CIN和DNN每層神經(jīng)元/向量個數(shù)都為HHH ,網(wǎng)絡深度為TTT。那么CIN的參數(shù)空間復雜度為O(mTH2)O(mTH^2)O(mTH2),普通的DNN為 O(mDH+TH2)O(mDH+TH^2)O(mDH+TH2) ,CIN的空間復雜度與輸入維度DDD無關,此外,如果有必要,CIN還可以對權重矩陣WWW進行 LLL 階的矩陣分解,從而能降低空間復雜度。
CIN的時間復雜度就不容樂觀了,按照上面介紹的計算方式為 O(mH2DT)O(mH^2DT)O(mH2DT) ,而DNN為 O(mDH+TH2)O(mDH+TH^2)O(mDH+TH2) ,時間復雜度會是CIN的一個主要痛點。
Experiment
數(shù)據(jù)集原文
- 公開數(shù)據(jù)集 Criteo 與 微軟數(shù)據(jù)集 BingNews
- DianPing 從大眾點評網(wǎng)整理的相關數(shù)據(jù),收集6個月的user check-in 餐廳poi的記錄,從check-in餐廳周圍3km內,按照poi受歡迎度抽取餐廳poi作為負例。根據(jù)user屬性、poi屬性,以及user之前3家check-in的poi,預測用戶check-in一家給定poi的概率。
產(chǎn)出:
充分理解XDeepFM模型的原理,他的近親是:DeepFM和DCN升級版
升級:
1、 思想上,采用了DCN(Deep&Cross)模型的特征自動交叉的,得到高階特征。
2、特征交叉方式采用了DeepFM中FM的處理方式,不再是DCN中以位為單位,進行交叉,而是以向量為單位進行交叉。
3、 模型最后還添加了一個線性模型。
Conclusion
- xDeepFM將基于Field的vector-wise思想引入Cross,并且保留了Cross的優(yōu)勢,模型結構也很elegant,實驗效果也提升明顯。如果說DeepFM只是“Deep & FM”,那么xDeepFm就真正做到了”Deep” Factorization Machine。
- xDeepFM的時間復雜度會是其工業(yè)落地的一個主要性能瓶頸,需要重點優(yōu)化
參考資料:
https://www.jianshu.com/p/b4128bc79df0
https://zhuanlan.zhihu.com/p/57162373
總結
以上是生活随笔為你收集整理的推荐系统XDeepFM模型--DeepFM和DCN升级版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐算法DeepFM原理介绍及tenso
- 下一篇: Facebook的GBDT+LR模型py