推荐系统--n--模型DeepFM

前面提到了Embedding+MLP(DeepCrossing/PNN), Wide&Deep, NerualCF(单塔/双塔)等不同的模型结构,那我们再深入思考一个问题:就是这几种模型都是怎么处理特征交叉的?

比如说,模型的输入有 性别、年龄、电影风格这几个特征,在训练样本中,我们发现25岁男生喜欢科幻电影的样本,有35岁女生喜欢恐怖电影的样本,那你觉得模型应该怎么推测“25岁”女生喜欢的电影风格呢?

事实上,这类特征组合和特征交叉问题非常常见,实际应用中,特征的种类还要多得多,特征交叉的复杂程度也要大的多,解决这类问题的关键,就是模型对于特征组合和特征交叉的学习能力,因为它决定了模型对于未知特征组合样本的预测能力,而这对于复杂的推荐问题来说,是决定其推荐效果的关键点之一。

无论是Embedding MLP,还是Wide&Deep 其实都没有对特征交叉进行特别的处理,而是直接把独立的特征扔进神经网络,让他们在网络里面进行自由组合,就算是NeuralCF也只是在最后才把物品侧和用户侧的特征交叉起来,那这样的特征交叉方法是高效的吗?深度学习有没有更好的处理特征交叉的方法呢?

下面就是解决特征交叉问题,提出的DeepFM推荐模型。

为什么深度学习模型需要加强特征交叉的能力?

上面说了Embedding MLP和Wide&Deep模型都没有针对性的处理特征交叉问题,你可能会有疑问,不是一直说 多层神经网络有很强的拟合能力吗,能够在网络内部任意地组合特征?为什么还会说上面的模型 没有针对性处理特征交叉呢?

我们之前说的MLP有拟合任意函数的能力,这个没错,但这是建立在MLP有任意多层网络、以及任意多个神经元的前提下的。

在训练资源有限,调参时间有限的现实情况下,MLP对特征交叉的处理其实还是比较低效的,因为MLP是通过Concatenate层把所有特征连接在一起成为一个特征向量的,这里没有特指交叉,两两特征之间没有发生任何关系。

这个时候,在我们有先验知识的情况下,人为地加入一些负责特征交叉的模型结构,其实对提升模型效果会非常有帮助。比如训练样本中有两个这样的特征:一个是用户喜欢的电影风格,一个是电影本身的风格,这两个特征明显有很强的相关性,如果我们能让模型利用起这样的相关性,肯定会对最后的推荐效果有正向的影响。

既然这样,我们去设计一些特征交叉结构,来把这些相关性强的特征,交叉组合在一起,这就是深度学习模型要加强特征交叉能力的原因。

善于处理特征交叉的机器学习模型FM

弄清楚 这个疑问,接下来,我们就要看看具体的深度学习模型的学习了。
我先看看传统机器学习模型是怎么解决特征交叉问题的,再看看深度学习模型能不能从中汲取到养分。

说到解决特征交叉问题的传统机器学习模型,必须要提到 因子分解机器模型(Factorization Machine)简称FM
在这里插入图片描述
首先,我们看到上图中 模型最下面,它的输入是由类别特征转换成的One-hot向量,往上就是深度学习的常规操作,也就是把one-hot特征通过Embedding层转换成稠密Embedding向量。到这里FM跟其他模型没啥区别,再往上就有明显区别了。

FM会使用一个独特的层FM Layer来专门处理特征之间的交叉问题。你可以看到,FM层中有多个内积操作单元对不同特征向量进行两两组合,这些操作单元会把不同特征的内积操作的结果输入最后的输出神经元,以此来完成最后的预测。

这样一来,如果我们有两个特征是用户喜欢的风格和电影本身的风格,通过FM层的两两特征的内积操作,这两个特征就可以完成充分的组成,不至于像Embedding MLP 模型一样,还有MLP内部像黑盒子一样进行低效的交叉。

深度学习模型和FM模型的结合DeepFM

FM 是一善于进行特征交叉的模型,但是我们之前也讲过,深度学习模型的拟合能力强,那两者之间能结合吗?

学过Wide&Deep结构之后,我们一定可以快速给出答案,我们当然可以把FM跟其他深度学习模型组合起来,生成一个全新的既有强特征组合能力,又有强拟合能力的模型,基于这样的思想,DeepFM模型就诞生了。

DeepFM是由哈工大和华为公司联合提出的深度学习模型:
在这里插入图片描述
结合模型结构示意图,我们可以看到DeepFM利用Wide&Deep组合模型的思想,用FM替换了Wide&Deep左边的Wide部分,加强了浅层网络部分特征组合的能力,而右边的部分跟Wide&Deep的Deep部分一样,主要利用多层神经网络进行所有特征的深层处理,最后的输出层是把FM部分的输出和Deep部分的输出总和起来,产生最后的预估结果。这就是DeepFM的结构。

如何使用元素积的操作进行特征交叉?

FM和DeepFM中进行特征交叉的方式,都是进行Embedding向量的点积操作,那是不是说特征交叉就只能用点积操作了呢?
答案当然是否定的。事实上,还有很多向量间的运算可以进行特征交叉,比如NFM(Neural Factorization Machines,神经网络因子分解机),它就是使用了新的特征交叉方法。
在这里插入图片描述
可以看出Bi-Interaction pooling layer 是NFM模型与其他模型的区别地方。Bi-Interaction Pooling Layer就是“两两特征交叉池化层”。假设Vx是所有特征域的Embedding集合,那么特征交叉池化层的具体操作,如下:
f P I ( V x ) = ∑ i = 1 n ∑ j = i + 1 n x i v i ∗ x j v j f_{PI}(V_x) = \sum_{i=1}^n\sum_{j=i+1}^{n}x_iv_i * x_jv_j fPI(Vx)=i=1nj=i+1nxivixjvj
其中 *\运算代表两个向量的元素积(Element-wise Product)操作,两个长度相同的向量对应维度相乘得到的元素积向量,其中第k维度的操作如下所示:
( V i ∗ V j ) K = v i k v j k (V_i * V_j)_{K} = v_{ik}v_{jk} (ViVj)K=vikvjk
在进行两两特征Embedding向量的元素积操作后,再求取所有交叉特征向量之和,我们就得到了池化层的输出向量,接着,我们再把该向量输入上层的多层全连接网络,就能得出最后的预测得分。

总的来说,NFM并没有使用内积操作来进行特征Embedding向量的交叉,而是使用元素积的操作。在得到交叉特征向量之后,也没有使用concatenate 操作把他们连接起来,而是采用了求和的池化操作,把它们叠加起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值