FM 模型推导
论文地址:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
在使用 LR 的时候,要进行大量的特征工程,如对离散值进行独热编码,在进行大量的独热编码之后,特征矩阵会变得非常稀疏。在特征创建的时候,两两特征进行组合,由于特征向量过于稀疏,无法学习到很多组合特征的权重,FM 模型在 LR 模型的基础上,多了特征两两组合的部分,需要比 LR 多学习对应参数的权重。
只讨论二阶特征组合的情况
- LR 多了两两特征组合的形式如下 ,n 是特征向量的维度:
y^=ω0+i=1∑nωixi+i=1∑nj=i+1∑nωijxixj
- 假设每个特征有它对应的隐因子向量,那么 ωij 就可以用两个特征对应的 k 纬隐因子向量 vi, vj 的内积表示
y^=ω0+i=1∑nωixi+i=1∑nj=i+1∑n<vi,vj>xixj
- 这里 ∑i=1n∑j=i+1n<vi,vj>xixj 的部分可以进行优化,先贴上论文里面的推导,step by step

Step 1

特征要两两进行组合,肯定是不考虑重复的情况,所以开始的时候 ∑i=1n∑j=i+1n<vi,vj>xixj 的 j 从 i+1 开始。现在 j 的下标变为从 1 开始,那么 <vi,vj> 和 <vj,vi> 都要算一遍,这俩计算结果是一样的,只算一遍即可,整体除以 2 ,因为原来 <vi,vi> 是不算的,现在算上了,所以要减去 <vi,vi>
Step 2

这里就是把 k 纬的隐因子向量展开
Step 3

- 提 ∑f=1k
=21f=1∑k(i=1∑nj=1∑nvi,fvj,fxixj−i=1∑nvi,fvi,fxixi)
- 只看里面的 ∑i=1n∑j=1nvi,fvj,fxixj
∑j=1nvi,fvj,fxixj 因为里面的 vi,fxi 对于此处来说相当于常量,提到外面,变为 vi,fxi∑j=1nvj,fxj ,所以变为:
i=1∑nj=1∑nvi,fvj,fxixj=i=1∑nvi,fxij=1∑nvj,fxj
Step 4

这里 ∑i=1nvi,fxi 和 ∑j=1nvj,fxj 其实只是下标的名字不一样而已,对应的隐因子向量的每个元素是一样的,so ∑i=1nvi,fxi 和 ∑j=1nvj,fxj 是同一个东西,这样的话,只需要计算一次的 ∑i=1nvi,fxi 就可以了
到这样,计算 ∑i=1n∑j=i+1n<vi,vj>xixj 的复杂度,就从 O(kn2) 变为了 O(kn)
后面把这个 y^ 代入 Sigmoid 函数,使用 logistic 损失函数,然后梯度下降求解 ωi 和 vi,f 即可。