FM,稀疏下的艺术
最近正好处理一些稀疏数据,抽空看了下FM论文,Factorization Machines,因子分解机。在SVM之后,有各种优秀的推荐系统论文出现,FM是其中非常闪耀的一颗,基于FM的有台湾大学的FFM,华为诺亚方舟的DeepFM等。今天就来讲讲稀疏矩阵下发挥优秀的FM,有一些简单的论文推倒。
FM的特点很鲜明,优势有以下几种:
1、FM能够处理SVM无法胜任的工作,在非常稀疏的数据情况下,FM表现良好
2、FM复杂度为线性
3、FM对数据要求不严苛
首先让我们来看看这么一张图(从论文中抠出来的),这是典型的推荐系统方向的问题。
文章图片
Fig 1 这是一个真实的交易数据,所有category类型的数据都做了one-hot处理,整个数据集非常稀疏。每行表示一次交易,同颜色的列表示同一个特征。例如,前三条数据中User特征只有A出现1,表示这几次交易都是A完成的。类似的,Movie代表购买的电影。
那么如何处理此类问题呢,FM给出答案。
文章图片
模型公式
文章图片
文章图片
FM中目标结果由 W0:常数项, WiXi:一次项,
那么将二次项考虑进来,会增大计算复杂度吗?一般,我们认为二次项的计算复杂度应该是O(kn^2),但是FM却可以优化到O(kn)复杂度。
我们考虑二次项
文章图片
哇塞,这么复杂的公式怎么看得懂,我们一步步来,其实很简单。
第一步,拆解过程如图
文章图片
拆解 第二步,向量点乘
第三步,将k求和提出来
第四步,左边i和j式子相同,可以认为两者相等,直接得出平方
到此,很明显,它的计算复杂度为O(kn),左边求和之后平方,右边平方后求和,没有出现
文章图片
接下来我们看看FM如何收敛,照常使用SGD,计算FM的梯度是:
文章图片
求Xi的梯度,令Xj固定,则第三项左边求和是一个定值,与Xi无关。时间复杂度为O(kn)
FM也可以扩展到更高阶的形式
文章图片
到这,我们可以推断,FM能够在O(kn)时间复杂度处理特征间关联问题。
那么,这和SVM相比有什么优势呢,SVM通过相应的核函数也能做到。还记得我们开头说的吗,相比SVM,FM能够胜任稀疏矩阵。
首先我们来看一下SVM如何处理特征间关联问题。SVM的公式是:
文章图片
选用合适的核函数,这里我们设d=2, 例如
文章图片
展开后公式可得
文章图片
通过大量的数据训练,我们也能够得出对应的Weight。但是,如果特征i,和特征j没有同时出现呢。例如,从来没有一个人既买过啤酒,又买过烧鸭,那么你能认为某个人买完啤酒后不会再买烧鸭吗?这就是数据稀疏时候出现的问题,这时候Wi,j没有对应的x值训练。FM通过Vi *Vj来确定W,那么只要其他记录有Vi,和Vj,不用同时出现,就可以分别对其进行训练,最后通过点乘来确定值。这牺牲了Wi,j一点自由度,却能够很好的处理稀疏矩阵的问题。
【FM,稀疏下的艺术】在非常稀疏的数据下,FM表现非常优秀,而SVM始终无法收敛,导致误差太大。
文章图片
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量