白话Wide Deep_推荐系统经典论文

文章目录

    • 1.1 简介
    • 1.2 基本概念
      • 1.2.1 线性特征和非线性特征
      • 1.2.2 稀疏向量和稠密向量
      • 1.2.3 模型的记忆能力和泛化能力
    • 1.3 提出Wide & Deep模型的背景
    • 1.4 Wide & Deep模型结构
      • 1.4.1 Wide模块
      • 1.4.2 Deep模块
      • 1.4.3 Wide & Deep 联合(joint)训练
    • 1.5 本人疑惑-讨论点
    • 参考资料

1.1 简介

​ Wide & Deep是由谷歌APP Stroe团队在2016年提出的关于CTR预测的经典模型,该模型实现简单,效果却非常好,因而在各大公司中得到了广泛应用,是推荐系统领域的经典模型!

原文地址:Wide & Deep Learning for Recommender Systems
团队:Google APP Store
发表时间:2016年

1.2 基本概念

1.2.1 线性特征和非线性特征

(1)线性特征

​ 线性特征是指特征之间的关系可以通过一条直线来表示的特征。在数学上,如果一个特征空间中的特征可以表示为输入特征的线性组合,那么这些特征就是线性特征。

​ 如:人的身高h和体重w两个特征,可以使用线性模型来进行拟合,即: w = a * h + b

常用的线性模型有: 线性回归、岭回归、套索回归、逻辑回归和线性 SVM

(2)非线性特征

​ 非线性特征是指特征之间的关系无法通过一条直线来表示的特征。在数学上,如果特征空间中的特征无法通过输入特征的线性组合来表示,那么这些特征就是非线性特征。

​ 如:比如对于二维特征空间,特征(x, y)的关系如果是圆形、椭圆形或其他曲线形状,则这些特征就是非线性特征。

常用的非线性模型有: 决策树、随机森林、支持向量机(通过核技巧来解决非线性问题)、神经网络

1.2.2 稀疏向量和稠密向量

(1)稀疏向量

​ 稀疏向量是指在向量中大部分元素为零(或接近零)的向量。换句话说,稀疏向量中只有少数几个非零元素,而其他元素都是零。

示例:中文字符的一级字库共3755个字,使用one-hot向量编码,则每个字都会使用一个3755维度的向量表示,假设第1个字是"中",则”中“的向量就表示为:[1, 0, 0, 0, 0, … , 0],除了第一个位置为1,其余位置全为0。这种向量就是一个稀疏向量!

(2)稠密向量

​ 稠密向量是指向量中大部分或所有元素都有非零值的向量。换句话说,稠密向量中的元素数量与向量的维度相当,没有或只有少量的零元素。

示例: 使用Embedding编码的词向量

1.2.3 模型的记忆能力和泛化能力

(1)记忆能力

​模型的记忆力可以理解为items(特征or商品)之间成对出现的一种学习能力,更为专业地说:记忆力是直接学习并利用历史数据中物品和特征的”共现频率“的能力!

​特征间的共现频率越高,则这对组合特征与标签结果的关联性就越大,则应该特征这种组合特征的推荐权重。

举例说明:有这样一种情况,安装了netflix APP的用户,如果浏览到了pandora APP,那么这个用户安装pandora APP的比例是1/10,此时记忆力强的模型就应该提高安装了netflix APP用户的pandora APP的曝光率!

​记忆力强的网络往往层数不多,因为深层网络,特征就会被深层处理,不断与其他特征进行交叉,从而导致深层网络的记忆力反而没有简单模型的记忆力强!

(2)泛化能力

​它的主要来源是特征之间的相关性以及传递性。有可能特征A和B直接和label相关,也可能特征A与特征B相关,特征B与label相关,这种就称为传递性。利用特征之间的传递性, 我们就可以探索一些历史数据当中很少出现的特征组合,从而获得很强的泛化能力。

