前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xDeepFM:CTR预估之特征交叉的艺术

xDeepFM:CTR预估之特征交叉的艺术

作者头像
炼丹笔记
发布2021-05-14 15:58:05
8460
发布2021-05-14 15:58:05
举报
文章被收录于专栏:炼丹笔记

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复杂度分析

空间复杂度

  • CIN层的空间复杂度:第层的参数为, 最后一层的输出有个参数,所以CIN一共有的参数个数为:
  • PlainDNN层的空间复杂度

因为平时我们的和通常不会非常大,所以我们一般是可以接受的。此外我们还可以用矩阵分解的方式来降低空间复杂度。

时间复杂度

  • CIN层的计算时间复杂度:计算的时间复杂度为,因为我们有个特征map,所以计算层的CIN时间复杂度为
  • PlainDNN的时间计算复杂度:

所以xDeepFM的核心问题在于时间复杂度上面。

实验

实验部分主要回答下面几个问题:

  1. 是否CIN真的做到了高阶的交叉?
  2. 是否有必要将Explicit和Implicit的网络结合?
  3. 网络的设置对于模型最终的影响是什么样的?

是否CIN真的做到了高阶的交叉?

  • 单独的CIN在所有的数据集上都取得了最好的效果,所以CIN模块是非常有必要的。

是否有必要将Explicit和Implicit的网络结合?

  • 从实验结果上看,我们发现将Explicit和Implicit的网络结合能带来非常大的提升;xDeepFM相较于DNN有很大的提升。

网络的设置对于模型最终的影响是什么样的?

  • 增加网络层的深度可以提升效果, 把网络层数设置为3在数据集上的效果是最好的;
  • 增加CIN中feature maps的个数早期可以提升效果的,太大可能会带来过拟合(例如Dianping数据集,100就可以了,200的时候效果会下降);
  • 激活函数使用identity效果是最好的;

小结

本文提出了xDeepFM算法,CIN模块可以显示的控制特征交叉的阶数(通过vector-wise的形式)在大量数据集上的结果也显示了xDeepFM的卓越效果。

参考文献

  1. xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems:https://arxiv.org/pdf/1803.05170.pdf
  2. https://github.com/Leavingseason/xDeepFM/blob/master/exdeepfm/src/exDeepFM.py

我是二品炼丹师一元,目前跟着大哥们学习CTR炼丹已经快四个月了,有兴趣的欢迎关注我们的公众号

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 炼丹笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档