论文:
论文题目:《DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems》
地址:https://arxiv.org/pdf/2008.13535.pdf
我们之前介绍过一篇论文DCN,读过的作者应该都知道,DCN跟DeepFM一样,都是用一些神经网络来实现简单的特征交叉,今天我们就来介绍一下google对DCN改进对V2版本。
一 、背景
学习有效的特征交叉是构建推荐系统背后的关键。然而,稀疏和大的特征空间需要详尽的搜索来识别有效的交叉。之前有论文提出了深度交叉网络(DCN)来自动有效地学习有界度预测特征交互。不幸的是,在为具有数十亿训练样本的网络规模流量提供服务的模型中,DCN 在其跨网络中在学习更多预测性特征交互方面表现出有限的表达能力。尽管取得了重大研究进展,但生产中的许多深度学习模型仍然依赖传统的前馈神经网络来低效地学习特征交叉。
其实之前在知乎也看到过几种关于dcn的讨论,很多推荐/广告从业者都任务dcn是伪特征交叉,具体的理论证明可以去看一下知乎对于dcn这篇论文的评价,这里就不在赘述。
我们先来回顾下原始的dcn模型:
dcn结构跟deepfm差不多,除了fm部分以为,dcn用独特的交叉结构代替了deepfm中fm结构:
简单总结下这个交叉网络的含义:多项式近似、泛化FM、有效映射,第l层实际上就是对原始的输入x0的l+1阶的交叉,实际上cross layer做的事情就是利用标签进行反向传播从而拟合出一个多项式而已。
二、改进
我们先来看整个模型的结构图,可以看到相比dcn原始的版本,v2的结构有两种,一种是堆叠式的串行结构,一种是并行的结构,下面我们直接来介绍cross network结构。
2.1 Cross Network
我们直接看公式吧,其中x0是embedding layer后所有特征向量concat后的向量,其中,,可以看到相比于dcn,变成了一个二维的矩阵:
我们再来看看cross network,其实是用xi做了一次残差,相当于用x0根xi交叉后,用xi进行一次残差,目的是保证有些无效的交叉信息影响模型的效果。
2.2 输出和损失函数
结构,无论是并行结构还是串行,最终都只有一个分数,我们先来讲一下串行结构跟并行结构的输出。
串行结构:直接把交叉后的向量输入到DNN+sigmoid
并行结构:输出为
损失函数:
三、高效混合低秩分解
在实际生产模型中,模型容量往往受限于有限的服务资源和严格的延迟要求。 通常情况下,我们必须寻求在保持准确性的同时降低成本的方法。这时候我们就想到了矩阵低秩分解技术了,我们把一个d✖️d的矩阵分解为两个d✖️r的小矩阵,r<<d.
而且,当原矩阵的奇异值差异较大或快速衰减时,低秩分解的方法会更加有效,V2模型中的w是低秩的,所以很适合做矩阵分解。
DCN-V2中学到的参数矩阵的奇异值衰减趋势,比初始化的矩阵衰减更快,如上图所示。
所以,论文把W分解为两个d✖️r的矩阵U和V
这么做有两个好处:
1)在子空间中学习特征交叉
2)先把输入映射到低维的r空间里,再映射回原来的高维d空间里
此外,从上面两点出发,还可以继续改进,就是上图右边的MoE模型,具体而言:
这就是MoE的模型了,其实是因为之前在子空间建模了,所以可以在多个专家子空间建模后在进行融合。
第二个改进是,论文利用投影空间的低维性质,不是立即从维度投影回来,而是进一步在投影空间中应用非线性变换来细化表示:
网友评论