DeepCross Network(DCN)
1. 概述
Deep&Cross Network(DCN)[1]是由Google于2017年提出的用于計算CTR問題的方法,是對Wide&Deep[2]模型的進一步改進。線性模型無法學習到特征的交叉屬性,需要大量的人工特征工程的介入,深度網絡對于交叉特征的學習有著天然的優勢,在Wide&Deep模型中,Deep側已經是一個DNN模型,而Wide側是一個線性模型LR,無法有效的學習到交叉特征。在DCN中針對Wide&Deep模型的Wide側提出了Cross網絡,通過Cross網絡學習到更多的交叉特征,提升整個模型的特征表達能力。
2. 算法原理
2.1. DCN的網絡結構
DCN模型的網絡結構如下圖所示:
在DCN網絡中,由下到上主要包括五種類型的層,第一種是Embedding層,第二種是Stacking層,用于組合Embedding層的輸出;第三種是Cross network的層,用于對Stacking后的特征進行學習;第四種是Deep network的層,作用與Cross network的層一樣,此外,Cross network的層和Deep network的層是并行的兩個過程;第五種是輸出層,經過Cross network的層和Deep network的層后,組合兩者的輸出做最后的計算。
2.2. DCN網絡的計算過程
2.2.1. Embedding和Stacking
對于CTR問題的輸入,通常是由一些離散的特征和連續的特征組成,對于離散的特征的處理方法通常是利用one-hot編碼對其離散化處理,但是處理后的特征通常是較為稀疏的,舉例來說,如類別特征“country=USA”,假設通過one-hot編碼后得到的特征為[0,1,0]\left [ 0,1,0 \right ][0,1,0]。這樣的特征不適合DNN處理,通常需要通過Embedding將其轉換成連續的向量表示,這便是Embedding層的作用,最終得到的Embedding層的輸出為:
xembed,i=Wembed,ixi\mathbf{x}_{embed,i}=W_{embed,i}\mathbf{x}_ixembed,i?=Wembed,i?xi?
其中,xembed,i\mathbf{x}_{embed,i}xembed,i?是Embedding層的輸出向量,xi\mathbf{x}_ixi?是屬入的第iii個離散特征,Wembed,i∈Rne×nvW_{embed,i}\in \mathbb{R}^{n_e\times n_v}Wembed,i?∈Rne?×nv?是一個ne×nvn_e\times n_vne?×nv?的矩陣,是用于連接輸入層到Embedding層的參數。通過Embedding層后,在Stacking層,需要將Embedding層的輸出組合在一起,這里的Embedding特征包括了離散特征的Embedding結果以及原始的連續特征:
x0=[xembed,1T,?,xembed,kT,xdenseT]\mathbf{x}_0=\left [ \mathbf{x}_{embed,1}^T,\cdots ,\mathbf{x}_{embed,k}^T,\mathbf{x}_{dense}^T \right ]x0?=[xembed,1T?,?,xembed,kT?,xdenseT?]
得到Embedding層的結果后,便進入到DCN網絡的核心的兩個網絡,分別是Cross network和Deep network。
2.2.2. Cross network
Cross network部分是Deep&Cross網絡的核心部分,其作用是利用深度神經網絡充分挖掘特征中的交叉特征。具體過程的形式化表示如下圖所示:
其具體的數學表述為:
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}xl+1?=x0?xlT?wl?+bl?+xl?=f(xl?,wl?,bl?)+xl?
其中,xl,xl+1∈Rd\mathbf{x}_{l},\mathbf{x}_{l+1}\in \mathbb{R}^dxl?,xl+1?∈Rd表示的是Cross network的第lll層和第l+1l+1l+1層的輸出向量,wl,bl∈Rd\mathbf{w}_l,\mathbf{b}_l\in \mathbb{R}^dwl?,bl?∈Rd是Cross network的第lll層的參數。上述公式的第二部分可以寫成:
f(xl,wl,bl)=xl+1?xlf\left ( \mathbf{x}_{l},\mathbf{w}_{l},\mathbf{b}_{l} \right )=\mathbf{x}_{l+1}-\mathbf{x}_{l}f(xl?,wl?,bl?)=xl+1??xl?
從上述公式可以看出是一個殘差網絡[3]的表達形式,函數f:Rd?Rdf:\mathbb{R}^d \mapsto \mathbb{R}^df:Rd?Rd需要擬合的是第l+1l+1l+1層和第lll層的殘差xl+1?xl\mathbf{x}_{l+1}-\mathbf{x}_{l}xl+1??xl?。在ResNet中,殘差網絡的優點主要有:
總的來說,可以通過殘差網絡構建更深層的模型,便于學習到特征之間的交叉屬性。
2.2.3. Deep network
Deep network部分與Wide&Deep模型中一致,是一個典型的全連接前饋神經網絡,其可以由下屬公式表示:
hl+1=f(Wlhl+bl)\mathbf{h}_{l+1}=f\left ( W_l\mathbf{h}_l+\mathbf{b}_l \right )hl+1?=f(Wl?hl?+bl?)
其中,hl∈Rnl,hl+1∈Rnl+1\mathbf{h}_{l}\in \mathbb{R}^{n_l},\mathbf{h}_{l+1}\in \mathbb{R}^{n_{l+1}}hl?∈Rnl?,hl+1?∈Rnl+1?分別為第lll層和第l+1l+1l+1層的隱含層輸出,Wl∈Rnl+1×nl,bl∈Rnl+1W_l\in \mathbb{R}^{n_{l+1}\times n_{l}},\mathbf{b}_l\in \mathbb{R}^{n_{l+1}}Wl?∈Rnl+1?×nl?,bl?∈Rnl+1?為Deep network第lll層到第l+1l+1l+1層的參數;f(?)f\left ( \cdot \right )f(?)是一個激活函數,如ReLU。
2.2.4. Combination
Combination層的作用是將上述兩個network的結果組合在一起,以便送入到輸出層,通常選擇concat的方法將兩者組合在一起,如[xL1T,hL2T]\left [ \mathbf{x}_{L_1}^T,\mathbf{h}_{L_2}^T \right ][xL1?T?,hL2?T?],最終送入到輸出層,輸出層的結果為:
p=σ([xL1T,xL2T]wlogits)p=\sigma \left ( \left [ \mathbf{x}_{L_1}^T,\mathbf{x}_{L_2}^T \right ]\mathbf{w}_{logits} \right )p=σ([xL1?T?,xL2?T?]wlogits?)
其中,xL1T∈Rd,xL2T∈Rm\mathbf{x}_{L_1}^T\in \mathbb{R}^d,\mathbf{x}_{L_2}^T \in\mathbb{R}^mxL1?T?∈Rd,xL2?T?∈Rm分別為Cross network和Deep network的輸出,wlogits\mathbf{w}_{logits}wlogits?為Combination層到輸出層的權重,σ\sigmaσ為激活函數σ=11+exp(?x)\sigma =\frac{1}{1+exp\left ( -x \right )}σ=1+exp(?x)1?。
2.3. Cross network中的特征交叉
Cross network中的特征交叉才是Cross network的核心,為了方便描述,在此對Cross network做一些限定:假設網絡的深度L=2L=2L=2,輸入x0∈Rd\mathbf{x}_0\in \mathbb{R}^dx0?∈Rd,為描述簡單,假設d=2d=2d=2,此時x0T=[x0,0,x0,1]\mathbf{x}_0^T=\left [ x_{0,0},x_{0,1} \right ]x0T?=[x0,0?,x0,1?],則L=1L=1L=1層的輸出為:
x1=x0x0Tw0+b0+x0\mathbf{x}_{1}=\mathbf{x}_{0}\mathbf{x}_{0}^T\mathbf{w}_0+\mathbf{b}_{0}+\mathbf{x}_{0}x1?=x0?x0T?w0?+b0?+x0?
其中,x0x0T\mathbf{x}_{0}\mathbf{x}_{0}^Tx0?x0T?為:
x0x0T=(x0,0x0,0x0,0x0,1x0,1x0,0x0,1x0,1)\mathbf{x}_{0}\mathbf{x}_{0}^T=\begin{pmatrix} x_{0,0}x_{0,0} &x_{0,0}x_{0,1} \\ x_{0,1}x_{0,0} &x_{0,1}x_{0,1} \end{pmatrix}x0?x0T?=(x0,0?x0,0?x0,1?x0,0??x0,0?x0,1?x0,1?x0,1??)
由于x0∈Rd\mathbf{x}_0\in \mathbb{R}^dx0?∈Rd,w0∈Rd\mathbf{w}_0\in \mathbb{R}^dw0?∈Rd,則x0x0Tw0∈Rd\mathbf{x}_{0}\mathbf{x}_{0}^T\mathbf{w}_0\in \mathbb{R}^dx0?x0T?w0?∈Rd,最終x1∈Rd\mathbf{x}_{1}\in \mathbb{R}^dx1?∈Rd。L=2L=2L=2層的輸出為:
x2=x0x1Tw1+b1+x1=x0[x0x0Tw0+b0+x0]Tw1+b1+x0x0Tw0+b0+x0\begin{aligned} \mathbf{x}_{2} &= \mathbf{x}_{0}\mathbf{x}_{1}^T\mathbf{w}_1+\mathbf{b}_{1}+\mathbf{x}_{1}\\ &= \mathbf{x}_{0}\left [ \mathbf{x}_{0}\mathbf{x}_{0}^T\mathbf{w}_0+\mathbf{b}_{0}+\mathbf{x}_{0} \right ]^T\mathbf{w}_1+\mathbf{b}_{1}+\mathbf{x}_{0}\mathbf{x}_{0}^T\mathbf{w}_0+\mathbf{b}_{0}+\mathbf{x}_{0} \end{aligned}x2??=x0?x1T?w1?+b1?+x1?=x0?[x0?x0T?w0?+b0?+x0?]Tw1?+b1?+x0?x0T?w0?+b0?+x0??
從上述公式可以看到x1\mathbf{x}_1x1?包含了原始特征x0\mathbf{x}_0x0?從一階(即:x0,0,x0,1x_{0,0},x_{0,1}x0,0?,x0,1?)到二階(即:x0,0x0,0x_{0,0}x_{0,0}x0,0?x0,0?,x0,0x0,1x_{0,0}x_{0,1}x0,0?x0,1?,x0,1x0,0x_{0,1}x_{0,0}x0,1?x0,0?和x0,1x0,1x_{0,1}x_{0,1}x0,1?x0,1?)的所有可能叉乘組合,而x2\mathbf{x}_2x2?包含了其從一階到三階的所有可能叉乘組合。由此可知隨著Cross network的網絡深度的增加,交叉的階數也在增加,通過這種方式實現特征之間的充分交叉,同時通過不同層的權重wi\mathbf{w}_iwi?選擇不同階數的交叉特征,以此達到特征選擇的效果。
注:在Cross network中,網絡中每一層的維數都是相等的。
3. 總結
Deep&Cross Network通過對Cross network的設計,可以顯示、自動地構造有限高階的特征叉乘,并完成不同階特征的選擇,從而在一定程度上擺脫了人工的特征工程,同時保留深度網絡起到一定的泛化作用。
參考文獻
[1] Wang R, Fu B, Fu G, et al. Deep & cross network for ad click predictions[M]//Proceedings of the ADKDD’17. 2017: 1-7.
[2] Cheng H T, Koc L, Harmsen J, et al. Wide & Deep Learning for Recommender Systems[J]. 2016:7-10.
[3] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
總結
以上是生活随笔為你收集整理的DeepCross Network(DCN)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EasyBoot中文启动光盘制作教程
- 下一篇: 阅读基地畅销榜数据抓取