《DCN V2: Improved Deep & Cross Network and Practical Lessons forWeb-scale Learning to Rank Systems》
有效的特征交叉(feature cross
)对于许多 learning to rank: LTR
模型的成功至关重要。特征交叉提供了单个特征之外的额外交互信息。例如,"国家" 和 "语言" 的组合比其中单个特征更有信息量。在线性模型时代,机器学习从业者依靠手动识别这种特征交叉来增加模型的表达能力。不幸的是,这涉及到一个组合搜索空间,在数据大多是 categorical
的 web-scale
的应用中,这个搜索空间很大而且很稀疏。在这种情况下的搜索是耗时耗力的,往往需要领域的专业知识,并使模型更难以泛化。
后来, embedding
技术被广泛采用,将特征从高维稀疏向量投影到更低维的稠密向量。Factorization Machine: FM
利用 embedding
技术,通过两个 latent vector
的内积来建模 pairwise
特征交互。与那些传统的线性模型中的特征交叉相比,FM
带来了更多的泛化能力。
在过去的十年中,随着更大的算力和巨大的数据规模,工业界的 LTR
模型已经逐渐从线性模型和 FM-based
的模型迁移到深度神经网络(DNN
)。这使得搜索和推荐系统的模型性能得到了全面的提升。人们普遍认为 DNN
是通用的函数近似器,可以潜在地学习各种特征交互。然而,最近的研究(《Latent cross: Making use of context in recurrent recommender systems》
、《Deep & Cross Network for Ad Click Predictions》
)发现:DNN
甚至对二阶特征交叉或三阶特征交叉进行近似建模都是低效的。
为了更准确地捕捉有效的特征交叉,常见的补救措施是通过更宽或更深的网络进一步提高模型容量。这自然是一把双刃剑:
我们在提高模型性能的同时也使模型的服务速度大大降低。在许多生产环境中,这些模型正在处理极高的 QPS
,因此对实时推理有非常严格的延迟要求。可能,serving
系统已经被推到了一个极限,无法承受更大的模型。
此外,更深的模型往往引入可训练性问题,使模型更难训练。
这已经揭示了设计一个能够有效地学习 predictive
特征交互的模型的关键需求,特别是在一个处理数十亿用户的实时流量的资源限制环境中。 最近的许多工作试图解决这一挑战。共同的思想是:利用那些从DNN
学到的隐式高阶交叉、以及显式的和有界的特征交叉(在线性模型中已经发现,显式的和有界的特征交叉是有效的)。隐式交叉是指通过端到端的函数来学习交互,而没有任何明确的公式来建模这种交叉。另一方面,显式交叉是通过一个具有可控交互阶次的显式公式来建模的。
在所有这些方法中,Deep & Cross Network: DCN
是有效和优雅的。然而,在大规模工业系统中部署 DCN
面临许多挑战。DCN
的 cross network
是有局限性的:
cross network
代表的多项式仅由 random cross patterns
的灵活性。
此外,cross network
和 DNN
之间的分配容量是不平衡的。当将 DCN
应用于大规模生产数据时,这种差距明显增加。绝大部分的参数将被用于学习 DNN
中的隐式交叉。
在论文 《DCN V2: Improved Deep & Cross Network and Practical Lessons forWeb-scale Learning to Rank Systems》
中,作者提出了一个新的模型 DCN-V2
,改进了原来的DCN
模型。作者已经在整个谷歌的相当多的 learning to rank system
中成功部署了 DCN-V2
,在离线模型准确性和在线业务指标方面都有显著的提高。
DCN-V2
首先通过 cross layer
学习输入(通常是 embedding layer
)的显式特征交互,然后与深度网络相结合从而学习互补的隐式交互。DCN-V2
的核心是 cross layer
,它继承了 DCN
中 cross network
的简单结构,然而在学习显式的和有界的交叉特征方面的表达能力显著增强。论文研究了以点击为正标签的数据集,然而 DCN-V2
与标签无关,可以应用于任何 learning to rank system
。
论文贡献:
论文提出了一个新的模型 DCN-V2
来学习有效的显式特征交叉和隐式特征交叉。与现有的方法相比, DCN-V2
更具有表达能力,但仍然是高效和简单的。
观察到 DCN-V2
中所学到的矩阵的低秩性质,论文提出利用低秩技术从而在子空间中近似feature cross
,以获得更好的性能和延迟的 trade-off
。
此外,论文提出了一种基于 Mixture-of-Expert
架构的技术,以进一步将矩阵分解为多个较小的子空间。然后,这些子空间通过一个门控机制被聚合起来。
论文利用人工合成数据集进行并提供了广泛的研究,证明了传统的基于 ReLU
的神经网络学习高阶特征交叉的低效率。
通过全面的实验分析,论文证明了的 DCN-V2
模型在 Criteo
和 MovieLen-1M
基准数据集上的表现明显优于 SOTA
算法。
论文提供了一个案例研究,并分享了在一个大规模工业 ranking
系统中部署 DCN-V2
的经验,这带来了显著的离线收益和在线收益。
相关工作:最近 feature interaction learning
工作的核心思想是利用显式的和隐式的特征交叉。为了建模显式交叉,最近的工作引入了乘法运算(pairwise interaction
。我们根据他们如何结合显式部分和隐式部分来组织相关工作。
并行结构:一个工作方向是联合训练两个并行网络,其灵感来自于 wide and deep
模型,其中 wide
组件将原始特征的交叉作为输入,而 deep
组件是一个 DNN
模型。然而,为 wide
组件选择交叉特征又回到了线性模型的特征工程问题。尽管如此, wide and deep
模型已经激发了许多工作从而采用这种并行的架构并改进 wide
部分。
DeepFM
通过在 wide
组件采用 FM
模型从而自动进行 feature interaction learning
。
xDeepFM
通过生成多个 feature map
增加了 DCN
的表达能力,每个 feature map
都编码了当前 level
和输入 level
的特征之间的 pairwise
交互。此外,它还将每个 feature embedding
unit
,而不是将每个元素 unit
。不幸的是,它的计算成本很高( #params
的 10
倍),使得它在工业规模的应用中不实用。
此外,DeepFM
和 xDeepFM
都要求所有的 feature embedding
具有相同的大小,这在应用于工业数据时又是一个限制,因为工业数据的词表大小( categorical features
的大小)从
AFM
通过一个注意力网络为每个特征交互分配重要性。
AutoInt
利用带残差连接的 multi-head self-attention
机制。
InterHAt
进一步采用了分层注意力。
堆叠结构:另一个工作方向是在 embedding layer
和 DNN
模型之间引入一个 interaction layer
,该 interaction layer
创建了显式的特征交叉。这个 interaction layer
在早期阶段捕捉到了特征交互,并促进了后续隐层的学习。
product-based neural network: PNN
引入了 inner product layer
(IPNN
)和 outer product layer
(OPNN
)作为 pairwise interaction layer
。OPNN
的一个缺点在于其高计算成本。
Neural FM: NFM
通过用 Hadamard
积代替内积来扩展 FM
。
DLRM
遵从 FM
,通过内积来计算特征交叉。
这些模型只能创建到二阶显式交叉。
AFN
将特征转化为对数空间,并自适应地学习任意阶的特征交互。
与 DeepFM
和 xDeepFM
类似,这些方法只接受大小相等的 embedding size
。
尽管这些年经过了许多发展,我们的综合实验表明,DCN
仍然是一个强大的基线。我们将此归因于其简单的结构,它促进了 optimization
。然而,正如所讨论的,其有限的表达能力使其无法在 web-scale
的系统中学习更有效的特征交叉。在下文中,我们提出了一个新的架构,它继承了 DCN
的简单结构,同时提高了它的表达能力。
这里描述了一个新颖的模型架构 DCN-V2
来学习显式特征交互和隐式特征交互。DCN-V2
从一个 embedding layer
开始,然后是一个包含多个 cross layer
的 cross network
(用于建模显式特征交互),然后结合一个深度神经网络(用于建模隐式特征交互)。
DCN-V2
中的改进对于将 DCN
用于高度优化的生产系统至关重要。DCN-V2
极大地提高了 DCN
在 web-scale
的生产数据中在建模复杂的显式的交叉项的表达能力,同时保持其优雅的公式,便于部署。DCN-V2
所建模的函数族是 DCN
所建模的函数族的严格超集。
模型整体架构如下图所示,有两种方式将 cross network
与 deep network
结合起来:堆叠式、并行式。此外,考虑到 cross layer
的低秩性质,我们建议利用 low-rank cross layer
的混合来实现模型性能和效率之间更健康的 trade-off
。
Embedding Layer
:embedding layer
将 categorical (sparse)
特征和 dense
特征的组合作为输入,并输出 DCN
类似的 setting
。与 DeepFM, NFM, xDeepFM, DLRM, IPNN, FM
不同的是,DCN-V2
接受任意的 embedding size
。这对于词表规模从
Cross Network
:DCN-V2
和核心在于 cross layer
,它创建了显式的特征交叉。其中第 cross layer
如下所示:
其中:
base layer
,它包含原始的一阶特征,通常被设置为 embedding layer
。
bias
向量。
下图展示了一个单独的 cross layer
。
对于一个 cross network
,最高的多项式阶数是 DCN-V2
退化到 DCN
。
cross layer
仅能建模有界的多项式类,而其他任何复杂的函数空间只能被近似。因此,我们接下来引入了一个 deep network
来补充数据中固有分布的建模。
DCN V1
的公式为:。相比之下, DCN V2
的公式为:。如果不考虑 bias
项和残差项 ,那么: 即:
DCN V1
中,的权重在所有输出位置 上共享; DCN V2
中,的权重在所有输出位置 行独立。因此, DCN V2
的模型容量更高。
DCN V2
的核心:用代替 。读者感觉没什么创新点。
Deep Network
:第 deep layer
的公式为:
其中:
deep layer
的的输入和输出。
bias
向量。
ReLU
。
Deep and Cross Combination
:我们提出了两种结构:
Stacked Structure
(如 Figure 1a
):输入 cross network
,然后是 deep network
,最后是输出层输出
Parallel Structure
(如 Figure 1b
):输入 cross network
和 deep network
,然后这两个网络的输出拼接起来作为最终输出
prediction
为:
其中:sigmoid
函数。
对于损失函数,我们使用 logloss
(带正则化项)。注意,DCN-V2
本身是对 prediction-task
和损失函数无关的。
Cost-Effective Mixture of Low-Rank DCN
:对于那些生产模型来说,模型容量往往受到有限的 serving
资源、严格的 latency
要求的限制。因此,我们寻求使 DCN-v2
更具 cost-efficient
的方法。
DCN-V2
结构简单,计算瓶颈在于 matrix-vector
乘法,这使得我们可以利用矩阵近似技术来降低成本:通过两个低秩矩阵 gap
或快速的谱衰减时,该方法是最有效的。在许多情况下,我们确实观察到所学的矩阵
下图 (a)
显示了 DCN-V2
中来自生产模型的学到的矩阵
因此,我们定义第 cross layer
的低秩版本为:
其中:
这个新的公式有两种解释:
我们在一个子空间中学习特征交叉。
这个解释启发我们采用Mixture-of-Experts: MoE
的思想。MoE-based
模型由两部分组成:experts
(通常是一个小网络)和gating
(输入的一个函数)。在我们的案例中,我们不是依靠一个单一的专家来学习特征交叉,而是利用多个这样的专家,每个专家在不同的子空间学习特征交互,并使用门控机制(取决于输入 mixture
的公式如下(如下图 (b)
所示):
其中:
sigmoid
或 softmax
函数。
我们将输入
这个解释激励我们利用投影空间的低维性质。我们不是立即从 refine the representation
:
其中:
我们旨在有效利用固定的内存/时间预算来学习有意义的特征交叉。以下公式从上到下都代表一个严格意义上的、逐渐增大的函数族:
这一组模型有比较大的工程参考意义,它描述了从简单模型到复杂模型的升级路径,同时也具有一定的物理意义。
算法复杂度:令 embedding size
,cross layers
数量, DCN
专家的数量。此外,我们假设每个专家具有相同的小维度 cross network
的时间复杂度和空间复杂度为 mixDCN
(低秩 DCN
) 的时间复杂度和空间复杂度为
从 bit-wise
和 feature-wise
的角度来看,对于 cross network
,cross network
能够创造出直到
与 DCN
相比,DCN-V2
用更多的参数来刻画相同的多项式类,表达能力更强。此外,DCN-V2
中的特征交互具有更强的表达能力,可以从 bit-wise
和 feature-wise
两方面来看;而在DCN
中,它只是从 bit-wise
的角度来看。
"CrossNet"
或 "CN"
代表 cross network
,"Mix"
代表低秩混合版本。
大多数工作只研究了具有未知交叉模式和噪音的数据的公共数据集。很少有工作在一个干净的环境中用已知的 ground-truth
模型进行研究。因此,重要的是要了解:
在哪些情况下,传统的神经网络会变得没有效率。
在我们提出的模型 DCN-V2
中每个组件的作用。
我们用 DCN
模型中的 cross network
来表示那些特征交叉方法,并与工业推荐系统中常用的 ReLU
进行比较。为了简化实验和便于理解,我们假设每个特征
难度增加时的性能:仅考虑二阶特征交叉,令 ground-truth model
为
稀疏性 (
交叉模式的相似性(
因此,我们创建了难度不断增加的人工合成数据集:
其中: [-1, 1]
之间均匀采样的。
下表报告了 5
次运行和 model size
的平均 RMSE
。可以看到:
当交叉模式很简单时(即,DCN-V2
和 DCN
都很有效。
当模式变得更加复杂时(即,DCN-V2
仍然准确,而 DCN
则准确性下降了。
即使采用更宽更深的结构,DNN
的性能仍然很差。这表明 DNN
在建模单项式模式时效率不高。
每个组件的作用:我们还分别对 3
阶和 4
阶的同质多项式进行了消融研究。对于3
阶和 4
阶,我们从 20
个交叉项。下图展示了层深度对于平均 RMSE
的影响。
显然,2
层对 3
阶多项式取得的最佳性能得到验证(4
阶多项式也是类似的)。在其他层,性能明显下降。
DCN
(红色虚线)在复杂的交叉模式建模方面的有限表达能力。
总而言之,ReLU
(即,ReLU
激活函数的 DNN
)在捕获显式的特征交叉(乘法关系)方面效率不高,即使有更深更大的网络。DCN
准确地捕捉到了简单的交叉模式,但在更复杂的模式中却失败了。DCN-V2
对于复杂的交叉模式仍然是准确和有效的。
数据集:
Criteo
:包含 7
天内的用户日志,包含 45M
个样本和 39
个特征。我们使用前6
天的数据进行训练,并将最后一天的数据随机平均分成验证集和测试集。我们对 13
个 dense
特征执行 log
归一化(feature-2
为 26
个 categorical feature
。
MovieLen-1M
:包含 740k
个样本和 7
个特征。每个训练样本包括一个 <user-features, movie-features, rating>
三元组。我们将任务形式化为一个回归问题:所有一分和两分的评分都被归一化为 0
、四分和五分被归一化为 1
、三分被删除。使用和嵌入 6
个 non-multivalent categorical feature
。数据被随机分成 80%
用于训练、10%
用于验证、10%
用于测试。
baseline
方法:SOTA
的 feature interaction learning
算法,如下表所示。
实现细节:所有 baseline
和我们的方法都在 TensorFlow v1
中实现。为了公平比较,除了特征交互组件,所有模型的实现都是相同的。
embedding
:除了 DNN
和 DCN
模型,所有的 baseline
都要求每个特征的 embedding size
是相同的。因此,我们将所有的模型固定为 Criteo
为 39
、Movielen-1M
为 30
)。
optimization
:Adam
优化器,batch size = 512
(MovieLen batch size = 128
)。权重以 He Normal
来初始化,bias
被初始化为零,梯度被截断为范数 10
。对参数采用 decay = 0.9999
的指数移动平均。
超参数调优:对于所有的 baseline
,我们对超参数进行了粗粒度(大范围)的网格搜索,然后再进行细粒度(小范围)的搜索。为了确保可重复性和减少模型方差,对于每个方法和数据集,我们报告了最佳配置的 5
次独立运行的均值和标准差。我们在下面描述了 Criteo
的详细设置。对于 MovieLens
,我们也遵循类似的过程。
对于 Criteo
的所有 baseline
:
学习率调优范围:对数尺度上从
训练步数调优范围:{150k, 160k, 200k, 250k, 300k}
隐层深度调优范围:{1, 2, 3, 4}
。
隐层维度调优范围:{562, 768, 1024}
。
正则化参数调优范围:
每个模型自己的超参数:
DCN
:交叉层的数量调优范围 {1, 2, 3, 4}
。
AutoInt
:注意力层的数量调优范围 {2, 3, 4}
;attention embedding size
调优范围 {20, 32, 40}
;attention head
数量调优范围 {2, 3}
;残差连接调优范围 {enable, disable}
。
xDeepFM
:CIN layer size
调优范围 {100, 200}
,CIN layer depth
调优范围 {2, 3, 4}
,激活函数为恒等映射,计算为 direct
或 indirect
。
DLRM
:bottom MLP layer size
和数量的调优范围 {(512,256,64), (256,64)}
。
PNN
:我们运行了 IPNN
、OPNN
和 PNN*
,对于后两者,kernel type
调优范围 {full matrix, vector, number}
。
对于所有的模型,参数总数上限为
DCN-V2
和 baseline
比较结果:每个模型的最佳 setting
是超参数空间中搜索出来的。如果两个 setting
的性能相当,我们就报告成本较低的那个。可以看到:
我们看到,DCN-V2
的表现一直优于 baseline
(包括 DNN
),并实现了健康的 quality/cost trade-off
。
注意,在我们为 baseline
模型的最佳 setting
而进行的彻底的超参数搜索中,我们确实探索了更宽、更深的模型。然而,更大的模型也不能产生更多的质量收益,清楚地表明许多 bseline
的瓶颈是质量而不是效率。
Best Setting
:
对于 DCN-V2
模型,"stacked"
和 "parallel"
结构都优于所有 baseline
,而"stacked"
在 Criteo
上效果更好、 "parallel"
在Movielen-1M
上效果更好。
在实践中,我们发现:"stacked"
结构更能提高质量,而 "parallel"
结构有助于减少模型方差。
与 baseline
的比较:
对于二阶方法,DLRM
的表现不如 DeepFM
,尽管它们都来自FM
。这可能是由于 DLRM
在点积层之后省略了一阶稀疏特征。
对于高阶方法,xDeepFM
、AutoInt
和 DCN
在 Criteo
上的表现相似;而在 MovieLens
上,xDeepFM
在 Logloss
上表现出很高的方差。
DCN-V2
在 Criteo
上取得了最好的性能,它显式地建模三阶特征交互。DCN-Mix
有效地利用了内存,并在保持准确性的同时减少了 30%
的成本。单独的 CrossNet
在两个数据集上的表现都优于 DNN
。
与 DNN
的比较:我们调优了 DNN
模型,并使用了更大的 layer size
。令我们惊讶的是,DNN
的表现与大多数 baseline
相差无几,甚至超越了某些模型。
我们的假设是:那些来自 baseline
的显式特征交叉的模型并不是以一种富有表达能力、以及易于优化的方式建立的。前者使其性能容易被具有大容量的 DNN
所匹配,后者则容易导致可训练性问题从而使模型不稳定。因此,当与 DNN
组合时,整体性能被DNN
组件所支配。
在表达能力方面,考虑二阶方法。PNN
的模型比 DeepFM
和 DLRM
更具有表达能力,这导致它在 MovieLen-1M
上的表现更出色。这也解释了 DCN
与 DCN-V2
相比性能较差的原因。
在可训练性方面,某些模型可能天生就比较难训练,导致性能不尽如人意。
在 Criteo
上,PNN
的平均性能与 DNN
相当。这是由 PNN
的不稳定性造成的。虽然它的最好成绩比DNN
好,但它在多次试验中的高标准差推高了平均损失。
模型效率:
对于大多数模型,FLOPS
大约是参数数量的 2
倍。然而,对于 xDeepFM
,FLOPS
要高出参数数量一个量级,这使得它在工业规模的应用中难以部署。
在所有的方法中,DCN-V2
提供了最好的性能,同时保持了相对的效率。
DCN-Mix
进一步降低了成本,在模型效率和质量之间取得了更好的 trade-off
。
超参数研究:
Depth of Cross Layer
:根据设计,cross network
捕获的最高阶特征交叉随着层深的增加而增加。如图 Figure 5 (a)
所示:
随着cross network
的加深,质量有了稳定的提高,表明它能够捕捉到更多有意义的交叉。
然而,当使用更多的层时,改善的速度放缓了。这表明高阶交叉的贡献比低阶交叉的贡献要小。
我们还用一个同样大小的 DNN
作为参考。当有 ≤2
层时,DNN
的表现优于交叉网络;当有更多层时,cross network
开始缩小性能差距,甚至优于 DNN
的表现。
矩阵的秩:模型是 3
个交叉层,然后是 3
个 512-size ReLU
层。如图 Figure 5 (b)
所示:
当 4
时,性能与其他 baseline
持平。
当 4
增加到 64
时,LogLoss
几乎随
当 64
进一步增加到满时,LogLoss
的改善速度减慢了。
我们把 64
称为 rank
阈值。从 64
开始的明显放缓表明:刻画特征交叉的重要信号可以在前 64
个奇异值中捕获。
专家数量:我们观察到:
表现最好的setting
(专家数量、gate
类型、激活函数类型)受到数据集和模型架构的影响。
每种 setting
的最佳表现模型产生了相似的结果。更多的 lower-rank experts
并没有比单个 higher-rank expert
表现更好,这可能是朴素的 gating
函数、以及采取的 optimizations
所导致。我们相信更复杂的 gating
和 optimization
会在 mixture of experts
架构下产生更好的结果。
模型可视化:DCN-V2
中的权重矩阵 block-wise
视图(由
下图展示了第一个交叉层中学到的权重矩阵 (a)
中,由于版权的原因,特征名称被省略了;深色的像素代表较大的权重。在图 (b)
中,每个 block
代表它的 Frobenius
范数。
图 (a)
展示了整个矩阵,橙色方框突出了一些值得注意的特征交叉。非对角线的 block
对应于重要的交叉,这表明 DCN-V2
的有效性。对角线的 block
对应于 self-interaction
(即,
图 (b)
表现学到的一些强交互,如 Gender × UserId
、MovieId × UserId
。
图
(a)
包含的特征更多,因此方块更小;图(b)
包含很少的特征,因此方块显得很大。
DCN-V2
在谷歌中的产品化:我们通过 DCN-V2
同时在离线模型的准确性、以及在线关键业务指标方面都取得了显著的收益。与公共数据集相比,收益也更加明显,这可能是由于生产数据集的数据量明显更大,数据分布更复杂。
生产数据和模型:生产数据是由数以千亿计的训练样本组成的抽样用户日志。稀疏特征的词表规模从 2
到数百万不等。baseline
模型是一个全连接的多层感知机,采用 ReLU
激活函数。
与生产模型的比较:与生产模型相比,DCN-V2
产生了 0.6%
的 AUCLoss
(即,1.0 - AUC
)改进。我们还观察到显著的在线关键业务指标收益。
baseline
为多层感知机,所以DCN-V2
表现好是符合预期的。为什么不和DeepFM
进行比较?
我们分享一些我们通过产品化 DCN-V2
学到的实际经验:
最好在 DNN
的输入层和隐层之间插入交叉层。
我们看到,通过堆叠或拼接 1-2
个交叉层,准确性得到了一致的提高。超过 2
个交叉层,收益开始趋于平稳。
我们观察到,堆叠交叉层和拼接交叉层的效果都不错。堆叠层(stacking layers
)可以学到高阶的特征交互,而拼接层(concatenating layers
)(类似于多头机制)可以捕获到互补的交互。
我们观察到,使用 rank = (input size)/4
的 low-rank DCN
始终保持了 full-rank DCN-V2
的准确性。