https://blog.csdn.net/zhouwenyuan1015/article/details/88584514
Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中 [1]。Wide&Deep推荐算法出自一篇论文《Wide&Deep Learning for RecommenderSystems》。Wide&Deep模型。它混合了一个线性模型(Wide part)和Deep模型(Deep part)。这两部分模型需要不同的输入,而Wide part部分的输入,依旧依赖人工特征工程。
Wide part
Wide部分是的广义线性模型,广义线性模型通过特征工程增加非线性化。为什么叫wide?就是因为特征工程中需要根据原始特征衍生出很多特征,包括one-hot编码的特征。
Deep part
Deep部分是前馈神经网络。对于类别型特征,原始输入是特征字符串(例如,“语言=英语”)。这些稀疏的高维类别特征会先转换成低维稠密的实数向量,通常被称为嵌入向量。嵌入向量的维度通常通常在o(10)到o(100)的量级。随机初始化嵌入向量,然后在模型训练中最小化最终损失函数。这些低维稠密向量馈送到前向传递中的神经网络的隐藏层中。对于稀疏,高维的类别特征,通常首先将其转换为低维的向量,这个过程也称为embedding。
一句话概括wide&deep的优点:
Wide部分有利于增强模型的“记忆能力”,Deep部分有利于增强模型的“泛化能力”。记忆能力可以解释为学习那些经常同时出现的特征,发掘历史数据中存在的共现性。泛化能力则基于迁移相关性,探索之前几乎没有出现过的新特征组合。基于记忆能力的推荐系统通常偏向学习历史数据的样本,直接与用户己经采取的动作相关;泛化能力相比记忆能力则更趋向于提升推荐内容的多样性。推荐的内容都是精准内容,用户兴趣收敛,无新鲜感,不利于长久的用户留存;推荐内容过于泛化,用户的精准兴趣无法得到满足,用户流失风险很大。相比较推荐的准确性,扩展性倾向与改善推荐系统的多样性。
记忆能力”可以被理解为模型直接学习并利用历史数据中物品或者特征的“共现频率”的能力,一般来说,协同过滤、逻辑回归等简单模型有较强的“记忆能力”。“泛化能力”可以被理解为模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。
记忆(memorization) 通过特征叉乘对原始特征做非线性变换,输入为高维度的稀疏向量。通过大量的特征叉乘产生特征相互作用的“记忆(Memorization)”,高效且可解释,但要泛化需要更多的特征工程。
泛化(generalization)只需要少量的特征工程,深度神经网络通过embedding的方法,使用低维稠密特征输入,可以更好地泛化训练样本中未出现过的特征组合。但当user-item交互矩阵稀疏且高阶时,容易出现“过泛化(over-generalize)”导致推荐的item相关性差。
在推荐场景中是相关性和多样性的融合。
排序系统的发展
LR-->GBDT+LR
FM-->FFM-->GBDT+FM|FFM
FTRL-->GBDT+FTRL
Wide&Deep
Deep Neural Networks for YouTube Recommendations
Reinforce Learning
本文记录几个在广告和推荐里面rank阶段常用的模型。
广告领域机器学习问题的输入其实很大程度了影响了模型的选择,因为输入一般维度非常高,稀疏,同时包含连续性特征和离散型特征。模型即使到现在DeepFM类的方法,其实也都很简单。模型的发展主要体现于对特征的充分挖掘上,比如利用低阶和高阶特征、尝试自动学习交叉特征而非手动、尝试更精准地实现高阶特征(bounded-degree)。
广告相关的领域最早大行其道的模型当属LR模型,原因就是LR模型简单,可解释性好,拓展性高,精心细调之后模型效果也会非常好。人工特征工程的初期,加些交叉特征,无论是离线评估指标还是线上的业务指标都会很容易提高,当然大家都会很开心。吃掉容易收割的80%之后,基本上就到了瓶颈。这时候就会发现即使深挖业务场景貌似也找不到比较好的特征了,加了一堆特征搞不好效果还降了。继续做得话,除了特征工程,还可以尝试特征选择,改进优化算法(比如加快收敛),在线学习之类的。
随着业务的持续迭代,手动交叉特征被视为脏活累活,那肯定要想如何做自动交叉特征。这方面的工作同时也有进展。Rendle在2010年提出的FM模型。FM模型利用特征的隐向量做内积来实现特征的交叉。后续阮毓钦提出了Field-aware FM模型,一个特征对应多个隐向量,在criteo举办的ctr比赛上崭露头角。这些其实都已经算是ctr领域的常用套路。FM类模型由于复杂度的原因一般都只能实现二阶交叉。所以不能利用高阶交叉总会让人感觉缺少点意思,毕竟很多场景高阶交叉的确有意义。另外不得不提的特征组合的工作就是Facebook提出的gbdt+lr的方法,通过gbdt来实现监督式的特征组合。
浅层模型尝试之后势必要引入深层模型,毕竟深度学习很大作用就是作为特征表示学习。大厂引入肯定要更早一些,毕竟核心业务都要长时间持续投入人力进行模型优化。至于思路,我觉得可能跟现有市面上看到的模型差不多。一般多层感知机mlp认为可以实现特征高阶交叉(high-order feature interactions)。
2016年出现wide&deep、fnn和pnn等工作。wide&deep算影响力比较大的工作了。wide部分是手动特征交叉(负责memorization),deep部分利用mlp来实现高阶特征交叉(负责generalization),wide部分和deep部分joint train。fnn比较暴力,直接使用预训练的fm隐向量传给mlp。PNN则是先做特征交叉然后给mlp处理。fnn和pnn这两种方法的缺点就是忽视了低阶特征交叉。
2017年出现DeepFM、Deep&Cross和NFM等工作。DeepFM模型和Deep&Cross(包含下面要介绍的xDeepFM)都可以认为是Wide&Deep架构输入和wide部分进行改进。DeepFM和之前模型相比优势在于两点,一个是相对于Wide&Deep不再需要手工构建wide部分,另一个相对于FNN把FM的隐向量参数直接作为网络参数学习。DeepFM将embedding层结果输入给FM和MLP,两者输出叠加,达到捕捉了低阶和高阶特征交叉的目的。Deep&Cross和DeepFM类似,cross network模块可以实现bounded-degree feature interactions。
总结来说,涌现了这么模型,到底哪个好,我觉得很难一锤定音。每个模型都有存在的价值和合适的应用场景。有时候也不一定非得效果提示才行,有时候效果没提升但是可以大大减少特征工程的工作也算有收益。根据实际的场景、业务需求和迭代阶段选择合适的模型,花费合理的成本,取得最大的业务价值才是最重要的。
深度排序模型的结构可以分为两种,一种是并行结构,分别做低阶和高阶特征组合;一种是串行结构,如PNN、NFM、AFM等。这也构成了深度排序模型的两条演进路线,如何更有效地捕获特征组合是核心,沿着以下两个演进路线发展:
一:更有效地捕获二阶特征:
Wide&Deep -> DeepFM -> NeuralFFM -> DeepFFM
二、显式建模2阶/3阶/4阶...K阶特征组合:
DeepCross -> xDeepFM
Wide&Deep = LR + DNN
其中LR使用FTRL(Follow-the-regularized-leader)优化器进行优化;DNN使用AdaGrad优化器。
Deep & Cross Network(DCN)
DCN 不需要特征工程来获得高阶的交叉特征,对比 FM 系列的模型,DCN 拥有更高的计算效率并且能够提取到更高阶的交叉特征。