xDeepFM:名副其实的 ”Deep” Factorization Machine

等 

今天介绍 中科大、北大 与 微软 合作发表在 KDD’18 的文章《xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems》。Paper写得很流畅,还清晰梳理了FNN / PNN / Wide&Deep / DeepFM / DCN等CTR预估典型NN结构,阅读体验很棒。

xDeepFM开源代码: 

一、Motivation

一看paper名字,很容易联想到华为在 IJCAI’2017 提出的模型DeepFM,但论“血缘关系”,xDeepFM 的一级近亲首先是 Deep & Cross Network。之前的专栏文章介绍过这两个模型:

  1. DeepFM: 速览 DeepFM: 使用 FM 取代 Wide & Deep 中的 LR
  2. DCN:揭秘 Deep & Cross : 如何自动构造高阶交叉特征

DeepFM的思想比较直观,从专栏文章名你已经知道它是怎么做的了,另外一个细节就是模型中FM与Deep共享Embedding。DCN的设计非常巧妙,引入Cross层取代 Wide & Deep 的Wide层,Cross层的独特结构使其可以显示、自动地构造有限高阶的特征叉乘。不理解 DCN的精髓,就没法很好地理解 xDeepFM,这里就不重复搬砖了,强烈建议不熟悉DCN的读者先先阅读上面列出的DCN解读。

假设你已经知道DCN怎么干的、有哪些优点,我们再来看 xDeepFM 想干啥。DCN 的Cross层接在Embedding层之后,虽然可以显示自动构造高阶特征,但它是以bit-wise的方式。例如,Age Field对应嵌入向量<a1,b1,c1>,Occupation Field对应嵌入向量<a2,b2,c2>,在Cross层,a1,b1,c1,a2,b2,c2会拼接后直接作为输入,即它意识不到Field vector的概念。Cross 以嵌入向量中的单个bit为最细粒度,而FM是以向量为最细粒度学习相关性,即vector-wise。xDeepFM的动机,正是将FM的vector-wise的思想引入Cross部分。

二、Model

xDeepFM的整体结构如图1所示,基本框架依然基于标准的Embedding&MLP,其中Linear、Plain DNN分别类似Wide和Deep部分,而 CIN 部分是我们要讨论的重点。

图1. xDeepFM 网络结构图

CIN:Compressed Interaction Network

如图1所示,CIN层的输入来自Embedding层,假设有 [公式] 个field,每个field的embedding vector维度为 [公式],则输入可表示为矩阵[公式] 。

图2. CIN 结构

CIN 结构如上图所示,咋一看图2可能有点蒙,我们先看一下CIN每层是这么计算的。

[公式] 表示第 [公式] 层的输出,其中[公式] 表示第 [公式] 层的vector个数,vecor维度始终为 [公式] ,保持和输入层一致。具体地,第 [公式] 层每个vector的计算方式为:

[公式] (1)

其中[公式] 表示第 [公式] 层的第 [公式] 个vector的权重矩阵, [公式] 表示Hadamard乘积,即逐元素乘,例如 [公式] 。

看懂了这个计算公式,就理解了图2的CIN结构,我们先看这个公式到底干了什么:

  1. 取前一层[公式] 中的 [公式] 个vector,与输入层 [公式] 中的 [公式] 个vector,进行两两Hadamard乘积运算,得到 [公式] 个 vector,然后加权求和。
  2. 第 [公式] 层的不同vector区别在于,对这[公式] 个 vector 求和的权重矩阵不同。 [公式] 即对应有多少个不同的权重矩阵 [公式] , 是一个可以调整的超参。

为什么这么设计,好处是什么?CIN与DCN中Cross层的设计动机是相似的,Cross层的input也是前一层与输出层。至于为什么这么搞,在之前的DCN解读里已经讲解得很清楚。CIN 保持了DCN的优点:有限高阶、自动叉乘、参数共享。

再来看看CIN与Cross的几个主要差异:

  1. Cross是bit-wise的,而CIN 是vector-wise的;
  2. 在第 [公式] 层,Cross包含从 1 阶 ~ [公式] 阶 的所有组合特征,而CIN只包含 [公式] 阶的组合特征。相应地,Cross在输出层输出全部结果,而CIN在每层都输出中间结果。

造成差异2的原因是,Cross层计算公式中除了与CIN一样包含“上一层与输入层的✖️”外,会再额外“➕输入层”。 这是两种涵盖所有阶特征的不同策略,CIN和Cross其实也可以使用对方的策略,两种方式的优缺点,大家可以发表自己的看法一起交流。

