hahadsg's note

Follow me on GitHub

DCN (Deep & Cross Network)

基本结构

我们先看看DCN的整体结构:

drawing

下面将其分为三部分去详细讲

Embedding and Stacking Layer

该层将原始特征进行embedding和拼接:对于稀疏特征(一般是onehot出来的),进行embedding;稠密特征直接放进去

所以\(x_0\)为:

\[x_0 = \left[ x^T_{embed, 1},...,x^T_{embed, k},x^T_{dense} \right]\]

这里的\(k\)是稀疏特征的数量,注意最后有一个稠密特征的\(X\)

然后,上面提到的embedding实际会乘上特征的值后放入\(x_0\),即:

\[x_{embed,i} = W_{embed,i}x_i\]

Cross Network

这个部分即为DCN的核心部分,我们可以先这么理解,这一层干的事情相当于把DeepFM的FM部分改成了High-Order FM

这一层的公式为:

\[x_{l+1} = x_0 x_l^T w_l + b_l + x_l = f(x_l, w_l, b_l) + x_l\]

是不是看起来很像残差网络,\(f(x_l, w_l, b_l)\)就是在拟合残差\(x_{l+1} - x_l\)

下图展示了具体如何得到\(x_{l+1}\)

drawing

这里的参数数量是\(d \times L_c \times 2\),其中,\(d\)是输入特征维度,\(L_c\)是层数

(这里为什么不是\(d \times d \times L_c \times 2\)?是因为,可以先算\(x^T_l w_l\),得到\(1 \times 1\)的阵)

另外,这一层表达了High-Order FM,第\(l\)层表达了{l+1}-way的FM,具体原因后面详解

Deep Network

这个部分就是几层全连接层,公式为:

\[h_{l+1} = f(W_l h_l + b_l)\]

这里的\(f(\cdot)\)是ReLU

这一层的参数数量是\(d \times m + m + \left( m^2 + m \right) \times \left( L_d - 1 \right)\)

Cross Network详解

符号定义:\(w_j\)的第\(i\)个元素为\(w_j^{(i)}\);对于\(\alpha = \left[ \alpha_1, ..., \alpha_d \right] \in \mathbb{N}^d\),我们定义\(\lvert\alpha\rvert = \sum\limits^d_{i=1}\alpha_i\),下面\(\alpha\)的作用就是表示特征的次方和,也就是用来表达特征多项式的度(degree of polynomial term)

下面都先省略bias,即\(b_i = 0\)

Polynomial Approximation

我们先看看变量数为\(d\),度为\(n\)多项式的公式:

\[P_n(x) = \left\{ \sum\limits_{\alpha} w_{\alpha} x_1^{\alpha_1} x_2^{\alpha_2} ... x_d^{\alpha_d} \mid 0 \leq \lvert\alpha\rvert \leq n, \alpha \in \mathbb{N}^d \right\}\]

我们再看到{i+1}-th层:\(x_{i+1} = x_0 x^T_i w_i + x_i\),定义\(g_l(x_0) = x^T_i w_i\),得到

\[g_l(x_0) = \left\{ \sum\limits_{\alpha} c_{\alpha} \left( w_0, ..., w_l \right) w_{\alpha} x_1^{\alpha_1} x_2^{\alpha_2} ... x_d^{\alpha_d} \mid 0 \leq \lvert\alpha\rvert \leq l + 1, \alpha \in \mathbb{N}^d \right\}\]

(我们先不细究\(c_{\alpha}\)是什么,以及具体如何推导,这个细节请参考论文)

\(g_l(x_0)\)相当于多项式\(P_{l+1}(x)\),也就是相当于{l+1}-way的FM

Generalization of FM

DCN扩展了FM,能够得到High-Order的FM(由Cross Network的深度决定)

我们回顾一下公式:\(x_{l+1} = x_0 x_l^T w_l + b_l + x_l\)

前面讲了\(x^T_i w_i\)相当于{l+1}-way的FM,而\(x_l\)拟合了0-way到l-way的FM,所以\(x_{l+1}\)就拟合了0-way到{l+1}-way的FM,每增加一层就多拟合了一项高阶FM

(这里我有一点困惑了,\(x^T_i w_i\)相当于{l+1}-way的FM,那又乘了一个\(x_0\)不是就变成{l+2}-way的FM了?所以我觉得是\(x_0 x^T_i w_i\)相当于{l+1}-way的FM)

Efficient Projection

考虑\(\tilde{x} \in \mathbb{R}^d\)作为输入,\(x_p = x_0 \tilde{x}^T w\)作为输出,那么

drawing

前半部分产生了\(d^2\)个\(x_i \tilde{x_j}\)的对,注意这里的\(w \in \mathbb{R}^d\)在后半部分都是一列一列的

所以DCN将交叉的部分做了压缩,最终输出的不是\(d^2\)个数,而是\(d\)个数,这样做使整体效率更高

总结

DCN在DeepFM的基础上将FM部分改成了High-Order的FM,高阶的程度取决于Cross Network的深度

参考

Deep & Cross Network for Ad Click Predictions