FFM 算法,全称是 Field-aware Factorization Machines,是 FM(Factorization Machines)的改进版。FFM 最初的概念来自 Yu-Chin Juan(阮毓钦,毕业于中国台湾大学,现在美国 Criteo 工作)与其比赛队员。通过引入 field 的概念,FFM 把相同性质的特征归于同一个 field。
在 FFM 中,每一维特征 $x_i$,针对其它特征的每一种 field $f_j$,都会学习一个隐向量 $V_{i,f_j}$。因此,隐向量不仅与特征相关,也与 field 相关。这也是 FFM 中 “Field-aware” 的由来。
FFM 相比于 FM,做了哪些优化?
回顾一下 FM
样本 ? 是 ? 维向量,?? 是第 ? 个维度上的值。?? 是 ?? 对应的长度为 ? 的隐向量,? 是模型参数,所以所有样本都使用同一个 ?,即 $?_{1,1}$与 $?_{2,1}$都使用 $?_1$。
FFM 中的 Field
在 FFM 中,每一维特征 feature 都归属于一个特定的 field,field 和 feature 是一对多关系。
filed | field1=年龄 | field2=城市 | field3=性别 | |||
---|---|---|---|---|---|---|
feature | x1=年龄 | x2=北京 | x3=上海 | x4=深圳 | x5=男 | x5=女 |
user1 | 23 | 1 | 0 | 0 | 1 | 0 |
user2 | 25 | 0 | 1 | 0 | 0 | 1 |
对于连续特征,一个特征就对应一个 Field,或者对连续特征离散化,一个分箱成为一个特征,比如:
filed | field1=年龄 | |||
---|---|---|---|---|
feature | <20 | 20-30 | 30-40 | >40 |
user1 | 0 | 1 | 0 | 0 |
user2 | 0 | 1 | 0 | 0 |
对于离散特征,采用 One-Hot 编码,同一属性的归到一个 Field,不论是连续特征还是离散特征,它们都有一个共同点:同一个 field 下只有一个 feature 的值不为 0,其它 feature 的值都为 0。
FFM 模型认为 $v_i$ 不仅跟 $x_i$ 有关系,还跟与 $x_i$ 相乘的 $x_j$ 所属的 field 有关系,即 $v_j$ 成了一个二维向量 $v_{F.K}$,$F$ 是 field 的总个数,FFM 只保留了 FM 式子中的二次项。
$?̂=\sum_{i=1}^n\sum_{j=i+1}^nv_{i,f_j},v_{j,f_i}x_ix_j$
以上文的表格数据为例,计算 user1 的 $\overline{y}$。
$?̂=v_{1,f_2}.v_{2,f_1}x_1x_2+v_{1,f_3}.v_{3,f_1}x_1x_3+v_{1,f_4}.v_{4,f_1}x_1x_4+ ... $
由于 $x_2,x_3,x_4$ 属于同一个 field,所以 $f_2,f_3,f_4$ 可以用同一个变量来代替,比如就用 $f_2$。
$?̂=v_{1,f_2}.v_{2,f_1}x_1x_2+v_{1,f_2}.v_{3,f_1}x_1x_3+v_{1,f_2}.v_{4,f_1}x_1x_4+ ... $
我们来算一下 ?̂ 对 $v_{1,f_2}$ 的偏导。
$\frac{∂?̂}{∂v_{1,f2}}=v_{2,f1}x_1x_2+v_{3,f1}x_1x_3+v_{4,f1}x_1x_4$
等式两边都是长度为 ? 的向量。
注意 $?2,?3,?4$ 是同一个属性的 one-hot 表示,即 $?2,?3,?4$ 中只有一个为 1,其他都为 0。在本例中 $?3=?4=0,?2=1$,所以
$\frac{∂?̂}{∂v_{1,f2}}=v_{2,f1}x_1x_2$
推广到一半情况:
$\frac{∂?̂}{∂v_{i,fj}}=v_{j,fi}x_ix_j$
?? 属于 Field ??,且同一个 Field 里面的其他 ?? 都等于 0。实际项目中 ? 是非常高维的稀疏向量,求导时只关注那些非 0 项即可。
你一定有个疑问:? 是模型参数,为了求 ? 我们采用梯度下降法时需要计算损失函数对 ? 的导数,为什么这里要计算 ?̂ 对 ? 的导数?
在实际预测点几率的项目中,我们是不会直接使用公式 $?̂=\sum_{i=1}^n\sum_{j=i+1}^nv_{i,f_j},v_{j,f_i}x_ix_j$ 的,通常会再套一层 sigmoid 函数,公式中的 ?̂ 用 z 来取代。
$z=?(?,?)=∑_{i=1}^n∑_{?=?+1}^n?_{?,??}⋅?_{?,??}????$
由 $\frac{∂?̂}{∂v_{1,fj}}=v_{2,fj}x_ix_j$ 得
$\frac{∂z}{∂v_{i,fj}}=v_{j,fi}x_ix_j$
用 ? 表示对点击率的预测值
$a=?(?)=\frac{1}{1+e^(-z)}=\frac{1}{1+e^(-?(v,x))}$
令 y=0 表示负样本,y=1 表示正样本,C 表示交叉熵损失函数。根据神经网络调优公式可得:
看完了本博客再去看论文《Field-aware Factorization Machines for CTR Prediction》中的公式推导应该就比较容易了吧,在该论文中他是以?=1y=1代表正样本,?=−1 代表负样本,所以才有了 3.1 节中的 $k=\frac{∂C}{∂z}=\frac{-y}{1+e^(yz)}$
有了上面的推导,我们再来看 FFM 的公式。
设样本一共有 $n$ 个特征,$f$ 个 field,那么,FFM 的二次项有 $nf$ 个隐向量。而在 FM 模型中,每一维特征的隐向量只有一个。FM 可以看做 FFM 的特例,是把所有特征都归属到一个 Field 时的 FFM 模型。根据 FFM 的 Field 敏感特性,可以导出其模型方程。
其中,$f_j$ 是第 $j$ 个特征所属的字段,如果隐向量的长度为 $k$,那么 FFM 的二次参数有 $nfk$ 个,远远多于 FM 模型的 $nk$ 个,此外,由于隐向量与 Field 相关,FFM 二次项并不能够化简,时间复杂度是 $O(kn^2)$。
需要注意的是由于 FFM 中的 laten vector 只需要学习特定的 Field,所以通常:
$K_{FFM} << F_{FM}$。
FFM 由于引入了 Field,使得每两组特征交叉的隐向量都是独立的,可以取得更好的组合效果, FM 可以看做只有一个 Field 的 FFM。
FFM的论文地址:https://www.csie.ntu.edu.tw/~...
如果您觉得文章对您有帮助,欢迎点赞,转发,评论,您的支持的是创作的动力!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。