Wide和Deep模型

简介: Wide和Deep模型

1. 点击率预估简介

点击率预估是对每次广告点击情况作出预测,可以输出点击或者不点击,也可以输出该次点击的概率,后者有时候也称为pClick.

  • 点击率预估模型需要做什么?
    点击率预估问题就是一个二分类的问题,在机器学习中可以使用逻辑回归作为模型的输出,其输出的就是一个概率值,我们可以将机器学习输出的这个概率值认为是某个用户点击某个广告的概率。
  • 点击率预估与推荐算法有什么不同?
    广告点击率预估是需要得到某个用户对某个广告的点击率,然后结合广告的出价用于排序;而推荐算法很多大多数情况下只需要得到一个最优的推荐次序,即TopN推荐的问题。当然也可以利用广告的点击率来排序,作为广告的推荐。

2、Wide & Deep模型

Memorization 和 Generalization是推荐系统很常见的两个概念。

其中Memorization指的是通过用户与商品的交互信息矩阵学习规则, 而Generalization则是泛化规则。

我们前面介绍的FM算法就是很好的Generalization的例子,它可以根据交互信息学习到一个比较短的矩阵V VV,其中v i v_{i}vi储存着每个用户特征的压缩表示(embedding),而协同过滤与SVD都是靠记住用户之前与哪些物品发生了交互从而推断出的推荐结果,这两者推荐结果当然存在一些差异,我们的Wide&Deep模型就能够融合这两种推荐结果做出最终的推荐,得到一个比之前的推荐结果都好的模型。

可以说Memorization趋向于更加保守,推荐用户之前有过行为的items。相比之下,generalization更加趋向于提高推荐系统的多样性(diversity)。Memorization只需要使用一个线性模型即可实现,而Generalization需要使用DNN实现。

下面是wide&deep模型的结构图,由左边的wide部分(一个简单的线性模型),右边的deep部分(一个典型的DNN模型)。

wide模型:其实就是 lr 加上 人工构造得交叉特征, 受限与训练数据,wide模型无法实现训练数据中未曾出现过得泛化。

deep模型介绍:像FM,和dnn这种embedding类得模型,可以通过学习到得低维稠密向量实现模型得泛化能力,包括可以实现对未见过得内容进行泛化推荐。但是当 query-item矩阵比较稀疏得时候,模型会过分泛化,推荐出很多无相关得内同,准确性得不到保证。

  • 如何理解Wide部分有利于增强模型的“记忆能力”,Deep部分有利于增强模型的“泛化能力”?
  • wide部分是一个广义的线性模型,输入的特征主要有两部分组成,一部分是原始的部分特征,另一部分是原始特征的交互特征(cross-product transformation),对于交互特征可以定义为: image.png 这个式子什么意思读者可以自行找原论文看看,大体意思就是两个特征都同时为1这个新的特征才能为1,否则就是0,说白了就是一个特征组合。
  • 对于wide部分训练时候使用的优化器是带L 1 L_1L1正则的FTRL算法(Follow-the-regularized-leader),而L1 FTLR是非常注重模型稀疏性质的,也就是说W&D模型采用L1 FTRL是想让Wide部分变得更加的稀疏,即Wide部分的大部分参数都为0,这就大大压缩了模型权重及特征向量的维度。**Wide部分模型训练完之后留下来的特征都是非常重要的,那么模型的“记忆能力”就可以理解为发现"直接的",“暴力的”,“显然的”关联规则的能力。**例如Google W&D期望wide部分发现这样的规则:用户安装了应用A,此时曝光应用B,用户安装应用B的概率大。Deep部分是一个DNN模型,输入的特征主要分为两大类,一类是数值特征(可直接输入DNN),一类是类别特征(需要经过Embedding之后才能输入到DNN中),Deep部分的数学形式如下: image.png 我们知道DNN模型随着层数的增加,中间的特征就越抽象,也就提高了模型的泛化能力。**对于Deep部分的DNN模型作者使用了深度学习常用的优化器AdaGrad,这也是为了使得模型可以得到更精确的解。

Wide部分与Deep部分的结合

W&D模型是将两部分输出的结果结合起来联合训练,将deep和wide部分的输出重新使用一个逻辑回归模型做最终的预测,输出概率值。联合训练的数学形式如下: image.png

Tensorflow内置的WideDeepModel

全局实现

tf.keras.experimental.WideDeepModel(
    linear_model, dnn_model, activation=None, **kwargs
)

这一步很容易看出来就是将linear_model与dnn_model拼接在了一起,对应于Wide-Deep FM中的最后一步。比如我们可以将linear_model与dnn_model做一个最简单的实现

linear_model = LinearModel()
dnn_model = keras.Sequential([keras.layers.Dense(units=64),
                             keras.layers.Dense(units=1)])
