xDeepFM:Combining Explicit and Implicit Feature Interactions for Recommender Systems(KDD18)
xDeepFM是19年之前所有竞赛中排名非常靠前的一种方案,而xDeepFM最出名的在于它的特征交叉学习部分,也就是CIN层,可谓是一种艺术般的交叉。其也在海量的数据竞赛中展现了不俗的成绩。下面我们来看看这个模型究竟做了啥?为什么做CTR预估不得不读呢?
模型解析
xDeepFM的网络框架如下图所示:
从上面的图上我们可以发现xDeepFM可以细分为三大块,一个基于底层特征的线性部分,一个基于特征Embedding的DNN部分(implicit feature interactions)以及CIN部分(Explicit feature interactions)。我们按照该图看看模型每一步都在做什么,尤其是CIN层做了哪些操作,为什么能在诸多数据竞赛中拿到相较于DeepFM等模型那么大的优势。
Embedding Layer
此处embedding做的事情就是将传统的单个特征映射到一个维度的dense特征上,假设我们有个field,最终我们便得到:
CIN(Compression Interaction Network)
xDeepFM在CIN层实现了特征的显示交叉,究竟是如何做到的呢?就是M层 = M-1层 + 0层的思路,即第M阶的交叉特征是由M-1层的特征和第0层(原始特征)交叉得到的。具体地,我们假设第0层的原始特征为, ,同时我们假设第k层的特征为,其中为第k层的网络的特征向量个数,所以,那么我们要想得到第层的特征,就可以通过下面的式子进行计算:
其中, 为第层特征向量的参数矩阵。也就是说我们第层的第个特征向量是由第层的每一个特征向量与第0层的每一个特征向量进行Hadamard乘积然后乘上一个系数矩阵最后全部相加得到的。所以说特征交叉是显示的。
为了能显示利用到每一层的交叉特征,我们最后需要将每一层的交叉特征输出,但是如果我们直接全部输出的话,可能会带来一个较大的问题,就是特征太多了,后面再接入全连接层的话会占据更多的内存和计算资源。所以我们使用sum pooling。这样第k层第i个向量的输出为:
那么第层的输出即为:
最终CIN的输出为:
1. CIN与RNN的关系
CIN中下一层的输出都依赖于上一层的输入以及额外的输入,和RNN是非常相似的。
2. CIN与CNN的关系
我们发现第层的每一个新的向量都是由第层的所有向量以及第0层的所有向量分别进行element-wise相乘, 然后形成“图像“,我们再使用filter - 与其进行操作得到下一层的新向量,最终我们将压缩为了个向量,这也是compressed名字的由来。
模型输出
其中为sigmoid函数, 为CIN层的输出, 是原始特征。
CIN复杂度分析
空间复杂度
因为平时我们的和通常不会非常大,所以我们一般是可以接受的。此外我们还可以用矩阵分解的方式来降低空间复杂度。
时间复杂度
所以xDeepFM的核心问题在于时间复杂度上面。
实验
实验部分主要回答下面几个问题:
是否CIN真的做到了高阶的交叉?
是否有必要将Explicit和Implicit的网络结合?
网络的设置对于模型最终的影响是什么样的?
小结
本文提出了xDeepFM算法,CIN模块可以显示的控制特征交叉的阶数(通过vector-wise的形式)在大量数据集上的结果也显示了xDeepFM的卓越效果。
参考文献
我是二品炼丹师一元,目前跟着大哥们学习CTR炼丹已经快四个月了,有兴趣的欢迎关注我们的公众号