推荐中使用FNN/PNN/ONN/NFM优化特征交叉

31944c251dbe4f60d4b76ee60f492580.png

文 | 水哥
源 | 知乎

saying

  1. DNN时代来临的时候,LR没打过,也很难加入。FM打不过,但他可以加入

  2. FM的精髓,最上在于latent embedding,有了它才能把交互拆解到基底上;居中在于element-wise乘,能让两个特征之间互相影响;最下在于点积,把好不容易带进来的高维信息全部压缩完了

  3. 特征分组的小技巧:交叉前要同质化,交叉时要差异化

2016左右是一个重要的时间节点,DNN在CV,NLP领域的爆发也蔓延到了推荐领域,在这一讲,我们先不展开讲DNN的模型怎么做,而是先介绍一下当DNN的铁蹄碾压了各个领域之后,FM和DNN的关系又是什么。

从FNN-PNN-ONN到NFM,经历的过程大概可以归纳为 感觉FM和DNN没直接关系->FM可以和DNN相互作用,但有点别扭->FM可以以比较优雅的方式融合进DNN->对FM的内核重新思考,保留最关键的部分,同时保留更多的可能。

Factorisation-machine supported Neural Networks (FNN[1])——求援于FM

在深度神经网络在CV,NLP上已经取得巨大成功,开始延伸到推荐领域的时候。学者们首先要考虑的问题是,如何把一个高度稀疏,维度也很高的拼接输入放到DNN中去。这里要特别说明,在当时学术界的背景下,特征往往是one-hot并且可以穷举的。比如一个特征是城市,一共有1000中选择,就有一个1000维的向量,其中只有一个地方有非零值。当我把所有这类特征拼接起来的时候就是一个非常高维的输入了。后面会讲现代的embedding生成方式,DNN的输入会变成比较短的dense输入,拼接起来不会特别高维。这种特征也可以称之为categorical的特征。

FNN就是其中一个工作,他的想法是,把FM当做一个很好的初始化工具。从serving的角度来看,其本质是一个很简单的MLP:

d0781946ed48000ab771e19bccaaf253.png

在上图中分了两个field,但为了便于理解可以先假设只有一个。假设有 种特征(也就是one-hot拼起来是 维),一开始就就有一个从 到的权重矩阵,接下来的几层就是很普通的MLP。在serving的时候就是很普通的categorical特征输入DNN的结构。

但在训练时较为特殊:我们先训练一个FM,就可以得到每一种特征正对应的一个。接下来用这些embedding来初始化从one-hot输入到第一层dense激活元之间的那个权重矩阵 。 这个矩阵的输入维度也是的(1是FM中的一阶项)。所以在FNN这里,作者认为DNN中最难学的部分就在one-hot输入到第一层激活元那里,那里参数最多,最难学。因此用更成熟的FM训练来先打个基础。当然也要注意,FNN的训练是要分两阶段的,FM阶段和DNN阶段。

FM对于FNN是一种援助的关系,仅仅出现在初始化的地方,或者说是给出了一种DNN的优化方式。但是我有几个疑虑:

问题1: 虽然有很好的初始化,但是并没有保证FM中的交叉项,初始化的embedding是否能真正发挥作用?这里要插一个背景讨论,就是DNN不能很好的模拟出交叉(可以看文章结尾处),在此前提下,如果没有后面的交叉,FM的embedding是否还能发挥效果?

问题2: FM中的embedding只是用来初始化,能保证最后的embedding还和原来一样吗?这个在文章中作者也说了,是不能完全保证的。文章中没看到相关实验,我很好奇的是,在巨量的数据量面前,如果收敛后的参数和初始化没什么关系了,初始化的优势还能剩下多少?

问题3: 假设大量的embedding在DNN里训不好,为什么在FM里面就训得好?因为FM里面和DNN的第一层参数量其实是相等的。FM也是存在过拟合问题的。所以感觉问题解决的不够彻底,还留了一点小尾巴。

