【推荐系统】Factorization Machine
【推荐系统】Factorization Machine
Factorization Machine(FM)[1](#fn1)是现代推荐系统的基础算法之一。本文介绍FM的模型思想、计算与优化方法。
FM模型
问题
输入:
n
n
n维数据
x
\bf{x}
x。<br> 预测:标量
y
y
y
举例
- 回归:
x
\bf x
x的元素和
y
y
y都为实数</li><li>二类分类:
x
\bf x
x的元素为实数,
y
y
y为
±
1
\pm1
±1</li><li>排序:
x
=
(
x
a
,
x
b
)
\textbf x =(x^a,x^b)
x=(xa,xb)为有序对,
y
y
y为
±
1
\pm1
±1</li></ul>
在实际问题中,
x
\bf x
x往往非常稀疏:
x
\bf x
x中非零元素个数远远小于
n
n
n。
举例
一个电影推荐系统,系统中有
n
1
n_1
n1个用户,有
n
2
n_2
n2部电影。 想要设计一个系统,预测用户某时刻对某一部电影的评分。</p>
对于每一条记录,按照如下方式将其转化为
(
x
,
y
)
(\textbf x,y)
(x,y)对: |----|----|----|<br> |
x
\textbf x
x|1-hot编码的用户编号|
n
1
n_1
n1|用户多,此部分稀疏|<br> ||1-hot编码的电影编号|
n
2
n_2
n2|电影多,此部分稀疏|<br> ||0-1标记用户已经看过的电影,归一化到和为一|
n
2
n_2
n2|大部分用户只看过很少电影,此部分稀疏| |y|评分|1||</p>
稀疏数据的挑战
一个预测模型可以有不同的“度”(degree),度越大,对
x
\bf x
x元素之间的相互作用考虑的越多。
d
=
1
d=1
d=1时,是线性模型:<br>
y
(
x
)
=
∑
i
=
1
n
w
i
x
i
y(\textbf x)=\sum_{i=1}^nw_ix_i
y(x)=i=1∑nwixi<br>
d
=
2
d=2
d=2时,考虑元素对之间的关系:<br>
y
(
x
)
=
∑
i
=
1
n
w
i
1
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
w
i
j
2
x
i
x
j
y(\textbf x)=\sum_{i=1}^nw^1_ix_i+\sum_{i=1}^n\sum_{j=i+1}^nw^2_{ij}x_ix_j
y(x)=i=1∑nwi1xi+i=1∑nj=i+1∑nwij2xixj
注意第二项,下标j的循环从i+1开始。
d
=
3
d=3
d=3时,考虑三元组之间的关系:<br>
y
(
x
)
=
∑
i
=
1
n
w
i
1
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
w
i
j
2
x
i
x
j
+
∑
i
=
1
n
∑
j
=
i
+
1
n
∑
k
=
j
+
1
n
w
i
j
k
3
x
i
x
j
x
k
y(\textbf x)=\sum_{i=1}^nw^1_ix_i+\sum_{i=1}^n\sum_{j=i+1}^nw^2_{ij}x_ix_j+\sum_{i=1}^n\sum_{j=i+1}^n \sum_{k=j+1}^nw^3_{ijk}x_ix_jx_k
y(x)=i=1∑nwi1xi+i=1∑nj=i+1∑nwij2xixj+i=1∑nj=i+1∑nk=j+1∑nwijk3xixjxk
模型中参数总量为
O
(
n
d
)
O(n^d)
O(nd)。比较而言,训练数据本身数量不足(记录不多),且非常稀疏,**很容易过拟合**。
FM的解决方案
FM使用分解(factorization)的方法解决这个问题。
以
d
=
2
d=2
d=2为例,令:<br>
w
i
j
=
<
v
i
,
v
j
>
=
∑
p
=
1
r
v
i
p
v
j
p
w_{ij}=<\textbf v_i, \textbf v_j>=\sum_{p=1}^rv_{ip}v_{jp}
wij=<vi,vj>=p=1∑rvipvjp
类似地,
d
=
3
d=3
d=3时:<br>
w
i
j
k
=
<
v
i
,
v
j
,
v
k
>
=
∑
p
=
1
r
v
i
p
v
j
p
v
k
p
w_{ijk}=<\textbf v_i, \textbf v_j,\textbf v_k>=\sum_{p=1}^rv_{ip}v_{jp}v_{kp}
wijk=<vi,vj,vk>=p=1∑rvipvjpvkp
其中,
<
∗
,
∗
>
<*,*>
<∗,∗>表示向量的对位相乘之和。向量长度
r
<
<
n
r<<n
r<<n。
可以从以下两个角度考察FM模型的物理意义
O
(
n
d
)
O(n^d)
O(nd)减少到
O
(
r
n
d
)
O(rnd)
O(rnd)。
r
r
r越大参数越多,模型越精细;
r
r
r越小,泛化力越强。</li><li>分解削弱了高阶参数之间的独立性:
w
i
j
w_{ij}
wij和
w
i
k
w_{ik}
wik通过
v
i
\bf v_i
vi关联。
v
i
\bf v_i
vi维度
r
r
r越高,
v
i
\bf v_i
vi对
<
v
i
,
v
j
>
<\textbf v_i,\textbf v_j>
<vi,vj>的决定性,高阶参数之间独立性越强,模型越精细。</li>
对于实际问题,选用较小的
r
r
r即可克服系数数据问题,同时获得较好预测结果。
计算与求解
FM模型的计算和求解都非常快。
计算
以
d
=
2
d=2
d=2为例,在计算
y
(
x
)
y(x)
y(x)时,只需考虑计算量最大的二元项:<br>
二
元
项
=
∑
i
=
1
n
∑
j
=
i
+
1
n
(
x
i
x
j
<
v
i
,
v
j
>
)
二元项=\sum_{i=1}^n \sum_{j=i+1}^n\left(x_ix_j<\textbf v_i, \textbf v_j>\right)
二元项=i=1∑nj=i+1∑n(xixj<vi,vj>)
可以首先把
x
i
x_i
xi(标量)和对应的参数向量
v
i
\textbf v_i
vi(长度为
r
r
r)相乘,并记录下来:<br>
u
i
=
x
i
⋅
v
i
\textbf u_i=x_i\cdot \textbf v_i
ui=xi⋅vi<br> 对于
n
n
n个元素,共需要:
n
⋅
r
n\cdot r
n⋅r次乘法。
二
元
项
=
∑
i
=
1
n
∑
j
=
i
+
1
n
<
u
i
,
u
j
>
=
∑
p
=
1
r
(
∑
i
=
1
n
∑
j
=
i
+
1
n
u
i
p
u
j
p
)
二元项=\sum_{i=1}^n \sum_{j=i+1}^n<\textbf u_i, \textbf u_j>=\sum_{p=1}^r \left( \sum_{i=1}^n \sum_{j=i+1}^n u_{ip}u_{jp}\right)
二元项=i=1∑nj=i+1∑n<ui,uj>=p=1∑r(i=1∑nj=i+1∑nuipujp)
灵感
(
a
+
b
+
c
)
2
=
a
2
+
b
2
+
c
2
+
2
a
b
+
2
a
c
+
2
b
c
(a+b+c)^2=a^2+b^2+c^2+2ab+2ac+2bc
(a+b+c)2=a2+b2+c2+2ab+2ac+2bc</p>
左边只需要1次乘法,而右边需要6次乘法:把二次项凑成和的平方可以节约计算。
把上式的求和项统一范围,便于计算:
二
元
项
=
1
2
∑
p
=
1
r
(
∑
i
=
1
n
∑
j
=
1
n
u
i
p
u
j
p
−
∑
i
=
1
n
u
i
p
2
)
二元项=\frac{1}{2}\sum_{p=1}^r\left(\sum_{i=1}^n \sum_{j=1}^n u_{ip}u_{jp} - \sum_{i=1}^nu_{ip}^2\right)
二元项=21p=1∑r(i=1∑nj=1∑nuipujp−i=1∑nuip2)
=
1
2
∑
p
=
1
r
(
(
∑
i
=
1
n
u
i
p
)
2
−
∑
i
=
1
n
u
i
p
2
)
=\frac{1}{2}\sum_{p=1}^r\left( \left(\sum_{i=1}^nu_{ip}\right)^2- \sum_{i=1}^nu_{ip}^2 \right)
=21p=1∑r⎝⎛(i=1∑nuip)2−i=1∑nuip2⎠⎞
括号内,两部分计算量均
O
(
n
)
O(n)
O(n)。整体计算量为
O
(
n
r
)
O(nr)
O(nr)
结论:
FM是个线性模型。其计算量相对于变量维度
n
n
n,以及模型度
r
r
r均为线性。</p>
求解
FM模型的参数可以使用SGD方法方便地求解。
预测值对一元参数的导数非常直接:
∂
y
(
x
)
∂
w
i
1
=
x
i
\frac{\partial y(x)}{\partial w^1_i}=x_i
∂wi1∂y(x)=xi
时间复杂度为
O
(
1
)
O(1)
O(1)。
预测值对于二元参数的导数:
∂
y
(
x
)
∂
v
i
p
=
x
i
⋅
∂
y
(
x
)
∂
u
i
p
=
x
i
⋅
(
∑
j
=
1
n
u
j
p
−
u
i
p
)
\frac{\partial y(x)}{\partial v_{ip}}=x_i\cdot \frac{\partial y(x)}{\partial u_{ip}}=x_i\cdot \left( \sum_{j=1}^nu_{jp}-u_{ip}\right)
∂vip∂y(x)=xi⋅∂uip∂y(x)=xi⋅(j=1∑nujp−uip)
其中
∑
j
=
1
n
u
j
p
\sum_{j=1}^nu_{jp}
∑j=1nujp和当前参数
x
i
x_i
xi无关,可以提前统一计算。故此部分时间复杂度同样为
O
(
1
)
O(1)
O(1)。
对于全部参数,求解梯度的时间复杂度为
O
(
r
n
d
)
O(rnd)
O(rnd)。同样为线性。
- Rendle, Steffen. “Factorization Machines.” IEEE International Conference on Data Mining IEEE Computer Society, 2010:995-1000. ↩︎
转载于网络 侵权联系作者立即删除QAQ

浙公网安备 33010602011771号