(推荐系统)Wide&Deep算法:Wide & Deep Learning for Recommender Systems

摘要

为改进经典推荐算法对特征工程的高依赖性以及深度学习方案因产生过多冗余信息而计算量增大的问题,Cheng等人提出了一种可以兼备记忆性以及泛化性的深度学习模型:Wide & Deep。Wide & Deep的模型结构简单,由wide 以及 deep两部分组成,在深度学习领域在推荐算法的应用中具有里程碑式的意义。

1.推荐算法中的两大任务

Cheng等人认为推荐算法主要需要解决两大问题:记忆性(memorization)以及泛化性(generalization)

  1. 记忆性在原文中的定义为:

Memorization can be loosely defined as learning the frequent co-occurrence of items or features and exploiting the correlation available in the historical data.

记忆性是指算法自行学习特征与物品,物品与物品,特征与特征共现的某种关系,并从用户的历史数据中找出存在的相关性。举个例子,男性,20岁 ,喜欢买鞋子。 女生,25岁,喜欢买化妆品。记忆性即模型挖掘到:20岁的男生大概率会喜欢买鞋子,25岁的女生大概率会喜欢买化妆品这样的这种联系的能力。

  1. 泛化性在原文中的定义为:

Generalization, on the other hand, is based on transitivity of correlation and explores new feature combinations that have never or rarely occurred in the past.

泛化性比较好理解,指的是模型根据挖掘到的相关性来创造新特征的能力。

那么Wide & Deep是如何解决记忆性以及泛化性的问题呢?

2.网络结构

Wide & Deep的网络由Wide与Deep两个部分组成,模型结构的结构非常简单,如下图。下文将简单地对两个部分进行介绍。
(推荐系统)Wide&Deep算法:Wide & Deep Learning for Recommender Systems_第1张图片

2.1 The Wide Component

(推荐系统)Wide&Deep算法:Wide & Deep Learning for Recommender Systems_第2张图片
wide部分的模型非常简单,仅由输入层和一个非线性构成。网络的输入信息包含:a. 原始输入特征(raw input features) b.转换特征(transformed features)。对于转换特征,wide中采用了cross- product transformation,计算公式如下:
(推荐系统)Wide&Deep算法:Wide & Deep Learning for Recommender Systems_第3张图片
其中 c k i c_{ki} cki是一个布尔变量,如果第 i i i个特征 属于第 k k k个转换,值为1,否则为0。举一个例子,对于cross- product transformation来说,AND(gender = female ,language=en)只有在gender = female以及anguage=en同时为1时,AND的值才取1。实际上看, c k i c_{ki} cki是一个控制某个特征值 x i x_i xi是否生效的开关,使得转换特征只包含具有交互信息的特征。另外,从wide component的输入信息来看,cross- product transformation在实际应用中仍需要手工制作一部分的交互特征。综合来说,cross- product transformation是使得模型具有记忆性的核心部件。

2.2 The Deep Component

Deep 部分的网络结构由emebdding层和数层非线性层叠加而成,如下图:
(推荐系统)Wide&Deep算法:Wide & Deep Learning for Recommender Systems_第4张图片
embedding层把字符串特征转换为离散的特征向量,非线性层的堆叠有效地使网络提取出输入信息的非线性特征,笔者认为非线性层的堆叠正是Wide &Deep 模型具有良好泛化性的原因

3.模型训练

训练Wide &Deep网络有两种思路。第一种思路即单独训练Wide 和Deep两个部分,最后把两者的输出结果做一个融合。这种做法会带来两个问题:两个模型的相关性被割裂以及单独训练体积过大。因此一般采用第二种思路,即把两个模型放在一起联合训练。

训练模型时使用的是随机梯度下降法,但对wide部分使用的是带L1正则化的FTRL,对deeppart则采用AdaGrad。为什么要采用不同的优化方案呢?

这实质上是由具体工程给出的结果。从Google play的应用角度来说 ,模型的输入如下图:
(推荐系统)Wide&Deep算法:Wide & Deep Learning for Recommender Systems_第5张图片
可见输入到cross- product transformation模块的特征有: User Installed APP以及Impression App两个特征,cross- product transformation的点乘操作会产生大量的稀疏性,因此导致wide部分的网络权重数据量大大增加。因此才采用FTRL来增加网络稀疏性。而对于Deep结构,并不需要经过cross- product transformation,所以采用普通的优化器即可。

4.总结

Wide&Deep的模型结构简单,却能使算法具有不错的泛化性和记忆性。泛化性来源于Deep部分,核心在于非线性层的堆叠。记忆性来源于Wide部分,核心是cross- product transformation。原文中也给出离线实验以及线上实验的对比,有兴趣的读者可以查阅一下论文。笔者认为应通过以下几点来把握这篇文章:

  1. 泛化性怎么来?
  2. 记忆性怎么来?
  3. 训练过程有什么特别之处?是否跟实际工程相关?

参考

https://zhuanlan.zhihu.com/p/142958834

FTRL简介

你可能感兴趣的:(推荐算法,论文笔记,机器学习,数据挖掘,深度学习)