Factorization Machine(FM)1是现代推荐系统的基础算法之一。本文介绍FM的模型思想、计算与优化方法。
输入: n 维数据 x 。
预测:标量 y
举例
- 回归: x 的元素和 y 都为实数
- 二类分类: x 的元素为实数, y 为 ±1
- 排序: x=(xa,xb) 为有序对, y 为 ±1
在实际问题中, x 往往非常稀疏: x 中非零元素个数远远小于 n 。
举例
一个电影推荐系统,系统中有 n1 个用户,有 n2 部电影。
系统中的每一条记录包含如下信息:用户编号,时间,电影编号,打分。
想要设计一个系统,预测用户某时刻对某一部电影的评分。对于每一条记录,按照如下方式将其转化为 (x,y) 对:
- 内容 维度 说明 x 1-hot编码的用户编号 n1 用户多,此部分稀疏 1-hot编码的电影编号 n2 电影多,此部分稀疏 0-1标记用户已经看过的电影,归一化到和为一 n2 大部分用户只看过很少电影,此部分稀疏 时间 1 y 评分 1
一个预测模型可以有不同的“度”(degree),度越大,对 x 元素之间的相互作用考虑的越多。
d=1 时,是线性模型:
注意第二项,下标j的循环从i+1开始。
d=3 时,考虑三元组之间的关系:
模型中参数总量为 O(nd) 。比较而言,训练数据本身数量不足(记录不多),且非常稀疏,很容易过拟合。
FM使用分解(factorization)的方法解决这个问题。
以 d=2 为例,令:
类似地, d=3 时:
其中, <∗,∗> 表示向量的对位相乘之和。向量长度 r<<n 。
可以从以下两个角度考察FM模型的物理意义
对于实际问题,选用较小的 r 即可克服系数数据问题,同时获得较好预测结果。
FM模型的计算和求解都非常快。
以 d=2 为例,在计算 y(x) 时,只需考虑计算量最大的二元项:
可以首先把 xi (标量)和对应的参数向量 vi (长度为 r )相乘,并记录下来:
灵感
(a+b+c)2=a2+b2+c2+2ab+2ac+2bc左边只需要1次乘法,而右边需要6次乘法:把二次项凑成和的平方可以节约计算。
把上式的求和项统一范围,便于计算:
括号内,两部分计算量均 O(n) 。整体计算量为 O(nr)
结论:
FM是个线性模型。其计算量相对于变量维度 n ,以及模型度 r 均为线性。
FM模型的参数可以使用SGD方法方便地求解。
预测值对一元参数的导数非常直接:
时间复杂度为 O(1) 。
预测值对于二元参数的导数:
其中 ∑nj=1ujp 和当前参数 xi 无关,可以提前统一计算。故此部分时间复杂度同样为 O(1) 。
对于全部参数,求解梯度的时间复杂度为 O(rnd) 。同样为线性。