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开源代码: github.com/Leavingseaso

一、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-wisexDeepFM的动机,正是将FM的vector-wise的思想引入Cross部分

二、Model

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

图1. xDeepFM 网络结构图

CIN:Compressed Interaction Network

如图1所示,CIN层的输入来自Embedding层,假设有 m 个field,每个field的embedding vector维度为 D,则输入可表示为矩阵\bm{X}^0 \in \mathbb{R}^{m*D}

图2. CIN 结构

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

\bm{X}^k \in \mathbb{R}^{H_k*D} 表示第 k 层的输出,其中H_k 表示第 k 层的vector个数,vecor维度始终为 D ,保持和输入层一致。具体地,第 k 层每个vector的计算方式为:

\bm{X}^k_{h,*} =  \sum^{H_{k-1}}_{i=1}   \sum^{m}_{j=1}   \bm{W}^{k,h}_{ij}  ( \bm{X}^{k-1}_{i,*}   \circ   \bm{X}^{0}_{j,*}  ) \in \mathbb{R}^{1*D}, ~~~~~~ where~~ 1 \le h \le H_k (1)

其中\bm{W}^{k,h}  \in  \mathbb{R}^{H_{k-1}*m} 表示第 k 层的第 h 个vector的权重矩阵, \circ 表示Hadamard乘积,即逐元素乘,例如 <a_1,b_1,c_1> \circ <a_2,b_2,c_2> = <a_1b_1,a_2b_2,a_3b_3>

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

  1. 前一层 \bm{X}^{k-1} \in \mathbb{R}^{H_{k-1}*D} 中的 H_{k-1} 个vector,与输入层 \bm{X}^{0} \in \mathbb{R}^{m*D} 中的 m 个vector,进行两两Hadamard乘积运算,得到 H_{k-1}*m 个 vector,然后加权求和。
  2. k 层的不同vector区别在于,对这H_{k-1}*m 个 vector 求和的权重矩阵不同。 H_k 即对应有多少个不同的权重矩阵 \bm{W}^k , 是一个可以调整的超参。

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

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

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

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

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

  1. 每层通过sum pooling对vector的元素加和输出,这么做的意义或合理性?可以设想,如果CIN只有1层, 只有m个vector,即 H_1=m ,且加和的权重矩阵恒等于1,即\bm{W}^1 = \bm{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的区别仅仅在于不同的加和权重矩阵 \bm{W} ,我们可以提前计算好两两向量间Hadamard乘的结果。

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


复杂度分析

假设CIN和DNN每层神经元/向量个数都为 H ,网络深度为 T 。那么CIN的参数空间复杂度为 O(mTH^2) ,普通的DNN为 O(mDH+TH^2) ,CIN的空间复杂度与输入维度 D 无关,此外,如果有必要,CIN还可以对权重矩阵 \bm{W} 进行 L 阶矩阵分解从而能降低空间复杂度。

CIN的时间复杂度就不容乐观了,按照上面介绍的计算方式为 O(mH^2DT) ,而DNN为O(mDH+TH^2)时间复杂度会是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模型,使用 \lambda=0.001 的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

文章被以下专栏收录