FM
FM模型的提出是为了引入多维度特征交叉。
为每个特征分配一个隐向量,用隐向量的内积来捕捉特征间的交互关系。
隐向量通常是随机初始化的,隐向量的长度是超参数 k
FM的数学公式如下:
F M ( w , 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 FM(w,x) =w_0 + \sum_{i=1}^{n} w_i x_i+\sum_{i=1}^{n} \sum_{j=i+1}^{n} <v_i · v_j> x_i x_j FM(w,x)=w0+i=1∑nwixi+i=1∑nj=i+1∑n<vi⋅vj>xixj
右边等式第一项是偏置,第二项是每个特征独立的贡献,第三项是特征组合的贡献,<vi,vj>是隐向量内积
发展
进入深度学习时代后,FM的演化过程并没有停止,FNN、DeepFM及NFM模型使用不同的方式应用或改进了FM模型,并融合进深度学习模型中,持续发挥着其在特征组合上的优势
FNN
FNN(Factorization Machine supported Neural Network)是一种结合了因子分解机(Factorization Machine, FM)和神经网络(Neural Network, NN)的混合模型。
网络结构
FNN主要改进了Embedding层:
在神经网络的参数初始化过程中,往往采用随机初始化。由于Embedding层参数数量大,输入稀疏,因此收敛速度非常慢。
FNN模型通过使用FM模型训练得到的隐向量来初始化神经网络中的Embedding层参数。这样做相当于在初始化阶段就引入了有价值的先验信息,使得神经网络训练的起点更接近目标最优解,从而加速了整个神经网络的收敛过程,还有助于提高模型的泛化能力。
在FNN模型中,特征被分成了不同的特征域,每个特征域都有自己的Embedding层,且每个特征域的Embedding层的维度与FM隐向量的维度保持一致。
连接输入神经元和Embedding神经元之间的连接权重被初始化为FM模型中对应特征的隐向量。
DeepFM
FNN把FM的训练结果作为初始化权重,并没有对神经网络的结构进行调整,而DeepFM模型则结合了FM和Wide&Deep,用FM 替换了Wide&Deep的Wide部分,加强了浅层网络部分特征组合的能力。
DeepFM的动机是改进Wide 部分不具备自动的特征组合能力的缺陷。(和Deep&Cross动机一样,只不过Deep&Cross利用多层Cross网络而DeepFM用的是FM)
改进后,DeepFM模型的FM部分可以自动构造学习二阶交叉特征,不需要人工特征工程,也不需要预训练FM模型,这简化了模型的训练过程。
DeepFM的一个关键特点是FM部分和DNN部分共享底层的Embedding向量,然后联合训练,这样做可以更有效地学习特征表示。
NFM
无论是FM,还是其改进模型,归根结底是一个二阶特征交叉的模型。这使得它受组合爆炸问题的困扰,几乎不可能扩展到三阶以上,限制了其表达能力。而NFM模型的思路是利用深度神经网络更强的表达能力改进FM模型。
由于深度学习网络理论上有拟合任何复杂函数的能力,f(x)的构造工作可以交由深度学习网络来完成,并通过梯度反向传播来学习。
因此,NFM将二阶交叉特征的表示由原来的隐向量内积变成了一个神经网络。
NFM模型中,用来替代FM二阶部分的神经网络结构如下图所示:
这个网络的核心是Bi-Interaction Pooling部分,运算符号 ⊙ 表示逐元素乘法。它实现了输入向量值的两两相乘,然后累加起来。
其中, x i x_i xi和 x j x_j xj是标量,如果将 v i \mathbf{v}_i vi 和 v j \mathbf{v}_j vj 表示为: v i = [ v i 1 , v i 2 , … , v i m ] , v j = [ v j 1 , v j 2 , … , v j m ] \mathbf{v}_i = [v_{i1}, v_{i2}, \ldots, v_{im}],\mathbf{v}_j = [v_{j1}, v_{j2}, \ldots, v_{jm}] vi=[vi1,vi2,…,vim],vj=[vj1,vj2,…,vjm]。那么逐元素乘法结果是:
( x i v i ) ⊙ ( x j v j ) = [ x i v i 1 ⋅ x j v j 1 , x i v i 2 ⋅ x j v j 2 , … , x i v i m ⋅ x j v j m ] (x_i \mathbf{v}_i) \odot (x_j \mathbf{v}_j) = [x_i v_{i1} \cdot x_j v_{j1}, x_i v_{i2} \cdot x_j v_{j2}, \ldots, x_i v_{im} \cdot x_j v_{jm}] (xivi)⊙(xjvj)=[xivi1⋅xjvj1,xivi2⋅xjvj2,…,xivim⋅xjvjm]
上图所示的NFM架构图省略了一阶部分。如果把NFM的一阶部分视
为一个线性模型,那么NFM的架构也可以视为Wide&Deep模型的进化。相比Wide&Deep 模型,NFM 模型对其 Deep部分加人了特征交叉池化层,加强了特征交叉。
优势
- 在经典多层神经网络的基础上加人有针对性的特征交叉操作,让模型具备更强的非线性表达能力
局限
- 特征工程对模型的提升逐渐变小
- 在极高维的数据集中,FM可能会遇到性能瓶颈,因为它需要为每个特征学习一个隐向量,这在特征空间非常大时可能导致模型参数过多
参考
深度学习推荐系统(王喆)