【CTR預估】Deep & Cross Network 模型

DCN模型是組合了顯式和隱式特徵交叉的一個模型。如果瞭解WD模型的話,簡單的說這篇文章就是把WD模型的wide側改成了cross網絡,用來顯式的做一些特徵的交叉,因爲DNN雖然有着擬合任意模型的能力,但是世界上沒有免費的午餐,所以顯式的定義特徵交叉還是很有必要的。

論文下載地址:https://arxiv.org/pdf/1708.05123.pdf

這裏我對一些常用的ctr預估模型進行了復現,其中也包括了DCN模型,可以參考一些:https://github.com/Shicoder/Deep_Rec/blob/master/Deep_Rank

1.模型結構

結構圖如下所示:

                                  

2.模型輸入

我們從下到上,先看模型的輸入,如下所示

                                     

這個也是推薦領域常見的輸入方式,將實值類的特徵stack起來,稀疏的類別特徵做embedding。然後整體concat起來作爲模型的輸入。

3.模型核心結構

再往上走一步

                             

先看右邊的模型,就是一個正常的全連接網絡。

關鍵的是左邊的cross 網絡

如果直接看圖上的公式會有點誤導,直接看文章給出的每一層x的計算公式和具體的可視化圖

            公式:

                                  

            交叉層可視化圖:

                                     

這樣就比較清楚了,每一層的計算中都有x_0,x_0是一個列向量,所以x_0*x{}'這個計算過程相當於把交叉網絡輸入x_0的每個維度分發到不同的維度上,再利用w把分發出去的值合併起來,以此來達到交叉特徵的效果。

舉個栗子?

假設輸入的是一個三維的向量x_0=[x_{01},x_{02},x_{03}],那麼第一層交叉層的計算如下圖:

                               

看一下過程就很清楚了。

 而每一層中的參數只有w_lb_l ,如果輸入數據的維度是d,交叉層的層數是L,那麼整個交叉網絡的參數只有d*L*2,也大大減少了參數的數量。

4.最後的輸出

                                

交叉網絡和深度網絡的輸出是他們最後一層神經網絡節點值。這裏和wide and deep 模型不同的是,wide and deep模型最後的輸出只有一個節點,模型直接將wide和deep兩個子模型的輸出的單個值加起來送入激活函數。

而這裏是將cross網絡輸出的向量和deep輸出的向量concate起來,再做一層的全連接,才送入激活函數。

具體實現代碼github上很多。

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