【论文解读】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-(https://github.com/shenweichen/DeepCTR-Torch)中DCN-M
和DCN-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的核心思想是更高效地实现显式特征交叉,每一层的计算如下:
其中
图示:
, , , 都是d维的列向量,形状是(d,1)。的形状是(d,1) * (1,d) * (d,1)=(d,1),与, 一致。cross网络每一层仅增加2d个参数(和),整体参数量为(为网络层数),参数量相比DNN是少得多的。
cross网络的改进
DCN中cross网络的参数是向量,DCN-M中换成了矩阵来提高表达能力、方便落地。DCN-M是指“DCN-matrix” ,原来的DCN在这里称为DCN-V(“DCN-vector”)。
其中
,
图示:
目前最新版的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 + bdot_ = x_0 * dot_ # x0 · (W * xi + b) Hadamard-product
x_l = dot_ + x_l
完整代码地址:https://github.com/shenweichen/DeepCTR-Torch/blob/bc881dcd417fec64f840b0cacce124bc86b3687c/deepctr_torch/layers/interaction.py#L406-L461
Deep和cross的结合方式
结合方式分为堆叠(串行)和并行两种:
这两种结合方式下的DCN-M效果都优于基准算法。但这两种结构之间的优劣不能一概而论,与数据集有关。串行结构在criteo数据集上更好,而并行结构在Movielen-1M上效果更好。
损失函数
损失函数为带L2正则化的log loss:
混合低秩矩阵
工业界模型往往受计算资源和响应时间限制,需要在保证效果的同时降低计算成本。低秩方法被广泛用于降低计算成本——将一个稠密矩阵近似分解为两个”高瘦“的低秩矩阵。而且,当原矩阵的奇异值差异较大或快速衰减时,低秩分解的方法会更加有效。作者发现,DCN-M中学到的参数矩阵是低秩的(所以比较适合做矩阵分解)。下图展示了DCN-M中学到的参数矩阵的奇异值衰减趋势,比初始化的矩阵衰减更快:
因此,作者将参数矩阵
分解为了两个低秩矩阵:
这个公式有两种解释:
(1)在子空间中学习特征交叉
(2)将输入特征x映射到低维空间
中,然后再映射回到
这两种解释分别激发了作者随后的两处改进:
(1)激发了作者使用Mixture-of-Experts (MoE)的思想,在多个子空间中学习,然后再进行融合。MOE方法包含两部分:专家网络
(即上个公式中使用低秩矩阵分解的cross网络)和门控单元(一个关于输入的函数),通过门控单元来聚合个专家网络的输出结果:
图示:
(2)激发了作者利用映射空间的低秩性。在映射回原有空间之前,施加了非线性变换来提炼特征:
此公式的代码实现:(低秩空间中的非线性函数目前采用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 spacev_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
完整代码:https://github.com/shenweichen/DeepCTR-Torch/blob/bc881dcd417fec64f840b0cacce124bc86b3687c/deepctr_torch/layers/interaction.py#L464-L537
复杂度
DCN-M中的cross网络的时空复杂度是
,采用混合低秩矩阵后(称作DCN-Mix)的时空复杂度是,当rK<<d时会更加高效。
实验
「RQ1:在什么情况下,显式学习特征交叉的模型能比基于ReLU的DNN更有效?」
很多CTR的工作都在针对显式特征交叉进行建模(传统神经网络无法高效地学习到),但很多工作都只在公开数据集上进行研究,这些公开数据集上特征交叉的模式是未知的,且包含许多噪声数据。因此,作者通过特定的特征交叉模式来生成数据集,验证各模型的效果。
首先考虑「2阶特征交叉」。按照难度由易到难的顺序指定特征交叉的模式:
中的集合和权重是随机指定的。下面我们看看各模型能否有效的学习到这些特征交叉(CN是指单独的Cross Network):
从RMSE上来看模型拟合的效果:CN-V和CN-M效果较好。当交叉的模式变得复杂时(
),所有方法的效果都有所下降,但CN-M仍然是很准确的。DNN的效果较差,即使是使用更宽、更深的DNN(DNN-large),效果仍然较差。
「1-4阶特征交叉」(与实际情况较为接近):
CN-M和DNN的效果如下表所示:
当增大层数时,CN-M能够捕捉数据中更高阶的特征交叉、达到更好的效果。由于CN-M中的残差项和偏置项,即使模型超过3层(引入了多余的特征交叉),效果也没有变差。
「RQ2:去掉DNN后,baselines中的特征交叉部分表现如何?」
数据集:Criteo
更高阶的模型会比2阶的模型效果更好,说明在Criteo数据集上更高阶的交叉也是有意义的。
在高阶模型中,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中的权重矩阵
能够反映不同交叉特征的重要程度:
根据
绘制出不同交叉特征的权重图谱:
可以看到,模型能够学到一些强特征,例如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
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑
获取一折本站知识星球优惠券,复制链接直接打开:
https://t.zsxq.com/y7uvZF6
本站qq群704220115。
加入微信群请扫码:
【论文解读】DCN-M:Google提出改进版DCN,用于大规模排序系统的特征交叉学习(附代码)...相关推荐
- 论文解读:《自适应非局部随机游动用于图像超像素分割》
论文解读:<Adaptive Nonlocal Random Walks for Image Superpixel Segmentation> 1.文章概述 2.背景 2.1 现有的超像素 ...
- 超详细解读:神经语义解析的结构化表示学习 | 附代码分析
在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...
- SCI论文解读复现【NO.3】MSFT-YOLO:基于变压器的改进YOLOv5钢表面缺陷检测(代码已复现)
此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的SC ...
- 【论文解读】比特币:一种点对点的点子支付系统
以上截图便是中本聪关于比特币的原始论文.由于在看区块链.隐私计算及机器学习内容结合的相关文献的时候明显感觉到区块链或隐私计算(或密码学)部分没有机器学习部分阅读的流畅,于是找到这份区块链界鼻祖中本聪关 ...
- 论文解读:门控时钟的gating ratio如何提升
如何让一个clock gater能够gate更多的flip-flops? 如果两个flip-flops的enable和clk相同,那自然可以用同一个clock gater来gate.一般来说,一个mo ...
- Exploring the Connection Between Binary andSpiking Neural Networks论文解读
Exploring the Connection Between Binary andSpiking Neural Networks论文解读 前言 总说 提出B-SNN(论文中为Ⅲ) 实验和结果(论文 ...
- Bigtable论文解读
Bigtable论文解读 1 简介 Bigtable是一种用于管理结构化数据的分布式存储系统,旨在扩展到非常大的尺寸:对数千台商品服务器上的PB数据进行服务.Bigtable不支持完整的关系数据模型, ...
- Bootstrap Your Own Latent论文解读
Bootstrap Your Own Latent 本次分享的是Nips2020的一篇关于自监督学习(SSL)的文章,最近SSL掀起了一波新潮,来跟大家分享一下. 1.前言 最近几年CV领域的大部分自 ...
- IJCAI论文 | 基于改进注意力循环控制门,品牌个性化排序升级系统来了
[小叽导读]:在淘宝网等电子商务网站中,品牌在用户对商品做点击.购买选择正起着越来越重要的作用,部分原因是用户现在越来越关注商品的质量,而品牌是商品质量的一个保证. 但是,现有的排序系统并不是针对用户 ...
最新文章
- win10桌面计算机打不开,win10系统桌面图标打不开的解决技巧
- 操作系统(二十四)多生产者多消费者问题
- 当前标识(NT AUTHORITY\NETWORK SERVICE)没有对“C:\WINDOWS\Microsoft.NET\Frame 的写访
- 窗口位置按钮取消_VBA002:“宏”的保存位置有哪几种方式?
- C# 延迟初始化 LazyT
- 一步步安装Ubuntu 13.10服务版
- 二叉树遍历代码_二叉树的题,就那几个框架,枯燥至极
- IE6/7 double padding-bottom Bug
- #C++初学记录(素数判断)
- Always On可用性组中SQL Server统计信息
- 浅谈python的import
- 我们团队一位Android开发者的故事
- Excel游戏—制作数字炸弹小游戏
- DNN实战-猫狗分类
- 安杰思在科创板IPO过会:拟募资约8亿元,达安基因为其主要股东
- java取拼音首字母_java怎么根据汉字获取字的拼音首字母
- c#实现深拷贝的几种方法
- python写cadance skill_《Cadence 16.6电路设计与仿真从入门到精通》——2.5 Design Entry HDL原理图图形界面...
- 谷歌浏览器如何打开标签时不覆盖原标签
- 重返研一,你会怎么过?