注意图2的CIN结构,可以思考两个问题,这涉及到CIN的另一位亲戚FM:

  1. 每层通过sum pooling对vector的元素加和输出,这么做的意义或合理性?可以设想,如果CIN只有1层, 只有m个vector,即 [公式] ,且加和的权重矩阵恒等于1,即[公式] ,那么sum pooling的输出结果,就是一系列的两两向量内积之和,即标准的FM(不考虑一阶与偏置)。
  2. 除了第1层,中间层的这种基于vector高阶组合有什么物理意义?回顾FM,虽然是二阶的,但可以扩展到多阶,例如考虑三阶FM,是对三个嵌入向量作Hadamard乘再对得到的vector作sum,CIN基于vector-wise的高阶组合再作sum pooling与之是类似的,这也是模型名字 “eXtreme Deep Factorization Machine (xDeepFM) ”的由来。

为啥取名CIN

CIN名字由来与它特定的计算方式有关,不感兴趣的读者可以直接跳过这部分,不影响模型理解。回顾式(1),同层不同vector的区别仅仅在于不同的加和权重矩阵 [公式] ,我们可以提前计算好两两向量间Hadamard乘的结果。

具体的方式如下图所示,首先如图 a 计算中间结果—— tensor [公式] ,然后使用权重矩阵 [公式] 顺着tensor的维度 [公式] ,逐层相乘加和,得到 k+1 层的第 [公式] 个vector,如图 b 所示。如果把 [公式] 看成filter,这和CNN的方式很像。可以看到,最后[公式] 被压缩成了一个矩阵,这是名字中“Compressed”的由来。

 

复杂度分析

假设CIN和DNN每层神经元/向量个数都为 [公式] ,网络深度为 [公式] 。那么CIN的参数空间复杂度为 [公式] ,普通的DNN为 [公式] ,CIN的空间复杂度与输入维度 [公式] 无关,此外,如果有必要,CIN还可以对权重矩阵 [公式] 进行 [公式] 阶矩阵分解从而能降低空间复杂度。

CIN的时间复杂度就不容乐观了,按照上面介绍的计算方式为 [公式] ,而DNN为[公式],时间复杂度会是CIN的一个主要痛点。

三、Experiment

数据集

  1. 公开数据集 Criteo 与 微软数据集 BingNews
  2. DianPing 从大众点评网整理的相关数据,收集6个月的user check-in 餐厅poi的记录,从check-in餐厅周围3km内,按照poi受欢迎度抽取餐厅poi作为负例。根据user属性、poi属性,以及user之前3家check-in的poi,预测用户check-in一家给定poi的概率。

实验设置

  1. 不进行任何人工特征叉乘,通过gird-search on 验证集为每个模型确定最佳超参
  2. 使用Adam,relu,学习率=0.001,mini-batch=4096,嵌入维度= 10
  3. DNN每层200神经元,CIN对Criteo每层200神经元 ,对其他数据集每层100神经元
  4. 对PNN使用0.5的dropout,对其他NN模型,使用 [公式] 的L2正则

实验结果

单个模型模块的实验结果如表1所示,完整模型实验结果如表2所示,都显示了CIN与xDeepFM的有效性,优势明显。

表1. 单个模型部分的实验结果表2. 不同模型的实验结果

文中也探索了层数、神经元(向量)个数(固定层数=3),不同激活函数对CIN的影响。

四、Conclusion

  1. xDeepFM将基于Field的vector-wise思想引入Cross,并且保留了Cross的优势,模型结构也很elegant,实验效果也提升明显。如果说DeepFM只是“Deep & FM”,那么xDeepFm就真正做到了”Deep” Factorization Machine。
  2. xDeepFM的时间复杂度会是其工业落地的一个主要性能瓶颈,需要重点优化
编辑于 2019-07-05
「回到生活原本的模样」
还没有人赞赏,快来当第一个赞赏的人吧!
深度学习(Deep Learning)
推荐系统
 

文章被以下专栏收录

咖啡与机器学习
咖啡与机器学习
Beyond the Data
Beyond the Data
You are smarter than your data.

推荐阅读

揭秘 Deep & Cross : 如何自动构造高阶交叉特征

本文介绍斯坦福与Google联合发表在AdKDD 2017上的论文《Deep &amp; Cross Network for Ad Click Predictions》。这篇论文是Google 对 Wide &amp; Deep工作的一个后续研究,文中提出 Deep &a…

CTR论文精读(七)--DeepFM

CTR论文精读(七)--DeepFM

(读论文)推荐系统之ctr预估-XDeepFM模型解析

(读论文)推荐系统之ctr预估-XDeepFM模型解析

看Google如何实现Wide & Deep模型(1)

之前在一家公司做个性化新闻推荐,决定尝试一下Wide &amp; Deep模型。当时的TensorFlow还没自带Wide &amp; Deep实现,所以,我用TensorFlow从头到尾实现了一遍。Wide &amp; Deep理论上并不…

