DCN-M:Google提出改进版DCN,用于大规模排序系统的特征交叉学习(附代码)

本文转载自公众号:浅梦的学习笔记
“本文结合DeepCTR-Torch中的代码实现,介绍了DCN的改进版——DCN-M。该模型能更有效地学习特征交叉,并通过低秩矩阵分解对参数矩阵进行降维,降低计算成本。受MOE结构启发,作者还在多个子空间中建模特征交叉。实验表明,传统的基于ReLU的神经网络在学习高阶特征交叉时效率较低;DCN-M能够在保证效率较高的同时,取得优于SOTA方法的效果。”

本文介绍的论文是《DCN-M: Improved Deep & Cross Network for Feature Cross Learning in Web-scale Learning to Rank Systems》
论文地址:https://arxiv.org/abs/2008.13535

代码实现:DeepCTR-Torch中的DCN-MDCN-Mix

摘要

在大规模(几十亿样本)场景下,DCN[1]中cross网络的表达能力有限,无法学到更加有用的特征交叉。尽管学术界做出了大量进展,但工业界很多深度模型还是依赖于传统的DNN来低效地学习特征交叉。

基于DCN的优缺点以及现有的特征交叉方法,作者提出了改进版的DCN-M[2]来使模型更容易在大规模工业场景下落地。大量实验结果表明,DCN-M在学习特征交叉时的表达能力更强且效率较高,在主流数据集上能够超过SOTA方法。在引入混合低秩矩阵后效果更好。DCN-M结构简单,容易作为building blocks,且在许多大规模L2R系统中取得了显著的线下和线上指标提升。

贡献

  • 提出了一种新的DCN-M模型来有效地学习显式和隐式特征交叉,模型高效、简单的同时,表达能力更强。
  • 基于DCN-M中学习出的低秩矩阵,利用低秩方法来在子空间中进行近似特征交叉,在模型效果和时延上达到了更好的权衡。受MOE结构启发,将矩阵分解至多个子空间,随后通过门控机制来对这些子空间进行融合。
  • 使用人造数据集进行了研究,结果表明传统的基于ReLU的神经网络在学习高阶特征交叉时效率较低。
  • 在Criteo和ml-1m数据上的大量实验表明,DCN-M模型能够显著胜过SOTA方法。

模型

DCN回顾

首先回顾一下DCN的模型结构:
在这里插入图片描述

特征经过embedding、stack后,分别输入cross network和DNN,两路的输出stack后经过单层nn映射为一维的预测分数。

embedding/stack/DNN不必赘述,主要看cross network。cross network的核心思想是更高效地实现显式特征交叉,每一层的计算如下:
x l + 1 = x 0 x l T w l + b l + x l = f ( x l , w l , b l ) + x l \mathrm{x}_{l+1}=\mathrm{x}_{0} \mathrm{x}_{l}^{T} \mathrm{w}_{l}+\mathrm{b}_{l}+\mathrm{x}_{l}=f\left(\mathrm{x}_{l}, \mathrm{w}_{l}, \mathrm{b}_{l}\right)+\mathrm{x}_{l} xl+1=x0xlTwl+bl+xl=f(xl,wl,bl)+xl

其中$x_l,x_{l+1},w_l,b_l \in \mathbb{R}^{d} $

图示:

在这里插入图片描述

x 0 x_0 x0, x l x_l xl, w l w_l wl, b l b_l bl都是d维的列向量,形状是(d,1)。 x 0 x l T w l x_0 x_l^T w_l x0xlTwl的形状是(d,1) * (1,d) * (d,1)=(d,1),与 b l b_l bl, x l x_l xl一致。cross网络每一层仅增加2d个参数( w l w_l wl b l b_l bl),整体参数量为 2 l c d 2l_cd 2lcd l c l_c lc为网络层数),参数量相比DNN是少得多的。

cross网络的改进

DCN中cross网络的参数是向量,DCN-M中换成了矩阵来提高表达能力、方便落地。DCN-M是指“DCN-matrix” ,原来的DCN在这里称为DCN-V(“DCN-vector”)。

x l + 1 = x 0 ⊙ ( W l x l + b l ) + x l \mathbf{x}_{l+1}=\mathbf{x}_{0} \odot\left(W_{l} \mathbf{x}_{l}+\mathbf{b}_{l}\right)+\mathbf{x}_{l} xl+1=x0(Wlxl+bl)+xl

其中$x_l,x_{l+1},b_l \in \mathbb{R}^{d} , , W_l \in \mathbb{R}^{d\times d}$

图示:
在这里插入图片描述

