初学者系列:推荐系统Wide & Deep Learning详解

2019 年 8 月 24 日 专知
导读
在信息大爆炸的今天,推荐系统(Recommendation System, RS)用作克服这种信息过载的通用解决方案,旨在从压倒性的在线内容和服务(例如电影、新闻和产品)中找到一组相关项目以满足用户的个人兴趣。用于推荐系统的策略有很多种,本文主要介绍的是在2016年提出的用于Google Play进行APP推荐的Wide & Deep Learning模型。




核心思想

01


Wide & Deep Learning 模型的核心思想是结合广义线性模型的记忆能力(memorization)和深度前馈神经网络模型的泛化能力(generalization)。利用广义线性模型从历史数据中学习特征相关性,利用深度前馈神经网络揭示隐式特征之间的相互作用。在训练过程中同时优化 2 个模型的参数,从而达到整体模型的预测能力最优。


动机

02


逻辑回归的广义线性模型,模型简单并且可解释性强,因此被广泛应用在工业环境中的大规模在线推荐和排名系统中。模型通常使用one-hot编码训练二值化稀疏特征。基于嵌入(Embedding)的模型,例如分解机(FM)或深度神经网络(DNN),通过为每个query和项目特征学习低维密集嵌入向量,进一步推广到以前未见过的query-item特征对。然而,当基础query项目矩阵稀疏且高维时,例如具有特定偏好的用户或具有很少吸引力的小众项目,难以学习查询和项目的有效低维表示。在这种情况下,大多数query-item对之间应该是没有交互的,但是,密集嵌入(dense embeddings)将导致所有query-item对的非零预测,因此可能过度概括并产生不太相关的推荐。


tips:”query“为当用户访问app store的时候生成的许多用户和文本特征。


基于这些问题,提出了Wide & Deep learning模型,联合训练wide线性模型和深度神经网络模型,将memorization和generalization的优点结合起来。使用 wide线性模型(Wide Model)用于记忆,使用深度神经网络模型(Deep Model)用于归纳。


tips:Memorization是从历史数据中学习特征的共性或者相关性;Generalization为相关性的传递,发现历史数据中很少或者没有出现的新的特征组合,来提高推荐物品的多样性。


原理

03


Wide & Deep Learning模型分为Wide model与 Deep model两部分,wide部分学习一些明确的特征依赖关系,deep部分在特征嵌入向量的级联上采用MLP来揭示隐式特征之间的相互作用。



wide 模型
wide 模型是的广义线性模型,如图下图所示。
其中:


  • y是预测值;
  • x = [x1,x2,...,xd]是d维特征的向量(包括两部分);
  • w = [w1,w2,...,wd]是模型权重,b是偏差。


输入x(特征集合)包括原始输入特征转换特征。常选择交叉积转换特征(cross-product transformation)(简单的说就是逻辑与运算(AND)),其定义为:


交叉积:相当于“逻辑与”运算AND,AND{A,B}当且仅当"A=1且B=1“时,交叉特征才为1。如果第i个特征是第k个变换φk的一部分,则c_{ki}为1,否则为0。


Deep 模型
deep model 是深层前馈神经网络,如下图所示:


对于类别特征,原始输入是特征字符串(例如:“language=en”)每一个稀疏的高维类别特征首先被转换为低维且密集的实值向量,通常被称为嵌入向量(embedding vector)。嵌入向量随机初始化,然后最小化模型训练期间的损失函数。然后将这些低维密集嵌入矢量馈送到前向通道中的神经网络的隐藏层中。每个隐藏层执行以下计算:
其中:
  • l是层数
  • f是激活函数,通常是ReLUs
  • a^(l),b^(l)和W^(l)是第l层的激活,偏差和模型权重。


联合训练


通过将Wide模块和Deep模块的对数加权输出作为预测值,然后送入逻辑损失函数中,用于联合训练。模型的联合训练通过反向传播将输出值的误差梯度通过最小批随机梯度同时传送给Wide和Deep模块。在实验中,作者使用FTRL算法作为wide模块的优化器,使用AdaGrad更新deep模块。 



联合训练:两个模型是一起训练所有参数,两个模块只要互相补充对方不足。


对于逻辑回归问题,模型的预测是:


其中:
  • Y是二进制类别标签
  • σ(·)为sigmod函数
  • φ(x)是原始特征x的交叉积转换特征
  • b是偏置。
  • w_wide是所有wide模型权重
  • w_deep是最终激活层a_(lf)的权重


实践

04


该模型官方公布的源码中主要包括:census_dataset.py、wide_deep_run_loop.py以及census_main.py三部分。


  • census_dataset.py主要处理数据以及生成特征列;
  • wide_deep_run_loop.py主要定义训练以及评价;
  • census_main.py为主函数,主要定义模型并且进行训练。


官方给定的数据集为‘成人’数据集,即人口普查数据预测收入是否超过5万美元/年,数据集中各类属性值有连续值与离散值,属性列表为:



数据处理(census_dataset.py)


  • 下载数据集,并对数据进行处理


  • 构建特征列
