推荐系统Factorization Machines(FM)

Posted 天泽28

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐系统Factorization Machines(FM)相关的知识,希望对你有一定的参考价值。

推荐系统(三)Factorization Machines(FM)

推荐系统系列博客:
推荐系统(一)推荐系统整体概览
推荐系统(二)GBDT+LR模型

按照发表年份,这篇博客应该在GBDT+LR之前写的,但因为FM相比较GBDT+LR的内容稍微多些,所以就后写了这篇博客。言归正传,FM是推荐系统领域大佬rendle于2010年发表在ICDM上的论文,是一篇非常非常有影响力的论文,启发了此后10年学术界大量的工作,直接的改进就有引入神经网络的NFM,引入attention的AFM等(关于NFM和AFM这两个能不能像FM一样在工业界一样work,这个…,不过话又说回来,学术界的价值就在于提供idea,大规模商用另说了)。在详细介绍FM之前,先用一句话概括下FM:隐式向量特征交叉。这么一看FM在那个时候已经孕育了embedding的思想。接下来会介绍LR、SVM、MF,这三是FM的灵感源泉,这样看起来条理也比较清晰。

1. LR
先来回顾下LR:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i (1) \\haty(x) = w_0 + \\sum_i=1^nw_ix_i \\tag1 y^(x)=w0+i=1nwixi(1)
那么,如果我们想做特征的二阶交叉,很自然的可以把LR改造为如下的函数:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n w i j x i x j (2) \\haty(x) = w_0 + \\sum_i=1^nw_ix_i + \\sum_i=1^n\\sum_j=i+1^nw_ijx_ix_j \\tag2 y^(x)=w0+i=1nwixi+i=1nj=i+1nwijxixj(2)
但是公式2明显有两个缺点:1. 时间段复杂度是O(N^2),2.依赖于 x i x j x_ix_j xixj特征对的共现,如果这对特征在训练集中没有出现,那么这个参数学习不到。

2. SVM
我在很久很久以前的博客里写过一篇最基本最浅显的SVM(现在回头来看着实有些浅显,没有讲解到核函数的本质),参见:支持向量机SVM,支持向量机干的事就是既然低维空间下找不到一个超平面来划分两类样本,那么我映射下,把低维空间映射成高维空间来寻得一个超平面好了。所以,假如我们用 ϕ ( x ) \\phi(x) ϕ(x)表示将 x x x映射后的特征向量,支持向量机模型为:
y ^ ( x ) = w T ϕ ( x ) + b (3) \\haty(x) = w^T\\phi(x) + b \\tag3 y^(x)=wTϕ(x)+b(3)
一顿对偶猛如虎后,发现要算 ϕ ( x i ) T ϕ ( x j ) \\phi(x_i)^T\\phi(x_j) ϕ(xi)Tϕ(xj),也就是说要算 x i x_i xi x j x_j xj映射之后的内积,那这个复杂度有点略高啊(先映射成高维,再算内积),所以得想办法降低复杂度,那么核函数就出场了,假如我们有个核函数:
k ( x i , x j ) = < ϕ ( x i ) , ϕ ( x j ) > = ϕ ( x i ) T ϕ ( x j ) (4) k(x_i, x_j) = <\\phi(x_i), \\phi(x_j) > = \\phi(x_i)^T\\phi(x_j) \\tag4 k(xi,xj)=<ϕ(xi),ϕ(xj)>=ϕ(xi)Tϕ(xj)(4)
能够使得 x i x_i xi x j x_j xj在映射后的特征空间的内积等于他们在原始样本空间中通过 k ( . , . ) k(.,.) k(.,.)函数计算的结果。

2.1 线性核函数
对于线性核 k ( x i , x j ) = 1 + < x i , x j > k(x_i,x_j)=1+<x_i,x_j> k(xi,xj)=1+<xi,xj>,映射函数 ϕ ( x ) = ( 1 , x 1 , x 2 , . . . , x n ) \\phi(x)=(1,x_1,x_2,...,x_n) ϕ(x)=(1,x1,x2,...,xn),那么linear SVM模型为:
y ^ ( x ) = w 0 + ∑ i = 1 n w i x i (5) \\haty(x) = w_0 + \\sum_i=1^nw_ix_i \\tag5 y^(x)=w0+i=1nwixi(5)
乍一看仿佛和LR没啥区别啊,但实际上还是有区别的,因为loss不同和SVM需要支持向量等。

2.2 多项式核函数
多项式核 k ( x i , x j ) = ( < x i , x j > + 1 ) 2 k(x_i,x_j) = (<x_i,x_j>+1)^2 k(xi,xj)=(<xi,xj>+1)2,映射函数 ϕ ( x ) = ( 1 , 2 x 1 , 2 x 2 , . . . , 2 x n , x 1 2 , x 2 2 , . . . , x n 2 , 2 x 1 x 2 , 2 x 1 x 3 , . . . , 2 x 1 x n , 2 x 2 x 3 . . . , 2 x n − 1 x n ) \\phi(x)=(1,\\sqrt2x_1,\\sqrt2x_2,...,\\sqrt2x_n, x_1^2, x_2^2, ...,x_n^2, \\sqrt2x_1x_2,\\sqrt2x_1x_3,...,\\sqrt2x_1x_n,\\sqrt2x_2x_3 ...,\\sqrt2x_n-1x_n) ϕ(x)=(1,2 x1

以上是关于推荐系统Factorization Machines(FM)的主要内容,如果未能解决你的问题,请参考以下文章

推荐系统入门到项目实战:因子分解机(Factorization Machine)

推荐系统Factorization Machines(FM)

推荐系统Factorization Machines(FM)

推荐系统Factorization Machines(FM)

Factorization Machine因子分解机

推荐系统Field-aware Factorization Machines(FFM)