深度推荐模型--笔记二--Wide & Deep
Wide & Deep的地位
Wide & Deep处于一个居中的位置,一些模型都是根据它演化出来的,可以看到对wide部分进行改进出现了DCN和DeepFM;对Deep部分进行改进产生了AFM和NFM模型。
什么是Wide & Deep
顾名思义,模型就是由两部分组成:
Wide部分是线性模型,我理解为Y=wX+b。X特征部分包括原有特征和交叉特征。交叉特征(cross-product transformation)在wide部分很重要,可以起到添加非线性的作用。交叉特征可表示为:
Cki非0则1,每个这样的连乘式,每组cki都至多只有两个为1,其余全为0,每个连乘式最多两个特征相乘。如此一来Wide增强了模型的 记忆性 Memorization。
Deep部分就是一个DNN前馈神经网络,这里的输入也是包括两部分,一部分是数值特征,一部分是类别特征(需要进行embedding操作),Deep部分可以通过学习稠密向量提高模型的泛化能力。如此一来Deep部分增强了模型的泛化性 Generalization。
思考题
- 在你的应用场景中,哪些特征适合放在Wide侧,哪些特征适合放在Deep侧,为什么呢?
Wide:item id,user id
Deep:年龄、性别、语言、民族、item的历史统计信息 - 为什么Wide部分要用L1 FTRL训练?
模型中Deep的DNN部分使用的优化器是比较常规的AdaGrad。
而Wide部分的优化算法(相当于优化器)则是使用了L1正则的FTRL(Follow-the-regularized-leader)L1 FTRL会让Wide部分的大部分权重都为0,这压缩了模型权重,也压缩了特征向量的维度。Google的应用场景会产生海量的权重,L1 FTRL能有效的过滤其中的稀疏特征。 - 为什么Deep部分不特别考虑稀疏性的问题?
从源头开始Deep部分的数据就不会是稀疏的,Deep部分的输入是数值类特征和已经降维并稠密化的Embedding向量,所以Deep部分不存在严重的特征稀疏问题。
参考
①datawhale组队学习-DeepRecommendationModel:
https://github.com/datawhalechina/team-learning-rs/tree/master/DeepRecommendationModel
②一文搞懂Wide&deep:https://zhuanlan.zhihu.com/p/147054851
③Wide & Deep算法介绍:https://blog.csdn.net/suspend2014/article/details/104344475
④详解 Wide&Deep 推荐框架:https://zhuanlan.zhihu.com/p/57247478
⑤见微知著,你真的搞懂Google的Wide&Deep模型了吗?:https://zhuanlan.zhihu.com/p/142958834