DeepFM与其他相关模型的差异
- FNN 依赖预训练的FM层
- PNN 把FM结果输出到DNN中,没有以Wide&Deep的方法合并起来
- Wide&Deep没有用FM,手动设计特征,费时费力
DeepFM重点介绍
FM层公式
主要思想:引入二阶交叉特征提升效果
背景:SVM引入核函数,为每个特征组合分配一个权重
wij来学习。 公式:
y=<W,X>+i=0∑nj=0∑nwijxi⋅xj
显然
wij量级为
n2。
因此,将其用矩阵分解的思想解耦,为每一个特征分配一个M维的隐向量V,计算
<Vi,Vj>拟合权重。 实际场景中m<<n,因此达到降低计算量的目的。
公式
y=<W,X>+i=0∑nj=0∑n<Vi,Vj>xi⋅xj
FM的公式可以优化,时间复杂度从o(n^2)优化为o(N)
核心是第二到第三步,
- 将点积操作展开,一个乘法结合律,很好理解
(vif1vjf1+vif2vjf2)xixj==vif1xivjf1xj+vif2xivjf2xj
- 我们就可以先考虑隐向量的一个point,再求和。 针对这个point,不同向量间(ab+aa+bb +ba) == (a+b)(a+b)。 所有可以从2变成3.
用一个图来理解:
共享Embdding
DeepFM中,DNN和FM层共享Embdding的权重。因此不需要额外初始化预训练。
实现细节
具体实现时,所有离散特征要按类别拆分为多个特征,例如,性别有男女两个类别,要拆分为性别男及性别女两个类别。并他们的值都设为1。(why?)