首页 > 编程语言 >推荐系统中的常用算法——Wide & Deep

推荐系统中的常用算法——Wide & Deep

时间:2023-06-14 20:36:55浏览次数:57  
标签:Wide None 训练 特征 模型 Deep 算法


1. 概述

在前DeepLearning时代,以Logistic Regression(LR)为代表的广义线性模型在CTR,CVR中得到了广泛的应用,主要原因包括:

  1. 模型足够简单,相当于不包括隐含层的神经网络;
  2. 可扩展性强;
  3. 可解释性强,因为是线性的模型,可以很方便的显现出特征对最终结果的强弱。

虽然线性模型有如上的优点,但同时也存在很多的不足,其中最重要的是无法处理特征的交叉,泛化能力较差。在以CTR为代表的Ranking问题中,需要同时获得记忆(memorization)和泛化(generalization)的能力。记忆可以理解为从历史数据中学习到item或者特征之间的共现关系,泛化则是对上述共现关系的传递,能够对未出现的关系对之间的共现关系进行判定。引用文中的例子:假设样本中包含了共现关系AND(user_installed_app=netflix, impression_app=pandora)表示用户安装了Netflix,并随后见到Pandora(注:美国流媒体音乐)时值为推荐系统中的常用算法——Wide & Deep_推荐系统,通过记忆的学习生成特征AND(user_installed_app=netflix, impression_app=pandora)与目标值推荐系统中的常用算法——Wide & Deep_推荐系统之间的关系。但是当出现一条样本AND(user_installed_app=哔哩哔哩, impression_app=网易云音乐),单纯依靠记忆能力就无法做出置信的判断。

为了能够使得线性模型具有特征交叉的能力,人们不得不在特征工程上花费大量的时间。对于广义线性模型来说,也不是解决不了上述的问题,通过特征工程,需要能够挖掘出共现关系AND(user_installed_category=video, impression_category=music)。随着算法的不断发展,随后也出现了许多的优化方案,如FM算法通过在线性模型的基础上引入交叉项,GBDT+LR算法通过GBDT模型对特征的学习,有效的处理特征交叉问题。随着深度学习的发展,深度学习天生的泛化能力,使得人们能够从繁重的特征工程中解放出来。

既然LR模型具有记忆能力,DNN模型具有泛化能力,综合这两部分的能力便能更好的求解Ranking问题。Wide & Deep模型同时具备了这两种能力,LR模型构成了Wide侧,DNN模型构成了Deep侧。

2. Wide & Deep模型

2.1. Wide & Deep模型结构

Wide & Deep模型的结构如下图所示:

推荐系统中的常用算法——Wide & Deep_泛化_03

在Wide & Deep模型中包括两个部分,分别为Wide部分和Deep部分,Wide部分如上图中的最左侧的图(Wide Models)所示,Deep部分如上图中的最右侧的图(Deep Models)所示。

2.1.1. Wide侧模型

Wide侧模型就是一个广义的线性模型,如下图所示:

推荐系统中的常用算法——Wide & Deep_泛化_04

Wide侧的广义线性模型可以表示为:

推荐系统中的常用算法——Wide & Deep_推荐系统_05

其中,特征推荐系统中的常用算法——Wide & Deep_ide_06是一个推荐系统中的常用算法——Wide & Deep_泛化_07维的向量,推荐系统中的常用算法——Wide & Deep_ide_08为模型的参数。最终在推荐系统中的常用算法——Wide & Deep_推荐系统_09的基础上增加Sigmoid函数作为最终的输出。对于广义线性模型的特征推荐系统中的常用算法——Wide & Deep_推荐系统_10,通常需要特征工程的参与,特征中不仅包含了原始的特征,还包括一些交叉特征,如上述的AND(user_installed_app=netflix, impression_app=pandora)特征。

2.1.2. Deep侧模型

Deep侧模型是一个典型的DNN模型,如下图所示:

推荐系统中的常用算法——Wide & Deep_泛化_11

对于DNN模型来说,不适合处理离散的稀疏特征,因此在深度神经网络模型中,通常需要将输入的离散稀疏特征转换成连续的稠密特征,如上图中的embedding层。在训练的时候,模型中的embedding向量参与模型一起运算。隐含层的计算方法为:

推荐系统中的常用算法——Wide & Deep_特征工程_12

