Wide & Deep
00 min
2024-9-28
2024-9-28
type
status
date
slug
summary
tags
category
icon
password

Wide & Deep

1️⃣论文出处

Wide & Deep 模型的核心思想是结合线性模型的记忆能力和 DNN 模型的泛化能力,从而提升整体模型性能。
 

2️⃣论文解读

详解 Wide & Deep 结构背后的动机
本文介绍 Google 发表在 DLRS 2016 上的文章《 Wide & Deep Learning for Recommender System 》。Wide & Deep 模型的核心思想是结合线性模型的记忆能力和 DNN 模型的泛化能力,从而提升整体模型性能。Wide & Deep 已成功应用到了 Google Play 的app推荐业务,并于TensorFlow中封装。该结构被提出后即引起热捧,在业界影响力非常大,很多公司纷纷仿照该结构并成功应用于自身的推荐等相关业务。 题外话,这里介绍下这个"年轻"的会议 DLRS : DLRS 全称 Workshop on Deep Learning for Recommender Systems,2016举办第一届,旨在加速深度学习在RecSys社区中的传播和应用。深度学习已经在很多领域上取得巨大成功,会议组织相信它有潜力成为下一代推荐系统的核心,现在已经是将它们应用于RecSys的时候了。 推荐系统的主要挑战之一,是同时解决Memorization和Generalization,理解这两个概念是理解全文思路的关键,下面分别进行解释。 面对拥有大规模离散sparse特征的CTR预估问题时,将特征进行非线性转换,然后再使用线性模型是在业界非常普遍的做法,最流行的即「LR+特征叉乘」。Memorization 通过一系列 人工的特征叉乘(cross-product) 来构造这些非线性特征,捕捉sparse特征之间的高阶相关性,即"记忆" 历史数据中曾共同出现过的特征对。 例如,特征1--专业: {计算机、人文、其他},特征2--下载过音乐《消愁》:{是、否},这两个特征one-hot后的特征维度分别为3维与2维,对应的叉乘结果是特征3--专业☓下载过音乐《消愁》: {计算机∧是,计算机∧否,人文∧是,人文∧否,其他∧是,其他∧否}。 典型代表是LR模型,使用大量的原始sparse特征和 叉乘特征 作为输入,很多原始的dense特征通常也会被分桶离散化构造为sparse特征。这种做法的优点是模型可解释高,实现快速高效,特征重要度易于分析,在工业界已被证明是很有效的。Memorization的缺点是: 需要更多的人工设计;
详解 Wide & Deep 结构背后的动机
 

3️⃣模型结构

notion image
 
notion image
Wide部分特征:
Wide部分的特征主要是User Installed App 和 Impression App,工程师的目的是想发现当前曝光app和用户安装app的关联关系,以此来直接影响最终的得分。两个id类特征向量进行组合,在维度爆炸的同时,会让原本已经非常稀疏的multihot特征向量,变得更加稀疏。因此,为了不把数量如此之巨的权重都搬到线上进行model serving,采用FTRL过滤掉哪些稀疏特征无疑是非常好的工程经验。
 
Deep部分特征:
Age,#App Installs这些数值类特征和已经降维并稠密化的Embedding向量

4️⃣解决问题

如何让模型同时拥有比较好的记忆能力和泛化能力,即让模型兼具逻辑回归和深度神经网络的优点,也就是既能快速处理和记忆大量历史行为特征,又具有强大的表达能力?
 
模型记忆能力:可以被宽泛地理解为模型直接学习历史数据中物品或者特征的“共现频率”,并且把它们直接作为推荐依据的能力 。
两个特点:一是数量非常多,一个“记性不好”的推荐模型很难把它们都记住;二是没办法推而广之,因为这类规则非常具体,没办法或者说也没必要跟其他特征做进一步的组合。
 
模型泛化能力:指的是模型对于新鲜样本、以及从未出现过的特征组合的预测能力。
 

5️⃣损失函数 | 目标函数 | 公式推导

binary_crossentropy交叉熵损失函数
notion image
 

6️⃣代码实现

问题一:为什么在Google的Wide&Deep模型中,要使用带L1正则化项的FTRL作为wide部分的优化方法,而使用AdaGrad作为deep部分的优化方法?
FERL(FTRL可以当作一个稀疏性很好精度又不错的随机梯度下降方法)
FTRL with L1非常注重模型的稀疏性。W&D采用L1 FTRL是想让Wide部分变得更加稀疏。或者说L1 FTRL会让Wide部分的大部分权重都为0,我们准备特征的时候就不用准备那么多0权重的特征了,这大大压缩了模型权重,也压缩了特征向量的维度。
在Deep部分,输入要么是Age,#App Installs这些数值类特征,要么是已经降维并稠密化的Embedding向量,工程师们不会也不敢把过度稀疏的特征向量直接输入到Deep网络中。所以Deep部分不存在严重的特征稀疏问题,自然可以使用精度更好,更适用于深度学习训练的AdaGrad去训练。
特征交叉:
模型结构实现:

7️⃣总结

notion image
上一篇
Deep & Cross Network
下一篇
DeepFM