论文阅读 (004): Classic CTR Prediction (FFM)

992 阅读3分钟

阅读论文: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=1nj2=j1+1n(wj1wj2)xj1xj2\phi_{\mathrm{FM}}(\boldsymbol{w}, \boldsymbol{x})=\sum_{j_{1}=1}^{n} \sum_{j_{2}=j_{1}+1}^{n}\left(\boldsymbol{w}_{j_{1}} \cdot \boldsymbol{w}_{j_{2}}\right) x_{j_{1}} x_{j_{2}}

化简后

ϕFM(w,x)=12j=1n(swjxj)wjxj\phi_{\mathrm{FM}}(\boldsymbol{w}, \boldsymbol{x})=\frac{1}{2} \sum_{j=1}^{n}\left(\boldsymbol{s}-\boldsymbol{w}_{j} x_{j}\right) \cdot \boldsymbol{w}_{j} x_{j}

其中

s=j=1nwjxjs=\sum_{j^{\prime}=1}^{n} \boldsymbol{w}_{j^{\prime}} x_{j^{\prime}}

对于上图中不同的field,FM二次项表示为

wESPNwNike+wESPNwMale +wNikewMale \boldsymbol{w}_{\mathrm{ESPN}} \cdot \boldsymbol{w}_{\mathrm{Nike}}+\boldsymbol{w}_{\mathrm{ESPN}} \cdot \boldsymbol{w}_{\text {Male }}+\boldsymbol{w}_{\mathrm{Nike}} \cdot \boldsymbol{w}_{\text {Male }}

在FFM中,二次项表示为

wESPN ,AwNike ,P+wESPN ,GwMale ,P+wNike ,GwMale ,A\boldsymbol{w}_{\text {ESPN }, \mathrm{A}} \cdot \boldsymbol{w}_{\text {Nike }, \mathrm{P}}+\boldsymbol{w}_{\text {ESPN }, \mathrm{G}} \cdot \boldsymbol{w}_{\text {Male }, \mathrm{P}}+\boldsymbol{w}_{\text {Nike }, \mathrm{G}} \cdot \boldsymbol{w}_{\text {Male }, \mathrm{A}}

考虑了field对于field之间的影响,对于(ESPN, NIKE),使用wESPN ,A\boldsymbol{w}_{\text {ESPN }, \mathrm{A}} 进行表示潜在向量,应为NIKE属于Advertiser field。综上FFM的数学形式表示为

ϕFFM(w,x)=j1=1nj2=j1+1n(wj1,f2wj2,f1)xj1xj2\phi_{\mathrm{FFM}}(\boldsymbol{w}, \boldsymbol{x})=\sum_{j_{1}=1}^{n} \sum_{j_{2}=j_{1}+1}^{n}\left(\boldsymbol{w}_{j_{1}, f_{2}} \cdot \boldsymbol{w}_{j_{2}, f_{1}}\right) x_{j_{1}} x_{j_{2}}

其中j1j_1表示特征值,f1f_1表示field值。

对比FM、LM、Poly2(文中介绍了模型,但是此处省略),时间复杂度和模型复杂度总结如下

model#variablescomplexity
LMnO(nˉ)O(\bar{n})
Poly2BO(nˉ2)O(\bar{n}^2)
FmnO(nˉk)O(\bar{n}k)
FFMnO(nˉ2k)O(\bar{n}^2k)

其中n为特征个数,nˉ\bar{n}为特征平均非零个数,k为域变量的隐变量长度,f为field数,由于FFM中隐变量只需要学习field与field之间的对于关系,因此有以下性质:kFFMkFMk_{\mathrm{FFM}} \ll k_{\mathrm{FM}}

数据处理

在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的话,ff值会非常大。文中最后也没给出解决方法。。。

优化算法

文中使用AdaGrad进行优化,优化目标为:minwi=1Llog(1+exp{yiϕ(w,xi)})+λ2w2\min _{\mathbf{w}} \sum_{i=1}^{L} \log \left(1+\exp \left\{-y_{i} \phi\left(\mathbf{w}, \mathbf{x}_{i}\right)\right\}\right)+\frac{\lambda}{2}\|\mathbf{w}\|^{2}