其中,推荐系统中的常用算法——Wide & Deep_泛化_13称为激活函数,如ReLUs。推荐系统中的常用算法——Wide & Deep_特征工程_14表示的是第推荐系统中的常用算法——Wide & Deep_wide-deep_15层的激活函数输出,推荐系统中的常用算法——Wide & Deep_推荐系统_16表示的是第推荐系统中的常用算法——Wide & Deep_wide-deep_15层的偏置,推荐系统中的常用算法——Wide & Deep_ide_18表示的是第推荐系统中的常用算法——Wide & Deep_wide-deep_15层的模型权重。

2.2. Wide & Deep模型的联合训练(joint training)

联合训练是指同时训练Wide侧模型和Deep侧模型,并将两个模型的结果的加权和作为最终的预测结果:

推荐系统中的常用算法——Wide & Deep_泛化_20

其中,推荐系统中的常用算法——Wide & Deep_推荐系统_10表示的wide侧的原始特征,推荐系统中的常用算法——Wide & Deep_推荐系统_22表示的是经过特征工程后的交叉特征。

原文中提到模型训练采用的是联合训练(joint training),模型的训练误差会同时反馈到Wide侧模型和Deep侧模型中进行参数更新。Joint training与ensemble learning是不同的,对于ensemble learning来说,模型之间是相互独立的,每一个模型独立训练,仅在做inference的时候做最终结果的融合;而对于joint training来说,多个模型是一起训练的,最终的结果受到各个模型的相互影响,如Wide & Deep中最终的结果受到Wide侧模型和Deep侧模型的共同影响,因此在Wide & Deep中,Wide侧模型需要侧重于memorization的训练,而Deep侧模型需要侧重于generalization的训练,从而使得单个模型的大小和复杂度能得到控制。

对于上述问题的损失函数为

推荐系统中的常用算法——Wide & Deep_泛化_23

其中,推荐系统中的常用算法——Wide & Deep_推荐系统_09为真实的标签,推荐系统中的常用算法——Wide & Deep_泛化_25为预测值,即推荐系统中的常用算法——Wide & Deep_ide_26。Wide & Deep模型中的参数为推荐系统中的常用算法——Wide & Deep_ide_27推荐系统中的常用算法——Wide & Deep_wide-deep_28推荐系统中的常用算法——Wide & Deep_wide-deep_29

在Tensorflow的1.x版本中提供了如下的Wide & Deep函数:

tf.estimator.DNNLinearCombinedClassifier(
    model_dir=None, linear_feature_columns=None, linear_optimizer='Ftrl',
    dnn_feature_columns=None, dnn_optimizer='Adagrad', dnn_hidden_units=None,
    dnn_activation_fn=tf.nn.relu, dnn_dropout=None, n_classes=2, weight_column=None,
    label_vocabulary=None, input_layer_partitioner=None, config=None,
    warm_start_from=None, loss_reduction=losses.Reduction.SUM, batch_norm=False,
    linear_sparse_combiner='sum'
)

文中提到针对Wide侧和Deep采用不同的训练方法,如Wide侧模型采用FTRL(设置上述函数中的linear_optimizer参数),Deep侧模型:AdaGrad

2.3. 特征处理

通过对Wide & Deep模型的分析,Wide & Deep模型本身并不复杂。如上所述,Wide侧模型需要侧重于memorization的训练,而Deep侧模型需要侧重于generalization的训练,因此在实际的应用中,应针对不同的业务场景,对Wide & Deep的Wide侧和Deep侧选择不同的特征,充分发挥Wide & Deep模型的优势。文中将Wide & Deep模型应用在Google play的apps推荐中。

模型的训练之前,最重要的工作是训练数据的准备以及特征的选择,在apps推荐中,可以使用到的数据包括用户和曝光数据。因此,每一条样本对应了一条曝光数据,同时,样本的标签为推荐系统中的常用算法——Wide & Deep_推荐系统表示安装,推荐系统中的常用算法——Wide & Deep_推荐系统_31则表示未安装。对于每条样本中特征的选择,可以参见下图:

推荐系统中的常用算法——Wide & Deep_ide_32

对于特征的选择,从上图中可以看出:

  • Wide侧主要是User Installed App和Impression App的交叉特征,用于记忆用户的兴趣
  • Deep侧的特征包括连续特征和类别特征:
  • 连续特征,通过归一化到区间推荐系统中的常用算法——Wide & Deep_推荐系统_33后直接输入到DNN中
  • 类别特征,通过词典(Vocabularies)将其映射成32维的稠密向量。

