DCN深度交叉网络详解

DCN

基于FM方法的交叉往往只局限于二阶,更高阶的交叉会导致交叉项呈指数形式增加,计算复杂度高,使用成本高。当更高阶的数据交叉时我们可以使用DCN(Deep & Cross Network),深度交叉网络。

FM和DCN的交叉是显示交叉,DNN的交叉是隐式交叉(缺乏实际理论意义)

DCN的迭代

  • DCN-v(DCN)在交叉层引入vector形式的参数以实现特征交叉,在业界的命名也由此而来。【bit-wise
  • DCN-m(DCN-v2)引入的是matrix形式的参数,优化了参数共享,从而细化不同交叉项的差异。【bit-wise
  • xDeepFM针对DCN-v和DCN-m中对特征基于bit-wise的交叉进行改进,实现基于field-wise的交叉。【field-wise

DCN-v(DCN-vector)

DCN-v(即DCN-vector)网络结构包括DNN和特征交叉两部分,在特征交叉部分通过设计网络层实现bit-wise的显式高阶特征交叉。

DCN网络结构

WX20240330-125227@2x

输入层:

  • 稠密特征(dense feature):直接输入

  • 稀疏特征(sparse feature):做embedding

  • 然后稠密特征拼接上稀疏特征后输出到隐层

隐藏层:

中间隐层由DNN network和Cross network组成。

输出层:

神经网络的输出与交叉网络的输出拼接到一块,在通过sigmoid或softmax函数进行CTR预测。

Cross network

特征交叉部分包括N层网络结构,在每一层引入vector形式的参数(也就是$w$),和特征表征进行加和乘等的操作,得到该层的交叉项,再输入到下一层,进行更高阶的交叉。(实现bit-wise的N阶显式高阶特征交叉)

WX20240330-235502@2x

交叉层向量计算

WX20240330-125329@2x

每层的特征交叉过程主要包括两个步骤:

  • 底层特征表征 $x_0$和上一层的特征表征 $x_l$相乘,进行交叉,相乘得到的交叉项通过vector形式的参数$w_l$ 和 $b_l$进行线性变换,得到交叉项结果;
  • 交叉项结果和上一层的特征表征$x_l$ 相加,得到该层的特征表征$x_l$ 。
  • 交叉层向量计算公式如下

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

特征经过L层操作后,得到L+1阶交叉特征。特征交叉层引入了残差的思想,每层的交叉操作函数f拟合和的残差,有利于缓解梯度消失的问题,从而使网络具备更深的深度。

计算示例

我们以计算交叉层最下层(此时$l$的值为0,也就是计算$x_1$)为例,计算$x_1$的值:
$$ x_{1} = x_0 \cdot x_0^T \cdot w_0 + b_0 + x_0 $$

假设$x_0$是三维的$\begin{bmatrix} X_1 \\ X_2 \\ X_3 \end{bmatrix}$,$w_0$为$\begin{bmatrix} W_1 \\ W_2 \\ W_3 \end{bmatrix}$,$b_0$为$\begin{bmatrix} B_1 \\ B_2 \\ B_3 \end{bmatrix}$,则上述$x_0$与$x_0$转置的乘积为:
$$ x_0 \cdot x_0^T = \begin{bmatrix} X_1 \\ X_2 \\ X_3 \end{bmatrix} \cdot \begin{bmatrix} X_1 & X_2 & X_3 \end{bmatrix} = \begin{bmatrix} X_1 \cdot X_1 & X_1 \cdot X_2 & X_1 \cdot X_3 \\ X_2 \cdot X_1 & X_2 \cdot X_2 & X_2 \cdot X_3 \\ X_3 \cdot X_1 & X_3 \cdot X_2 & X_3 \cdot X_3 \end{bmatrix} $$
接下来$x_0 \cdot x_0^T$与$w_0$相乘用来减少参数量( $x_0 \cdot x_0^T$结果中的每一列都共享一个$W$值,如:第一列共享$W_1$,第二列共享$W_2$ …,这种共享的方式会造成一些损失 )。

