Field-aware Factorization Machines for CTR Prediction笔记
FFM(Field Factorization Machine)是在FM的基础上引入了场(Field)
的概念而形成的新模型。
在FM中计算特征 $x_i$ 与其他特征的交叉影响时, 使用的都是同一个隐向量 $v_i$ 。
而FFM将特征按照事先的规则分为多个场(Field)
, 特征 $x_i$ 属于某个特定的场
$f$。
每个特征将被映射为多个隐向量 $v_{i,1}, v_{i,2}, \cdots, v_{i,f}$ , 每个隐向量对应一个场。
当两个特征 $x_i, x_j$ 组合时, 用对方对应的场对应的隐向量做内积:
FFM 由于引入了场, 使得每两组特征交叉的隐向量都是独立的, 可以取得更好的组合效果, FM 可以看做只有一个场的 FFM。
在FFM中,每一维特征 $x_i$,针对其它特征的每一种field
$f_j$,都会学习一个隐向量 $v_{i, f_j}$。
这比FM增加了隐向量的数量。
FFM 预测公式:
其中,$f_j$ 是第 $j$ 个特征所属的field
。如果隐向量的长度为 $k$,那么FFM的二次参数有 $nfk$ 个,远多于FM模型的 $nk$ 个。
此外,由于隐向量与field
相关,FFM二次项并不能够化简,其预测复杂度是 $O(kn^2)$。
Yu-Chin Juan实现了一个C++版的FFM模型,源码可从Github下载。这个版本的FFM省略了常数项和一次项,模型方程如下:
其中,$\mathcal{C}_2$是非零特征的二元组合,$j_1$ 是特征,属于field
$f_1$,$w_{j_1,f_2}$ 是特征 $j_1$ 对field
$f_2$ 的隐向量。
此FFM模型采用logistic loss
作为损失函数,和L2惩罚项
,因此只能用于二元分类问题。
其中,$y_i \in {−1,1}$ 是第 $i$ 个样本的label,$L$ 是训练样本数量,$\lambda$ 是惩罚项系数。
FFM_TensorFlow实现代码:
1 | # this is code |
算法流程及工程实现的trick,详细阅读 参考文献[1]
。