一、DCN [2017]

《Deep & Cross Network for Ad Click Predictions》

  1. 点击率(CTR)预估是一个大规模问题,对价值数十亿美金的在线广告行业至关重要。在广告行业中,广告主向媒体平台付费从而在媒体的网站上展示他们的广告。一种流行的付费方式是按点击付费(cost-per-click: CPC),其中仅发生点击的时候平台才向广告主收费。因此,平台的收入很大程度上依赖于准确预估点击率的能力。

    特征工程一直是许多预测模型成功的关键。识别常见的、预测性(predictive)的特征,并同时探索未见的(unseen)或罕见的交叉特征(cross feature)是做出良好预测的关键。然而,这个过程并不简单,而且通常需要手动特征工程或详尽的搜索(exhaustive searching)。web-scale 推荐系统的数据大多数是不连续(discrete)的、离散(categorical)的,导致特征空间庞大而稀疏,这对特征探索带来了挑战。因此大多数大型系统限制为线性模型,如逻辑回归(logistic regression)。

    线性模型简单(simple)、可解释(interpretable)、且易于扩展(scale),然而它们的表达能力有限。另一方面,交叉特征(cross features)已被证明在提高模型的表达能力方面具有重要意义。不幸的是,交叉特征通常需要手动特征工程或详尽的搜索(exhaustive search)来识别 。此外,泛化到未见过的特征交互(unseen feature interactions) 是困难的。

    DNN 模型能够自动学习特征交互(feature interactions),然而它们隐式地生成所有交互,并且在学习某些类型的交叉特征(cross features)时不一定有效。

    在论文 《Deep & Cross Network for Ad Click Predictions》 中,通过引入一种新颖的神经网络结构,交叉网络(cross network),以自动方式显式应用特征交叉(feature crossing ),从而避免特定于任务的特征工程。交叉网络由多个交叉层组成,其中交互的最高阶(highest-degree)由层的深度决定。每一层在现有阶次交互的基础上产生更高阶的交互,并保留来自前一层的交互。

    交叉网络和深度神经网络 DNN 联合训练。DNN 虽然可以捕获跨特征(across features)的非常复杂的交互,但是和交叉网络相比,DNN 需要几乎高一个数量级的参数、无法显式地形成交叉特征(cross features)、并且可能无法有效地学习某些类型的特征交互。通过联合训练交叉网络和 DNN 网络,模型可以有效地捕获预测性的特征交互,并且在 Criteo CTR 数据集上提供了 SOTA 的性能。

  2. 相关工作:由于数据集的大小和维度的急剧增加,已经提出了许多方法来避免大量的任务特定(task-specific)的特征工程,这些方法大多数基于 embedding 技术和神经网络。

    • 因子分解机(Factorization machine: FM)将稀疏特征投影到低维稠密向量上,并从向量内积中学习特征交互。

      field 感知因子分解机(field-aware factorization machine: FFM)进一步允许每个特征学习多个向量,其中每个向量与一个 field 相关联。

      遗憾的是,FMFFM 的浅层结构限制了它们的表达能力(representative power)。已经有工作将 FM 扩展到更高阶,但是一个缺点在于它们的大量参数会产生高昂的计算成本。

    • 由于 embedding 向量和非线性激活函数,深度神经网络 DNN 能够学习重要的高阶(high-degree)特征交互。

      残差网络最近的成功使得训练非常深的网络成为可能。Deep Crossing 扩展了残差网络,并通过 stacking 所有类型的输入来实现自动特征学习 feature learning

    深度学习的显著成功引发了对其表达能力的理论分析。有研究表明,在给定足够多的隐单元或隐层的情况下,DNN 能够在某些平滑性假设(smoothness assumption)下以任意准确性逼近任意函数。此外在实践中,已经发现 DNN 在参数数量适中的情况下运行良好。一个关键的原因是:大多数具有实际兴趣(practical interest)的特征都不是任意的。

    然而,剩下的一个问题是:在代表这种实际兴趣的特征方面,DNN 是否确实是最有效的。在 Kaggle 竞赛中,很多获胜解决方案中的手工制作特征都是低阶(low-degree)的,以显式的格式(explicit format)并且有效。另一方面,DNN 学习的特征是隐式的,且高度非线性。这为设计一个能够比通用 DNN 更有效、更显式地学习有界阶次特征交互的模型提供了启发。Wide & Deep 模型就是这种精神的典范,它将交叉特征(cross features)作为线性模型的输入,并与 DNN 模型联合训练线性模型。然而,Wide & Deep 的成功取决于交叉特征的正确选择,这是一个指数问题,目前还没有明确有效的方法。

  3. 论文 《Deep & Cross Network for Ad Click Predictions》 提出了深度交叉网络(Deep & Cross Network: DCN)模型,该模型支持具有稀疏和稠密输入的 web-scale 自动特征学习。DCN 有效地捕获有界阶次的特征交互,学习高度非线性交互,不需要手动特征工程或详尽的搜索,并且计算成本低。

    论文的主要贡献包括:

    • 提出了一种新颖的交叉网络,它在每一层显式地应用特征交叉,有效地学习有界阶次的、预测性的交叉特征,并且无需手动特征工程或详尽的搜索。

    • 交叉网络简单而有效。根据设计,多项式最高阶次在每一层都增加,并且由层的深度来决定。网络由最低阶到最高阶的所有阶次的、系数不同的交叉项(cross terms)来组成。

    • 交叉网络内存高效,易于实现。

    • 实验结果表明,采用交叉网络的DCNloglossDNN 更低,而且 DCN 的参数数量相比 DNN 要少了接近一个量级。