对变量求导如下

gj1,f2wj1,f2f(w)=λwj1,f2+κwj2,f1xj1xj2\boldsymbol{g}_{j_{1}, f_{2}} \equiv \nabla_{\boldsymbol{w}_{j_{1}, f_{2}}} f(\boldsymbol{w})=\lambda \cdot \boldsymbol{w}_{j_{1}, f_{2}}+\kappa \cdot \boldsymbol{w}_{j_{2}, f_{1}} x_{j_{1}} x_{j_{2}}

gj2,f1wj2,f1f(w)=λwj2,f1+κwj1,f2xj1xj2\boldsymbol{g}_{j_{2}, f_{1}} \equiv \nabla_{\boldsymbol{w}_{j_{2}, f_{1}}} f(\boldsymbol{w})=\lambda \cdot \boldsymbol{w}_{j_{2}, f_{1}}+\kappa \cdot \boldsymbol{w}_{j_{1}, f_{2}} x_{j_{1}} x_{j_{2}}

其中κ=log(1+exp(yϕFFM(w,x)))ϕFFM(w,x)=y1+exp(yϕFFM(w,x))\kappa=\frac{\partial \log \left(1+\exp \left(-y \phi_{\mathrm{FFM}}(\boldsymbol{w}, \boldsymbol{x})\right)\right)}{\partial \phi_{\mathrm{FFM}}(\boldsymbol{w}, \boldsymbol{x})}=\frac{-y}{1+\exp \left(y \phi_{\mathrm{FFM}}(\boldsymbol{w}, \boldsymbol{x})\right)}

梯度更新准则如下

(Gj1,f2)d(Gj1,f2)d+(gj1,f2)d2\left(G_{j_{1}, f_{2}}\right)_{d} \leftarrow\left(G_{j_{1}, f_{2}}\right)_{d}+\left(g_{j_{1}, f_{2}}\right)_{d}^{2}

(Gj2,f1)d(Gj2,f1)d+(gj2,f1)d2\left(G_{j_{2}, f_{1}}\right)_{d} \leftarrow\left(G_{j_{2}, f_{1}}\right)_{d}+\left(g_{j_{2}, f_{1}}\right)_{d}^{2}

(wj1,f2)d(wj1,f2)dη(Gj1,f2)d(gj1,f2)d\left(w_{j_{1}, f_{2}}\right)_{d} \leftarrow\left(w_{j_{1}, f_{2}}\right)_{d}-\frac{\eta}{\sqrt{\left(G_{j_{1}, f_{2}}\right)_{d}}}\left(g_{j_{1}, f_{2}}\right)_{d}

(wj2,f1)d(wj2,f1)dη(Gj2,f1)d(gj2,f1)d\left(w_{j_{2}, f_{1}}\right)_{d} \leftarrow\left(w_{j_{2}, f_{1}}\right)_{d}-\frac{\eta}{\sqrt{\left(G_{j_{2}, f_{1}}\right)_{d}}}\left(g_{j_{2}, f_{1}}\right)_{d}

实验

K影响

训练时候使用early stop策略,对FFM取不用K进行比较,实验结果如下,k取比较小时影响不大。

文中还对比了λ\lambdaη\eta,不同线程的影响,结论都比较符合工程经验,具体数值可以参考文献,这边不一一列举。

在2个数据集上,不同方法对比如下,可以说FFM十分优秀了。

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

  1. FFM对categorical类的特征效果更好,特征编码方式为01编码
  2. 如果特征不是很稀疏,FFM效果就不是很明显
  3. FFM在numerical特征上运用更难,numerical特征两种编码方式中,dummy fields更好。

总结

理解FFM并不困难,看完全文还是有很多工程细节,值得仔细读读。参考资料中有美团技术团队的FFM博文,值得借鉴,其中提到了更多的工程实现内容。

参考资料

  1. 深入FFM原理与实践