widedeep模型简介

news2024/11/16 3:13:41

wide&deep模型

  • 1.简介
  • 2.原理
    • 2.1 网络结构
  • 3. 稀疏密集特征
  • 4.API和子类方式实现

1.简介

Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中。wide and deep 模型的核心思想是结合线性模型的记忆能力(memorization)和 DNN 模型的泛化能力(generalization),在训练过程中同时优化 2 个模型的参数,从而达到整体模型的预测能力最优。

记忆(memorization)即从历史数据中发现item或者特征之间的相关性。

泛化(generalization)即相关性的传递,发现在历史数据中很少或者没有出现的新的特征组合。

相关论文链接

2.原理

2.1 网络结构

1500965e5896703dd49b541.png

Wide & Deep 模型通过以下方式结合了 LR 和 DNN:

  • 特征交叉:在 Wide 部分,可以显式地创建特征交叉项,这有助于模型学习特征间的组合效应。
  • 共享嵌入:在 Deep 部分,可以使用嵌入层来学习稀疏特征(如类别特征)的低维表示,这些嵌入表示可以捕捉非线性关系。
  • 联合训练:Wide 部分和 Deep 部分在模型的输出层之前进行合并,共享相同的输出,如预测概率。这样,两部分可以同时训练,共同学习。
  • 权重平衡:通过正则化和超参数调整,可以平衡 Wide 部分和 Deep 部分对最终预测的贡献。

为什么可以看作 LR + DNN:

  • 模型结构:Wide & Deep 模型的结构可以看作是将一个线性模型(LR)和一个深度学习模型(DNN)结合在一起。
  • 学习特征:LR 部分负责学习线性特征和一阶交互,而 DNN 部分负责学习高阶非线性特征。
  • 训练过程:在训练过程中,LR 和 DNN 部分可以独立更新,但最终的损失函数是联合的,这意味着它们共同贡献于模型的预测。

优点:

  • 灵活性:结合了线性模型的解释性和深度学习的自动特征学习能力。
  • 性能:在许多任务中,Wide & Deep 模型比单独使用 LR 或 DNN 表现更好。
  • 泛化能力:通过结合两种类型的模型,可以提高对不同类型特征的泛化能力。

Wide & Deep 模型是一种强大的模型架构,适用于需要同时考虑线性关系和复杂非线性关系的任务,特别是在大规模的推荐系统和分类问题中。

3. 稀疏密集特征

150096513fa11d119bb20b7.png

模型中把密集特征和做了one-hot 编码的稀疏特征拼接后作为 deep 模型的输入,Embeddings 表示one-hot 编码处理,把稀疏特征中的user installed App和 Impresson叉乘后作为wide模型的输入。

离散值特征:只能从N个值中选择一个,比如性别, 只能是男女
叉乘可以用来精确刻画样本, 实现记忆效果。

  • 优点:
    有效, 广泛用于工业界, 比如广告点击率预估(谷歌, 百度的主要业务), 推荐算法.
  • 缺点:
    需要人工设计.
    叉乘过度, 可能过拟合, 所有特征都叉乘, 相当于记住了每一个样本.
    泛化能力差, 没出现过就不会起效果

密集特征:每个词都可以用一个密集向量表示, 那么词和词之间就可以计算距离
使用Word2vec工具可以方便的将词语转化为向量.

  • 优点:
    带有语义信息, 不同向量之间有相关性.
    兼容没有出现过的特征组合.
    更少人工参与
  • 缺点:
    过度泛化, 比如推荐不怎么相关的产品.

