深度学习推荐系统实战
王喆
Roku 推荐系统架构负责人,前 hulu 高级研究员,《深度学习推荐系统》作者
33298 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
深度学习推荐系统实战
15
15
1.0x
00:00/00:00
登录|注册

18|Wide&Deep:怎样让你的模型既有想象力又有记忆力?

目的:让模型记住好评电影之间的相关规则
挖掘特征之间的相关性,而不是一股脑地扔给神经网络去处理
特征选择:已安装应用、当前曝光应用、用户年龄、属性特征、设备类型等
目标:尽量推荐用户可能喜欢、愿意安装的应用
特征:交叉特征crossed_feature
特征:类别型Embedding向量和数值型特征
结构:输入层加两层128维隐层
特点:对新鲜样本和未出现过的特征组合有预测能力
目的:增强模型的“泛化能力”
特点:直接连接输入层和输出层,记住大量的直接且重要的规则
目的:增强模型的“记忆能力”
改进空间
Google Play
Wide部分
Deep部分
Deep部分
Wide部分
思考
应用场景
TensorFlow实现
结构
Wide&Deep模型
怎样让你的模型既有想象力又有记忆力?

该思维导图由 AI 生成,仅供参考

你好,我是王喆。
今天,我们来学习一个在业界有着巨大影响力的推荐模型,Google 的 Wide&Deep。可以说,只要掌握了 Wide&Deep,我们就抓住了深度推荐模型这几年发展的一个主要方向。那 Wide&Deep 模型是什么意思呢?我们把它翻译成中文就是“宽并且深的模型”。
这个名字看起来好像很通俗易懂,但你真的理解其中“宽”和“深”的含义吗?上一节课我们讲过 Embedding+MLP 的经典结构,因为 MLP 可以有多层神经网络的结构,所以它是一个比较“深”的模型,但 Wide&Deep 这个模型说的“深”和 MLP 是同样的意思吗?“宽”的部分又是什么样的呢?宽和深分别有什么不同的作用呢?以及我们为什么要把它们结合在一起形成一个模型呢?
这节课,就让我们就带着这诸多疑问,从模型的结构开始学起,再深入到 Wide&Deep 在 Google 的应用细节中去,最后亲自动手实现这个模型。

Wide&Deep 模型的结构