1.1 模型

  1. 我们将描述 DCN 模型的架构,如下图所示。DCN 模型从 embedding and stacking 层开始,然后是并行的交叉网络和深度网络,然后是一个组合层(combination layer)从而拼接了来自两个网络的输出。

  2. Embedding and Stacking Layer:我们考虑具有稀疏和稠密特征的输入数据。在 CTR 预估等 web-scale 推荐系统中,输入主要是离散特征,如 country=usa 。这些特征通常被编码为 one-hot 向量,如 [0, 1, 0] 。然而,这通常会导致大型词表vocabulary 的高维特征空间。

    为了降低维度,我们采用 embedding 技术将这些二元特征转换为实值的稠密向量(通常称作 embedding 向量):

    fembed(i)=Wembed(i)f(i)

    其中:

    • fi 为第 ifieldone-hot 向量。

    • fembed(i) 为第 ifieldembedding 向量。

    • Wembed(i)Rne(i)×nv(i) 为待优化的、对应的 embedding 矩阵,ne(i)embedding sizenv(i) 为第 ifield 的词表大小。

    最后我们将 embedding 向量以及归一化的稠密特征 fdenseRnd stack(即拼接)到单个向量中:

    x0=[fembed(1)||||fembed(K)||fdense]Rne(1)++ne(K)+nd

    其中:K 为输入的field 的数量,nd 为稠密特征维度,|| 表示向量拼接操作。

  3. Cross Network:我们新颖的交叉网络的核心思想是:以有效的方式应用显式的特征交叉。

    交叉网络由交叉层(cross layers )来组成,每层可以公式化为:

    xl+1=f(xl,wl,bl)+xl=x0xlwl+bl+xl

    其中:

    • xlRd 为第 l 层交叉层的输出。

    • wl,blRd 为第 l 层交叉层的参数, d=ne(1)++ne(K)+nd

    注意:这里没有非线性激活函数,因此每一层的输出都是 x0 的线性函数。

    每个交叉层在特征交叉函数 f() 之后加上它的输入,这使得交叉函数 f:RdRd 拟合残差 xl+1xl

    单个交叉层的可视化如下图所示。

    • 高阶特征交互:交叉网络的特殊结构导致交叉特征的阶次随着层的深度而增加。 L 层交叉网络的最高多项式阶次(就输入 x0 而言)是 L+1

      事实上,交叉网络包含输入 x0 中所有阶次从 1L+1 的交叉项(cross termx0,1α1x0,2α2x0,dαd 。详细参考后面的分析。

    • 复杂度分析:假设交叉层的数量为 Lc ,交叉层输入特征维度为 d ,那么交叉网络的参数数量为 d×Lc×2

      交叉网络的时间和空间复杂度在输入维度 d 上是线性的。因此,和deep 组件(DCNdeep 部分)相比,交叉网络引入的复杂度可以忽略不计,使得 DCN 的整体复杂度保持在和传统 DNN 相同的水平。这种效率得益于矩阵 x0xlrank-one 属性(即这个矩阵的秩为 1 ),这使得我们能够生成所有交叉项,而无需计算或存储整个矩阵。

    交叉网络的参数太少从而限制了模型的容量。为了捕获高度非线性交互,我们引入了一个并行的深度网络(Deep Network)。

  4. Deep Network:深度网络是一个全连接的前馈神经网络,每一个 deep layer 可以公式化为:

    hl+1=σ(Wlhl+bl)

    其中: σ() 为激活函数,WlRdl+1×dl,blRdl+1dlhl 的向量长度。

    • 复杂度分析:假设所有隐层的维度都是 d1=d2==dLd=m ,一共 Ld 层,则deep network 的参数数量为:

      d×m+m+(m2+m)×(Ld1)

      其中:

      • 输入为 x0Rd ,所以第一层的参数数量为 d×m+m

      • 后续的 Ld1 层,每一层的参数数量为 m×m+m

  5. Combination Layer:组合层将来自两个网络的输出拼接起来,并将拼接后的向量馈入标准的 logits 层。

    对于二类分类问题,这可以公式化为:

    p=sigmoid(wlogits[xLc||xLd]+blogits)

    其中:

    • xLcRd 为交叉网络的输出,xLdRm 为深度网络的输出,|| 表示向量拼接。

    • wlogitsRd+mlogits 层的权重向量,blogitsRlogits 层的biassigmoid(.)sigmoid 激活函数。

  6. 模型的损失函数为带正则化的对数似然函数:

    L=1N(i=1N[yilogpi+(1yi)log(1pi)])+λ(||W||22+||w||22)

    其中: N 为样本数量,yi 为样本的真实 labelλL2 正则化系数。

    我们联合训练交叉网络和深度网络,因为这允许每个 individual 网络在训练期间了解其它网络。

1.2 理论分析

  1. 这里我们从理论上分析 DCN 的交叉网络,从而了解它的有效性。交叉网络 可以理解为:多项式逼近( polynomial approximation)、FM 泛化(generalization to FM)、或者有效投影(efficient projection)。

  2. 在这里为了讨论方便,我们假设所有的 bias 项都是零。记 wl 的第 i 个元素为 wl,i。令 x=(x1,,xd)Rd,交叉项为 x1α1×x2α2××xdαd ,其中 α=(α1,,αd)Nd 为每一项的度(degree),并且 αi 为非负整数。则该交叉项的度为:

    |α|=i=1dαi,αiN

    如果多项式中有多个交叉项,则多项式的degree(也称作阶次)为所有交叉项中 degree 的最大值。

  3. 多项式逼近(polynomial approximation):根据 Weierstrass 逼近定理,任何在一定平滑性假设(smoothness assumption)下的函数都可以通过多项式以任意准确性逼近。因此我们从多项式逼近的角度来分析交叉网络。特别是,交叉网络以一种有效的、表达能力强的、以及更好地泛化到真实世界数据集的方式来逼近相同阶次的多项式。

    定义多项式:

    Pn(x)={αwαx1α1xdαd|0|α|n,αNd}

    该多项式的项一共有 O(dn) 个,即参数数量有 O(dn) 个。

    我们表明,在只有 O(d) 个参数的情况下,交叉网络可以包含相同阶次多项式中出现的所有交叉项,每个交叉项的系数彼此不同。

    定理:考虑一个 L 层的交叉网络,第 l+1 层定义为 xl+1=x0xlwl+xl 。定义交叉网络的输入 x0=(x1,x2,,xd),交叉网络输出为 gL(x0)=xLwL,其中 wlRd 为参数。则多元多项式 gL(x0) 复现(reproduces)了以下的多项式:

    {αcα(w0,,wL)x1α1xdαd|0|α|L+1,αNd}cα(w0,,wL)=MαiBαjPαk=1|α|wik,jk

    其中:

    • Mαwi 无关的常量。

    • i=(i1,,i|α|)为索引向量 ,Bα={y{0,1,,L}|α||yi<yj for i<j and yα=L}

    • j=(j1,,j|α|) 为索引向量,Pα 为索引 (1,,1α1,,d,,dαd) 的所有排列组合构成的集合。

    证明见原始论文。

  4. FM 泛化(generalization to FM):交叉网络和 FM 模型一样具有参数共享(parameter sharing)的精神,并进一步将其扩展到更深的结构。

    • 相同点:在 FM 模型中,特征 xi 关联一个权重向量 vi ,交叉项 xixj 的权重计算为 vivj 。在 DCN 中,特征 xi 关联一组标量 {wl,i}l=1L ,交叉项 xixj 的权重是来自集合 {wl,i}l=0L{wl,j}l=0L 的参数的乘积。两种模型中,每个特征都学习了一些独立于其它特征的参数,交叉项的权重是相应参数的某种组合。

      参数共享不仅使模型更加高效,而且使模型能够泛化到未见(unseen)的特征交互,并对噪声具有更强的鲁棒性。例如,以具有稀疏特征的数据集为例。如果两个二元特征 xixj 在训练数据中很少同时出现或者从未同时出现,那么针对交叉项 xixj 学习的权重将没有任何有意义的预测信息。

    • 不同点:FM 是一种浅层结构,仅限于表达二阶交叉项。相反,DCN 能够表达 L 阶交叉特征,其中 L 为交叉网络的深度。因此,交叉网络将参数共享的思想从单层扩展到多层以及高阶交叉项。注意,和高阶 FM 不同,交叉网络中的参数数量仅随输入维度 d 线性增长。

  5. 有效投影 efficient projection :交叉网络的每一层都是在 x0xl 之间计算成对交互(pariwise interaction),然后投影到 d 维。

    xl+1=x0xlTwl=[x0,1xl,1,x0,1xl,2,,x0,dxl,d][wl000wl000wl]

    其中:

    • 行向量包含了 d2 个元素,它代表 pariwise interaction x0,ixl,j,1i,jd

    • 投影矩阵是一个分块对角矩阵,由 wlRd 作为列向量来构成。

1.3 实验

  1. 这里我们在一些热门的分类数据集上评估 DCN 的性能。

  2. 数据集为 Criteo Display Ads 数据集,用于预测广告点击率。数据集包含 13 个整数特征和 26 个离散特征(categorical features),这些离散特征的基数(cardinality)都很高。

    数据集包含 7 天的 11GB 用户日志,大约 4100 万条记录。我们使用前 6 天的数据进行训练,第 7 天的数据随机分成大小相等的验证集和测试集。

    对于该数据集,logloss0.001 的改进都被认为具有实际意义。当考虑到庞大的用户规模,预测准确性的小幅提升可能会导致公司收入的大幅增加。

  3. 实现:DCN 是用 TensorFlow 实现的,我们简要讨论使用 DCN 进行训练的一些实现细节。

    • 数据处理和 embedding

      • 通过应用对数变换(log transform)来对实值特征进行归一化。

      • 对于离散特征,我们将特征嵌入到维度为 6×(category cardinality)1/4 维的 embedding 向量。然后拼接所有 embedding 从而得到一个维度为 1026 的向量。

    • 优化(optimization):我们使用 Adam 优化器应用了 mini-batch 随机优化,batch size 设置为 512 。我们在深度网络部分采用了 batch normalization,并将梯度裁剪设为 100

    • 正则化(regularization):我们使用了早停策略(early stopping),因为我们发现 L2 正则化或 dropout 没有效果。

    • 超参数:我们根据隐层数量、隐层维度、初始学习率、交叉层的数量执行 grid search ,然后在实验中报告最佳超参数的结果。

      • 对于所有模型(包括 baseline ),隐层数量从 2 ~ 5、隐层维度从 32 ~ 1024,初始学习率从 1e-4 ~ 1e-3,增量为 1e-4

      • 对于 DCN模型,交叉层数量从 1 ~ 6

      所有实验都在训练step = 150000 处早停,超过该时刻开始发生过拟合。

  4. baseline 方法:我们将 DCN 和五种模型进行比较:没有交叉网络的 DCN 模型(DNN)、逻辑回归 (LR)、因子分解机(FM)、Wide & DeepW&D)、Deep CrossingDC)。

    • DNNembedding 层、输出层、超参数调优过程和 DCN 完全相同,它和 DCN 模型的唯一区别在于 DNN 没有交叉层。

    • LR:我们使用了 Sibyl,一种用于分布式逻辑回归的大规模机器学习系统。整数特征在对数尺度下离散化。交叉特征是由复杂的特征选择工具来选择的。所有的 single 特征都被使用。

    • FM:我们使用一个带有专属细节(proprietary details)的 FM-based 模型。

    • W&D:和 DCN 不同的是,W&Dwide 组件将原始稀疏特征作为输入,并依赖于详尽的搜索(exhaustive searching)和领域知识(domain knowledge)来选择预测性的交叉特征。

      我们跳过了和 W&D 的比较,因为没有什么好的方法来选择交叉特征。

    • DC:和 DCN 相比,DC 没有形成显式的交叉特征。DC 主要依靠 stacking(即 embedding 向量拼接) 和残差单元来构建隐式交叉特征。

      我们应用了和 DCN 相同的 embedding 层(即 stacking),然后是另一个 ReLU 层作为一系列残差单元的输入。残差单元的层数从 1 ~ 5 来调优,隐层维度从 1001026 来调优。

