模型结构:
和一般的DNN模型比起来,DeepFM模型的input要经过一个FM层,同时经过DNN层,最后FM层和DNN层的结果加起来成为logits。
模型目的:
DeepFM可以看作是对Deep&Wide model的改进,将wide layer从linear改成了fm。DNN擅长高阶特征的交叉;FM则可以增强低阶特征的交叉,极大简化feature engineering的work。
FM的结构:
第一部分:一个简单的线性变化
第二部分:FM部分的特征交叉,看起来复杂度是O(kn²),但可以通过一定运算简化成O(kn),原理是:
ab = 1/2 [(a+b)²-(a²+b²)]
工程实现上,a可以看做input vector,b则是参数V.
Comment:
在实际应用中,这个模型也会增加serving costs。在大公司里,如果feature engineering已经非常完善了,开发了很多交叉特征,那么FM低阶特征交叉的好处比起它的serving costs是否就不这么明显了?