目前最新版的DeepCTR-Torch[3]中已实现了DCN和DCN-M,只需调整parameterization参数即可切换模型。其中CrossNet的核心代码如下:(完整代码见这里

    if self.parameterization == 'vector':
        xl_w = torch.tensordot(x_l, self.kernels[i], dims=([1], [0]))
        dot_ = torch.matmul(x_0, xl_w)
        x_l = dot_ + self.bias[i]
    elif self.parameterization == 'matrix':
        dot_ = torch.matmul(self.kernels[i], x_l)  # W * xi  (bs, in_features, 1)
        dot_ = dot_ + self.bias[i]  # W * xi + b
        dot_ = x_0 * dot_  # x0 · (W * xi + b)  Hadamard-product
    x_l = dot_ + x_l

Deep和cross的结合方式

结合方式分为堆叠(串行)和并行两种:

在这里插入图片描述

这两种结合方式下的DCN-M效果都优于基准算法。但这两种结构之间的优劣不能一概而论,与数据集有关。串行结构在criteo数据集上更好,而并行结构在Movielen-1M上效果更好。

损失函数

损失函数为带L2正则化的log loss:

loss ⁡ = − 1 N ∑ i = 1 N y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) + λ ∑ l ∥ W l ∥ 2 2 \operatorname{loss}=-\frac{1}{N} \sum_{i=1}^{N} y_{i} \log \left(\hat{y}_{i}\right)+\left(1-y_{i}\right) \log \left(1-\hat{y}_{i}\right)+\lambda \sum_{l}\left\|W_{l}\right\|_{2}^{2} loss=N1i=1Nyilog(y^i)+(1yi)log(1y^i)+λlWl22

混合低秩矩阵

工业界模型往往受计算资源和响应时间限制,需要在保证效果的同时降低计算成本。低秩方法被广泛用于降低计算成本——将一个稠密矩阵近似分解为两个”高瘦“的低秩矩阵。而且,当原矩阵的奇异值差异较大或快速衰减时,低秩分解的方法会更加有效。作者发现,DCN-M中学到的参数矩阵是低秩的(所以比较适合做矩阵分解)。下图展示了DCN-M中学到的参数矩阵的奇异值衰减趋势,比初始化的矩阵衰减更快:

在这里插入图片描述

因此,作者将参数矩阵 W l ∈ R d × d W_l \in \mathbb{R}^{d \times d} WlRd×d分解为了两个低秩矩阵 U l , V l ∈ R d × r U_l,V_l \in \mathbb{R}^{d \times r} Ul,VlRd×r

x l + 1 = x 0 ⊙ ( U l ( V l ⊤ x i ) + b l ) + x i \mathbf{x}_{l+1}=\mathbf{x}_{0} \odot\left(U_{l}\left(V_{l}^{\top} \mathbf{x}_{i}\right)+\mathbf{b}_{l}\right)+\mathbf{x}_{i} xl+1=x0(Ul(Vlxi)+bl)+xi

这个公式有两种解释:

(1)在子空间中学习特征交叉

(2)将输入特征x映射到低维空间 R r \mathbb{R}^{r} Rr中,然后再映射回到 R d \mathbb{R}^{d} Rd

这两种解释分别激发了作者随后的两处改进:

(1)激发了作者使用Mixture-of-Experts (MoE)的思想,在多个子空间中学习,然后再进行融合。MOE方法包含两部分:专家网络 E E E(即上个公式中使用低秩矩阵分解的cross网络)和门控单元 G G G(一个关于输入 x l x_l xl的函数),通过门控单元来聚合 K K K个专家网络的输出结果:

x l + 1 = ∑ i = 1 K G i ( x l ) E i ( x l ) + x l E i ( x l ) = x 0 ⊙ ( U l i ( V l i ⊤ x l ) + b l ) \begin{aligned} \mathbf{x}_{l+1} &= \sum_{i=1}^{K} G_{i}\left(\mathbf{x}_{l}\right) E_{i}\left(\mathbf{x}_{l}\right)+\mathbf{x}_{l} \\ E_{i}\left(\mathbf{x}_{l}\right) &=\mathbf{x}_{0} \odot\left(U_{l}^{i}\left(V_{l}^{i \top} \mathbf{x}_{l}\right)+\mathbf{b}_{l}\right) \end{aligned} xl+1Ei(xl)=i=1KGi(xl)Ei(xl)+xl=x0(Uli(Vlixl)+bl)

图示:

在这里插入图片描述

(2)激发了作者利用映射空间的低秩性。在映射回原有空间之前,施加了非线性变换来提炼特征:

E i ( x l ) = x 0 ⊙ ( U l i ⋅ g ( C l i ⋅ g ( V l i ⊤ x l ) ) + b l ) E_{i}\left(\mathbf{x}_{l}\right)=\mathbf{x}_{0} \odot\left(U_{l}^{i} \cdot g\left(C_{l}^{i} \cdot g\left(V_{l}^{i \top} \mathbf{x}_{l}\right)\right)+\mathbf{b}_{l}\right) Ei(xl)=x0(Ulig(Clig(Vlixl))+bl)