在机器学习和数据科学中,密集(Dense)和稀疏(Sparse)特征的联合使用可以带来多方面的好处,尤其是在处理现实世界的数据集时。以下是一些主要优点:

  • 更全面的模型:密集特征通常表示连续的数值数据,而稀疏特征通常表示分类数据或离散值。将两者结合可以更全面地捕捉数据的不同方面。
  • 特征交叉:在某些模型中,如宽深模型(Wide & Deep Model),可以显式地创建密集和稀疏特征的交叉项,这有助于模型学习更复杂的模式。
  • 利用线性和非线性关系:密集特征可以通过线性模型(如逻辑回归)来学习数据中的线性关系,而稀疏特征可以通过深度学习模型来学习非线性关系。
  • 提高模型性能:结合密集和稀疏特征可以帮助模型更好地泛化,提高模型在分类、回归或其他预测任务中的性能。
  • 特征工程的灵活性:在特征工程过程中,可以灵活地选择和转换特征,以适应不同的模型需求。
    稀疏数据的高效存储:稀疏特征通常使用特殊的数据结构(如稀疏矩阵)来存储,这可以显著减少内存使用并提高计算效率。
  • 处理大规模数据集:在处理大规模数据集时,稀疏特征可以显著减少数据集的大小,使得模型训练更加高效。
  • 更好的解释性:密集特征的线性模型通常更容易解释,而稀疏特征的非线性模型可以揭示数据中的复杂模式。两者的结合可以提供更好的模型解释性。
  • 适应不同类型的数据:不同的数据集可能天然地包含密集或稀疏特征。通过联合使用,模型可以适应不同类型的数据。
  • 提高推荐系统的效果:在推荐系统中,密集特征可以表示用户或物品的连续属性,而稀疏特征可以表示用户的分类偏好。结合两者可以提供更准确的推荐。
    总之,密集和稀疏特征的联合使用可以使得模型更加健壮和灵活,能够处理更广泛的应用场景,并提高模型的整体性能。在实际应用中,选择合适的特征组合和模型架构是实现最佳效果的关键。

4.API和子类方式实现

使用tensorflow框架构建wide&deep模型参考代码:


# tensorflow写法1:函数式API
# 每一层结构都可以当成一个函数去使用.
input = keras.layers.Input(shape=x_train.shape[1:])
hidden1 = keras.layers.Dense(30, activation='relu')(input)
hidden2 = keras.layers.Dense(30, activation='relu')(hidden1)

# wide和deep模型用相同的输入数据
concat = keras.layers.concatenate([input, hidden2])
output = keras.layers.Dense(1)(concat)
# 包装成一个model
model = keras.models.Model(inputs=[input], outputs=output)

# tensorflow写法2:子类api
class WideDeepModel(keras.models.Model):
    def __init__(self):
        """定义模型的层次"""
        super().__init__()
        self.hidden1 = keras.layers.Dense(30, activation='relu')
        self.hidden2 = keras.layers.Dense(30, activation='relu')
        self.output_layer = keras.layers.Dense(1)
         
    def call(self, input):
        """完成模型的正向传播"""
        hidden1 = self.hidden1(input)
        hidden2 = self.hidden2(hidden1)
        # 拼接
        concat = keras.layers.concatenate([input, hidden2])
        output = self.output_layer(concat)
        return outpu
model = WideDeepModel()
# 或者使用keras构造一个model
# model = keras.Sequential([WideDeepModel(),])

# 使用两种方式model构造好后构造并查看model结构
model.build(input_shape=(None, 8))
model.summary()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1688503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VBA_MF系列技术资料1-615

MF系列VBA技术资料1-615 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-0…

Ubuntu切换内核版本

#安装内核安装工具 sudo apt-get install software-properties-common sudo add-apt-repository ppa:cappelikan/ppa sudo apt-get update sudo apt-get install mainline#安装指定内核版本(有些版本并不能安装成功) mainline install 5.14.10#更新GRUB配置 sudo update-grub#查…

go mod模式下,import gitlab中的项目

背景 为了go项目能够尽可能复用代码,把一些公用的工具类,公用的方法等放到共用包里统一管理。把共用包放到gitlab的私有仓库中。 遇到的问题 通过https方式,执行go get报了错误。 通过ssh方式,执行go get报了错误。 修改配置&am…

Joomla 3.7.0 (CVE-2017-8917) SQL注入漏洞环境

1 漏洞概述 Joomla是一个基于PHP的内容管理系统(CMS),广泛应用于各类网站。2017年,Joomla 3.7.0版本被发现存在SQL注入漏洞(CVE-2017-8917),攻击者可以利用该漏洞对数据库进行未授权查询或操作…

副业树洞聊天项目/树洞倾诉/陪陪系统源码/树洞源码下载搭建

随着社会的发展和人们生活水平的提高,越来越多的人在面临心理压力、情感困扰或生活困境时,需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题,比如担心被他人知晓自己的隐私等,这就导致了人…

鸿蒙系统和安卓系统通过termux搭建Linux系统—Centos

目录 1. 前言 2. 效果图展示 3. 安装termux 4. 安装Centos系统 4.1 更换源 4.2 拉取镜像 4.3 启动centos 5.结尾 1. 前言 大家好,我是jiaoxingk 今天这篇文章让你能够在手机或者平板上使用Linux-Centos系统 让你随时随地都能操作命令行进行装13 2. 效果图展示…

