Factorization Machine(FM)1是现代推荐系统的基础算法之一。本文介绍FM的模型思想、计算与优化方法。
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 时,是线性模型:
y(x)=∑i=1nwixi
d=2 时,考虑元素对之间的关系:
y(x)=∑i=1nw1ixi+∑i=1n∑j=i+1nw2ijxixj
注意第二项,下标j的循环从i+1开始。
d=3 时,考虑三元组之间的关系:
y(x)=∑i=1nw1ixi+∑i=1n∑j=i+1nw2ijxixj+∑i=1n∑j=i+1n∑k=j+1nw3ijkxixjxk
模型中参数总量为 O(nd) 。比较而言,训练数据本身数量不足(记录不多),且非常稀疏,很容易过拟合。
FM的解决方案
FM使用分解(factorization)的方法解决这个问题。
以 d=2 为例,令:
wij=<vi,vj>=∑p=1rvipvjp
类似地, d=3 时:
wijk=<vi,vj,vk>=∑p=1rvipvjpvkp
其中, <∗,∗> 表示向量的对位相乘之和。向量长度 r<<n 。
可以从以下两个角度考察FM模型的物理意义
- 参数总量从 O(nd) 减少到 O(rnd) 。 r 越大参数越多,模型越精细; r 越小,泛化力越强。
- 分解削弱了高阶参数之间的独立性: wij 和 wik 通过 vi 关联。 vi 维度 r 越高, vi 对 <vi,vj> 的决定性,高阶参数之间独立性越强,模型越精细。
对于实际问题,选用较小的 r 即可克服系数数据问题,同时获得较好预测结果。
计算与求解
FM模型的计算和求解都非常快。
计算
以 d=2 为例,在计算 y(x) 时,只需考虑计算量最大的二元项:
二元项=∑i=1n∑j=i+1n(xixj<vi,vj>)
可以首先把 xi (标量)和对应的参数向量 vi (长度为 r )相乘,并记录下来:
ui=xi⋅vi
对于
n 个元素,共需要:
n⋅r 次乘法。
二元项=∑i=1n∑j=i+1n<ui,uj>=∑p=1r⎛⎝∑i=1n∑j=i+1nuipujp⎞⎠
灵感
(a+b+c)2=a2+b2+c2+2ab+2ac+2bc
左边只需要1次乘法,而右边需要6次乘法:把二次项凑成和的平方可以节约计算。
把上式的求和项统一范围,便于计算:
二元项=12∑p=1r⎛⎝∑i=1n∑j=1nuipujp−∑i=1nu2ip⎞⎠
=12∑p=1r⎛⎝(∑i=1nuip)2−∑i=1nu2ip⎞⎠
括号内,两部分计算量均 O(n) 。整体计算量为 O(nr)
结论:
FM是个线性模型。其计算量相对于变量维度 n ,以及模型度 r 均为线性。
求解
FM模型的参数可以使用SGD方法方便地求解。
预测值对一元参数的导数非常直接:
∂y(x)∂w1i=xi
时间复杂度为 O(1) 。
预测值对于二元参数的导数:
∂y(x)∂vip=xi⋅∂y(x)∂uip=xi⋅⎛⎝∑j=1nujp−uip⎞⎠
其中 ∑nj=1ujp 和当前参数 xi 无关,可以提前统一计算。故此部分时间复杂度同样为 O(1) 。
对于全部参数,求解梯度的时间复杂度为 O(rnd) 。同样为线性。
- Rendle, Steffen. “Factorization Machines.” IEEE International Conference on Data Mining IEEE Computer Society, 2010:995-1000. ↩