Neural Factorization Machines for Sparse Predictive Analytics
这是一篇SIGIR17年的论文,非常经典,本文提出的Bi-Interaction Pooling操作在后续非常多的工作中带来了帮助。在18年前后的竞赛中,前排选手将在Bi-Interaction中替换FFM并取得了top10的成绩,当时在推荐领域也算王者一般的存在。话不多说,我们直接进入主题。
模型
FM
假设我们的每个样本, 对于每个特征, 我们对应有一个隐变量 表示特征的embedding向量,那么我们的FM为:
而FM可以被理解为是多元的线性模型,表示能力还是相对很低的。
NFM
那么NFM如何增强模型的表示能力同时更好地学习二阶以及高阶的特征表示呢?
其中:
这么看来, NFM模型最神奇的地方就在于这块,在大量的实验中,我们发现直接concat embedding向量之后再加入MLP网络进行模型的训练在捕捉模型的二层交叉方法效果是不佳的。如果说后接的网络是为了捕捉高阶交叉信息,那么需要弥补这些交叉信息。
上面的操作就是我们所说的Bi-Interaction, 表示元素方面的相乘(element-wise), 即,上面的操作又可以被简化为:
NFM VS FM,WDL,DeepCross
NFM VS FM
NFM可以看做是FM的扩展,FM是NFM的特例,
当为(1,1,1...,1)的时候,就是FM模型.
NFM VS WDL(Wide and Deep) VS DeepCross
如果我们把Bi-Interaction pooling去掉,把它们concat起来再使用tower结构的MLP拼起来,就得到了我们的WDL(or DCS)。
- WDL过于依赖于模型通过自己的能力去学习特征之间的交叉,而大量的实验证明这是非常困难的,效果往往不尽如人意。
实验
实验主要回答下面3大问题:
- Q1:NFM中Bi-Interaction pooling可以捕捉二阶特征交叉?Dropout和BN是否对于Bi-Interaction pooling有帮助?
- Q2:NMF中后面加的隐藏层是否可以提高模型捕捉高阶特征并提升FM的表示能力;
- Q3:NFM和高阶FM,WDL以及DCS相比是否可以取得更好的效果.
Q1
- 从上面的实验中来看,Bi-Interaction pooling可以很好的帮助我们捕捉二阶特征交叉信息,获得更好的效果;
- 从上面的实验中来看,Dropout可以帮助我们获得更好的泛化效果;
- 从上面的实验中来看,BatchNorm不仅可以加速模型训练,而且可以获得更好的效果;
Q2
- 模型之后加入非线性激活函数可以大大提升模型效果,说明更加高阶的非线性关系可以更好地帮助我们模型的预测;
- 加深模型的深度,可以大大提升模型的效果,加深一层是最为明显的,继续加效果相差不大。
Q3
- NFM相较于其他的模型都取得了巨大的提升,而且模型参数也更少。
小结
本文的Bi-Interaction Pooling非常有启发,在实验中也取得了非常好的效果。早期本人将Bi-Interaction Pooling部分加入模型当中也取得了不错的提升,比只用embedding concat的效果要好了2%左右,如果你的模型还是早期的,可以加入试一试哦。如果有提升了记得关注一波我们的公众号。
参考文献
- Neural Factorization Machines:https://github.com/hexiangnan/neural_factorization_machine
- Neural Factorization Machines for Sparse Predictive Analytics:https://dl.acm.org/doi/pdf/10.1145/3077136.3080777
欢迎大家关注我们的公众号,多多交流,个人因表现优良,现在已经被组织封为二品炼丹师啦。