​寻找特征间的隐形关系是深层神经网络的强项,神经网络可以通过多层特征交叉来挖掘各种特征间的各种关系,所以深层神经网络更利于提高模型泛化性。

​Embedding也能提高模型的泛化能力,因为它将特征抽象成隐向量,这些隐向量在训练过程中往往是可学习的。但Embedding也存在一些缺点,它可能因为 “数据长尾分布”,导致长尾的一些特征值无法被充分学习,器对应的Embedding向量就不太准备,这会造成模型的泛化过度!

长尾效应:在经济学中表示20%的产品带来了80%的收益;在推荐场景中,可以理解为20%的产品包含了80%的点击
在这里插入图片描述

1.3 提出Wide & Deep模型的背景

(1)在此之前,如何提高模型的记忆能力呢?

​ 通常是人观察到哪些特征具有强关联,然后组合这些特征,使模型具有”记忆性“。这种方式具有很大的缺点:

​ a. 这种特征工程需要耗费太多精力;

​ b. 种是强行让模型记忆这些组合特征的,所以对于未出现过的特征组合,则无法进行泛化。

(2)不同模型的优缺点

1)简单模型

​ 如:协同过滤、逻辑回归等简单模型能从历史数据中挖掘除 ”共现频率“ 高的组合特征,具有较强的记忆能力;

​ 缺点就是:泛化能力不足。

2)矩阵分解、基于embedding+深度神经网络的模型

​ 能够利用特征间的相关性和传递性去探索历史数据中未出现的特征组合,挖掘数据潜在的关联信息。优点就是:泛化能力强;

​ 缺点就是:对于某些特定场景(数据长尾分布,贡献矩阵稀疏高秩)很难学习低纬表示,从而造成过度泛化。

1.4 Wide & Deep模型结构

​ 模型的整体架构如下:
在这里插入图片描述
​ 左侧是Wide部分,右侧是Deep部分,中间是两者结合的部分!

​ 该模型通过简单的wide部分增强模型的记忆能力,通过Deep部分提高模型的泛化能力!

1.4.1 Wide模块

(1)模型前向传播部分
在这里插入图片描述
Wide部分是一个广义的线性模型,其数学含义如下:
y = W T X + b y=W^TX+b y=WTX+b其中的 y y y是输出的结果, W W W是权重向量, b b b是偏置,这两个都是可学习的。

​最为重要的是: X X X是特征,它是一个 d d d 维向量 X = [ x 1 , x 2 , . . . , x d ] X=[x_1, x_2,...,x_d] X=[x1,x2,...,xd],这里的 d d d 是特征数量 ,它主要包含两种特征(其实还有一些离散的id类特征数据,因为神经网络不喜欢这种高稀疏的离散id特征,而Wide部分擅长处理这种):一种是原始数据;另外一种是经过特征转化之后的特征。其中最为重要的一种转化形式就是交叉组合,交叉组合可以定义为如下形式:
ϕ ( X ) = ∏ i = 1 d x i c k i c k i ∈ { 0 , 1 } \phi(X)= \prod_{i=1}^d x^{c_{ki}}_i \qquad c_{ki} \in \{0,1\} ϕ(X)=i=1dxickicki{0,1}

其中 X X X 表示所有的特征, d d d 表示所有特征的个数, i i i 表示第i个特征, k k k 表示第 k k k 个特征组合, c k i c_{ki} cki 表示当第 i i i 个特征 x i x_i xi 属于第 k k k 个特征组合时,则为1;反之,为0。

举例说明: 假设我们的特征有:gender、age、name、address、language等,现有一个特征组合k=And(gender=female, language=en),即:当gender=female,且language=en时候,才为1。

(2)优化器

