谷歌CTR預估模型——deep&cross(DCN)

提出動機

解決交叉特徵學習問題,雖然傳統的FM模型可以學習到二階交叉特徵,對於高階交叉特徵,需要大量的參數,在deep&wide模型,wide部分需要手動進行特徵工程,deep&cross模型在wide部分實現了自動生成高階交叉特徵,並使用了resnet的形式。

網絡形式

在這裏插入圖片描述
經過公共的embedding和stacking層,左邊爲cross network,右邊爲deep network。

Embedding and stacking layer

該層對特徵進行拼接成input,對於Dense特徵直接拼接,對於sparse特徵首先進行embedding,將生成的稠密向量與dense特徵進行拼接

Cross network

交叉網絡結構如下
在這裏插入圖片描述
表達式爲xl+1=x0xlTwl+bl+xl=f(xl,wl,bl)+xl\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}
對於第ll層的輸出xl+1x_{l+1},由原始輸入x0x_{0}和上一層的輸入xlx_{l}相乘得到,從而產生高階交叉特徵。這裏使用了resnet的形式y=f(x)+xy = f(x)+x,使得網絡結構更具有魯棒性。

注意cross部分維度映射是由RdRd\mathbb{R}^{d} \mapsto \mathbb{R}^{d}的,所以該部分總參數爲:
d×Lc×2d \times L_{c} \times 2 d是輸入特徵的維度,LcL_{c}是cross網絡的層數。

Deep network

在這裏插入圖片描述
deep部分跟傳統DNN相同,由若干個全連接層相連,第l+1l+1個隱藏層表達式爲:
hl+1=f(Wlhl+bl)\mathbf{h}_{l+1}=f\left(W_{l} \mathbf{h}_{l}+\mathbf{b}_{l}\right)其中:WlRnl+1×nl,blRnl+1W_{l} \in \mathbb{R}^{n_{l+1} \times n_{l}}, \mathbf{b}_{l} \in \mathbb{R}^{n_{l+1}}
所以整個deep 部分參數個數爲:
d×m+m+(m2+m)×(Ld1)d \times m+m+\left(m^{2}+m\right) \times\left(L_{d}-1\right)

Combination layer

最終,將cross部分和deep部分的輸出結果,合併到一起,
p=σ([xL1T,hL2T]wlogits)p=\sigma\left(\left[\mathbf{x}_{L_{1}}^{T}, \mathbf{h}_{L_{2}}^{T}\right] \mathbf{w}_{\mathrm{logits}}\right)

其中:
xL1Rd,hL2Rmwlogits R(d+m)σ(x)=1/(1+exp(x))\mathbf{x}_{L_{1}} \in \mathbb{R}^{d}, \mathbf{h}_{L_{2}} \in \mathbb{R}^{m},\mathbf{w}_{\text {logits }} \in \mathbb{R}^{(d+m)},\sigma(x)=1 /(1+\exp (-x))
wlogitsw_{logits}可以看做合併向量乘上的權重

最終,損失函數由交叉熵和正則項構成:+
loss=1Ni=1Nyilog(pi)+(1yi)log(1pi)+λlwl2\operatorname{loss}=-\frac{1}{N} \sum_{i=1}^{N} y_{i} \log \left(p_{i}\right)+\left(1-y_{i}\right) \log \left(1-p_{i}\right)+\lambda \sum_{l}\left\|\mathbf{w}_{l}\right\|^{2}

參考資料

https://arxiv.org/abs/1708.05123

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