从下面的结果总可以发现,向量中(域中)每一个元素都两两相乘【交叉】。
$$ x_{1} = x_0 \cdot x_0^T \cdot w_0 + b_0 + x_0 = \begin{bmatrix} X_1 X_1 W_1 + X_1 X_2 W_2 + X_1 X_3 W_3 + B_1 + X_1 \\ X_2 X_1 W_1 + X_2 X_2 W_2 + X_2 X_3 W_3 + B_2 + X_2 \\ X_3 X_1 W_1 + X_3 X_2 W_2 + X_3 X_3 W_3 + B_3 + X_3 \end{bmatrix} $$
从$x_1$的最终结果中可以看出,$x_1$的值包含了原始特征 $ \begin{bmatrix} X_1 & X_2 & X_3 \end{bmatrix} $ 从1阶到2阶的所有的交叉项。

同理:
$$ x_{2} = x_0 \cdot x_1^T \cdot w_1 + b_1 + x_1 $$
$x_2$的最终结果包含了原始特征 $ \begin{bmatrix} X_1 & X_2 & X_3 \end{bmatrix} $ 从1阶到3阶的所有交叉项。

归纳总结:

一直到 $l$ 层,$ x_0 \cdot x_l^T \cdot w_l $ 乘法操作实现了2阶到 $l+1$ 阶的所有交叉组合,再加上 $x_l$,最终的结果表征了从1阶到L+1阶所有阶数的交叉项。

参数共享

交叉操作中,参数向量 $w$ 通过乘法操作,实现对交叉项结果的线性组合。

2321434534534
  • 交叉层通过矩阵乘法 $ x_0 x_l^T $ 生成 特征交叉映射(feature map),其中每一行代表不同特征的交叉组合。
  • 参数 $ w_l $ 用于对交叉项进行 线性组合,计算下一层的输出 $ x_{l+1} $。
  • feature map中第 $i$ 行的交叉项与 $x_l$ 相乘得到 $ x_{l+1} $对应的第 $ i $ 项,feature map中的每一行共享参数 $ w_l $。
  • 参数共享:所有交叉项共享同一个权重向量 $ w_l $,减少参数量并增强泛化性。

参数共享的优缺点

优点:

  • 减少参数量:避免为每个交叉项单独学习权重,降低计算成本。
  • 增强泛化能力:即使某些特征组合未在训练数据中出现,模型仍能通过其他组合学习到的权重进行泛化。

缺点:

  • 缺乏差异性:所有交叉项共享同一组权重,无法区分不同交叉组合的重要性,限制模型表达能力。(不同行线性组合的差异性无法体现)

总结与改进

  • DCN的交叉层通过参数共享实现高效的特征交叉,但牺牲了组合差异性;

  • 针对参数共享的不足,DCN-m(如DCN-v2)引入更灵活的参数化方法(如引入独立权重或高阶交互),以提升交叉特征的区分能力。

DCN-m(DCN-Matrix,DCN-v2)

DCN-m(DCN-Matrix,又称DCN-v2)的整体思路和原理与DCN-v基本一致,在DCN-v的基础上对特征交叉的改进,通过在特征交叉层引入matrix形式的参数,使特征交叉层中的feature map可以进行差异化线性组合,从而提高对交叉特征的学习能力。

DCN-v2的特征交叉网络是通过对特征进行相乘和相加操作,实现显式高阶交叉。

网络结构

DCN-m的模型结构如下图所示由特征交叉结构和DNN结构两部分构成,这两个部分可以采用串行也可以采用并行,这两部分的结果组合后经过输出层得到模型结果。【并行更常用】

WX20240330-125515@2x

Cross network

WX20240330-125530@2x

特征交叉结构中每层网络的计算公式:

$$ \mathbf{x}_{l+1} = \mathbf{x}_0 \odot (\mathbf{w}_l \mathbf{x}_l + \mathbf{b}_l) + \mathbf{x}_l $$

  • $\odot$ 表示按位乘

  • $\mathbf{w}_l$ 表示 $l$ 层的权重矩阵。

  • $\mathbf{w}_l$ 为matrix形式的参数。正是因为在计算中引入了matrix形式的参数,DCN-m实现了对特征表征形成的feature map中不同行所表示的feature进行差异化组合,从而相比DCN-v,提高了网络对特征交叉的学习能力。

  • $\mathbf{b}_l$ 标识 $l$ 层的偏置向量。