首先,我们来看看 Wide&Deep 模型的结构,理解了结构再深入去学习细节,我们才能掌握得更好。
图1 Wide&Deep模型结构
(出自Wide & Deep Learning for Recommender Systems )
上图就是 Wide&Deep 模型的结构图了,它是由左侧的 Wide 部分和右侧的 Deep 部分组成的。Wide 部分的结构太简单了,就是把输入层直接连接到输出层,中间没有做任何处理。Deep 层的结构稍复杂,但我相信你也不会陌生,因为它就是我们上节课学习的 Embedding+MLP 的模型结构。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Wide&Deep模型是Google推荐系统领域的重要模型,结合了“宽”和“深”的特点,旨在兼具“记忆能力”和“泛化能力”。文章介绍了Wide&Deep模型的结构和在Google Play应用推荐场景中的应用。Wide部分主要用于增强模型的“记忆能力”,通过学习历史数据中的共现频率来记住重要规则;而Deep部分则用于增强模型的“泛化能力”,对新鲜样本和未出现过的特征组合进行预测。文章还提供了Wide&Deep模型的TensorFlow实现代码,重点关注了模型的Deep部分和Wide部分的特征选择和构建。通过结合线性模型和深度网络,Wide&Deep模型实现了综合能力更强的推荐模型。整体而言,Wide&Deep模型以其独特的结构和应用场景,为推荐系统的发展提供了重要的思路和方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深度学习推荐系统实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(27)

  • 最新
  • 精选
  • giraffa126
    冒昧问一下,deep的输出是128,wide是10000,两个不在一个量纲,感觉直接这么concate,会不会削弱deep的效果,模型退化成LR?

    作者回复: 这是个很好的问题,也推荐其他同学思考。 我的思考是不会,因为wide部分一般来说都是非常稀疏的特征,虽然总的维度很大,但是在实际inference的过程中,wide部分往往只有几个维度是有值的,而deep部分一般都是稠密的特征向量,所以理论上两个部分对结果的影响不存在太大的bias。

    2020-12-19
    3
    44
  • Alan
    答:改进空间大致上我能想到两种方式:我选2 1、手动人工两个特征交叉或求解相关性(即,电影风格类型较低情况下,数据维度较低、数据量较小情况下是可以的,但是在实际工业应用领域是不切实际的), 2、改进算法的wide部分,提升记忆能力,使用端到端模型,减少人工操作。例如DCNMix、DeepFM。以DeepFM这个模型都可以很好学习到高低特征与交叉。(实际业界常用,推荐) 普及一下高低阶特征知识: 低阶特征:是指线性-线性组合,只能算一个有效的线性组合,线性-非线性-线性,这样算两个有效的线性组合,一般常说的低阶特征只有小于等于2阶; 高阶特征:说高阶特征,可以理解为经过多次线性-非线性组合操作之后形成的特征,为高度抽象特征,一般人脑很难解析出原有的特征了

    作者回复: 说的很好,推荐其他同学参考。

    2021-03-18
    28
  • 范闲
    电影本身风格和用户倾向风格可以做个融合~~用户偏离本身风格的程度~~

    作者回复: 很好的idea,人工的特征组合有时候反而效果是好的。不能因为有深度学习就完全不考虑一些手动的特征组合。

    2020-12-02
    19
  • 那时刻
    请问老师,文中例子中把类别型特征放入到wide里,如果把数值型特征放到wide部分,是否需要做normalization呢?

    作者回复: 做不做normalization还是看你自己的实践。我一般推荐在实际工作中做normalization或者bucketize。会有助于模型收敛。

    2020-11-20
    2
    16
  • 马龙流
    用户喜欢的风格和电影本身自己的风格,做attention做为一个值喂给mlp,这种做法是否可以

    作者回复: 这个思路非常好。跟之后我们要讲的DIN中的attention机制做法一致了。

    2020-11-25
    14
  • 骚动
    请问老师,我觉得Wide&Deep和GBDT+LR在逻辑上很像,Wide对应LR,Deep对应GBDT,不知道我的想法对不对?这两个模型对比,老师能给我讲下吗,有什么共性?另外,GBDT+LR中输入LR的数据,也是原始特征+GBDT训练的特征,是否可以理解为原始特征就是模型的记忆能力,GBDT训练的组合特征就是泛化能力?

    作者回复: 不可以这样理解,wide&deep两部分是并列的,GBDT+LR,两部分是先后关系。 至于具体的区别,自己找GBDT+LR的结构去深入理解。

    2021-01-16
    3
    5
  • Geek_b027e7
    老师,deepfm中crossed_column是不是只写了一个好评电影的交叉例子,按文中意思是把所有好评过的历史电影与所有电影做交叉

    作者回复: 是的,可以自己多修改,多尝试

    2020-12-06
    2
    5
  • 江峰
    在工业界应用wide deep模型的时候,wide侧和deep侧分别应该放什么样的特征呢? 我在实践过程中都是把 原始id特征放到deep侧,把id类别大的,和其他id特征的交叉放在wide侧。比如adid和分词交叉,memberid和分词交叉等。这样处理合适吗? 把这种交叉特征同时放在wide侧和deep侧,是不是会更好?

    作者回复: 当然按照原文的思路,是把维度很高的交叉类特征放在wide侧,把比较稠密的特征放在deep侧,我们的实践也基本依次逻辑。 但是我觉得倒也没必要一成不变的按它的逻辑,你这种实践出真知的过程是最好的。

    2021-02-24
    2
    4
  • 王继伟
    请问老师,文中说Wide 部分就是把输入层直接连接到输出层。 1、如果输入层特征特别稀疏(上千万维的one_hot)这样即使是直接连接到输出层也会增加上千万个参数,这样会降低模型训练速度吗? 2、如果Wide 部分输入的稀疏特征维度上亿,那wide部分的训练的参数会比deep部分训练的参数还要多,这样合理吗? 还是说wide部分的输入是要控制特征维度的?

    作者回复: 这两个问题都不错: 1、其实深度模型一般都有处理稀疏id的部分,即使没有wide部分,大量其他模型的embedding也需要处理这样的特征。所以肯定会降低训练速度,但深度学习模型几乎都必须有这样的结构 2、虽然稀疏特征维度很大,但是往往仅有很少的几个维度在inference过程中是1。所以对结果的贡献不会淹没deep部分。这是从原理上说的,从实践上说的话,自己去做evaluation。

    2021-02-13
    4
  • Jacky
    老师,您好!我想咨询一下,我在pycharm里运行py文件的时候,出现了cast string to int32 is not supported的问题,想咨询一下如何修改代码。谢谢您!感谢!

    作者回复: 微信上已经回复你了吧?这些小问题自己多调试,可能不能一一帮助大家。

    2021-01-21
    7
    4
收起评论
显示
设置
留言
27
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部