【科普知识】伺服电机中的内置制动器

在工业自动化和机器人技术快速发展的今天,伺服电机作为核心驱动元件,其性能与功能直接影响整个系统的运行效率与稳定性。 近年来,一体化伺服电机技术不断融合创新,并逐步加入了许多新的硬件和软件的功能,为工业自动化领…

全域外卖是谁创办的公司?

全域外卖是谁创办的公司?这个问题是抽象的。正确的问法应该是全域外卖是谁研发的系统。 在了解全域外卖系统前,我们首先要了解什么是全域外卖,什么是全域团购。全域指的是多平台。当然这个平台是越多越好。实际上也可以理解为聚合外卖、聚合…

图数据库助力供应链柔性升级

导读 当今市场环境受短视频等流媒体影响,任何风险事件在社交网络中传播速度极其迅速,留给企业的反应时间按分秒计,传统供应链的年度计划面对剧烈变化的市场环境已失去意义。此外,受近年局势动荡的影响,市场需求和供应…

Unity 资源 之 限时免费的Lowpoly农场动物,等你来领!

Unity资源 之 Lowpoly farm animals 农村动物 前言资源包内容领取兑换码 前言 Unity 资源商店为大家带来了一份特别的惊喜——限时免费的农场动物资源!这是一个充满趣味和实用性的资源包。 资源包内容 在这个资源包中,你可以找到丰富多样的低地养殖动物…

VScode代码片段自动转图标

注:在VScode编辑器中,编辑html、vue等文件时,特定代码片段(token/xxx’等)自动转图标显示,按住“ctrl鼠标左键”还可跳转“https://icones.js.org/collections”,个人感觉干扰代码编写&#xff…

VMware 安装Windows 7 SP1

1.下载镜像 迅雷:ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/ 2.安装过程 自定义名字,点击【浏览】自定义安装路径 点击【浏览】,选择下载镜像的路径 结束啦~ Win…

详解http协议

什么是HTTP协议 定义 Http协议即超文本传送协议 (HTTP-Hypertext transfer protocol) 。 它定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向&am…

记录一个写SpringBoot中Hive数据可以正常提取但无法存到MySQL的bug

【背景】 我正在用SpringBoot框架写一个数据治理项目,目前所处阶段是将hive和hdfs中的元数据提取出来,存储到MySQL中,我的hive和hdfs上的数据存储在三台Linux服务器上(hadoop102-104),MySQL在我本地Window…

C语言常用的内存操作函数

在C语言中经常会操作内存中的数据,下面来介绍一下常用的一些内存操作函数。 memcpy memcpy用于从source的位置开始向后复制num个字节到destination的内存位置,其函数原型如下: //destination是目标地址,source是源地址&#xff…

想要学会做抖店,每天重复这些步骤就可以了!

大家好,我是电商糖果 有很多朋友店铺开好之后,不知道每天要干嘛。 只知道把产品上架,然后等着出单。 说实话这种情况的朋友不是一个,而是很多。 糖果做小店也有很多年了,也开了多家店铺,下面就来给大家…

论Promise在前端江湖的地位及作用

系列文章: 先撸清楚:并发/并行、单线程/多线程、同步/异步 论Promise在前端江湖的地位及作用 前言 上篇文章阐述了并发/并行、单线程/多线程、同步/异步等概念,这篇将会分析Promise的江湖地位。 通过本篇文章,你将了解到&#x…

算法刷题笔记 数的范围(C++实现)(二分法重要例题)

文章目录 题目描述题目思路题目代码(C)题目感想 题目描述 给定一个按照升序排列的长度为n的整数数组,以及q个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该…

Flutter 中如何优雅地使用弹框

日常开发中,Flutter 弹框(Dialog)是我们使用频率非常高的控件。无论是提示用户信息、确认用户操作,还是表单填写,弹框都能派上用场。然而,看似简单的弹框,实际使用起来却有不少坑和使用的技巧。…

轻松找回误删短信 | 超强安卓短信恢复神器

概括 我们都曾经历过不小心删除了重要消息,后来又后悔并认为可能无法恢复它们的情况。从技术上讲,该消息不会被删除;它会在您的 Android 手机上存储一段时间。 可以执行 Android 短信恢复,因为它需要一段时间才能从您的 Android…