​ Wide部分的优化器不是传统的SGD梯度下降算法,而是采用 FTRL+L1正则化。FRPL的理论是非常复杂的,如果想详细了解,可以去搜索 “冯扬 在线最优化求解”。简而言之,FTRL是一种稀疏性好、精度有不错的随机梯度下降方法。 由于是随机梯度下降,当然可以做到来一个样本就训练一次,进而实现模型的在线更新。所以在四五年前,大部分公司还是线性模型为主的时代,FTRL凭借非常好的在线学习能力成为主流。

​ 说完FTRL后,再说L1正则化,L1和L正则化都是用来控制模型复杂度和防止过拟合的常见手段,而L1正则化有利于模型稀疏,至于为什么能使得模型稀疏,可详见博客:[算法面试]_01_L1和L2正则化,为什么L1正则化更容易导致稀疏?

​ 综上,使用 “ETRL+L1” 是为了让模型更为稀疏,直观地说,就是让大部分权重都为0,这样准备特征的时候就不用准备那么多0权重的特征了,这大大压缩了模型权重,也压缩了特征向量的维度。

(3)Wide部分为什么要稀疏

​ 稀疏性往往都会使得模型精度降低,所以Wide部分为什么要稀疏呢?肯定是特征向量维度太高,从而导致稀疏性成为了关键的考量
在这里插入图片描述
上图是原文中的特征选取图,采用了User Installed App 和ImpressionAPP两个id类特征进行交叉积转换!

​ 这篇文章是Google的应用商店团队Google Play发表的,不难猜测Google的工程师使用这个组合特征的意图,他们是想发现当前曝光app和用户安装app的关联关系,以充分发挥Wide部分的记忆能力,以此来直接影响最终的得分。

​ 但是两个id类特征向量进行组合,在维度爆炸的同时,会让原本已经非常稀疏的multihot特征向量,变得更加稀疏。正因如此,wide部分的权重数量其实是海量的。为了不把数量如此之巨的权重都搬到线上进行model serving,采用FTRL过滤掉哪些稀疏特征无疑是非常好的工程经验

(4)为什么后面的Deep部分不用稀疏性

​ 从上图可以看出,Deep部分的输入,要么是Age,#App Installs这些数值类特征,要么是已经降维并稠密化的Embedding向量,工程师们不会也不敢把过度稀疏的特征向量直接输入到Deep网络中。所以Deep部分不存在严重的特征稀疏问题,自然可以使用精度更好,更适用于深度学习训练的AdaGrad去训练。

1.4.2 Deep模块

​ Deep部分就是简单的DNN网络,如图所示:
在这里插入图片描述
它的输入是一个sparse的feature,可以简单理解成multihot的数组。这个输入会在神经网络的第一层转化成一个低维度的embedding,然后神经网络训练的是这个embedding。这个模块主要是被设计用来处理一些类别特征,比如说item的类目,用户的性别等等。

​ 和传统意义上的one-hot方法相比,embedding的方式用一个向量来表示一个离散型的变量,它的表达能力更强,并且这个向量的值是让模型自己学习的,因此泛化能力也大大提升。这也是深度神经网络当中常见的做法。

​ Deep部分在训练时是使用AdaGrad优化算法

1.4.3 Wide & Deep 联合(joint)训练

​ 单独讲了各个模块之后,合起来如下:
在这里插入图片描述
​ 它的数学表现形式如下:
P ( Y = 1 ∣ X ) = σ ( W w i d e T [ X , ϕ ( X ) ] + W d e e p T a ( l f ) + b ) P(Y=1|X)=\sigma(W^T_{wide}[X, \phi(X)] + W^T_{deep}a^{(l_f)}+b) P(Y=1∣X)=σ(WwideT[X,ϕ(X)]+WdeepTa(lf)+b) 很多细节从图难以看出来,但从公司看起来就很清晰了,Wide和Deep的合并是采用相加的方式进行合并的,然后输入到激活函数中,就可以得出预测结果了。

