FM算法和DNN
我们知道FM算法可以通过组合两两特征,从而处理一部分的非线性情况,我们可以称之为低阶特征组合。对于高阶特征组合,我们也可以使用FM算法,只是会使得计算复杂度大大增加。我们知道DNN作为深度学习的代表,可以很好地组合特征,拟合任意函数。我们可以认为DNN可以任意组合特征,无论是高阶还是低阶的。但是在DNN中,我们不好控制特征的组合程度,我们一般认为深度越深,特征组合就越高阶,所以我们可以粗略地认为DNN是对特征的高阶组合。FM算法我们将其看作是一个广度模型,一次性处理维数非常大的所有特征;DNN我们可以将其看作是一个深度模型,首先将数据压缩到一定维数,然后深层次的组合所有特征。DeepFM的思想是同时利用广度模型和深度模型一起,利用特征的低阶组合和高阶组合一起,提升模型的效果。
DeepFM
DeepFM由两部分组成,分别是FM和DNN。FM部分对每一维特征送入嵌入层得到其嵌入向量,然后使用下面的式子优化参数:
其中$x_i$是第$i$维的输入,$v_i$是第$i$维特征的嵌入向量。DNN部分首先将每一个field压缩成一个嵌入向量:
其中$k$表示第$k$个field,$i$表示第$i$个特征,我们知道每个field是由一堆特征组成的且这堆特征只会有一个特征取值为1。之后我们就可以将$n$个field的嵌入向量拼接在一起送入DNN得到输出:
现在我们将$y_{FM}$看作是对特征的低阶组合,$y_{DNN}$看作是对特征的高阶组合,所以最终的输出可以是:
其中$g$可以看作是一个函数,用于结合低阶特征组合和高阶特征组合的输出得到最终结果,一般可以是sigmoid函数,即:
其中$\sigma$是sigmoid函数。