此公式的代码实现:(低秩空间中的非线性函数目前采用tanh。完整代码详见这里

    # E(x_l)
    # project the input x_l to $\mathbb{R}^{r}$
    v_x = torch.matmul(self.V_list[i][expert_id].T, x_l)  # (bs, low_rank, 1)

    # nonlinear activation in low rank space
    v_x = torch.tanh(v_x)
    v_x = torch.matmul(self.C_list[i][expert_id], v_x)
    v_x = torch.tanh(v_x)

    # project back to $\mathbb{R}^{d}$
    uv_x = torch.matmul(self.U_list[i][expert_id], v_x)  # (bs, in_features, 1)

    dot_ = uv_x + self.bias[i]
    dot_ = x_0 * dot_  # Hadamard-product

复杂度

DCN-M中的cross网络的时空复杂度是 O ( d 2 L c ) O(d^2L_c) O(d2Lc),采用混合低秩矩阵后(称作DCN-Mix)的时空复杂度是 O ( 2 d r K L c ) O(2drKL_c) O(2drKLc),当rK<<d时会更加高效。

实验

RQ1:在什么情况下,显式学习特征交叉的模型能比基于ReLU的DNN更有效?

很多CTR的工作都在针对显式特征交叉进行建模(传统神经网络无法高效地学习到),但很多工作都只在公开数据集上进行研究,这些公开数据集上特征交叉的模式是未知的,且包含许多噪声数据。因此,作者通过特定的特征交叉模式来生成数据集,验证各模型的效果。

首先考虑2阶特征交叉。按照难度由易到难的顺序指定特征交叉的模式:

在这里插入图片描述

f 3 f_3 f3中的集合 S S S和权重 w i j w_{ij} wij是随机指定的。下面我们看看各模型能否有效得学习到这些特征交叉(CN是指单独的Cross Network):

在这里插入图片描述

从RMSE上来看模型拟合的效果:CN-V和CN-M效果较好。当交叉的模式变得复杂时( f 3 f_3 f3),所有方法的效果都有所下降,但CN-M仍然是很准确的。DNN的效果较差,即使是使用更宽、更深的DNN(DNN-large),效果仍然较差。

1-4阶特征交叉(与实际情况较为接近):

在这里插入图片描述

CN-M和DNN的效果如下表所示:

在这里插入图片描述

当增大层数时,CN-M能够捕捉数据中更高阶的特征交叉、达到更好的效果。由于CN-M中的残差项和偏置项,即使模型超过3层(引入了多余的特征交叉),效果也没有变差。

RQ2:去掉DNN后,baselines中的特征交叉部分表现如何?

数据集:Criteo

在这里插入图片描述

  1. 更高阶的模型会比2阶的模型效果更好,说明在Criteo数据集上更高阶的交叉也是有意义的。
  2. 在高阶模型中,Cross Network取得了最好的效果

RQ3 DCN-M的效果与baselines相比如何?能否在准确性和计算成本上取得更好的权衡?

数据集:Criteo、ml-1m

在这里插入图片描述

FLOPS是模型运行时间的近似估计。大部分模型的运行时间大约是参数量#Params的2倍,但xDeepFM却高出了一个数量级,难以落地。DCN-M效果最好,而且相对来说效率比较高;DCN-Mix进一步降低了计算成本,在准确性和计算成本上实现了更好的权衡。

RQ4 cross网络能否替代ReLU层?

在这里插入图片描述

作者进一步对比了DNN和CrossNet的效果。由于实际生产环境中资源有效,往往需要限制模型大小。因此作者限制了模型的内存占用(即参数量)。结果显示,在相同的参数量限制下,CrossNet的效果更好。那是不是说CrossNet就能替代ReLU层?作者表示:还需要更多实验和分析…

RQ5 DCN-M中的各项参数是如何影响模型效果的?

在这里插入图片描述

1.网络层数:

当cross网络层数增加时,效果会稳定提升,说明能够捕捉更有用的交叉。但提升的速度越来越慢,说明高阶特征交叉的作用是低于低阶交叉的。作者也对比了一个相同规模的DNN,层数<=2时DNN效果比cross网络更好,但层数更多时,差距会减小甚至出现反超。

2.矩阵的秩:

当秩小于64时,logloss几乎是呈线性下降;大于64时下降速度放缓。这说明最重要的特征能够被最大的64个奇异值所捕捉。

在这里插入图片描述

3.专家网络的数量:

当其他参数设置为最优时,使用更多的专家网络并没有明显的提升,这可能是由于门控机制和优化方法比较朴素。作者认为,如果采用更精细化的门控机制和优化方法,会从MOE结构中去的更大收益。

RQ6 DCN-M能否捕捉重要的特征交叉?

DCN-M中的权重矩阵 W W W能够反映不同交叉特征的重要程度:

在这里插入图片描述

根据 W W W绘制出不同交叉特征的权重图谱:

在这里插入图片描述

可以看到,模型能够学到一些强特征,例如gender × userid,movieId × userid。

总结

DCN-M模型能够简单且有效地建模显式特征交叉,并通过混合低秩矩阵在模型效果和时延上实现了更好的权衡。DCN-M已成功应用于多个大型L2R系统,取得了显著的线下及线上收益。实验结果表明DCN-M的效果超过了现有SOTA方法。

参考资料

[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] Wang R, Shivanna R, Cheng D Z, et al. DCN-M: Improved Deep & Cross Network for Feature Cross Learning in Web-scale Learning to Rank Systems[J]. arXiv preprint arXiv:2008.13535, 2020.

[3] DeepCTR-Torch: https://github.com/shenweichen/DeepCTR-Torch

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值