参数理解

2413534543

特征交叉层的参数 $\mathbf{w}$ 为matrix形式,它实现了对交叉项的差异化线性组合。以第$l$层为例,首先$\mathbf{w}_l$ 和 $\mathbf{x}_l$ 相乘,是对 $\mathbf{x}_l$ 所表征的feature进行线性组合,相乘结果 $\mathbf{w}_l \mathbf{x}_l$ 的每一维对应了不同的参数 $\mathbf{w}_l^{(i)}$,也就是结果中的每一维都是 $\mathbf{x}_l$ 所有维线性组合后的表征,因此每一维包含更丰富的表达,$\mathbf{w}_l \mathbf{x}_l$ 再和 $\mathbf{x}_0$ 按位相乘,实现更高一阶的交叉,从而使交叉结果的表征更丰富。

交叉结构特点

  • 每层的输入和输出形状相同,因此每层的参数量相同,即参数 $\mathbf{w}_l$ 和 $\mathbf{b}_l$ 的参数量,为 $N^2 + N$($N$ 为特征表征的维度),特征交叉模块整体的参数量随着层数线性增长,为 $O(N^2L)$($L$ 为层数)。

  • 由于每层引入了matrix形式的参数,因此参数量明显比DCN-v增多。由此也可以看出,模型效果的提升,在DCN-m上相应的代价的体现是参数量的增加。

  • 每层的计算量为 $O(N^3)$,因此特征交叉模块的时间复杂度为 $O(N^3L)$。

  • 特征的交叉阶数由网络深度决定,当特征交叉网络层数为$L$层时,交叉阶数为$L+1$。

  • 特征交叉网络的输出,包含了从1阶(特征本身 $\mathbf{x}_0$)到$L+1$阶的所有特征交叉项组合。

矩阵分解优化交叉网络

存在问题
  • 在原始的DCN-V2中,交叉层(Cross Network)通过引入一个稠密的权重矩阵 $ W \in \mathbb{R}^{d \times d} $ 显式建模特征交互。相比于其它特征交叉方法参数量大,尤其是当特征维度 $ d $ 较大时,矩阵 $ W $ 的参数规模会变得非常庞大为$ O(d^2) $,导致计算和存储成本高昂。
  • 可以采用矩阵分解的方式进行优化,使特征交叉层的参数低秩化,在保证模型效果的同时有效减少参数量。
  • 矩阵分解是一种降低参数量的常用方法,通过把一个大参数量的矩阵分解为两个简单的矩阵相乘,实现参数量的控制。
优化方式
ScreenShot_2026-08-03_173312_697

通过训练过程观察到,实际训练后的矩阵 $ W $ 具有低秩特性(即其奇异值衰减较快)。因此,可以通过低秩分解技术近似表示 $ W $:
$$ W \approx UV^\top $$

其中 $ U, V \in \mathbb{R}^{d \times r} $,且秩 $ r \ll d $。这样,参数规模从 $ O(d^2) $ 降至 $ O(2dr) $,显著减少了计算开销。

低秩交叉层的公式为:
$$ \mathbf{x}_{l+1} = \mathbf{x}_0 \odot \left( U_l (V_l^\top \mathbf{x}_l) + \mathbf{b}_l \right) + \mathbf{x}_l, $$

  • $ U_l, V_l $ 是低秩矩阵,用于在子空间中学习特征交互。
  • $ \odot $ 表示逐元素乘法(Hadamard积)。
  • 残差连接($ +\mathbf{x}_l $)保留了低阶特征交互。
优化后的增强点
  • 计算高效:将矩阵参数 $W_l$ 分解为两个向量参数 ${U}_l$ 和 $V_l$,有效减少了参数量,每一层的复杂度从 $ O(d^2) $ 降到了 $ O(2dr) $。
  • 保持表达能力:通过低秩近似,模型仍能捕捉重要的特征交互模式。

