FFM:将相同特性的特征归到同一Field的「现场感知」因子分解机,相比于FM,其优势在哪?

762 阅读4分钟

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的论文地址:www.csie.ntu.edu.tw/~cjlin/pape…

如果您觉得文章对您有帮助,欢迎点赞,转发,评论,您的支持的是创作的动力!