39 条评论

  • 张德伦
    张德伦2019-03-12

    看CIN那块的时候眼睛都要花了,感觉和何向南的那篇Outer Product-based Neural Collaborative Filtering有异曲同工之处

  • bigliam
    bigliam回复张德伦2019-07-05

    he的论文,说实话,很水。

  • 狗傻
    狗傻回复bigliam2019-11-18

    哈哈哈,我看了他好多篇,深有同感,没有本质性进展,但还是很羡慕

  • JR Lee
    JR Lee2019-03-23
    最近在看相关工作,感觉CIN的设计比较巧妙啊
  • impo
    impo2019-03-26

    您好,FM好像也是以bit-wise作为最小粒度,您说的vector-wise是否应该是FFM?

  • 刺猬
    刺猬 (作者) 回复impo2019-07-05

    其实没必要纠结严谨怎么个叫法,论文只是使用了这个称呼,想传达的意思是,FM是以embedding向量为操作粒度,比如“embedding之间”做内积,而对于 crossnet / nn来说,embedding只是普通的多个输入特征

  • willys
    willys2019-04-17

    还是没太明白xdeepfm是vector-wise的交叉? dcn是bit-wise的交叉?

  • 刺猬
    刺猬 (作者) 回复willys2019-07-05

    找个退一步的例子理解,例如DeepFM部分的FM与Deep,见上面的回复

    • 陈文强
      陈文强2019-05-26

      "每层通过sum pooling对vector的元素加和输出,这么做的意义或合理性?可以设想,如果CIN只有1层, 只有1个vector,即 H_1=1 ,且加和的权重矩阵恒等于1,即m{W}^1 = m{1} ,那么sum pooling的输出结果,就是一系列的两两向量内积之和,即标准的FM(不考虑一阶与偏置)"

       

      是"如果CIN只有1层, 只有m个vector,即 H_1=m"

    • 刺猬
      刺猬 (作者) 回复陈文强2019-07-05

      已更正,谢谢指正

    • DJy4ever
      DJy4ever回复刺猬 (作者)2019-08-22

      为啥我觉得你更正之前写的是对的呢,为啥改成m?

  • lfeng2016
    lfeng20162019-06-28

    看了好几篇xdeepfm的介绍,还是你这篇最通俗易懂。dcn那篇也是。。。

  • 刺猬
    刺猬 (作者) 回复lfeng20162019-07-05

    谢谢

    • kyle lh
      kyle lh2019-08-06

      请问这里的field是什么含义,怎么理解

    • 刺猬
      刺猬 (作者) 回复kyle lh2019-08-18

      例如年龄field,取值:男、女,对应10、01两个one-hot向量,分别可以映射到一个embedding向量

    • 王大锤
      王大锤回复刺猬 (作者)01-19

      年龄怎么会取男女。。

  • DJy4ever
    DJy4ever2019-08-21

    "tensor Z^k+1 ,然后使用权重矩阵W^k,i顺着tensor的维度.... "中的权重矩阵W的shape是不是应该更正为Hk+1*m,还有这句话下面对应的图b中的m和Hk是不是标反了

    • 江子星
      江子星2019-08-28

      大佬,请问你们上线有没测试过xDeepFm?我们上线测了对比deepfm还差些。我最近都头疼死了

    • DJy4ever
      DJy4ever回复江子星2019-09-25

      我也是,还干不过xgboost。。

    • 江子星
      江子星回复DJy4ever2019-09-28
      是啊,我到现在还是不知道什么原因
  • 步步高
    步步高2019-12-23

    用avazu复现,出现很严重的过拟合,有没有同样问题的同学

  • Harry
    Harry回复步步高01-09

    楼上有说容易过拟合 需要加dropout或者别的防止过拟合的方法吧

  • 莫西
    莫西01-18

    话说论文里推DCN的输出形式的时候特意省略了偏置项,感觉加上偏置推不出那样的形式

  • 感觉偏置项的作用可能就是防止这个问题

  • WitselW
    WitselW回复莫西04-29

    你好,请问你说的哪一步的偏置?

  • zxyscz
    zxyscz04-07

    楼主没有尝试过xdeepFM,线上效果如何?

  • zsqkal
    zsqkal04-30

    你好请问一下如果是vector-wise 的话,那么这里的连续的特征和离散的特征需要分别进行处理吗,感觉按照上述的介绍,cin是纯粹进行了离散的embed的交叉,这里如何将连序的考虑进行,难道只能对连续尽心离散化然后统一进行相同维度的embed吗?还有所有的id在embed成相同维度的时候是ok的吗,总感觉奇怪

  • double
    double07-07

    CIN的模型复杂度是怎么计算出来的?

  • 付童
    付童07-30

    写的很好,但是有些细节,不看论文是真的不行啊

  • Linker
    Linker07-31
    CIN本质上就是穷举了所有可能得交叉结果,并给出w供模型记录学习结果。
1 条评论被折叠(为什么?