FM 模型推导

FM 模型推导

论文地址:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

在使用 LR 的时候,要进行大量的特征工程,如对离散值进行独热编码,在进行大量的独热编码之后,特征矩阵会变得非常稀疏。在特征创建的时候,两两特征进行组合,由于特征向量过于稀疏,无法学习到很多组合特征的权重,FM 模型在 LR 模型的基础上,多了特征两两组合的部分,需要比 LR 多学习对应参数的权重。

只讨论二阶特征组合的情况

  • LR 多了两两特征组合的形式如下 , n n n 是特征向量的维度:

y ^ = ω 0 + ∑ i = 1 n ω i x i + ∑ i = 1 n ∑ j = i + 1 n ω i j x i x j \hat{y} = \omega_0 + \sum^n_{i=1}\omega_ix_i +\sum^n_{i=1}\sum^n_{j=i+1} \omega_{ij}x_ix_j y^=ω0+i=1nωixi+i=1nj=i+1nωijxixj

  • 假设每个特征有它对应的隐因子向量,那么 ω i j \omega_{ij} ωij 就可以用两个特征对应的 k k k 纬隐因子向量 v i v_i vi, v j v_j vj 的内积表示

y ^ = ω 0 + ∑ i = 1 n ω i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j \hat{y} = \omega_0 + \sum^n_{i=1}\omega_ix_i +\sum^n_{i=1}\sum^n_{j=i+1} <v_i,v_j>x_ix_j y^=ω0+i=1nωixi+i=1nj=i+1n<vi,vj>xixj

  • 这里 ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j \sum^n_{i=1}\sum^n_{j=i+1} <v_i,v_j>x_ix_j i=1nj=i+1n<vi,vj>xixj 的部分可以进行优化,先贴上论文里面的推导,step by step

在这里插入图片描述

Step 1
在这里插入图片描述
特征要两两进行组合,肯定是不考虑重复的情况,所以开始的时候 ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j \sum^n_{i=1}\sum^n_{j=i+1} <v_i,v_j>x_ix_j i=1nj=i+1n<vi,vj>xixj j j j i + 1 i+1 i+1 开始。现在 j j j 的下标变为从 1 1 1 开始,那么 < v i , v j > <v_i, v_j> <vi,vj> < v j , v i > <v_j, v_i> <vj,vi> 都要算一遍,这俩计算结果是一样的,只算一遍即可,整体除以 2 2 2 ,因为原来 < v i , v i > <v_i, v_i> <vi,vi> 是不算的,现在算上了,所以要减去 < v i , v i > <v_i, v_i> <vi,vi>

Step 2
在这里插入图片描述
这里就是把 k k k 纬的隐因子向量展开

Step 3
在这里插入图片描述

  • ∑ f = 1 k \sum^k_{f=1} f=1k

= 1 2 ∑ f = 1 k ( ∑ i = 1 n ∑ j = 1 n v i , f v j , f x i x j − ∑ i = 1 n v i , f v i , f x i x i ) =\frac{1}{2} \sum^k_{f=1} \Big( \sum^n_{i=1}\sum^n_{j=1} v_{i,f} v_{j,f} x_ix_j - \sum^n_{i=1}v_{i,f} v_{i,f}x_ix_i \Big) =21f=1k(i=1nj=1nvi,fvj,fxixji=1nvi,fvi,fxixi)

  • 只看里面的 ∑ i = 1 n ∑ j = 1 n v i , f v j , f x i x j \sum^n_{i=1}\sum^n_{j=1} v_{i,f} v_{j,f} x_ix_j i=1nj=1nvi,fvj,fxixj
    ∑ j = 1 n v i , f v j , f x i x j \sum^n_{j=1} v_{i,f} v_{j,f} x_ix_j j=1nvi,fvj,fxixj 因为里面的 v i , f x i v_{i,f} x_i vi,fxi 对于此处来说相当于常量,提到外面,变为 v i , f x i ∑ j = 1 n v j , f x j v_{i,f}x_i \sum^n_{j=1} v_{j,f} x_j vi,fxij=1nvj,fxj ,所以变为:

∑ i = 1 n ∑ j = 1 n v i , f v j , f x i x j = ∑ i = 1 n v i , f x i ∑ j = 1 n v j , f x j \sum^n_{i=1}\sum^n_{j=1} v_{i,f} v_{j,f} x_ix_j = \sum^n_{i=1}v_{i,f}x_i\sum^n_{j=1} v_{j,f} x_j i=1nj=1nvi,fvj,fxixj=i=1nvi,fxij=1nvj,fxj

Step 4
在这里插入图片描述
这里 ∑ i = 1 n v i , f x i \sum^n_{i=1}v_{i,f}x_i i=1nvi,fxi ∑ j = 1 n v j , f x j \sum^n_{j=1} v_{j,f} x_j j=1nvj,fxj 其实只是下标的名字不一样而已,对应的隐因子向量的每个元素是一样的,so ∑ i = 1 n v i , f x i \sum^n_{i=1}v_{i,f}x_i i=1nvi,fxi ∑ j = 1 n v j , f x j \sum^n_{j=1} v_{j,f} x_j j=1nvj,fxj 是同一个东西,这样的话,只需要计算一次的 ∑ i = 1 n v i , f x i \sum^n_{i=1}v_{i,f}x_i i=1nvi,fxi 就可以了

到这样,计算 ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j \sum^n_{i=1}\sum^n_{j=i+1} <v_i,v_j>x_ix_j i=1nj=i+1n<vi,vj>xixj 的复杂度,就从 O ( k n 2 ) O(kn^2) O(kn2) 变为了 O ( k n ) O(kn) O(kn)

后面把这个 y ^ \hat{y} y^ 代入 Sigmoid 函数,使用 logistic 损失函数,然后梯度下降求解 ω i \omega_i ωi v i , f v_{i,f} vi,f 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值