特征列(feature columns)是用来将采集到的数据进行规范约束,从而得到可以进行tensorflow所支持的类型的特征。tensorflow的特征列构造由tensorflow.feature_column模块来提供,共九种不同的类型。
(图片来源于tf官方文档)


  • tf.feature_column.numeric_column:全部由数值型构成的,默认值为float32。
  • tf.feature_column.categorical_column_with_hash_bucket:计算输入的哈希值,然后使用模运算符将其置于其中一个 hash_bucket_size 类别。
  • tf.feature_column.categorical_column_with_vocabulary_list:根据明确的词汇表将每个字符串映射到一个整数(one—hot类型)。
  • tf.feature_column.bucketized_column:据数值范围将其值分为不同的类别(如:年龄<20,经过处理可表示为[1,0,0,0,0])
  • tf.feature_column.crossed_column:将多个特征组合为一个特征,即论文中的交叉积特征转换(cross-product transformation)。
  • tf.feature_column.indicator_column:将每个类别视为one-hot矢量中的一个元素,其中匹配类别的值为 1,其余类别为 0
  • tf.feature_column.embedding_column:与indicator_column不同 ,经常为0-1之间的小数,而不是只有一个位置(例tf.feature_column.embedding_column(occupation, dimension=3),输出结果为[0.233,0.256,0.487]


  • 定义Estimator的输入函数


主函数(census_main.py)


  • 参数设置
包括数据地址、模型地址 、batch_size等,
  • 定义模型
为给定的模型类型构建适当的估算器,主要包括单独使用wide模型时使用线性分类器(LinearClassifier)、单独使用deep模型时使用DNN分类器(DNNClassifier)以及wide&wide模型(DNNLinearCombinedClassifier)。


丨tips:关于DNNLinearCombinedClassifier的详细信息,可以点击DNNLinearCombinedClassifier查看


  • 开始训练
在训练部分,主要调掉用了wide_deep_run_loop.py里的run_loop()函数,输入特征列进行训练,并且得到评价指标。
run_loop()函数的定义如下所示:
训练结果
一共40个epoch,下图为第40个epoch的训练结果。


代码地址:
https://github.com/tensorflow/models/tree/master/official/wide_deep


论文地址:https://arxiv.org/pdf/1606.07792.pdf



-END-
专 · 知


专知,专业可信的人工智能知识分发,让认知协作更快更好!欢迎登录www.zhuanzhi.ai,注册登录专知,获取更多AI知识资料!
欢迎微信扫一扫加入专知人工智能知识星球群,获取最新AI专业干货知识教程视频资料和与专家交流咨询
请加专知小助手微信(扫一扫如下二维码添加),加入专知人工智能主题群,咨询技术商务合作~
专知《深度学习:算法到实战》课程全部完成!560+位同学在学习,现在报名,限时优惠!网易云课堂人工智能畅销榜首位!
点击“阅读原文”,了解报名专知《深度学习:算法到实战》
登录查看更多
36

相关内容

近期必读的6篇顶会WWW2020【推荐系统】相关论文-Part3
专知会员服务
57+阅读 · 2020年4月14日
南洋理工大学,深度学习推荐系统综述
专知会员服务
172+阅读 · 2019年10月14日
初学者系列:Deep FM详解
专知
108+阅读 · 2019年8月26日
一文简单理解“推荐系统”原理及架构
51CTO博客
8+阅读 · 2018年10月31日
【推荐系统】详解基于内容的推荐算法
产业智能官
23+阅读 · 2018年1月11日
LibRec 每周算法:DeepFM
LibRec智能推荐
14+阅读 · 2017年11月6日
LibRec 每周算法:Wide & Deep (by Google)
LibRec智能推荐
9+阅读 · 2017年10月25日
给初学者的深度学习简介
36大数据
3+阅读 · 2017年10月19日
Arxiv
12+阅读 · 2019年3月14日
Deep Reinforcement Learning: An Overview
Arxiv
17+阅读 · 2018年11月26日
Arxiv
25+阅读 · 2018年1月24日
VIP会员
相关VIP内容
近期必读的6篇顶会WWW2020【推荐系统】相关论文-Part3
专知会员服务
57+阅读 · 2020年4月14日
南洋理工大学,深度学习推荐系统综述
专知会员服务
172+阅读 · 2019年10月14日
相关资讯
初学者系列:Deep FM详解
专知
108+阅读 · 2019年8月26日
一文简单理解“推荐系统”原理及架构
51CTO博客
8+阅读 · 2018年10月31日
【推荐系统】详解基于内容的推荐算法
产业智能官
23+阅读 · 2018年1月11日
LibRec 每周算法:DeepFM
LibRec智能推荐
14+阅读 · 2017年11月6日
LibRec 每周算法:Wide & Deep (by Google)
LibRec智能推荐
9+阅读 · 2017年10月25日
给初学者的深度学习简介
36大数据
3+阅读 · 2017年10月19日
Top
微信扫码咨询专知VIP会员