​ 另外,值得一提的是:论文特意强调了Wide模型和Deep模型是联合(Joint)训练的,与集成(Ensemble)是不同的,集成训练是每个模型单独训练,再将模型结果汇总。因此每个模型都会学的足够好的时候才会进行汇总,故每个模型相对较大。而对于Wide&Deep的联合训练而言,Wide部分只是为了补偿Deep部分缺失的记忆能力,它只需要使用一小部分的叉乘特征,故相对较小,联合训练是同时训练的

​ 自此,全文结束!

1.5 本人疑惑-讨论点

(1)关于训练

​ 原文说了在wide模块采用的是 “FTRL+L1” 优化的,但我看网络上面的代码都是采用的Adam。

参考资料

[1]【推荐算法】Wide&Deep模型 —— 谷歌曾经的主流推荐模型,在业界影响力巨大,综合记忆能力与泛化能力 https://www.bilibili.com/video/BV1UB4y1u7hk/p=4&share_source=copy_web&vd_source=d4dbbfda7d55ea74864c9d6cb3d38a76
[2] https://www.zhihu.com/tardis/zm/art/142958834?source_id=1005

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没有申请域名的情况下,用navicat远程连接我们的服务器的Mysql数据库

我们可以根据公网ip用shell来远程连接 首先我们打开自己买的服务器 例如你看这个,就是我们的公网IP 如果服务器里面没有安装mysql数据库的话,那么我们可以用一个轻量级的docker来安装数据库代替一下 我们用docker弄个轻量级的mysql5.7.36,…

NFS共享存储服务

一、NFS概述 NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 sun 公司开发。通过使用 NFS协议,客户机可以像访问本地目录一样访问远程 NFS 服务器中的共享资源。 NFS 也是 NAS存储设备必然支持的一种协议,但是因为没有用户认证机制&a…

【论文阅读——GTG-Shapley: Efficient and Accurate Participant Contribution Evaluation】

1. 文章来源 ACM Transactions on Intelligent Systems and Technology 学术论文,已出版 2. 主要贡献 提出了引导截断梯度Shapley(GTG-Shapley)方法来解决这一挑战。它使用梯度更新来重建FL模型以进行SV计算,而不是使用不同组合…

C语言 文件操作

目录 1. 什么是文件?2. 二进制文件和文本文件3. 文件的打开和关闭3.1 流和标准流3.1.1 流3.1.2 标准流 3.2 文件指针3.3 打开、关闭文件3.3.1 fopen - 打开文件3.3.2 fclose - 关闭文件 4. 文件的顺序读写4.1 fgetc - 从文件流获取一个字符4.2 fputc - 将一个字符写…

智能优化算法 | Matlab实现KOA开普勒优化算法(内含完整源码)

智能优化算法 | Matlab实现KOA开普勒优化算法(内含完整源码) 文章目录 智能优化算法 | Matlab实现KOA开普勒优化算法(内含完整源码)文章概述源码设计文章概述 智能优化算法 | Matlab实现KOA开普勒优化算法(内含完整源码) 源码设计 %% clear all clc N=25; % Number of s…

Spring的IOC和AOP机制?

我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂。 主要用到的设计模式有工厂模式和代理模式。 IOC就是典型的工厂模式,通过sessionfactory去注入…

stm32开发三、GPIO

部分引脚可容忍5V,容忍5V的意思是:可以在这个端口输入5V的电压,也认为是高电平 但是对于输出而言,最大就只能输出3.3V,因为供电就只有3.3V 具体哪些端口能容忍5V,可以参考一下STM32的引脚定义 不带FT的,就只…

机器学习(2)

目录 2-1泛化能力 2-2过拟合和欠拟合 2-3三大问题 2-4评估方法 2-5调参和验证集 2-6性能度量 2-7比较检验 2-1泛化能力 如何进行模型评估与选择? 2-2过拟合和欠拟合 泛化误差:在“未来”样本上的误差 经验误差:在训练集上的误差&am…

