因子分解机(FM)简介及实践

因子分解机(Factorization Machines, FM)是一个在2010年被提出的算法,是预估CTR的经典模型之一。在这篇文章里,前半部分会介绍FM的原理,后半部分会通过tensorflow来实现FM算法。由于个人水平十分有限,文章中对算法理解不当的地方,烦请大家指出,不胜感激!

1 FM简介

1.1 提出的动机

我们知道逻辑回归方法是对所有特征的一个线性加权组合,其预测值可以写为如下形式:

 

但这样的形式只是单独考虑了每个特征对目标值 的影响,而没有考虑特征之间的关系,比如二阶组合特征 [公式] 或者三阶组合特征 [公式] 对目标值的影响。现在我们只考虑二阶特征组合的情况,那么逻辑回归表达式可以改写为:

 

写成公式2的形式确实是考虑了二阶特征组合对模型预测的影响,但同时会带来一个新的问题。因为在CTR预估问题里面,或者很多分类、回归问题里面,我们常常需要对类别型特征进行one-hot编码(比如男性、女性分别被编码为01,10),当类别型特征变量较多的情况下,编码后其实是会产生了高维特征,这导致我们很难找到一组  和 [公式] 使得 [公式] 不为0。而对于大多数 [公式] 乘积为0的项,对应的 [公式] 在梯度更新时 [公式] ,也就无法进行梯度更新来求解 [公式] 。

而因子分解机的工作就是将  替换为两个向量的乘积 [公式] ,进而缓解了稀疏特征对模型求解的困难。

1.2 具体内容

仅考虑二阶特征组合的话,FM模型表达式可以写为:

 

其中 vi和vj 是 [公式] 维向量 [公式]  [公式] 的点积,也是对应一个实数值:

 

 

由矩阵分解可知,对任意一个正定矩阵 ,都可以找到一个矩阵 [公式] ,且在矩阵 [公式] 维度 [公式] 足够大的情况下使得 [公式] 成立。FM这样写法的精妙之处在于,首先通过矩阵分解用两个向量 [公式]  [公式] 的乘积近似原先矩阵 [公式] ,这保持了变化前后的统一。其次,在拆解为 [公式][公式] 之后,参数更新时是对这两个向量分别更新的,那么在更新时,对于向量 [公式] ,我们不需要寻找到一组 [公式] 和 [公式] 同时不为0,我们只需要在 [公式] 的情况下,找到任意一个样本 [公式] 即可通过 [公式] 来更新 [公式] ,也就是说,原先更新参数 [公式] 的条件对于稀疏数据比较苛刻,FM这样的写法缓解了稀疏数据造成无法更新参数的困难。

 

其实我觉得FM算法的核心思想写到这里就介绍完了,因子分解机中的“因子分解”部分就是替换原先的  。而在FM论文里,作者更进一步,将公式3改写,降低FM算法的时间复杂度。对于公式3,我们知道二阶项有两次循环,而 [公式] 又是经过 [公式] 次计算,因此其时间复杂度为 [公式] ,但通过如下的转换过程,可以将时间复杂度降低为 [公式] :

 

需要解释一下的是公式5的第1步,原始求解的就是矩阵上三角之和,那么第1步就是整个矩阵之和减去矩阵的迹,然后求一半。对于稀疏数据中  大多数都为0,假设 [公式] 代表的是对于所有数据 [公式] 特征不为0个数的平均值,那么FM算法复杂度实际上为 [公式] 。

 

那么二阶FM表达式可以写为:

接下来我们根据公式6计算一下FM算法更新时的梯度。

第一种情况,当参数为 时,很简单:

 

第二种情况,当参数为 [公式] 时,显然更新 [公式] 只跟和它相关的 [公式] 有关:

第三种情况,当参数为 [公式] 时,因为我们所求的是模型对具体的某一个 [公式] 和具体的某一个[公式] 对应的向量 [公式] 产生的梯度,那么对于公式6中,第二项大括号外面的 [公式] 其实是失效的,第二项大括号里面的第二小项 [公式] 也是失效的,即:

 

总结来说,FM模型对参数的梯度为: 

 参考链接:

因子分解机(FM)简介及实践 - 知乎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值