Wide&Deep

1. 背景

(1) 广义线性回归通常被用于推荐模型,该模型通常使用one-hot编码的二值化稀疏特征进行训练。通过使用稀疏特征上的交叉变换,能很好的实现记忆能力,解释特征对之间的共现是如何和目标标签相关的。例如AND(user_installed_app=netflix, impression_app=pandora")=1 代表一个用户安装了netflix,然后被展示pandora。可以通过添加更少粒度的特征来增加泛化性,但是通常需要手工特征工程。交叉乘积转换的不能泛化到没有出现在训练数据中的查询项特征对。比如AND (user_installed_category=video, impression_category=music)。

(2) 基于嵌入的模型,例如矩阵分解和神经网络模型,可以通过学习每个查询和项目特征的嵌入,从而可以推广到以前看不见的query-item对,但如果底层的查询项目矩阵稀疏,很难学到有效的嵌入表示。具有交叉积特征转换的线性模型可以用更少的参数记住这些“异常规则”。

因此Wide&Deep结合这两者。

2. 贡献

Wide&Deep学习框架,联合训练具有embedding的前向神经网络,和具有特征变换的线性模型,输入是稀疏输入。

3 模型结构

在这里插入图片描述

(1)任务定义

当用户访问应用商店时,会生成一个查询,其中可以包含各种用户和上下文功能。推荐系统返回一个应用程序列表(也称为曝光),用户可以在上面执行某些操作,如点击或购买。这些用户操作,连同查询和query,作为训练数据记录在日志中。

得分通常是P(y|x),即给定特征x的用户操作标签y的概率,包括用户特征(如国家、语言、人口统计)、上下文特征(如设备、一天中的小时、一周中的哪一天)和印象特征(如应用年龄、应用的历史统计)。

(2)The Wide Component

wide部分是一个广义的线性模型 y = w T x + b y=\bold{w}^{T}\bold{x}+b y=wTx+b,y是预测, x = [ x 1 , x 2 , . . . , x d ] \bold{x}=[x_1,x_2,...,x_d] x=[x1,x2,...,xd]是d个特征向量, w \bold{w} w是模型参数。特征集包含原始输入特征和转换后的特征最重要的特征是交叉积变换,可以定义为:
在这里插入图片描述

其中,cki={0,1},如果第i个特征属于属于第k个组合特征,cji=1,否则为0。对于一个二维的特征,一个交叉积变换,例如AND(gender=female, language=en)“)当且仅当组成特征(gender=female"和anguage=en”)均为1时为1,否则为0。

(3)The Deep Component

Deep是一个前馈神经网络,对类别特征,会被转换为embedding,每一层的计算如下

在这里插入图片描述

(4)联合训练Wide和Deep Model

在这里插入图片描述

1)两部分的输入

Deep部分的输入是全量的特征向量,包含用户年龄,已安装应用数量、设备类型、已安装应用、曝光应用等特征,了别特征需要Embedding后输入concat,拼接成1200维Embedding向量,再经过三层Relu全连接层,最终输入LogLoss输出层。

Wide部分的输入仅是已安装应用(用户历史行为)和曝光应用(代表当前待推荐应用)两类特征。

2)两部分如何结合

将Wide和Deep部分输出对数概率的加权作为预测,然后将其送到一个共同的逻辑损失函数中进行联合训练。

(联合训练和集成训练是有区别的。在集成中,单个模型在互不了解的情况下单独训练,并且它们的预测仅在推理时而不是在训练时组合。相比之下,联合训练通过在训练时同时考虑wide和deep两个部分以及它们之和的权重来同时优化所有参数。对模型大小也有影响:对于集成,由于训练是不相交的,每个单独的模型大小通常需要更大(例如,具有更多的特征和转换),以达到集成工作的合理精度。相比之下,对于联合训练,wide部分只需要用少量的跨产品特征变换来弥补deep部分的不足,而不需要一个全尺寸的wide模型

使用小批量随机优化,使用带有L1正则化的FTRL作为wide部分优化器,AdaGrad作为模型Deep部分的优化器。

对于逻辑回归问题,模型的预测为:
在这里插入图片描述

Y为二分类标签,1表示安装了曝光的App,否则为0,σ(·)为sigmoid函数,φ(x)为原始特征x的交叉积变换, w w i d e \bold{w}_{wide} wwide w D e e p \bold{w}_{Deep} wDeep是wide和deep部分的权重。

3)Wide采用L1 FTRL是想让Wide部分变得更加稀疏。

Wide部分采用了user Installed AppImpression App,这两个id类特征的乘积,两个id类特征向量进行组合,在维度爆炸的同时,会让原本已经非常稀疏的multihot特征向量,变得更加稀疏。正因如此,wide部分的权重数量其实是海量的。为了不把数量如此之巨的权重都搬到线上进行model serving,所以需要筛掉一些稀疏特征。

Deep部分的输入,要么是Age,#App Installs这些数值类特征,要么是已经降维并稠密化的Embedding向量,因此不存在严重稀疏性问题,因此可以用效果更好的Adagrad。

记忆和泛化对推荐系统都很重要,Wide线性模型可以使用交叉积特征变换有效记忆稀疏特征交互,而Deep深度神经网络可以通过低维嵌入推广到以前未见过的特征交互。

4. 参考

《深度学习推荐系统》
Wide & Deep Learning for Recommender Systems
见微知著,你真的搞懂Google的Wide&Deep模型了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值