阅读论文:2016 Field-aware Factorization Machines for CTR Prediction
背景
文章研究的还是CTR问题,在FM工作的基础上进一步的优化。在CTR问题中,相同性质的特征可以被分组到一个field中,点击率的数据如图所示

可以将ESPN, Vogue, NBC分到Publisherfield,Nike, Gucci, Adidas分到Advertiser field。FFM考虑了field与field之间的交互作用。
模型
FM模型如下(文中都省略了模型的常数项和一次项)
ϕFM(w,x)=∑j1=1n∑j2=j1+1n(wj1⋅wj2)xj1xj2
化简后
ϕFM(w,x)=21∑j=1n(s−wjxj)⋅wjxj
其中
s=∑j′=1nwj′xj′
对于上图中不同的field,FM二次项表示为
wESPN⋅wNike+wESPN⋅wMale +wNike⋅wMale
在FFM中,二次项表示为
wESPN ,A⋅wNike ,P+wESPN ,G⋅wMale ,P+wNike ,G⋅wMale ,A
考虑了field对于field之间的影响,对于(ESPN, NIKE),使用wESPN ,A进行表示潜在向量,应为NIKE属于Advertiser field。综上FFM的数学形式表示为
ϕFFM(w,x)=∑j1=1n∑j2=j1+1n(wj1,f2⋅wj2,f1)xj1xj2
其中j1表示特征值,f1表示field值。
对比FM、LM、Poly2(文中介绍了模型,但是此处省略),时间复杂度和模型复杂度总结如下
| model | #variables | complexity |
|---|
| LM | n | O(nˉ) |
| Poly2 | B | O(nˉ2) |
| Fm | n | O(nˉk) |
| FFM | n | O(nˉ2k) |
其中n为特征个数,nˉ为特征平均非零个数,k为域变量的隐变量长度,f为field数,由于FFM中隐变量只需要学习field与field之间的对于关系,因此有以下性质:kFFM≪kFM。
数据处理
在FFM模型中,需要对数据加上filed这一变量,从label feat1:val1 feat2:val2 · · · 变换到label field1:feat1:val1 field2:feat2:val2 · · ·。针对不同的特征类型,文中介绍了不同filed的增加方法。
Categorical Features
特征表示如下图所示

将特征
Yes P:ESPN A:Nike G:Male
变换到
Yes P:P-ESPN:1 A:A-Nike:1 G:G-Male:1
可以把每一类特征认为是一个field,将特征编码为01表示,只需要存储非零的特征即可。
Numerical Features
特征表示如下图所示

一种方式是直接编码,如下所示,文中称为dummy field。可能存在问题是:虚拟字段可能没有field信息,因为它们仅仅是特性的重复。
Yes AR:AR:45.73 Hidx:Hidx:2 Cite:Cite:3
另外一种方法是对特征进行分桶,如下所示,文中称为discretization。可能的问题是:划分会损失特征的信息,存在量化误差;需要调整较好的划分标准。
Yes AR:45:1 Hidx:2:1 Cite:3:1
Single-field Features
特征表示如下图所示

本身的filed是无意义的,直接用的话,FFM会推化为FM,如果按照单词取field的话,f值会非常大。文中最后也没给出解决方法。。。
优化算法
文中使用AdaGrad进行优化,优化目标为:minw∑i=1Llog(1+exp{−yiϕ(w,xi)})+2λ∥w∥2。
对变量求导如下
gj1,f2≡∇wj1,f2f(w)=λ⋅wj1,f2+κ⋅wj2,f1xj1xj2
gj2,f1≡∇wj2,f1f(w)=λ⋅wj2,f1+κ⋅wj1,f2xj1xj2
其中κ=∂ϕFFM(w,x)∂log(1+exp(−yϕFFM(w,x)))=1+exp(yϕFFM(w,x))−y
梯度更新准则如下
(Gj1,f2)d←(Gj1,f2)d+(gj1,f2)d2
(Gj2,f1)d←(Gj2,f1)d+(gj2,f1)d2
(wj1,f2)d←(wj1,f2)d−(Gj1,f2)dη(gj1,f2)d
(wj2,f1)d←(wj2,f1)d−(Gj2,f1)dη(gj2,f1)d
实验
K影响
训练时候使用early stop策略,对FFM取不用K进行比较,实验结果如下,k取比较小时影响不大。

文中还对比了λ,η,不同线程的影响,结论都比较符合工程经验,具体数值可以参考文献,这边不一一列举。
在2个数据集上,不同方法对比如下,可以说FFM十分优秀了。


在不同数据上对比结果如下,可以得到较多的结论(这几个数据集的特点详见论文,这里直接贴结论)

- FFM对categorical类的特征效果更好,特征编码方式为01编码
- 如果特征不是很稀疏,FFM效果就不是很明显
- FFM在numerical特征上运用更难,numerical特征两种编码方式中,dummy fields更好。
总结
理解FFM并不困难,看完全文还是有很多工程细节,值得仔细读读。参考资料中有美团技术团队的FFM博文,值得借鉴,其中提到了更多的工程实现内容。
参考资料
- 深入FFM原理与实践