赞
踩
W&D的核心思想是结合线性模型的记忆能力和DNN模型的泛化能力,进行两个模型的联合训练(在训练过程中同时优化2个模型的参数),从而兼顾推荐的准确性和多样性。
整个模型的输出是线性模型输出与DNN模型输出的叠加。模型训练采用的是联合训练,训练误差会同时反馈到线性模型和DNN模型中进行参数更新。
因此在模型的特征设计阶段,wide和deep只需要分别专注于擅长的方面,wide端模型通过离散特征的交叉组合进行memorization,deep端模型通过特征的embedding进行generalization,这样单个模型的大小和复杂度也能得到控制,而整体模型的性能仍能得到提高。
从历史数据中学习共现的物体/特征组合;
在预测的时候利用到这种学习到的这种相关性。
LR属于广义线性模型,本身不具备对特征之间非线性关系进行建模。所以需要我们从历史数据中找到有用的特征组合(当然也可以使用一些工具来找到哪些特征组合是有效的),人为的加入到模型中,给LR模型增添非线性建模能力。简单来说,记忆能力是一种共现规律,表现方式为特征交叉,它需要人为或者通过工具从历史数据中找到,并放入到模型中作为新的特征,从而增加非线性建模能力。
使用多类型的叉乘特征变换,记忆特定的特征组合,但它的限制就是难以归纳以前没出现过的组合,这就需要人工特征工程。
记忆能力过强会出现一个问题,就是推荐物体的单一化。
关键词是:从未或者很少出现的特征组合。
模型需要捕捉到item之间的内在联系,而普通的离散特征无法满足这一要求,DNN通过对类别特征做embedding,自动进行特征组合(引入低维稠密向量,相似item在embedding的一些维度上可能是一样的)。
综合来说,LR模型有着更强的记忆能力,Deep模型有着更强的泛化能力。
整个模型分为三个部分,左边的Wide模型,右边的Deep模型,最后输出的Softmax/sigmoid函数。
Wide使用的是LR模型,这里需要注意的点是LR的输入特征包含两部分:
原始特征(spare类型特征);
手动交叉特征(特征交叉之前各自特征需要one-hot)。
Deep模型使用的是前馈神经网络,会对类别特征做embedding,连续特征不动直接输入就好(需要提前做好特征工程)。
联合训练,Wide使用FTRL算法进行优化(因为Wide侧的数据是高维稀疏的),Deep模型使用AdaGrad进行优化。
在实际中,Wide和Deep部分直接使用一个优化器就可以。
有些时候对于用户或者待推荐的物体会有Text和Image,为了增加效果,可能会使用到多模态特征。
Text 和 Image 的 embedding 向量,采用和Wide模型一样的方式加入到整体模型中即;
Text和Image之间使用attention之后再加入;
Text和Image 和Deep 模型的输出拼接之后再做一次处理;
多看 Paper-给个关键词:Multimodal Fusion
对于隐藏在历史数据中的共现特征关系,Deep模型是可以学习到的。但是WDL模型做的是,把其中的一部分(容易观察出来或者通过其他工具找出来的特征组合)放到LR这边,从而显式的加入到模型中。
往极端的方面想一下,LR模型这边更像是一种规则,是对Deep模型输出的补充。
1. Wide部分特征
高维稀疏特征、人工手动交叉特征;只要能够发现高频、常见模式的特征都可以放在wide侧。
2. Deep部分特征
数值类特征、类别特征的embedding等(不存在严重的稀疏性问题);deep部分的输入是将dense特征和embedding特征拼在一起输入到dnn中。
应该根据实际的业务场景去确定哪些特征应该放在Wide部分,哪些特征应该放在Deep部分。
3. Wide部分优化
使用L1 FTRL是应对稀疏性的一种很好的方法;Wide部分使用的特征比较简单,并且得到的特征非常的稀疏,所以使用了FTRL优化Wide部分。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。