1.3.1 性能比较

  1. 这里我们首先比较不同模型的 logloss 性能,然后我们详细比较了 DCNDNN,即进一步研究了交叉网络带来的影响。

  2. 不同模型的最佳测试 logloss 参考下表。最佳超参数为:

    • DCN 模型:使用2deep layer,每层维度 1024;使用 6cross layercross layer 的维度不需要调优,因为该层的维度就等于 x0 的维度 d

    • DNN 模型:使用 5deep layer,每层维度 1024

    • DC 模型:使用 5 层残差单元,残差单元的输入维度为 424、残差单元隐层维度为 537

    • LR 模型:使用 42 个交叉特征。

    可以看到:

    • 最佳的性能是在最深的交叉架构中发现的,这表明交叉网络的高阶特征交互是有价值的。

    • DCN 大大优于所有其他模型。特别是,它优于 SOTADNN 模型,但是仅使用了 DNN 中消耗的 40% 的内存。

    对于每个模型的最佳超参数设置,我们还报告了 10 次独立运行的测试集logloss 的均值和标准差::DCN 0.4422±9×105DNN 0.4430±3.7×104DC 0.4430±4.3×104 。可以看到,DCN 始终大幅优于其它模型。

  3. 考虑到交叉网络仅引入了 O(d) 个额外的参数,我们将 DCN 与其 deep network ,一个传统的 DNN,进行比较,并在改变内存预算和 loss 阈值的同时展示了实验结果。

    给定一定数量参数, loss 被报告为在所有学习率和模型结构中最好的验证损失。我们的计算中省略了 embedding 层中的参数数量,因为它在两个模型中都相同。

    • 下表报告了实现目标 logloss 阈值所需的最少参数数量(比如 7.9×105 表示 7.9 万个参数)。可以看到,DCN 的内存效率比 single DNN 高出近一个量级。这要归功于更有效地学习有界阶次特征交互的交叉网络。

    • 下表比较了受固定内存预算影响的神经网络模型的性能,指标为验证集 logloss。可以看到,DCN 始终优于 DNN

      • 在小型参数(small-parameter)的情况下,cross network 中的参数数量和deep network 中的参数数量相当,显著的改进表明 cross network 在学习有效特征交互方面更有效。

      • 在大型参数(large-parameter)的情况下,DNN 弥补了一些差距,但是 DCN 仍然在很大程度上优于 DNN。这表明 DCN 可以有效地学习某些类型的有意义的特征交互,这些特征交互即使是巨大的 DNN 模型也无法学习。

  4. 我们通过展示将交叉网络引入给定 DNN 模型的效果来更详细地分析 DCN。我们给出在相同的层数和层维度的情况下比较 DNNDCN 的最佳性能,然后对于每个设置,我们展示了验证集 logloss 如何随着添加更多 cross layer 而变化。

    下表给出了 DCNDNN 模型在 logloss 上的绝对差异(需要乘以 102),负值表示 DCN 超越了 DNNNodes 表示 deep network 隐层维度,layers 表示 cross network 深度。 DNN 模型相当于将 DCN 模型的 cross layer 层数设为 0

    可以看到:在相同的实验设置下,来自 DCN 模型的最佳 logloss 始终优于来自相同结构的 single DNN 模型。所有超参数的改进都是一致的,这缓解了初始化和随机优化带来的随机性的影响。

  5. 下图显示了我们在随机选择的设置上增加 cross layer 层数对验证 logloss 的改进。cross layer 层数为 0 表示 single DNN 模型。 layers 表示deep layer 层数,nodesdeep layer 隐层维度。不同的符号表示deep network不同的超参数。

    可以看到:

    • 当向DNN 模型中添加 1cross layer 时,会有明显的改进。

    • 随着更多 cross layer 的引入,对于某些设置的 logloss 继续下降,表明引入的交叉项在预测中是有效的;对于其他设置的 logloss 开始波动,甚至略有增加,这表明引入的更高阶次的特征交互没有帮助。