对于具体的特征的选择,一般包括用户侧的静态特征,如年龄,性别等,用户侧的行为特征,如历史点击(如本文中的历史安装),还包括一些上下文的特征,如session的特征,特征的选择没有固定的套路,需要根据具体的场景做合适的选择。

参考文献

  1. Cheng H T, Koc L, Harmsen J, et al. Wide & Deep Learning for Recommender Systems[J]. 2016:7-10.
  2. wide & Deep 和 Deep & Cross 及tensorflow实现
  3. Wide & Deep 的官方实现
  4. 深度学习在 CTR 中应用
  5. 《Wide & Deep Learning for Recommender Systems 》笔记
  6. 深度学习在美团点评推荐平台排序中的运用
  7. [tensorflow线性模型以及Wide deep learning


标签:Wide,None,训练,特征,模型,Deep,算法
From: https://blog.51cto.com/u_16161414/6480406

相关文章

  • 【数据结构与算法面试题】二叉树节点的最大距离
    题目来源“数据结构与算法面试题80道”。问题分析:涉及的知识点是二叉树的遍历,遍历的方法主要有:先序遍历中序遍历后序遍历层次遍历在本题中,使用先序遍历的方法。方法:voidm_length(BSTreeNode*root,int*length,int*max_length){if(NULL==root||(NULL==root......
  • 机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization
    本节主要介绍的是libFM源码分析的第五部分之二——libFM的训练过程之AdaptiveRegularization的方法。5.3、AdaptiveRegularization的训练方法5.3.1、SGD的优劣在“机器学习算法实现解析——libFM之libFM的训练过程之SGD的方法”中已经介绍了基于SGD的FM模型的训练方法,SGD的方法的......
  • 推荐算法——非负矩阵分解(NMF)
    1.矩阵分解回顾在博文推荐算法——基于矩阵分解的推荐算法中,提到了将用户-商品矩阵进行分解,从而实现对未打分项进行打分。矩阵分解是指将一个矩阵分解成两个或者多个矩阵的乘积。对于上述的用户-商品矩阵(评分矩阵),记为,可以将其分解成两个或者多个矩阵的乘积,假设分解成两个矩阵和,......
  • 机器学习中的常见问题——K-Means算法与矩阵分解的等价
    一、K-Means算法的基本原理K-Means算法是较为经典的聚类算法,假设训练数据集XX为:{x1,x2,⋯,xn}{x1,x2,⋯,xn},其中,每一个样本xjxj为m......
  • 优化算法——坐标上升法
    一、坐标上升法算法原理坐标上升法(CoordinateAscent)每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。假设需要求解的优化问题的具体形式如下:其中,是向量的函数。更新过程为每次固定除以外的参数,求得满足条件的,直到算法收敛,具体的算法过程如下所示:(图片来自参考文......
  • 数据结构和算法——旋转打印链表
    1、问题描述输入参数nn为正整数,如输入n=5n=5,则按行打印如下的数字:2、问题的理解这个问题是将数字1…n21…n2按照一圈一圈的方式......
  • Pasos和RAFT算法
    Paxos提出时间1990年,RAFT提出时间2013年。RAFT是Paxos的简化版,或者说是提高投票效率,但是降低了投票公平性的妥协方案。RAFT分布式raft(ReplicatedAndFaultTolerant)选举算法原理分成三个角色,领导者,跟随者,和候选者。在没有领导者的时候和领导者联系不上的时候。跟随者......
  • 图像拼接算法技术报告
    图像拼接算法技术报告代码介绍图像拼接是将多个图像按照一定的顺序和几何变换方法组合在一起,形成一个更大、更完整的图像的过程。通过图像拼接,可以将多个部分图像合并为一个整体,以展示更广阔的视野或提供更全面的信息。我们先感性地看一组实验结果(静态场景的图像拼接):左图......
  • go语言编写算法
    1、冒泡排序//冒泡排序a:=[]uint8{9,20,10,23,7,22,88,102}fori:=0;i<len(a);i++{fork:=i+1;k<(len(a)-i);k++{ifa[i]>a[k]{a[i],a[k]=a[k],a[i]}}......
  • 简单易学的机器学习算法——K-Means算法
    一、聚类算法的简介  聚类算法是一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。聚类算法与分类算法最大的区别是:聚类算法是无监督的学习算法,而分类算法属于监督的学习算法。  在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似......