模型背景
web应用程序的变量大部分是离散的、非连续的。在稀疏的数据中建立模型,需要挖掘出特征之间的关联。很多成功的算法依靠手动进行特征组合,这类做法的缺点是成本很高,需要依靠大量人力进行设计,难以推广。因此,解决方案是设计专门自动学习特征的模型,代表模型FM。但FM本身基于线性模型,性能有限,所以需要更复杂的模型,于是,作者提出了NFMs。
模型结构
NFM的表达式:
y
^
N
F
M
(
x
)
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
f
(
x
)
\hat{y}{N F M}(\mathbf{x})=w{0}+\sum_{i=1}^{n} w_{i} x_{i}+f(\mathbf{x})
y^NFM(x)=w0+i=1∑nwixi+f(x)
对比FM表达式
y
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
∑
i
+
1
n
<
v
i
,
v
j
>
x
i
x
j
y = w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^{n}\sum_{i+1}^n\lt v_i,v_j\gt x_ix_j
y=w0+i=1∑nwixi+i=1∑ni+1∑n<vi,vj>xixj
从表达式来看,前两项基本一致,都是线性回归,区别在于第三部分的表达式,也就是 f ( x ) f(x) f(x)部分,这也是NFM核心部分。
f ( x ) f(x) f(x)的具体结构如下图所示
NFM网络结构(一阶线性回归部分未包括)
F(x)各层解析
Embedding Layer
Embedding层是一个全连接层,本身结构和作用与之前相似,把稀疏向量转化成稠密向量。
假设 v i ∈ R k \mathbf{v}{\mathbf{i}} \in \mathbb{R}^{k} vi∈Rk为第 i i i个特征的embedding向量, 那么 V x = { x 1 v 1 , … , x n v n } \mathcal{V}{x}=\left\{x_{1} \mathbf{v}{1}, \ldots, x{n} \mathbf{v}_{n} \right\} Vx={x1v1,…,xnvn}( x i ≠ 0 x_{i}\neq0 xi=0)表示的下一层的输入特征。
Bi-Interaction 层
NFM区别FM的核心。作用是将Embedding向量转换为一个向量.
假设 V x \mathcal{V}_{x} Vx是所有特征embedding的集合, 那么在特征交叉池化层的操作:
f B I ( V x ) = ∑ i = 1 n ∑ j = i + 1 n x i v i ⊙ x j v j f_{B I}\left(\mathcal{V}{x}\right)=\sum_{i=1}^{n} \sum_{j=i+1}^{n} x_{i} \mathbf{v}{i} \odot x{j} \mathbf{v}_{j} fBI(Vx)=i=1∑nj=i+1∑nxivi⊙xjvj
⊙ \odot ⊙表示两个向量的元素积操作,即两个向量对应维度相乘得到的元素积向量(可不是点乘呀),其中第 k k k维的操作: ( v i ⊙ v j ) k = v i k v j k \left(v_{i} \odot v_{j}\right){k}=\boldsymbol{v}{i k} \boldsymbol{v}_{j k} (vi⊙vj)k=vikvjk
Bi-Interaction 层没有引入额外参数,可以在线性时间内被计算。上文公式可以被转换为下面形式
f
B
I
(
V
x
)
=
1
2
[
(
∑
i
=
1
n
x
i
v
i
)
2
−
∑
i
=
1
n
(
x
i
v
i
)
2
]
f_{B I}\left(\mathcal{V}{x}\right)=\frac{1}{2}\left[\left(\sum_{i=1}^{n} x_{i} \mathbf{v}{i}\right)^{2}-\sum_{i=1}^{n}\left(x_{i} \mathbf{v}_{i}\right)^{2}\right]
fBI(Vx)=21⎣⎡(i=1∑nxivi)2−i=1∑n(xivi)2⎦⎤
按照论文中的观点,可以在 O ( k N x ) O(kN_x) O(kNx)( N x N_x Nx为 x x x中非零的数目)内进行Bi-Interaction。
隐藏层
这一层就是全连接的神经网络,用于学习要素的高等交互 ,公式如下:
z
1
=
σ
1
(
W
1
f
B
I
(
V
x
)
+
b
1
)
z
2
=
σ
2
(
W
2
z
1
+
b
2
)
⋮
z
L
=
σ
L
(
W
L
z
L
−
1
+
b
L
)
\begin{aligned} \mathbf{z}{1}=&\sigma{1}\left(\mathbf{W}{1} f{B I} \left(\mathcal{V}{x}\right)+\mathbf{b}{1}\right) \ \\ \mathbf{z}{2}=& \sigma{2}\left(\mathbf{W}{2} \mathbf{z}{1}+\mathbf{b}{2}\right) \\ &\vdots &\ \\\mathbf{z}{L}=& \sigma_{L}\left(\mathbf{W}{L} \mathbf{z}{L-1}+\mathbf{b}_{L}\right) \end{aligned}
z1=z2=zL=σ1(W1fBI(Vx)+b1) σ2(W2z1+b2)⋮σL(WLzL−1+bL)
其中
L
L
L表示隐藏层的数量,
W
1
,
b
l
W1,b_l
W1,bl和
σ
l
σ_l
σl分别表示第l层的权重矩阵,偏差矢量和激活函数。
通过选择非线性激活函数激活函数可以以非线性组合激活函数
输出层
这个就是最后一层的结果直接过一个隐藏层,: f ( x ) = h T z L f(\mathbf{x})=\mathbf{h}^{T} \mathbf{z}_{L} f(x)=hTzL
所以, NFM模型的前向传播过程总结如下:
y
^
N
F
M
(
x
)
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
h
T
σ
L
(
W
L
(
…
σ
1
(
W
1
f
B
I
(
V
x
)
+
b
1
)
…
)
+
b
L
)
\begin{aligned} \hat{y}{N F M}(\mathbf{x}) &=w{0}+\sum_{i=1}^{n} w_{i} x_{i} \ & +\mathbf{h}^{T} \sigma_{L}\left(\mathbf{W}{L}\left(\ldots \sigma{1}\left(\mathbf{W}{1} f{B I}\left(\mathcal{V}{x}\right)+\mathbf{b}{1}\right) \ldots\right)+\mathbf{b}_{L}\right) \end{aligned}
y^NFM(x)=w0+i=1∑nwixi +hTσL(WL(…σ1(W1fBI(Vx)+b1)…)+bL)
所有的参数 Θ = { w 0 { w i , v i } , h , { W l , b l } \Theta=\lbrace w_0 \lbrace w_i, v_i \rbrace,h, \lbrace W_l, b_l \rbrace Θ={w0{wi,vi},h,{Wl,bl},与FM相比,NFM的其他模型参数主要是 { W l , b l } \{W_l,b_l\} {Wl,bl},用作高级交互。
论文补充
相比FM
文章提到,FM可以认为是NFM的一种特例,将 L L L设为0,并将Bi-Interaction池的输出直接映射到输出层,得出NFM-0
f
B
I
(
V
x
)
=
∑
i
=
1
n
∑
j
=
i
+
1
n
x
i
v
i
⊙
x
j
v
j
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
∑
f
=
1
k
h
f
v
i
f
v
j
f
.
x
i
x
j
f_{B I}\left(\mathcal{V}{x}\right)=\sum_{i=1}^{n} \sum_{j=i+1}^{n} x_{i} \mathbf{v}{i} \odot x{j} \mathbf{v}_{j} \\=w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^{n}\sum_{j=i+1}^n\sum_{f=1}^kh_{f}v_{if}v_{jf}.x_{i}x_j
fBI(Vx)=i=1∑nj=i+1∑nxivi⊙xjvj=w0+i=1∑nwixi+i=1∑nj=i+1∑nf=1∑khfvifvjf.xixj
h
h
h变为(1…1)的向量,NFM变为FM公式。
Bi-Interaction层上可以使用dropout等技巧规范FM。
相比DeepCross
DeepCross或者Wide&Deep模型不能很好处理特征间的交互,NFM可以提供特征的二阶甚至更高阶的交互。
NFM模型的时间复杂度为 O ( k N x + ∑ l = 1 L d l − 1 d l ) O(kN_x+\sum_{l=1}^Ld_{l-1}d_l) O(kNx+∑l=1Ldl−1dl),与DeepCross以及Wide&Deep一致。