1.3.2 Non-CTR 数据集

  1. 我们表明DCNNon-CTR 预测问题上表现良好。我们使用了来自 UCI repositoryforest covertype 数据集(包含 581012 个样本和 54 个特征)、以及 Higgs 数据集(包含 1100 万个样本和 28 个特征) 。数据集被随机拆分为训练集(90%)、测试集(10%)。

    我们对超参数进行grid search,其中:

    • deep layer 层数从 1 ~ 10、层的维度从 500 ~ 300

    • cross layer 的层数从 4 ~ 10。对于 DCN,输入向量直接馈送到 cross network 因此不需要探索 cross layer 的维度。

    • 残差单元的层数从 1~5,其中隐层维度从 50 ~ 300

    对于 forest covertype 数据集,DCN 以最少的内存消耗实现了 最佳的准确率 0.9740DNNDC 均达到 0.9737。此时最佳超参数设置为:

    • DCN8 层维度为 54cross layer6 层维度为 292deep layer

    • DNN7 层维度为 292deep layer

    • DC4 层残差单元,残差单元的输入维度为 271、残差单元隐层维度为 287

    对于 Higgs 数据集,DCN 达到了最好的测试 logloss 0.4494,而 DNN 达到了 0.4506DCN 在使用DNN一半的内存并且超越了 DNN。此时最佳超参数设置为:

    • DCN4 层维度为 28cross layer4 层维度为 209deep layer

    • DNN10 层维度为 196deep layer