1. 程式人生 > 實用技巧 >[深度學習] Deep & Cross Network (DCN)

[深度學習] Deep & Cross Network (DCN)

Deep & Cross Network(DCN)在 2017 年由 google 和 Stanford 共同發表的一篇論文中被提出,類似於Wide & Deep Network(WDL),是用複雜網路預估CTR的一種方法。

特徵工程一直是許多預測模型成功的關鍵。許多有效的特徵都來自於原始特徵的交叉組合。在WDL中,wide側的交叉組合特徵依然需要依靠hand-craft來完成。而DCN能對sparse和dense的輸入自動學習特徵交叉,可以有效地捕獲有限階(bounded degrees)上的有效特徵交叉,無需人工特徵工程或暴力搜尋(exhaustive searching),並且計算代價較低。

DCN是一個可以同時高效學習低維特徵交叉和高維非線性特徵的深度模型,不需要人工特徵工程的同時需要的計算資源非常低。

DCN網路結構

DCN模型以一個嵌入和堆疊層(embedding and stacking layer)開始,接著並列連一個cross network和一個deep network,接著通過一個combination layer將兩個network的輸出進行組合。

可以看到DCN分成4部分。最底下是“Embedding and stacking layer”,中間部分是“Cross network”和“Deep network”,最上面是“Combination output layer”。下面分別對每個部分進行講解

嵌入和堆疊層 Embedding and stacking layer

這一層是模型的輸入層。我們知道輸入的特徵分為稠密和稀疏特徵。

考慮具有稀疏和稠密特徵的輸入資料。在網路規模推薦系統的CTR預測任務中,輸入主要是分類特徵,如“country=usa”。這些特徵通常是編碼為獨熱向量one hot encoding 如[0,1,0];然而,這通常會產生超高維度的特徵空間。為了減少維數,我們採用嵌入過程將這些二進位制特徵轉換成實數值的稠密向量(通常稱為嵌入向量)

最後,將稠密特徵和經過轉換的稀疏特徵對應的稠密向量concat起來組成模型的最終輸入,也就是圖中的x0

交叉網路 Cross Network

在cross network裡面我們主要使用以下的公式進行一層一層的疊加:

假如我們要疊加3層,則每一層計算如下

在完成一個特徵交叉f後,每個cross layer會將它的輸入加回去,借鑑了殘差網路的思想。

w和b是我們要學習的引數,可以看到在cross network裡面,輸入和輸出的維度是一樣的。

為什麼這麼設計?

cross network為1層的時候,我們可以得到的最高是2維的特徵交叉;cross network為2層的時候,我們得到的是最高3維的特徵交叉;cross network為3層的時候,我們得到的是最高4維的特徵交叉;以此類推。。。

特徵的高階交叉(high-degree interaction):cross network的獨特結構使得交叉特徵的階(the degress of cross features)隨著layer的深度而增長。對於第l層layer,它的最高多項式階(在輸入 x0上)是 l+1。

因此cross network以一種引數共享的方式,通過對疊加層數的控制,可以高效地學習出低維的特徵交叉組合,避免了人工特徵工程。

深度網路

交叉網路的引數數目少,從而限制了模型的能力(capacity)。為了捕獲高階非線性交叉,我們平行引入了一個深度網路。

深度網路就是一個全連線的前饋神經網路,每個深度層具有如下公式:

Combination Layer

最後,將cross network和deep network的輸出concat起來,通過一個logit層,對於一個二分類問題,公式如下圖所示

總結

DCN主要有以下幾點貢獻:

  • 提出一種新型的交叉網路結構,可以用來提取交叉組合特徵,並不需要人為設計的特徵工程;
  • 這種網路結構足夠簡單同時也很有效,可以獲得隨網路層數增加而增加的多項式階(polynomial degree)交叉特徵;
  • 十分節約記憶體(依賴於正確地實現),並且易於使用;
  • 實驗結果表明,DCN相比於其他模型有更出色的效果,與DNN模型相比,較少的引數卻取得了較好的效果。

參考:

  1. https://zhuanlan.zhihu.com/p/43364598
  2. https://zhuanlan.zhihu.com/p/138358291