DCN-Mix(DCN-Mixture)

单一的低秩矩阵可能无法充分建模复杂的特征交互模式。受混合专家(Mixture of Experts, MoE)架构启发,作者提出混合低秩专家(DCN-Mix)。在矩阵分解减少参数量的基础上,通过多个低秩子空间组合进一步提升模型的表达能力。

子空间MoE优化

借鉴MoE的思路,在多个子空间学习特征交叉,即通过多个Expert学习特征交叉,每个expert表征一个子空间,再通过Gating方式将各个子空间的特征交叉结果融合。当K=1时,表示只有一个子空间,简化为普通的矩阵分解,即没有拆分子空间的DCN-m。

wechat_2025-08-05_232837_437
  • 多专家设计

    • 使用 $ K $ 个独立的低秩专家(每个专家对应一对矩阵 $ U_l^k, V_l^k $),每个专家在子空间中学习不同的特征交互模式。
    • 每个专家的输出为:
      $$ E_k(\mathbf{x}_l) = \mathbf{x}_0 \odot \left( U_l^k (V_l^{k\top} \mathbf{x}_l) + \mathbf{b}_l \right). $$
  • 门控机制(Gating)

    • 引入门控函数 $ G_k(\mathbf{x}_l) $ 动态分配权重,组合多个专家的输出:
      $$ \mathbf{x}_{l+1} = \sum_{k=1}^K G_k(\mathbf{x}_l) E_k(\mathbf{x}_l) + \mathbf{x}_l. $$
    • 门控函数可以是简单的常数(如均匀加权)、Sigmoid或Softmax。
  • 非线性增强

    • 使特征变换具有非线性,从而提高特征交叉结果的表征能力。

    • 在低维投影空间($ V_l^{k\top} \mathbf{x}_l $)后引入非线性激活函数 $ g(\cdot) $(如ReLU),进一步细化特征表示:
      $$ E_k(\mathbf{x}_l) = \mathbf{x}_0 \odot \left( U_l^k \cdot g(C_l^k \cdot g(V_l^{k\top} \mathbf{x}_l)) + \mathbf{b}_l \right). $$

DCN-Mix利用多个Expert在不同的子空间学习特征交叉,并对特征变换引入非线性,理论上提高了特征交叉网络的学习能力。

优化后的增强点
  • 交叉组合项形成的feature可以进行有差别的组合,提高了模型对特征交叉的学习能力;

  • 优化过程引入了子空间和特征的非线性变化,加强了特征交叉的学习。

  • 灵活建模:不同专家专注于不同的交互模式,门控机制自适应选择重要子空间。

  • 效率与性能平衡:通过控制专家数量 $ K $ 和秩 $ r $,实现计算成本与模型性能的权衡。

风险点
  • 优化后的网络的学习是在一个非常高维的空间中,增加了学习难度,实际收敛过程可能不如预期,难以达到理论上预期的效果。
  • 对于多个子空间的特征交叉,在实际过程中,可能会遇到效果集中在单个Expert上,造成坍缩现象
  • 参数量和计算复杂度明显增加,增加线上性能压力,模型可能无法上线,因此上线时需结合工程性能进行适当优化;

优化总结

  • 矩阵分解:通过低秩近似减少参数量,提升计算效率。
    • 原始DCN-v2使用矩阵分解优化,每一交叉层的原始稠密权重矩阵$ W_l $,被分解成两个小矩阵$ U_l $和$ V_l $
  • MoE优化:结合多个低秩专家和门控机制,增强模型对复杂特征交互的建模能力。
    • 进一步使用MoE优化,每个交叉层包含K个低秩专家,每个专家对应两个小矩阵$ U_l^k, V_l^k $

不同模型交叉对比

  • FM:vector-wise交叉
  • Cross network(DCN):bit-wise交叉,又称element-wise。
  • Cross network(DCN-v2):bit-wise交叉,优化了交叉层的共享权重。
  • DeepFM中的交叉是向量的相乘,DCN中的交叉是向量中的每个元素值进行交叉,向量内神经元两两相乘。