FM和FFM
FM(Factorization Machines)和FFM(Field-aware Factorization Machines)主要应用于稀疏特征矩阵中的CTR预估。本文对其进行简单介绍,希望对大家有所帮助。
1.FM
FM模型使用因子分解的方式计算变量之间的交互项,能够解决特征交互所带来的稀疏问题(像推荐系统),其计算的复杂度是线性的。
1.1问题描述
前提假设:特征向量 X X X是非常稀疏的,例如: x \text{x} x中大多数元素 x i x_i xi都为0,设 m ( x ) m(x) m(x)为向量中非零向 x \text{x} x量的个数, m ˉ D \bar{m}_{D} mˉD是 m ( x ) m(x) m(x)在特征矩阵 D D D个数的平均值。在推荐系统和文本分析的过程中,有些类别变量值是非常稀疏的, m ˉ D ≪ n \bar{m}_{D} \ll n mˉD≪n,其中: n n n为样本的数量。
举例说明:
上图1来自交易的稀疏矩阵向量x的例子,每行代表一个特征向量$ x^{i}$ 及其对应的标签$ y^{i}$,前4列蓝色代表用户,接下来5列红色代表看过的电影,5列黄色代表对看过电影的评分,绿色代表看电影的时间,以月份数表示,褐色代表在Target y时间之前所评价的最后一部电影。
我们有一份关于电影评价的交易数据,这份数据描述用户
u
∈
U
u\in U
u∈U在某个时间
t
∈
R
t\in \mathbb{R}
t∈R对电影
i
∈
I
i\in I
i∈I进行评价为
r
∈
{
1
,
2
,
3
,
4
,
5
}
r\in\{1,2,3,4,5\}
r∈{1,2,3,4,5},其中,用户
U
U
U和电影
I
I
I描述 如下:
U = Alice (A),Bob (B),Charlie (C),...
I = Titanic (TI),Notting Hill (NH),Star Wars (SW), Star Trek (ST),...
\text{U = {Alice (A),Bob (B),Charlie (C),...}}\\ \text{I = {Titanic (TI),Notting Hill (NH),Star Wars (SW), Star Trek (ST),...}}
U = Alice (A),Bob (B),Charlie (C),...I = Titanic (TI),Notting Hill (NH),Star Wars (SW), Star Trek (ST),...
原始数据
S
\text{S}
S如下:
S = {(A,TI,2010-1,5),(A,NH,2010-2,3),(A,SW,2010-4,1), (B,SW,2009-5,4),
(B,ST,2009-8,5), (C,TI,2009-9,1),(C,SW,2009-12,5)}
\text{S = \{(A,TI,2010-1,5),(A,NH,2010-2,3),(A,SW,2010-4,1), (B,SW,2009-5,4),}\\ \text{(B,ST,2009-8,5), (C,TI,2009-9,1),(C,SW,2009-12,5)\}}
S = {(A,TI,2010-1,5),(A,NH,2010-2,3),(A,SW,2010-4,1), (B,SW,2009-5,4),(B,ST,2009-8,5), (C,TI,2009-9,1),(C,SW,2009-12,5)}
利用以上数据进行模型训练,预测用户在某个时间对电影的评价情况。
上图1显示从原始数据 S \text{S} S转化为特征矩阵的例子,上图 ∣ U ∣ |U| ∣U∣(蓝色部分)代表事务的活跃的用户,在每个事务 ( u , i , t , r ) ∈ S (u, i, t, r) \in S (u,i,t,r)∈S描述一个活跃的用户。用户Alice在蓝色部分用 x A 1 = 1 x_A^{1}=1 xA1=1表示。接下来,红色部分的二值变量用于表示活跃的事项(是否看过该电影),例如: x T I ( 1 ) x_{TI}^{(1)} xTI(1)。黄色部分代表用户对已经看过电影的评分,对于每个用户的评分进行标准化,所有的评分和为1。绿色部分表示用户看电影的时间与2009年1月的时间差,用月份数表示。褐色部分表示在Target y评分前所看过最后一部电影。在本节中,将介绍如何使用因子分解机(FMs)对偏好的电影进行推荐。
1.2因子分解机(FMs)
在本节中,我们介绍 因子分解机,讨论这个模型等式是如何应用于推荐任务的。
1.2.1 因子分解机模型
1)模型等式:假设如下模型等式的度为2(即两个变量之间的交叉),定义如下:
y
^
(
x
)
:
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
⟨
v
i
,
v
j
⟩
x
i
x
j
(
1
)
其
中
,
w
0
∈
R
,
w
∈
R
n
,
V
∈
R
n
×
k
(
2
)
⟨
⋅
,
⋅
⟩
是
两
个
长
度
为
k
向
量
之
间
的
乘
积
,
如
下
表
示
:
⟨
v
i
,
v
j
⟩
:
=
∑
f
=
1
k
v
i
,
f
⋅
v
j
,
f
(
3
)
\hat{y}(\mathbf{x}):=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j} \qquad(1)\\ 其中,w_{0} \in \mathbb{R}, \quad \mathbf{w} \in \mathbb{R}^{n}, \quad \mathbf{V} \in \mathbb{R}^{n \times k}\qquad(2)\\ \langle\cdot, \cdot\rangle是两个长度为k向量之间的乘积,如下表示:\\ \left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle:=\sum_{f=1}^{k} v_{i, f} \cdot v_{j, f}\qquad(3)
y^(x):=w0+i=1∑nwixi+i=1∑nj=i+1∑n⟨vi,vj⟩xixj(1)其中,w0∈R,w∈Rn,V∈Rn×k(2)⟨⋅,⋅⟩是两个长度为k向量之间的乘积,如下表示:⟨vi,vj⟩:=f=1∑kvi,f⋅vj,f(3)
在度为2的FM模型中捕获所有单个变量和两个变量交叉与y之间因果关系:
- w 0 w_0 w0是全局偏置项(常数项)。
- w i w_i wi为第 i i i特征的变量的贡献度。
- w ^ i , j : = ⟨ v i , v j ⟩ \hat{w}_{i,j}:=\langle v_i,v_j\rangle w^i,j:=⟨vi,vj⟩是第 i i i个特征和第 j j j个特征交互项。FM模型采用因子化的形式代替 ⟨ v i , v j ⟩ \langle v_i,v_j\rangle ⟨vi,vj⟩代替 w i , j w_{i,j} wi,j,这一操作能够解决高阶交互项 ( d ≥ 2 ) (d \geq 2) (d≥2)的稀疏数据问题。
1.2.2 计算复杂度
我们直到对于任何正定矩阵 W \text{W} W,存在矩阵 V \text{V} V和足够大的 k k k使得 W=V ⋅ V t \text{W=V}\cdot{\text{V}^t} W=V⋅Vt。只要我们选择的 k k k足够大,FM模型能够表示任何交互项。然而在稀疏的数据上,由于没有足够的数据构建高阶交互项,我们一般选择比较小的 k k k。低阶 k k k降低FM模型在复杂性,提高模型在稀疏数据的泛化能力。
1.2.3 稀疏情况下的参数估计
在稀疏数据的情况下,由于没有足够的数据,无法直接和独立地估计变量之间的交互项。因子分解机通过因子化交互项打破交互参数估计的独立性问题。这意味着一个交互项的参数估计能够帮助相关相关交互项进行估计。我们通过上图1数据的例子进行解释一下。假设我们想估计交互项 A l i c e ( A ) Alice(A) Alice(A)和 S t a r T r e k ( S T ) Star\ Trek(ST) Star Trek(ST)来预测目标 y y y。显然,在训练数据中,不存在非零的 x A x_A xA和 x S T x_{ST} xST,所以无法直接估计交互项 w A , S T w_{A,ST} wA,ST。我们可以通过因子化交互参数 ⟨ v A , v ST ⟩ \langle \text{v}_{A},v_{\text{ST}}\rangle ⟨vA,vST⟩来估计交互项 w A , S T w_{A,ST} wA,ST。首先,由于 B o b Bob Bob和 C h a r l i e Charlie Charlie对电影 S t a r W a r s ( v S W ) Star\ Wars(\text{v}_{SW}) Star Wars(vSW)的评分相似,也就是说 ⟨ v B , v S W ⟩ \langle \text{v}_B,\text{v}_{SW}\rangle ⟨vB,vSW⟩和 ⟨ v C , v S W ⟩ \langle \text{v}_C,\text{v}_{SW}\rangle ⟨vC,vSW⟩相似,所以拥有相似的因子项 v B \text{v}_B vB和 v C \text{v}_C vC。由于 A l i c e ( v A ) Alice(\text{v}_A) Alice(vA)与 C h a r l i e ( v C ) Charlie(\text{v}_C) Charlie(vC)对 T i t a n i c Titanic Titanic和 S t a r W a r s Star\ Wars Star Wars的评分不同,所以, A l i c e ( v A ) Alice(\text{v}_A) Alice(vA)和 C h a r l i e ( v C ) Charlie(\text{v}_C) Charlie(vC)的因子向量不同。由于 B o b Bob Bob对电影 S t a r T r e k Star\ Trek Star Trek和 S t a r W a r s Star\ Wars Star Wars有相似的评价,所以电影 S t a r T r e k Star\ Trek Star Trek和 S t a r W a r s Star\ Wars Star Wars拥有相似的因子向量。总之,直观感觉 A l i c e Alice Alice和 S t a r T r e k Star\ Trek Star Trek的交互项与 A l i c e Alice Alice和 S t a r W a r s Star\ Wars Star Wars的交互项相似。
1.2.4 计算过程
由于所有的两两交互项都会被计算,公式(1)计算的复杂度为 O ( k n 2 ) O(kn^2) O(kn2),但是我们可以将其调整为线性 O ( k n ) O(kn) O(kn)。
证明过程:由于对交互项的参数进行因子化处理,不存在模型参数直接依赖于两个交互的变量,因此交互项可以做如下处理 :
∑
i
=
1
n
∑
j
=
i
+
1
n
⟨
v
i
,
v
j
⟩
x
i
x
j
=
1
2
∑
i
=
1
n
∑
j
=
1
n
⟨
v
i
,
v
j
⟩
x
i
x
j
−
1
2
∑
i
=
1
n
⟨
v
i
,
v
i
⟩
x
i
x
i
=
1
2
(
∑
i
=
1
n
∑
j
=
1
n
∑
f
=
1
k
v
i
,
f
v
j
,
f
x
i
x
j
−
∑
i
=
1
n
∑
f
=
1
k
v
i
,
f
v
i
,
f
x
i
x
i
)
=
1
2
∑
f
=
1
k
(
(
∑
i
=
1
n
v
i
,
f
x
i
)
2
−
∑
i
=
1
n
v
i
,
f
2
x
i
2
)
\begin{aligned} & \sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j} \\ =& \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j}-\frac{1}{2} \sum_{i=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{i}\right\rangle x_{i} x_{i} \\ =& \frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{j}-\sum_{i=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{i, f} x_{i} x_{i}\right) \\ =& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)^{2}-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \end{aligned}
===i=1∑nj=i+1∑n⟨vi,vj⟩xixj21i=1∑nj=1∑n⟨vi,vj⟩xixj−21i=1∑n⟨vi,vi⟩xixi21⎝⎛i=1∑nj=1∑nf=1∑kvi,fvj,fxixj−i=1∑nf=1∑kvi,fvi,fxixi⎠⎞21f=1∑k⎝⎛(i=1∑nvi,fxi)2−i=1∑nvi,f2xi2⎠⎞
以上等式的复杂度是线性的为
O
(
k
n
)
O(kn)
O(kn)。
在稀疏特征矩阵中,向量 x \text{x} x的元素大部分是0, m ( x ) m(\text{x}) m(x)很小,由于计算是基于非零元素。因此,在稀疏矩阵的应用中,FM计算的复杂度为 O ( k m ˉ D ) O(k\bar{m}_D) O(kmˉD)。
1.2.5 因子分解机进行预测
FM可以应用于各种预测任务:
- 回归: y ^ ( x ) \hat{y}(x) y^(x)可以直接应用于预测,使用最小均方误差进行优化。
- 二分类: 采用hinge loss和逻辑损失函数进行优化。
- 排序: 利用 y ^ ( x ) \hat{y}(x) y^(x) 的分数对特征向量 x \text{x} x进行排序,优化方式是基于特征向量 ( x ( a ) , x ( b ) ) ∈ D (\text{x}^{(a)},\text{x}^{(b)}) \in D (x(a),x(b))∈D的交互项及分类损失函数。
在以上案例中,经常加入正则项以避免优化过程中的过拟合问题。
1.2.6 因子分解机的学习方式
在上文中,我们证明FMs的模型计算是线性的,因此,模型的参数(
w
0
w_0
w0,
w
和
\text{w}和
w和
V
\text{V}
V )可以采用梯度下降的方式进行有效学习,例如:随机梯度下降(SGD),损失函数可以采用平方损失、逻辑损失、hinge损失函数。FM模型的梯度计算如下:
∂
∂
θ
y
^
(
x
)
=
{
1
,
if
θ
is
w
0
x
i
,
if
θ
is
w
i
(
4
)
x
i
∑
j
=
1
n
v
j
,
f
x
j
−
v
i
,
f
x
i
2
,
if
θ
is
v
i
,
f
\frac{\partial}{\partial \theta} \hat{y}(\mathbf{x})=\left\{\begin{array}{ll} {1,} & {\text { if } \theta \text { is } w_{0}} \\ {x_{i},} & {\text { if } \theta \text { is } w_{i}} \qquad(4) \\ {x_{i} \sum_{j=1}^{n} v_{j, f} x_{j}-v_{i, f} x_{i}^{2},} & {\text { if } \theta \text { is } v_{i, f}} \end{array}\right.
∂θ∂y^(x)=⎩⎨⎧1,xi,xi∑j=1nvj,fxj−vi,fxi2, if θ is w0 if θ is wi(4) if θ is vi,f
∑
j
=
1
n
v
j
,
f
x
j
\sum_{j=1}^{n} v_{j, f} x_{j}
∑j=1nvj,fxj是独立于
i
i
i,因此,在计算
y
^
(
x
)
\hat{y}(x)
y^(x)的过程中可以被提前计算。通常,每个梯度的计算时间是常数
O
(
1
)
O(1)
O(1)。所有参数更新复杂度为
O
(
k
n
)
O(kn)
O(kn),在稀疏矩阵的情况下,计算的复杂度为
O
(
k
m
(
x
)
)
O(km(x))
O(km(x))。
1.2.7 对于多阶的因子分解机
用如下公式表示:
y
^
(
x
)
:
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
l
=
2
d
∑
i
1
=
1
n
⋯
∑
i
l
=
i
l
−
1
+
1
n
(
∏
j
=
1
l
x
i
j
)
(
∑
f
=
1
k
l
∏
j
=
1
l
v
i
j
,
f
(
l
)
)
(
5
)
\begin{aligned} \hat{y}(x) &:=w_{0}+\sum_{i=1}^{n} w_{i} x_{i} \\ &+\sum_{l=2}^{d} \sum_{i_{1}=1}^{n} \cdots \sum_{i_{l}=i_{l-1}+1}^{n}\left(\prod_{j=1}^{l} x_{i_{j}}\right)\left(\sum_{f=1}^{k_{l}} \prod_{j=1}^{l} v_{i_{j}, f}^{(l)}\right)\qquad(5) \end{aligned}
y^(x):=w0+i=1∑nwixi+l=2∑di1=1∑n⋯il=il−1+1∑n(j=1∏lxij)⎝⎛f=1∑klj=1∏lvij,f(l)⎠⎞(5)
2.FFM
CTR(Click-through rate ) \text{CTR(Click-through rate )} CTR(Click-through rate )在计算广告中扮演着重要的角色 。基于二阶的多项式映射和因子分解机( FMs \text{FMs} FMs)广泛应用于这个任务。最近, FMs \text{FMs} FMs和 FFMs \text{FFMs} FFMs在CTR预估竞赛中优于其他模型。
2.1介绍
逻辑回归广泛地应用于点击预估中。给定一个样本量为m的数据 ( y i , x i ) , i = 1 , . . . , m (y_i,x_i),i=1,...,m (yi,xi),i=1,...,m,其中, y i y_i yi是标签, x i x_i xi是 n n n维的特征向量,模型参数 w w w
可以通过下面的逻辑损失函数优化得到:
min
w
λ
2
∥
w
∥
2
2
+
∑
i
=
1
m
log
(
1
+
exp
(
−
y
i
ϕ
L
M
(
w
,
x
i
)
)
)
(
1
)
\min _{\boldsymbol{w}} \frac{\lambda}{2}\|\boldsymbol{w}\|_{2}^{2}+\sum_{i=1}^{m} \log \left(1+\exp \left(-y_{i} \phi_{\mathrm{LM}}\left(\boldsymbol{w}, \boldsymbol{x}_{i}\right)\right)\right)\qquad (1)
wmin2λ∥w∥22+i=1∑mlog(1+exp(−yiϕLM(w,xi)))(1)
表1:上图表示模拟的点击数据,其中,+(-)数值项表示点击(不点击)的意愿。
在公式(1)中,
λ
\lambda
λ是正则项,我们考虑以下线性的预测模型:
ϕ
L
M
(
w
,
x
)
=
w
⋅
x
\phi_{\mathrm{LM}}(\boldsymbol{w}, \boldsymbol{x})=\boldsymbol{w} \cdot \boldsymbol{x}
ϕLM(w,x)=w⋅x
特征的交互效应在CTR预估中非常的重要。根据表1中的数据,我们会对特征交互有更好的理解。来自广告主Gucci的广告在Vogue媒体有良好得点击率。但是,这个信息很难被学习到,因为Gucci和Vogue的权重是相互独立的。为解决这个问题,模型需要学习特征的交互项。首先引入第一个模型,二阶多项式映射模型可以学习特征的交互效应。第二个模型是因子分解机模型,通过引入两个隐藏向量的乘积学习特征的交互效应。
在个性化推荐中,引入了FM衍生模型叫做双变量交互因子分解机(PITF)。在2012KDD Cup中,PITF被叫做“Team Opera Solutions”使用,叫做因子分解机。为 避免混淆,在本文中,我们将其称作FFMs。PITF模型和FFM模型不同在于PITF考虑三个特定的领域用户、属性和标签,但是,FFM更加泛化。
2.2 Poly2和FM
二阶映射多项式能够有效地捕捉特征之间的交互项,在模型训练和测试的表现方面,使用线性模型比使用核函数的方法更加高效。公示如下:
ϕ
P
o
l
y
2
(
w
,
x
)
=
∑
j
1
=
1
n
∑
j
2
=
j
1
+
1
n
w
h
(
j
1
,
j
2
)
x
j
1
x
j
2
(
2
)
\phi_{\mathrm{Poly} 2}(\boldsymbol{w}, \boldsymbol{x})=\sum_{j_{1}=1}^{n} \sum_{j_{2}=j_{1}+1}^{n} w_{h\left(j_{1}, j_{2}\right)} x_{j_{1}} x_{j_{2}}\qquad(2)
ϕPoly2(w,x)=j1=1∑nj2=j1+1∑nwh(j1,j2)xj1xj2(2)
其中,
h
(
j
1
,
j
2
)
h(j_1,j_2)
h(j1,j2)是将
j
1
j_1
j1和
j
2
j_2
j2编码自然数值的函数,计算复杂度为
O
(
n
ˉ
2
)
O(\bar{n}^2)
O(nˉ2),
n
ˉ
\bar{n}
nˉ为每个样本中非零特征的个数。
FMs学习每个特征隐向量,每个隐向量包含
k
k
k个隐因子,
k
k
k是用户设定的参数。特征的交互效应是通过两个隐向量的内积表示的:
ϕ
F
M
(
w
,
x
)
=
∑
j
1
=
1
n
∑
j
2
=
j
1
+
1
n
(
w
j
1
⋅
w
j
2
)
x
j
1
x
j
2
(
3
)
\phi_{\mathrm{FM}}(\boldsymbol{w}, \boldsymbol{x})=\sum_{j_{1}=1}^{n} \sum_{j_{2}=j_{1}+1}^{n}\left(\boldsymbol{w}_{j_{1}} \cdot \boldsymbol{w}_{j_{2}}\right) x_{j_{1}} x_{j_{2}}\qquad (3)
ϕFM(w,x)=j1=1∑nj2=j1+1∑n(wj1⋅wj2)xj1xj2(3)
参数的个数为
n
×
k
n\times k
n×k,计算的复杂度为
O
(
n
ˉ
2
k
)
O(\bar{n}^2k)
O(nˉ2k),接下来,我们可以重写公式(3)为
ϕ
F
M
(
w
,
x
)
=
1
2
∑
j
=
1
n
(
s
−
w
j
x
j
)
⋅
w
j
x
j
其
中
:
s
=
∑
j
′
=
1
n
w
j
′
x
j
′
\phi_{\mathrm{FM}}(\boldsymbol{w}, \boldsymbol{x})=\frac{1}{2} \sum_{j=1}^{n}\left(\boldsymbol{s}-\boldsymbol{w}_{j} x_{j}\right) \cdot \boldsymbol{w}_{j} x_{j}\\ 其中:s=\sum_{j^{\prime}=1}^{n} \boldsymbol{w}_{j^{\prime}} x_{j^{\prime}}
ϕFM(w,x)=21j=1∑n(s−wjxj)⋅wjxj其中:s=j′=1∑nwj′xj′
计算的复杂度为
O
(
n
ˉ
k
)
O(\bar{n}k)
O(nˉk)。
为什么当数据是稀疏状态时,FMs的表现优于Poly2。接下来,我们使用表1的数据集对其进行说明。在上表中,训练数据中只有(ESPN,Adidas)一个样本对。对于Poly2,负样本的权重可能从这对样本中学习。对于FMs,因为 (ESPN,Adidas)的预测是由 w E S P N ⋅ w A d i d a s w_{ESPN}\cdot w_{Adidas} wESPN⋅wAdidas,由于 w E S P N w_{ESPN} wESPN和 w A d i d a s w_{Adidas} wAdidas也可以从(ESPN,Nike)和(NBC,Adidas)学习,预测可能更加准确。另一个例子,(NBC,Gucci)组合在训练数据中不存在,对于Poly2,这对预测是很困难的,但是对于FMs,因为 w N B C w_{NBC} wNBC和 w G u c c i w_{Gucci} wGucci可以从其他组合中学习到,因此,预测更加准确。
2.3 FFM
FFM的思想来自于个性化推荐系统PITF模型。在PITF模型中,在可分离的特征空间中,他们假设给定 三个域(fields),包括:用户、属性、标签和因子交叉部分(用户、属性),(用户、标签)和(属性、标签)。由于他们的目标是推荐系统应用被局限于特定的域中(用户、属性、标签)。在本节中,我们对FFMs在CTR场景预测方面进行更加全面的研究。将表1中的特征分组几个域(fields)中,在我们这个例子中,ESPN,Vogue和NBC属于媒体方,其他的三个特征Nike,Gucci和Adidas属于广告主。FFM是FM基于这些域信息应用的变形。为解释FFM模型的原理,我们举一个 新的例子:
回忆一下FMs,
ϕ
F
M
(
w
,
x
)
\phi_{\mathrm{FM}}(w, x)
ϕFM(w,x)是如下公式:
w
E
S
P
N
⋅
w
N
i
k
e
+
w
E
S
P
N
⋅
w
M
a
l
e
+
w
N
i
k
e
⋅
w
M
a
l
e
\boldsymbol{w}_{\mathrm{ESPN}} \cdot \boldsymbol{w}_{\mathrm{Nike}}+\boldsymbol{w}_{\mathrm{ESPN}} \cdot \boldsymbol{w}_{\mathrm{Male}}+\boldsymbol{w}_{\mathrm{Nike}} \cdot \boldsymbol{w}_{\mathrm{Male}}
wESPN⋅wNike+wESPN⋅wMale+wNike⋅wMale
表2:LM, Poly2, FM, FFM使用参数的个数及其计算的复杂度
在FM模型中,每个特征只存在一个隐向量,可以和其他特征的隐向量一个学习。以ESPN为例, w E S P N w_{ESPN} wESPN可以从Nike( w E S P N ⋅ w N i k e w_{ESPN}\cdot w_{Nike} wESPN⋅wNike)和 Male( w E S P N ⋅ w M a l e w_{ESPN}\cdot w_{Male} wESPN⋅wMale)两个特征中学习到。然而,Nike和Male属于不同的域,(ESPN,Nike)和(ESPN,Male)之间的影响是不同的。
在FFM中,每个特征有多个隐向量,这依赖于其他特征所属的域,其中一个特征与其他特征做内积,在我们的例子中,
ϕ
F
F
M
(
w
,
x
)
\phi_{FFM}(w,x)
ϕFFM(w,x)如下所示:
w
E
S
P
N
,
A
⋅
w
N
i
k
e
,
P
+
w
E
S
P
N
,
G
⋅
w
M
a
l
e
,
P
+
w
N
i
k
e
,
G
⋅
w
M
a
l
e
,
A
\boldsymbol{w}_{\mathrm{ESPN}, \mathrm{A}} \cdot \boldsymbol{w}_{\mathrm{Nike}, \mathrm{P}}+\boldsymbol{w}_{\mathrm{ESPN}}, \mathrm{G} \cdot \boldsymbol{w}_{\mathrm{Male}, \mathrm{P}}+\boldsymbol{w}_{\mathrm{Nike}, \mathrm{G}} \cdot \boldsymbol{w}_{\mathrm{Male}, \mathrm{A}}
wESPN,A⋅wNike,P+wESPN,G⋅wMale,P+wNike,G⋅wMale,A
我们看到,(ESPN,NIKE)的效应取决于
w
E
S
P
N
,
A
w_{ESPN,A}
wESPN,A和
w
N
i
k
e
,
P
w_{Nike,P}
wNike,P,
w
E
S
P
N
,
A
w_{ESPN,A}
wESPN,A中A表示的Nike属于广告主,
w
N
i
k
e
,
P
w_{Nike,P}
wNike,P中的P表示ESPN属于媒体方。又例如(ESPN,Male)组合,
w
E
S
P
N
,
G
w_{ESPN,G}
wESPN,G中的G表示Male属于Gender域,
w
M
a
l
e
,
P
w_{Male,P}
wMale,P中P表示媒体方。数学表示如下:
ϕ
F
F
M
(
w
,
x
)
=
∑
j
1
=
1
n
∑
j
2
=
j
1
+
1
n
(
w
j
1
,
f
2
⋅
w
j
2
,
f
1
)
x
j
1
x
j
2
(
4
)
\phi_{\mathrm{FFM}}(\boldsymbol{w}, \boldsymbol{x})=\sum_{j_{1}=1}^{n} \sum_{j_{2}=j_{1}+1}^{n}\left(\boldsymbol{w}_{j_{1}, f_{2}} \cdot \boldsymbol{w}_{j_{2}, f_{1}}\right) x_{j_{1}} x_{j_{2}}\qquad (4)
ϕFFM(w,x)=j1=1∑nj2=j1+1∑n(wj1,f2⋅wj2,f1)xj1xj2(4)
f
1
f_1
f1和
f
2
f_2
f2分别表示
j
1
j_1
j1和
j
2
j_2
j2的域。如果
f
f
f表示域的数量,那么FFMs参数的个数是
n
f
k
nfk
nfk,其中,计算的复杂度为
O
(
n
ˉ
2
k
)
O(\bar{n}^2k)
O(nˉ2k)。值得注意的是,在FFMs中,因为只需要学习特定的域,通常:
k
F
F
M
≪
k
F
M
k_{\mathrm{FFM}} \ll k_{\mathrm{FM}}
kFFM≪kFM
表2对比参数的个数和计算复杂度。
2.4解决最优化问题
在最优化的处理问题和(1)比较相似,只是将 ϕ L M ( w , x ) \phi_{LM}(w,x) ϕLM(w,x)替换为 ϕ F F M ( w , x ) \phi_{FFM}(w,x) ϕFFM(w,x)。我们使用随机梯度下降的优化方法求解参数。针对学习率的问题,我们采用AdaGrad的处理技巧,这种处理方式在因子分解是非常有效的。
在SG每步处理过程中,更新公式(4)中的参数
w
j
1
,
f
2
w_{j_1,f_2}
wj1,f2和
w
j
2
,
f
1
w_{j_2,f_1}
wj2,f1。由于
x
x
x是高度稀疏,我们只更新非零值。首先,他们的次梯度是:
g
j
1
,
f
2
≡
∇
w
j
1
,
f
2
f
(
w
)
=
λ
⋅
w
j
1
,
f
2
+
κ
⋅
w
j
2
,
f
1
x
j
1
x
j
2
(
5
)
g
j
2
,
f
1
≡
∇
w
j
2
,
f
1
f
(
w
)
=
λ
⋅
w
j
2
,
f
1
+
κ
⋅
w
j
1
,
f
2
x
j
1
x
j
2
(
6
)
\boldsymbol{g}_{j_{1}, f_{2}} \equiv \nabla_{\boldsymbol{w}_{j_{1}, f_{2}}} f(\boldsymbol{w})=\lambda \cdot \boldsymbol{w}_{j_{1}, f_{2}}+\kappa \cdot \boldsymbol{w}_{j_{2}, f_{1}} x_{j_{1}} x_{j_{2}}\qquad(5)\\ \boldsymbol{g}_{j_{2}, f_{1}} \equiv \nabla_{\boldsymbol{w}_{j_{2}}, f_{1}} f(\boldsymbol{w})=\lambda \cdot \boldsymbol{w}_{j_{2}, f_{1}}+\kappa \cdot \boldsymbol{w}_{j_{1}, f_{2}} x_{j_{1}} x_{j_{2}}\qquad(6)\\
gj1,f2≡∇wj1,f2f(w)=λ⋅wj1,f2+κ⋅wj2,f1xj1xj2(5)gj2,f1≡∇wj2,f1f(w)=λ⋅wj2,f1+κ⋅wj1,f2xj1xj2(6)
其中:
κ
=
∂
log
(
1
+
exp
(
−
y
ϕ
F
F
M
(
w
,
x
)
)
)
∂
ϕ
F
F
M
(
w
,
x
)
=
−
y
1
+
exp
(
y
ϕ
F
F
M
(
w
,
x
)
)
\kappa=\frac{\partial \log \left(1+\exp \left(-y \phi_{\mathrm{FFM}}(\boldsymbol{w}, \boldsymbol{x})\right)\right)}{\partial \phi_{\mathrm{FFM}}(\boldsymbol{w}, \boldsymbol{x})}=\frac{-y}{1+\exp \left(y \phi_{\mathrm{FFM}}(\boldsymbol{w}, \boldsymbol{x})\right)}
κ=∂ϕFFM(w,x)∂log(1+exp(−yϕFFM(w,x)))=1+exp(yϕFFM(w,x))−y
其次,
w
j
,
f
w_{j,f}
wj,f的向量维度为
k
k
k,梯度的累计求和公式如下:
(
G
j
1
,
f
2
)
d
←
(
G
j
1
,
f
2
)
d
+
(
g
j
1
,
f
2
)
d
2
(
7
)
(
G
j
2
,
f
1
)
d
←
(
G
j
2
,
f
1
)
d
+
(
g
j
2
,
f
1
)
d
2
(
8
)
\left(G_{j_{1}, f_{2}}\right)_{d} \leftarrow\left(G_{j_{1}, f_{2}}\right)_{d}+\left(g_{j_{1}, f_{2}}\right)_{d}^{2}\qquad(7)\\ \left(G_{j_{2}, f_{1}}\right)_{d} \leftarrow\left(G_{j_{2}, f_{1}}\right)_{d}+\left(g_{j_{2}, f_{1}}\right)_{d}^{2}\qquad(8)
(Gj1,f2)d←(Gj1,f2)d+(gj1,f2)d2(7)(Gj2,f1)d←(Gj2,f1)d+(gj2,f1)d2(8)
最后,
(
w
j
1
,
f
2
)
d
(w_{j_1,f_2})_d
(wj1,f2)d和
(
w
j
2
,
f
1
)
d
(w_{j_2,f_1})_d
(wj2,f1)d的更新公式如下:
(
w
j
1
,
f
2
)
d
←
(
w
j
1
,
f
2
)
d
−
η
(
G
j
1
,
f
2
)
d
(
g
j
1
,
f
2
)
d
(
9
)
(
w
j
2
,
f
1
)
d
←
(
w
j
2
,
f
1
)
d
−
η
(
G
j
2
,
f
1
)
d
(
g
j
2
,
f
1
)
d
(
10
)
\left(w_{j_{1}, f_{2}}\right)_{d} \leftarrow\left(w_{j_{1}, f_{2}}\right)_{d}-\frac{\eta}{\sqrt{\left(G_{j_{1}, f_{2}}\right)_{d}}}\left(g_{j_{1}, f_{2}}\right)_{d}\qquad(9)\\ \left(w_{j_{2}, f_{1}}\right)_{d} \leftarrow\left(w_{j_{2}, f_{1}}\right)_{d}-\frac{\eta}{\sqrt{\left(G_{j_{2}, f_{1}}\right)_{d}}}\left(g_{j_{2}, f_{1}}\right)_{d}\qquad(10)
(wj1,f2)d←(wj1,f2)d−(Gj1,f2)dη(gj1,f2)d(9)(wj2,f1)d←(wj2,f1)d−(Gj2,f1)dη(gj2,f1)d(10)
其中,
η
\eta
η是用户指定的学习率。
w
w
w的初始值是来自
[
0
,
1
/
k
]
[0,1/\sqrt{k}]
[0,1/k]的均匀分布的随机值。为了防止
(
G
j
1
,
f
2
)
d
−
1
2
\left(G_{j 1}, f_{2}\right)_{d}^{-\frac{1}{2}}
(Gj1,f2)d−21的值过大,初始值设定为1。整体的流程在上图Algorithm1进行相关描述。
实验发现: 对每个样本进行标准化后,模型的准确率稍微所有提升,同时降低了模型对参数的敏感性。
2.5在内存共享机制上并行操作
现在机器都是多核CPU。如果这些CPU都能充分利用,训练的时间会显著缩短。针对随机梯度下降提出了很多并行的处理方法。在本文中,我们采用HOGWILD的方法,这个方法允许在没有线程锁的独立运行。在上图Algorithm1中的line3行循环实现并行操作。
2.6 添加域(Filed)信息
考虑到广泛使用的LIBSVM数据格式:
label feat:val1 feat2:val2 ...,
\text{label feat:val1 feat2:val2 ...,}
label feat:val1 feat2:val2 ...,
其中,
(feat, val)
\text{(feat, val)}
(feat, val)对意味着特征索引和特征数值。对于FFMs,我们延伸以上的数据格式为:
label filed1:feat1:val1 filed2:feat2:val2 ...,
\text{ label filed1:feat1:val1 filed2:feat2:val2 ...,}
label filed1:feat1:val1 filed2:feat2:val2 ...,
这样的话,我们必须为每个特征分配一个相对应的域(field)。对于有些特征,这个分配对应域是非常容易的,但对于有些特征,可能有些困难了。接下来,我们讨论各种类型的特征。
类别特征
对于线性模型,类别特征通常转化为二值特征。例如,对如下数据样本:
Yes P:ESPN A:Nike G:Male
\text{Yes P:ESPN A:Nike G:Male}
Yes P:ESPN A:Nike G:Male
我们对应的LIBSVM转化为以下数据格式:
Yes P:P-ESPN:1 A:A-Nike:1 G:G-Male:1
\text{Yes P:P-ESPN:1 A:A-Nike:1 G:G-Male:1}
Yes P:P-ESPN:1 A:A-Nike:1 G:G-Male:1
根据类别特征中类别的个数产生对应数量的二值特征变量,二值变量对应的数值为1,(ps:就是onehot编码操作)。在LIBSVM数据格式中,不存储特征为0的值,我们采用同样的处理方式。每个类别转化为二值变量,添加变量对应的域信息,我们将每个类别变量看做一个域。因此,上述数据样本可以重写为:
数值特征
假设,我们以论文是否会被会议接收为例子讲解。我们使用三个 数值变量(1)会议接收论文的比率(AR)(2)作者的h-index(Hidx) (3)作者引用的数量(Cite)
有两种方式处理这种类别特征。简单的处理方式就是每个特征作为一个虚拟域,采用以下数据格式:
Yes AR:AR:45.73 Hidx:Hidx:2 Cite:Cite:3
\text{Yes AR:AR:45.73 Hidx:Hidx:2 Cite:Cite:3}
Yes AR:AR:45.73 Hidx:Hidx:2 Cite:Cite:3
但是,这种虚拟域的处理方式只是对特征的简单复制,可能不能提供有效的信息。
另一种处理方式是将数值变量离散成类别变量。然后,我们利用类别变量的处理方式添加域信息。产生的数据格式如下:
Yes AR:45:1 Hidx:2:1 Cite:3:1,
\text{Yes AR:45:1 Hidx:2:1 Cite:3:1,}
Yes AR:45:1 Hidx:2:1 Cite:3:1,
在这里,AR的特征被近似为整数。这个数值离散化的主要问题在于最佳分割点的确定。例如,我们可以将45.73转化为“45.7”,“45”,“40”或者int(log(45.73))。而且,数值离散化后我们 可能会丢失一些信息。
单域特征
在有些数据集中,所有的特征属于单个域,因此,很难对特征分配相应的域。最典型的是发生在NLP的数据集中。接下来,我们以预测一句话是否是好心情为例:
在这个例子中,我们只有一个域是句子。如果我们将这个域分配到所有的单词中,那么FFMs将会被简化为FMs。读者可能会考虑到数值特征中的虚拟域的问题。考虑到FFMs模型的复杂度是 O ( n f k ) O(nfk) O(nfk)。虚拟域导致 f = n f=n f=n的问题,通常 n n n是非常大的,因此,是不适用的。
2.7模型实验
在这节中,我们会对实验的设置进行说明,调研各参数对模型的影响。**我们发现LM、Poly2、FFM对迭代次数非常的敏感。**下面我们详细讨论下提前停止的的技巧和并行加速问题进行研究。
模型评估
模型评估,我们考虑逻辑损失函数,如下所示:
log
loss
=
1
m
∑
i
=
1
m
log
(
1
+
exp
(
−
y
i
ϕ
(
w
,
x
i
)
)
)
其
中
,
m
为
测
试
样
本
的
数
量
\log \operatorname{loss}=\frac{1}{m} \sum_{i=1}^{m} \log \left(1+\exp \left(-y_{i} \phi\left(\boldsymbol{w}, \boldsymbol{x}_{i}\right)\right)\right)\\ 其中,m为测试样本的数量
logloss=m1i=1∑mlog(1+exp(−yiϕ(w,xi)))其中,m为测试样本的数量
2.8参数的影响
我们实验了 k , λ , η k,\lambda,\eta k,λ,η三个参数对模型的影响。结果显示如下:
- 在表Figure 1a中显示,参数 k k k对损失函数的影响不大。
- 在Figure 1b中显示,如果 λ \lambda λ设置的参数过大,模型效果不好。相反,如果 λ \lambda λ设置参数较小,模型获得较好的效果,但是,容易过拟合。
- 对于参数 η \eta η,较小的 η \eta η,模型的收敛速度较慢。对于较大的 η \eta η,模型收敛速度较快,但是,容易过拟合。
2.9 提前停止
提前停止是指在训练集上达到最好的效果,为避免过拟合而提前终止训练。对于FFM模型,可以使用以下策略:
- 将数据划分为训练集和验证集。
- 在每轮迭代结束,计算验证集上的损失。
- 如果损失上升,记录迭代的轮数,停止训练或者直接进入步骤4.
- 如果需要,利用第3步最佳迭代次数在整个数据集重新训练模型。
提前停止迭代在 应用上存在一些困难。主要 在于验证集上的最优迭代次数不一定是测试集上的最佳迭代次数。
2.10并行训练
因为随机梯度的并行训练可能存在收敛问题,我们对不同的线程数进行实验,如Figure2所示,我们的并行存在类似的收敛问题。加速的含义 定义如下:
加
速
定
义
=
单
线
程
每
轮
的
运
行
时
间
多
线
程
每
轮
的
运
行
时
间
加速定义=\frac{单线程每轮的运行时间}{多线程每轮的运行时间}
加速定义=多线程每轮的运行时间单线程每轮的运行时间
如Figure3所示,当使用少量的多线程时,有较好的加速效果,然而,当使用更多的线程时,并不能提升太多的速度。其中的一个解释是,当使用更多的线程时,他们需要访问同一内存地址,因此,其中的一个必须等待。这种寻址冲突在多线程时时长发生。
参考资料