FM与DeepFM,FFM详解

FM(因子分解机)

优点:

  • 能在稀疏特征情况下有很好的表现
  • 时间复杂度O(n)

在推荐场景使用one-hot编码会导致稀疏特征

FM

背景

线性回归: Y = W T X Y=W^{T}X Y=WTX 只有一次项,但是一次项有时候效果不好,尤其是在特别稀疏的场景当中,刻画能力不够。
如果加入二次项:
y ^ = w 0 + ∑ w i x i + ∑ ∑ w i j x i x j \hat{y}=w_0+\sum{w_i}x_i+\sum\sum{w_{ij}x_ix_j} y^=w0+wixi+wijxixj
这里两两特征组合的特征量级大约是n的平方,因此带来的参数数量就是一个天文数字。

FM 既引入了特征交叉,又解决了复杂度以及模型参数的问题。

原理

FM解决这个问题的方法非常简单,FM模型引入了新的矩阵V,矩阵V是一个 n X k n X k nXk的二维矩阵。这里的 k k k是我们设置的参数,一般不会很大,比如16、32之类。对于特征每一个维度i,我们都可以找到一个 v i v_i vi,它表示一个长度为k的向量。
于是可以用 v i v_i vi v j v_j vj来计算得出上式当中的 w i j w_{ij} wij,相比于原先 n 2 n^2 n2量级的参数而言,虽然现在看来参数量是 n 2 k n^2k n2k,但是通过推导我们可以将参数的量级降低到了n x k。由于k是一个常数值,所以可以看成我们的参数数量是 O ( n ) O(n) O(n)
有了矩阵v之后, 公式可以写成:
y ^ = w 0 + ∑ w i x i + ∑ ∑ v i T v j x i x j \hat{y}=w_0+\sum{w_i}x_i+\sum\sum{v_i^{T}v_jx_ix_j} y^=w0+wixi+viTvjxixj
FM引入的参数矩阵V可以看成是对W矩阵做了一个因子分解,这也是FM得名的由来。

复杂度优化

观察一下刚才上面的式子,不难发现,目前对于预测一条样本的计算复杂度为 O ( k n 2 ) O(kn^2) O(kn2)
交叉项可以通过变形进行时间复杂度的优化:
∑ i = 1 n ∑ j = i + 1 n v i T v j x i x j = 1 2 ∑ i = 1 n ∑ j = 1 n v i T v j x i x j − ∑ i = 1 n v i T v i x i x i = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k v i f v j f x i x j − ∑ i = 1 n ∑ f = 1 k v i f T v i f x i x i ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i f x i ) ( ∑ j = 1 n v j f x j ) − ∑ i = 1 n v i f 2 x i 2 ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i f x i ) 2 − ∑ i = 1 n v i f 2 x i 2 ) \sum_{i=1}^{n}\sum_{j=i+1}^{n}{v_i^{T}v_jx_ix_j}\\ =\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}{v_i^{T}v_jx_ix_j}-\sum_{i=1}^{n}v_i^Tv_ix_ix_i\\ =\frac{1}{2}(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{f=1}^{k}v_{if}v_{jf}x_ix_j-\sum_{i=1}^{n}\sum_{f=1}^{k}v_{if}^Tv_{if}x_ix_i)\\ =\frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}v_{if}x_i)(\sum_{j=1}^{n}v_{jf}x_j)-\sum_{i=1}^{n}v_{if}^2x_i^2)\\ =\frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}v_{if}x_i)^2-\sum_{i=1}^{n}v_{if}^2x_i^2) i=1nj=i+1nviTvjxixj=21i=1nj=1nviTvjxixji=1nviTvixixi=21(i=1nj=1nf=1kvifvjfxixji=1nf=1kvifTvifxixi)=21f=1k((i=1nvifxi)(j=1nvjfxj)i=1nvif2xi2)=21f=1k((i=1nvifxi)2i=1nvif2xi2)
可以看出优化后的时间复杂度为 O ( k n ) O(kn) O(kn)

参数训练

∂ y ( x ) ^ ∂ θ { 1 , θ = w 0 x i , θ = w i x i ∑ j = 1 n v j , f x j − v i , f x i 2 \frac{\partial \hat{y(x)}}{\partial \theta} \begin{cases} 1, \theta=w_0\\ x_i, \theta=w_i\\ x_i\sum_{j=1}^nv_{j,f}x_j-v_{i,f}x_{i}^2 \end{cases} θy(x)^1,θ=w0xi,θ=wixij=1nvj,fxjvi,fxi2

∑ j = 1 n v j , f x j \sum_{j=1}^nv_{j,f}x_j j=1nvj,fxj i i i独立,可以提前计算出来,则梯度更新的训练复杂度也是 O ( k n ) O(kn) O(kn)
综上所述,FM可以在线性时间训练和预测,是一种非常高效的模型。

DeepFM

顾名思义,DeepFM就是把Deep embedding特征和FM相加,然后用sigmoid激活:
请添加图片描述
其中Deep Embedding的特征就是先将每个特征的 k维embedding向量进行拼接,然后用神经网络进行进一步的embedding。

FFM(Field-aware FM)

在FM中,每个特征有一个对应的向量,而FFM相对于FM的改进就是:
假设有F个特征,则每个特征有F-1个向量,在二次交叉项的权重部分,每个特征与其他F-1个特征结合使用的向量都不同,这样FFM的时间复杂度就达到 O ( k ∗ n 2 ) O(k*n^2) O(kn2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值