交叉网络小规模的参数限制了模型的表达能力,为了获得高度非线性的组合特征,我们引入了DNN,该网络是一个全联接前馈神经网络,每一层都符合下面公式,其中\(H_l\)表示隐藏层,\(f(\cdot)\)是ReLU激活函数。
\[H_{l+1} = f(W_lH_{l}+B_l)\]
为了简单起见假设每个隐藏层的神经元数目相同,另\(L_d\)表示层数\(m\)表示每层的神经元个数,则第一层需要的参数量为\(d\times m + m\),剩余层需要的参数量为\((m^2 +m)\times (L_d -1)\)。
组合层将交叉网络和DNN的输出组合到一块,然后将组合向量输入标准的logits层,用下面的公式解决二分类问题,其中$\sigma (x)=1/(1+exp(-x)) $。
\[p=\sigma ([X_{L_d} ^ T,H_{L_m}^T]\cdot W_{logits} + B_{logits})\]
损失函数如下式,其中\(p_i\)是通过上式计算出来的正例的概率,然后通过联合训练(jointly)交叉网络和DNN,使得两个网络在训练阶段知道彼此的存在。
\[loss = -\frac{1}{N} \sum_{i=1}^N y_i log(p_i) + (1-y_i)log(1-p_i) + \lambda \sum_{l} ||w_l||^2\]
根据Weierstrass逼近定理,在特定平滑假设下任意函数都可以被一个多项式以任意的精度逼近,所以可以从多项式近似的角度分析交叉网络。\(d\)元\(n\)阶多项式参数量为\(O(d^n)\),交叉网络只需要\(O(d)\)参数量就可以生成相同阶数多项式中出现的所有交叉项。
FM的泛化交叉网络借鉴了FM共享参数的思想并将它扩展至更深的结构。FM模型中每个特征\(x_i\)都有一个相关的权重向量\(v_i\),交叉项\(x_ix_j\)的权重通过\(<v_i,v_j>\)计算得到。DCN中每个特征\(x_i\)都对应一个标量集\(\lbrace w_k^{(i)} \rbrace _{k=0}^l\),也就是每个交叉层权重向量\(W\)的第\(i\)分量组成的集合,这样交叉项\(x_ix_j\)的权重通过\(\lbrace w_k^{(i)} \rbrace _{k=0}^l\)和\(\lbrace w_k^{(j)} \rbrace _{k=0}^l\)计算得到。两个模型中每个特征对应的参数都是独立学习的,交叉项的参数通过对应的特征参数计算得到。参数共享不仅使得模型更高效而且对没见过的组合特征具有更好的泛化能力,同时对噪声更健壮。比如\(x_i\)和\(x_j\)在训练数据中没有同时出现过,\(x_ix_j\)对应的权重就无法学习到。FM是一个浅层结构,只能表示2价的特征组合。DCN能够学习高阶的特征组合,在特定阶数限制下能够构建所有的交叉项。而且同对FM的高阶扩展相比,DCN的参数量是输入向量维度的线性函数。
高效映射每个交叉层都会创建\(X_0\)和\(X_l\)各元素之间的两两组合,生成\(d^2\)维度的向量,然后将该向量映射到\(d\)维的空间中。如果直接进行映射操作需要\(O(d^3)\),而DCN提供了一种高效的映射方式只需要\(O(d)\)即可。考虑\(X_p=X \tilde X^T W\),假设\(X\)和\(W\)都是2维列向量,如下所示上面公式是直接计算,下面公式是高效的计算法法。
\[ X_p = X \tilde X^T W = \begin{bmatrix} x_1 \\ x_2 \\ \end{bmatrix} [\tilde x_1, \tilde x_2] W = \begin{bmatrix}x_1 \tilde x_1 & x_1 \tilde x_2 \\ x_2 \tilde x_1 & x_2 \tilde x_2 \\ \end{bmatrix} W \]
\[ X_p ^T = [x_1 \tilde x_1,x_1 \tilde x_2, x_2 \tilde x_1, x_2 \tilde x_2] \begin{bmatrix} W & 0 \\ 0 & W \\ \end{bmatrix} \]
其中\(W\)是一个列向量,可以拆开
\[\begin{bmatrix} w_1 & 0 \\ w_2 & 0 \\ 0 & w_1 \\ 0 & w_2 \\ \end{bmatrix} \]
交叉网络最终输出是什么?需要推导看一下和多项式的区别以及每个特征的参数?
\(X_0X_l^T\)的一阶性质是秩为1吗?为什么会导致无需计算和存储整个矩阵?
多项式近似的理论证明?为什么需要的参数量少?
参数共享思想?FM和DCN到底怎么实现的参数共享?
高效映射高效体现在哪里?复杂度是\(O(d)\)吗?