Elastic 将于 2024 年 5 月 25 日在上海举行线下 Meetup

2024 Elastic Meetup 上海站活动,由 Elastic、悦高软件、新智锦绣联合举办,现诚邀广大技术爱好者及开发者参加。 活动时间 2024 年 5 月 25 日 13:30-18:00 活动地点 中国上海 上海市黄浦区北京东路668号科技京城G座7楼 活动流程 13:30-14:00 入场 14…

设计一个游戏的基本博弈框架

设计一个游戏的基本博弈框架,玩家通过操作改变某个数值,这个数值的变动会引发一系列实时变化,并且当这些数值累计到特定阈值时,会导致游戏中出现其他变化,可以分为以下几个步骤: 1. 确定游戏类型和主题 首…

从零创建一个vue2项目

标题从零创建一个vue2项目,项目中使用TensorFlow.js识别手写文字 npm切换到淘宝镜像 npm config set registry https://registry.npm.taobao.org安装vue/cli -g npm install -g vue/cli检查是否安装成功 vue -V创建项目 vue create 项目名安装TensorFlow npm …

1689 ssm社区老人危机干预系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm社区老人危机干预系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主…

为什么很多计算机专业的同学毕业即失业❓

✅大部分计算机专业毕业生在就业时遇到困难,原因往往是多方面的,并非普遍情况,主要包括以下几点: 1.技能不匹配:学校所学知识可能与实际工作需求有一定差距,比如缺乏特定编程语言的深入掌握或实际项目经验。…

【Docker】docker 镜像如何push到私有docker仓库

文章目录 一、 网址解析对于Linux和macOS系统:对于Windows系统: 二、 镜像push 一、 网址解析 希望 registry.meizu.com 能够解析到内网IP地址(例如10.128.17.157),您可以通过修改主机的 hosts 文件来实现。 hosts 文…

【机器学习】机器学习与人工智能融合新篇章:自适应智能代理在多元化复杂环境中的创新应用与演进趋势

🔒文章目录: 💥1.引言 🚋1.1 机器学习与人工智能的发展背景 🚌1.2 自适应智能代理的概念与重要性 🚐1.3 研究目的与意义 ☔2.自适应智能代理的关键技术 🛣️2.1 环境感知与信息处理技术 …

【网络知识】光猫、路由器 和 交换机 的作用和区别?

1.光猫如下: 光猫:将光纤的光信号转换为数字信号。 2.路由器如下: 路由器上的 WAN 口 是黄色,用于连接外部网络,比如:光猫出来的线。 黄色隔壁三个白灰色接口为LAN口,负责内网,比如…

C# WinForm —— 14 CheckedListBox 复选列表框介绍

1. 简介 类似 ListBox,提供项的列表,区别就是 CheckedListBox 每一个项前面有个复选框 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 ckl 开头BackColor背景颜色BoderStyle边框样式:无、FixedSingle、F…

SqlServer2016安装

1、下载 下载地址: https://www.microsoft.com/en-us/server-cloud/products/sql-server-2016/ 或者 MSDN, 我告诉你 - 做一个安静的工具站 开发版下载地址:https://myprodscussu1.app.vssubscriptions.visualstudio.com/downloads KB2919442下载地址…

Centos7 配置 DNS服务器

Centos 7 配置DNS服务器 环境描述: 一台服务器和一台用于测试的客户机 服务器IP:192.168.200.132 客户机IP:192.168.200.143 服务器配置 yum install bind bind-utils -y #安装软件包vim /etc/named.conf //编辑named主配置文件listen-on p…

【云原生】Kubeadm搭建K8S

一、部署Kubernetes 实验环境 服务器主机名IP地址主要组件k8s集群master01 etcd01master01192.168.10.100kube-apiserver kube-controller-manager kube-schedular etcdk8s集群node01 etcd02node01192.168.10.101kubelet kube-proxy docker flannelk8s集群node02 etcd03nod…