推荐系统论文阅读

推荐系统论文阅读(二十一)-DeepFM升级版xDeepFM

2020-09-18  本文已影响0人  推荐系统论文阅读

论文:

地址:https://arxiv.org/pdf/1803.05170.pdf

论文题目:《xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems》

为什么要介绍这篇论文呢,因为面试的时候面试官提到了这篇论文还要我推导公式,但是我自己忘了,太尬了,所以决定来复习下了。。。

一 、背景

在前面的文章里面,我们介绍过DeepFM,在这篇论文中,FM将不同特征进行了自动交叉,如果不用FM的话,就需要工作人员自己进行手工特征交叉任务。对于预测性的系统来说,特征工程起到了至关重要的作用。特征工程中,挖掘交叉特征是至关重要的。交叉特征指的是两个或多个原始特征之间的交叉组合。在广告系统中,CTR是一个重要的评价指标,而在ctr预估任务中,各种特征都是至关重要的,有时候多加一个特征都可以让整个广告的ctr提高一点。

但是在特征有限的系统中,该如何去挖掘那些潜在交叉特征呢?

挖掘交叉特征主要依靠人工提取,这种做法主要有以下三种缺点:

1)重要的特征都是与应用场景息息相关的,针对每一种应用场景,算法工程师们都需要首先花费大量时间和精力深入了解数据的规律之后才能设计、提取出高效的高阶交叉特征,因此人力成本高昂;

2)原始数据中往往包含大量稀疏的特征,例如用户和物品的ID,交叉特征的维度空间是原始特征维度的乘积,因此很容易带来维度灾难的问题;

3)人工提取的交叉特征无法泛化到未曾在训练样本中出现过的模式中。

基于以上的分析,我们就必须要设计一种能自动进行特征交叉任务的网络来替代手工制作的交叉特征,让模型的泛化能力更强。在deepfm,dcn中都有自动特征交叉的模块,值得一提的是,在这些模型中,特种的交叉是发生在bit级别的,也就是bit wise级别的特征交叉。什么是bit wise级别的特征交叉呢?

举个例子,比如特征1 = (a,b,c),特征2 = (d,e,f)

那么他们之间的bit wise的特征交叉就是f(w1*a*d, w2*b*e, w3*c*f)比如在DCN中:

可以看到在Cross Network中,特征向量的交叉是bit wise的交叉方式,就是每个level的x都和x0进行bit wise级别的交叉。

另一种特征交叉的方式有vector wise的交叉方式,这种交叉方式的表述为f(w(a*d, b*e,c*f)),可以看到这两个特征是先进行内积操作后才和权值矩阵进行运算的,所以是vector wise的交叉方式。

论文中还提到了两个定义:

explicitly VS implicitly

显式的特征交互和隐式的特征交互。以两个特征为例xi和xj,在经过一系列变换后,我们可以表示成 wij * (xi * xj)的形式,就可以认为是显式特征交互,否则的话,是隐式的特征交互。

二、模型

老规矩,先上模型:

先看图c,xdeepfm是通过一个CIN将得到的向量concat后送到DNN中做ctr预估,这篇论文的关键就是整个CIN了,CIN全称是Compressed Interaction Network,下面来详细介绍下CIN是怎么做的。

2.1 Compressed Interaction Network

为了实现自动学习显式的高阶特征交互,同时使得交互发生在向量级上,文中首先提出了一种新的名为压缩交互网络(Compressed Interaction Network,简称CIN)的神经模型。在CIN中,隐向量是一个单元对象,因此我们将输入的原特征和神经网络中的隐层都分别组织成一个矩阵,记为X0和 Xk。其中,每个Xk都是从上一个的Xk-1推导而来的:

ps:面试的时候这个公式没推导清楚,还是好好讲一下这个公式的计算过程吧。。

CIN的计算分为两个步骤,第一个是利用x^0x^k 来计算z^{k+1}

我们看这个图:

我们要弄明白z^{k+1} 的计算过程,就要先知道几个概念。

inner product:(a,b,c) . (1,2,3) = (1*a,2*b,3*c)

outer product: (a,b,c)  。(1,2,3) =[ [ 1a,2a,3a] , [1b,2b,3b], [1c,2c,3c] ]

弄清楚这两个概念后就可以来看看这个的计算过程了。

首先,我们明确计算方向,我们是沿着D这个方向来计算外积的,所以计算出来的z的深度是D,这个是没有问题的。那么在沿着D上面的截面的计算方式就是我们上面说的outer product的方式来计算了。注意,计算D上每一个维度的切面的时候都是每个维度上单独计算的,举个例子:

x^k  = [a,b,c], [1,2,3], [d,e,f]

x^0  = [x,y,z], [4,5,6]

那么z的计算就为(先忽略w,后面再介绍w的使用)

我们沿着D这个维度,需要计算三个切面。

第一个切面:需要计算(a,1,d) 和(x,4)的外积:

计算的结果为:[[a*x,1*x,d*x] ,[a*4,1*4,d*4]] ,shape = 2*3

第二个切面:需要计算(b,2,e)和(y,5)的外积:

第三个切面同理,就不列出结果了。

三个切面计算玩,我们就得到了shape为3*2*3的z^k

这个计算过程还可以用一张图形象的表示出来:

这里的计算跟上面是一样的,也可以计算每个d维向量的内积然后拼接成柱状体。对于每个切面,我们对这个切面进行加权求和得到一个值,权值矩阵W也成为卷积核的shape跟切面的shape大小一样,我们总共有D个切面,所以就有D个值,这样,我们就将一个三维向量转化成了一维向量:

在上面这张图中,我们可以清楚的知道,如果有H_{k} 个卷积核w,我们就可以得到H_{k} 个向量,也就是得到了下一个X:X^{k+1} ,这个X的维度为H_{k}*D。

CIN的宏观框架可以总结为下图:

我们总共需要进行k个CIN过程的计算,得到k个一维向量。可以看出,它的特点是,最终学习出的特征交互的阶数是由网络的层数决定的,每一层隐层都通过一个池化操作连接到输出层,从而保证了输出单元可以见到不同阶数的特征交互模式。同时不难看出,CIN的结构与循环神经网络RNN是很类似的,即每一层的状态是由前一层隐层的值与一个额外的输入数据计算所得。不同的是,CIN中不同层的参数是不一样的,而在RNN中是相同的;RNN中每次额外的输入数据是不一样的,而CIN中额外的输入数据是固定的,始终是X0。

CIN计算交叉特征的方式是vector wise的,

x1,h的计算方式为:

x2,h的计算方式为:

xk,h的计算方式:

所以是vector-wise的计算方式。

2.2 Combination with Implicit Networks

这个结构其实跟DeepFM是一样的,左边是交叉特征的计算过程,右边是DNN部分。CTR计算方式为:

损失函数为:


三、总结

我们今天介绍的xDeepFM模型,这个模型跟我们之前学习的DeepFM还有DCN是一个类型的网络,都是交叉特征+DNN组成,在xDeepFM中主要是CIN的推导是重点,只要掌握了CIN的计算过程就知道了这篇论文的核心:vector-wise方式的特征交叉。

上一篇下一篇

猜你喜欢

热点阅读