当然这里是有时代限制在里面,当时大家对DNN普遍存在的担忧就是参数量太多了,数据量不够会学的不太好。其实用现在的眼光来看,参数多一点也是完全可训的,因为当我选择DNN的时候,产品的日活月活都已经不错了,这时候数据量肯定是够用了的。没有必要在数据真的很少的时候硬上DNN。 总的来说,FNN给DNN进入推荐系统还是开了一个很好的头,接下来要介绍的工作,就一步一步逐渐把FM和DNN的关系体现得更加明确。

Product-based Neural Networks(PNN[2])——利用+扩展FM

如果说FNN是在DNN时代的一个初步尝试的话,那么PNN就是真正意义上把FM融入到了DNN之中,这篇文章写的比FNN清晰很多,其主体结构如下:

d3b12ba867f5d546f40351edbffcbe86.png

input就是外部输入,这里PNN用了embedding layer,先从one-hot的特征生成dense embedding,然后接下来开始插入FM的操作。用来表示dense embedding, 用来表示FM的一阶项,所以左边有一个1,和一起作用生成 。而 两两之间互相作用生成 ,下面的激活元是通过对 和分别进行线性映射,然后加上偏置,合在一起得到的。

PNN比较有意思的一个点是,它对product这个事情,不仅仅定义了内积,还定义了外积,也就是所谓的IPNN和OPNN。内积就和图上画的一样,直接对两个 做内积得到 就好了。但是外积怎么做呢?按照外积的定义:这样得到的结果是一个矩阵,那么下面映射到L1那里就需要一个3维的矩阵来做转换。如果每次都先算完两两的外积然后再按照FM求和,复杂度是有点爆炸的。这篇文章在这里做了一个近似:先计算所有的和,再做外积,即。这样先计算求和的复杂度不高,最后只需要做一次点积就行了。

最后这个点在论文中虽然不重要,但是实践中却很有意义:在我们现在的推荐模型中不太有时间空间允许所有的embedding互相交叉,像上面这个操作完全可以借鉴到内积中,挑出两组特征,对embedding分别求和,再做点积,可以同时缝合FFM和PNN

PNN这个模型结构相对来说是比较舒服的,每一步操作都挺自然,也不需要两阶段。实践中属于应用或者借鉴比较广泛的模型。

Operation-aware Neural Networks(ONN[3])——FFM的进化体

ONN所定义的operation-aware,其实本质也是像FFM一样,允许更大的自由度,只不过这个划分方式,在FFM里面叫做field,在这里叫做operation而已。ONN的结构如下,可以看做是在PNN的基础上加了分组的操作:

8bb2be6069f7f64dcf1a0c714be7fa13.png

实践中选择哪些特征交叉到一起是比较有意思的(可能也是大多数算法工程师真正日常在做的工作)。这里介绍一些个人的经验:

  • 类型相似的特征,可以放在同一个field里面,比如user的城市,年龄,性别,这些都是静态的,短时间内不会变化,就可以放在一起

  • field之间尽量有差别,比如第一个以用户静态特征为主题,第二个field可以以用户兴趣标签之类的为主题,第三个可以选到作者侧上

  • 交叉的时候倾向于user交叉item,在个人的经历中,item或者user自己内部的交叉收益不太大,而user和item的共现(co-occurrence)更加重要

Neural Factorization Machines(NFM[4])——消化FM

FM的精髓实际在于利用了隐式的embedding,但是点积实质上仍然对信息做了压缩。当我们做到element-wise这一步,其实已经把FM的优势大体上包进来了。然而如果下一步做sum,会损失一些信息,那么有没有办法,取FM的精髓,但又不造成信息损失呢?

899b56884b16c374a4abdfaf2de433a3.png

在NFM这个方法中,作者认为点积某种程度上限制了FM的能力上限,因为embedding比较长,是包含更多信息的,而点积之后就只剩下一个数了,于是仅仅做到element-wise就停止,然后往下直接接DNN:

