这里写目录标题
- 1. 背景
- 2. 贡献
- 3 模型结构
- (1)任务定义
- (2)The Wide Component
- (3)The Deep Component
- (4)联合训练Wide和Deep Model
- 4. 参考
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 App 和 Impression 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模型了吗?