DeepFM论文阅读

DeepFM与其他相关模型的差异

  1. FNN 依赖预训练的FM层
  2. PNN 把FM结果输出到DNN中,没有以Wide&Deep的方法合并起来
  3. Wide&Deep没有用FM,手动设计特征,费时费力

DeepFM重点介绍

FM层公式

主要思想:引入二阶交叉特征提升效果

背景:SVM引入核函数,为每个特征组合分配一个权重 w i j w_{ij} 来学习。 公式:

y = < W , X > + i = 0 n j = 0 n w i j x i x j y = <W,X> + \sum_{i=0}^n \sum_{j=0}^nw_{ij}xi · xj

显然 w i j w_{ij} 量级为 n 2 n^2

因此,将其用矩阵分解的思想解耦,为每一个特征分配一个M维的隐向量V,计算 < V i V j > <Vi,Vj> 拟合权重。 实际场景中m<<n,因此达到降低计算量的目的。

公式

y = < W , X > + i = 0 n j = 0 n < V i V j > x i x j y = <W,X> + \sum_{i=0}^n \sum_{j=0}^n <Vi,Vj>xi · xj

FM的公式可以优化,时间复杂度从o(n^2)优化为o(N)

image.png

核心是第二到第三步,

  1. 将点积操作展开,一个乘法结合律,很好理解 ( v i f 1 v j f 1 + v i f 2 v j f 2 ) x i x j = = v i f 1 x i v j f 1 x j + v i f 2 x i v j f 2 x j (v_{if1}v_{jf1} + v_{if2}v_{jf2})x_ix_j == v_{if1}x_iv_{jf1}x_j + v_{if2}x_iv_{jf2}x_j
  2. 我们就可以先考虑隐向量的一个point,再求和。 针对这个point,不同向量间(ab+aa+bb +ba) == (a+b)(a+b)。 所有可以从2变成3.

用一个图来理解:

image.png

共享Embdding

DeepFM中,DNN和FM层共享Embdding的权重。因此不需要额外初始化预训练。

实现细节

具体实现时,所有离散特征要按类别拆分为多个特征,例如,性别有男女两个类别,要拆分为性别男及性别女两个类别。并他们的值都设为1。(why?)

猜你喜欢

转载自juejin.im/post/7067143028627996685