【推荐系统】Factorization Machine

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=1nj=i+1nw2ijxixj

注意第二项,下标j的循环从i+1开始。

d=3 时,考虑三元组之间的关系:

y(x)=i=1nw1ixi+i=1nj=i+1nw2ijxixj+i=1nj=i+1nk=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=1nj=i+1n(xixj<vi,vj>)

可以首先把 xi (标量)和对应的参数向量 vi (长度为 r )相乘,并记录下来:

ui=xivi

对于

n 个元素,共需要:

nr 次乘法。

=i=1nj=i+1n<ui,uj>=p=1ri=1nj=i+1nuipujp

灵感

(a+b+c)2=a2+b2+c2+2ab+2ac+2bc

左边只需要1次乘法,而右边需要6次乘法:把二次项凑成和的平方可以节约计算

把上式的求和项统一范围,便于计算:

=12p=1ri=1nj=1nuipujpi=1nu2ip

=12p=1r(i=1nuip)2i=1nu2ip

括号内,两部分计算量均 O(n) 。整体计算量为 O(nr)

结论

FM是个线性模型。其计算量相对于变量维度 n ,以及模型度 r 均为线性。

求解

FM模型的参数可以使用SGD方法方便地求解。

预测值对一元参数的导数非常直接:

y(x)w1i=xi

时间复杂度为 O(1)

预测值对于二元参数的导数:

y(x)vip=xiy(x)uip=xij=1nujpuip

其中 nj=1ujp 和当前参数 xi 无关,可以提前统一计算。故此部分时间复杂度同样为 O(1)

对于全部参数,求解梯度的时间复杂度为 O(rnd) 。同样为线性。

  1. Rendle, Steffen. “Factorization Machines.” IEEE International Conference on Data Mining IEEE Computer Society, 2010:995-1000.
点赞