combined_model = WideDeepModel(linear_model, dnn_model)
combined_model.compile(optimizer=['sgd', 'adam'], 'mse', ['mse'])
# define dnn_inputs and linear_inputs as separate numpy arrays or
# a single numpy array if dnn_inputs is same as linear_inputs.
combined_model.fit([linear_inputs, dnn_inputs], y, epochs)
# or define a single `tf.data.Dataset` that contains a single tensor or
# separate tensors for dnn_inputs and linear_inputs.
dataset = tf.data.Dataset.from_tensors(([linear_inputs, dnn_inputs], y))
combined_model.fit(dataset, epochs)
linear_model = LinearModel()
linear_model.compile('adagrad', 'mse')
linear_model.fit(linear_inputs, y, epochs)
dnn_model = keras.Sequential([keras.layers.Dense(units=1)])
dnn_model.compile('rmsprop', 'mse')
dnn_model.fit(dnn_inputs, y, epochs)
combined_model = WideDeepModel(linear_model, dnn_model)
combined_model.compile(optimizer=['sgd', 'adam'], 'mse', ['mse'])
combined_model.fit([linear_inputs, dnn_inputs], y, epochs)

4. 深度学习推荐系统的发展

Wide&Deep模型在深度学习发展中起到了非常重要的作用,从下图中我们就可以看到它对后续模型发展的一个影响。

最后。如果文章中有不足之处,请务必指出,一定迅速改正。谢谢

相关文章
|
机器学习/深度学习 搜索推荐 算法
【王喆-推荐系统】模型篇-(task5)wide&deep模型
Wide&Deep是工业界中有巨大影响力的模型,如果直接翻译成中文是宽和深的模型,其模型结构如下所示:wide和deep让模型兼具逻辑回归和深度神经网络的特点。
2773 0
【王喆-推荐系统】模型篇-(task5)wide&deep模型
|
SQL 关系型数据库 MySQL
MySQL唯一约束(UNIQUE KEY)
MySQL唯一约束(UNIQUE KEY)
1466 0
|
10月前
|
人工智能 安全 调度
AI工程vs传统工程 —「道法术」中的变与不变
本文从“道、法、术”三个层面对比AI工程与传统软件工程的异同,指出AI工程并非推倒重来,而是在传统工程坚实基础上,为应对大模型带来的不确定性(如概率性输出、幻觉、高延迟等)所进行的架构升级:在“道”上,从追求绝对正确转向管理概率预期;在“法”上,延续分层解耦、高可用等原则,但建模重心转向上下文工程与不确定性边界控制;在“术”上,融合传统工程基本功与AI新工具(如Context Engineering、轨迹可视化、多维评估体系),最终以确定性架构驾驭不确定性智能,实现可靠价值交付。
1068 41
AI工程vs传统工程 —「道法术」中的变与不变
|
JavaScript 数据格式
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
2573 0
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
|
测试技术 数据库 uml
【软件工程与UML】第2章 用例图、用例文档、活动图 -- 系统的功能需求建模
【软件工程与UML】第2章 用例图、用例文档、活动图 -- 系统的功能需求建模
1738 0
【软件工程与UML】第2章 用例图、用例文档、活动图 -- 系统的功能需求建模
|
8月前
|
并行计算 监控 PyTorch
大模型应用:大模型算力优化方案:识别突破隐性瓶颈达到效能最大化.65
本文深度剖析大模型落地中“算力跑不满”的隐性瓶颈,从系统(CUDA/驱动/OS)、模型(注意力冗余、激活函数、权重稀疏)、数据(加载、分词、格式)三维度拆解,并提供量化评估方法与场景化优化方案(个人开发/企业推理/边缘部署),助力榨干硬件潜力。
988 5
|
12月前
|
搜索推荐 JavaScript 关系型数据库
基于用户评论分析挖掘的旅游景点推荐系统
本研究基于用户评论分析,构建个性化旅游景点推荐系统。融合自然语言处理与情感分析技术,挖掘游客真实偏好,结合Django、Vue.js与MySQL等技术实现系统开发,提升旅游决策效率与体验质量,推动旅游产业智能化发展。
|
机器学习/深度学习 自然语言处理 PyTorch
大语言模型工作原理和工作流程
大语言模型(Large Language Models,简称LLMs)是一类具有大量参数的深度学习模型,它们在自然语言处理(NLP)领域中,通过处理大量的文本数据来学习语言模式、语法和语义,从而理解和生成人类语言。
5329 2
|
固态存储 架构师 开发工具
|
自然语言处理 搜索推荐 关系型数据库
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
这篇文章是关于Elasticsearch全文搜索引擎的学习指南,涵盖了基本概念、命令风格、索引操作、分词器使用,以及数据的增加、修改、删除和查询等操作。
1325 0
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)