其中 表示element-wise乘法。在这里的原型还是按照原始FM来的,把所有的交叉都表示到element-wise乘法这一步,就停止,保持二阶信息作为输入送进DNN中,我们都知道DNN具有很好的非线性,二阶信息叠加高度非线性,那我们其实是有理由展望一下更高阶的交叉可能存在。

其实在NFM这里就隐隐透露出可以做更高阶的交叉的影子了,但是为什么我们只强调是可能存在呢,因为MLP不会替你做交叉,而且这里的交叉还是不如DCN里面形式上那么明显。NFM的主要立论点是要扩展FM的上限,强化FM的能力,其实主要目标不在高阶交叉上,而DCN这一类方法就完全是奔着高阶交叉去的了。

为什么FM还可以留在DNN的时代?

现在我们要解答一个问题,为什么在DNN的时代,SVM没了,LR几乎没了(之所以说“几乎”是因为Wide&Deep中还有LR,但是有点硕果仅存的意思)?

本质原因是,点积不能被DNN很好的替代,Neural Collaborative Filtering vs. Matrix Factorization Revisited[5]就做了详细的实验来验证,在这篇文章的实验中,点积的效果都好于MLP。点积是不是真的好于MLP先不谈,点积的信息不容易被MLP cover这个结论还是可以下的。大家学习深度学习的时候可能听说过有一个很著名的理论叫做:任何函数都可以用一个足够大的MLP去拟合。那么这里怎么会有这样的矛盾?所以说看理论的时候还是要注意和实践之间的差距,多大的MLP叫“足够大”?在我们的实践中能做得出来这样的吗?足够大的MLP容易训练吗?其实这些都是问题。而这些理论的“允诺”在当下还是无法兑现的,因此FM还以非常灵活的姿态活在各个实践模型中。

还有更加灵活的可能吗?

既然我们说FM的精髓到了element-wise乘这里就可以了,那么还有更加灵活的方案吗?在实践中我们可以对这三种信息:单独的embedding(记为 ,element-wise乘后的二阶embedding( ),点积结果( ),做各种各样的操作(其中也归纳了上面方法中所提到的操作):

  • 对 ,可以让它参与element-wise乘法或者点积的运算,但是同时可以share一份单独供给DNN做输入;

  • element-wise乘的结果 ,可以独立给DNN输入,也可以共享一份得到点积的结果;

  • 点积结果,可以和DNN的输出加起来整体作为输出,也可以单独拉一个loss,仅仅是为了辅助embedding的训练。

上面的每种做法都是一种可选的选择,实践中也不需要讲出哪种更好,灵活的尝试就好了。

下期预告

推荐系统精排之锋(6):DCN+DCN-V2,高阶交叉空许约

往期回顾

1.召回 粗排 精排,如何各司其职?

2.拍不完的脑袋:推荐系统打压保送重排策略

3.简单复读机LR如何成为推荐系统精排之锋?

4.召回粗排精排-级联漏斗(上)

5.召回粗排精排-级联漏斗(下)

6.推荐系统精排:看阿里妈妈再试线性模型

7.推荐精排之锋:FM的一小步,泛化的一大步

b24babb4def8fb94f57bd6431f473653.png后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

a3d65c9034999883d31f2b1b55445369.gif f15c4b0eba5c0042e6406f76b248c58b.png

[1] Deep Learning over Multi-field Categorical Data – A Case Study on User Response Prediction
https://arxiv.org/pdf/1601.02376.pdf
[2] Product-based Neural Networks for User Response Prediction
https://arxiv.org/pdf/1611.00144.pdf
[3] Operation-aware Neural Networks for user response prediction,NN,2020
https://cs.nju.edu.cn/rinc/publish/download/2020/2020_1.pdf
[4] Neural Factorization Machines for Sparse Predictive Analytics,SIGIR,2017
https://arxiv.org/pdf/1708.05027.pdf
[5] Neural Collaborative Filtering vs. Matrix Factorization Revisited
https://arxiv.org/pdf/2005.09683.pdf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值