Wide&Deep模型

一:wide&deep

正如其名字一样,模型是由单层的wide部分和多层的Deep部分组成的混合模型,其中wide部分主要作用是让模型具有较强的记忆能力,deep部分主要是让模型具有较强的泛化能力。这样的结构特点,使模型同时具有了逻辑回归和Dnn的优点–能够快速处理并记忆大量历史行为特征,并具有强大的表达能力。模型的结构如下:
在这里插入图片描述

二:记忆能力与泛化能力

(1)记忆能力
记忆能力可以被理解为模型直接学习并利用历史数据中物品或特征的 ‘共现频率’的能力。例如逻辑回归和系统过滤等模型就具体较强的记忆能力。由于这类模型结构简单,原始数据往往可以直接影响推荐结果,产生类似于“如果点击过A,就推荐B”的强规则推荐,就相当于模型记住了历史数据的分布特点,并利用这些记忆进行推荐。相反,对于多层神经网络来说,特征会被多层处理,不断与其他特征进行交叉,因此模型对某个强特征的记忆能力反而没这么好。
(2)泛化能力:
泛化能力可以理解为模型传递特征的相关性,发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力 。两个例子:矩阵分解之所以比协同过滤泛化能力强,因为矩阵分解隐向量这样的结构,使得数据稀疏的用户或物品也能生成隐向量,从而获得有数据支撑的推荐得分。二:深度神经网络通过特征的多次自动组合,能够深度发掘数据中的潜在的模式,甚至是非常稀疏的特征向量输入,也能得到较为稳定平滑的概率,这就是简单模型所缺乏的泛化能力。模型的详细结构:

在这里插入图片描述

三:Wide&Deep模型结构

模型的直接动机就是将wide 和deep融合。模型把单输入层的wide部分与embedding 层和多隐层组成的Deep部分链接起来,一起输入最终的输出层。单层的wide部分善于处理大量的稀疏的id类特征,deep部分利用神经网络表达能力强的特点,进行深层的特征交叉,挖掘藏在特征背后的数据模式,最终利用逻辑回归模型,将wide部分和deep部分结合起来,形成统一的模型。
Wide&Deep Learning
1,Wide部分
Wide部分就是基础的线性模型,表示为y=WX+b。X特征部分包括基础特征和交叉特征。交叉特征在wide部分很重要,可以捕捉到特征间的交互,起到添加非线性的作用。交叉特征可表示为:
在这里插入图片描述
Cki是一个布尔变量,如果第i个特征是第k个变换的一部分则为1,反之为0.对于二值特征,一个组合特征当原特征都为0的时候才会0(例如“性别=女”且“语言=英语”时,AND(性别=女,语言=英语)=1,其他情况均为0)。这捕获了二元特征之间的相互作用,并为广义线性模型增加了非线性。
2,deep部分
Deep部分就是个前馈网络模型。特征首先转换为低维稠密向量,维度通常O(10)-O(100)。向量随机初始化,经过最小化随时函数训练模型。激活函数采用Relu。前馈部分表示如下:
在这里插入图片描述
3,Wide&Deep联合训练
在联合模型中,Wide和Deep部分的输出通过加权方式合并到一起,并通过logistic loss function进行最终输出。对Wide&Deep模型的联合训练通过同时对输出向模型的wide和deep两部分进行梯度的反向传播(back propagating)来实现的,这其中应用了小批量随机优化(mini-batch stochastic optimization)的技术。在实验中,使用了FTRL(Follow-the-regularized-leader)算法以及使用L1正则化来优化wide部分的模型,并使用AdaGrad优化deep部分。

在这里插入图片描述
联合训练和模型集成要进行区分,他们有着以下两点区别:

1,训练方式。 集成模型的子模型部分是独立训练,只在inference阶段合并预测。而联合训练模型是同时训练同时产出的。
2,模型规模。集成模型独立训练,模型规模要大一些才能达到可接受的效果。而联合训练模型中,Wide部分只需补充Deep模型的缺点,即记忆能力,这部分主要通过小规模的交叉特征实现。因此联合训练模型的Wide部分的模型特征较小。
补充:为什么wide部分使用FTRL+L1正则化来训练。
这里简要介绍一下,你可以把FTRL当作一个稀疏性很好,精度又不错的随机梯度下降方法。由于是随机梯度下降,当然可以做到来一个样本就训练一次,进而实现模型的在线更新。所以在四五年前,大部分公司还是线性模型为主的时代,FTRL凭借非常好的在线学习能力成为主流。

说完了FTRL,再说L1正则化,参加过算法岗面试的同学可能都碰到过那个经典面试题“为什么L1正则化比L2正则化更容易产生稀疏解?”。问题的答案现在当然已经是显学了,但这里“稀疏”这个性质又冒出来了。也就是说FTRL with L1非常注重模型的稀疏性。这也就是问题的答案,W&D采用L1 FTRL是想让Wide部分变得更加稀疏。

再白话一点就是,L1 FTRL会让Wide部分的大部分权重都为0,我们准备特征的时候就不用准备那么多0权重的特征了,这大大压缩了模型权重,也压缩了特征向量的维度。

稀疏性不见得一直是一个好东西,它不管怎样都会让模型的精度有一定的损伤。肯定是特征向量维度过高导致“稀疏性”成为了关键的考量。这就涉及到Google Wide部分的特征选取了,在wide部分,Google团队选取了两个id类特征的乘积,这两个id类特征是:User Installed App 和 Impression App
但是两个id类特征向量进行组合,在维度爆炸的同时,会让原本已经非常稀疏的multihot特征向量,变得更加稀疏。正因如此,wide部分的权重数量其实是海量的。为了不把数量如此之巨的权重都搬到线上进行model serving,采用FTRL过滤掉哪些稀疏特征无疑是非常好的工程经验。
在这里插入图片描述

为什么Deep部分不特别考虑稀疏性的问题?

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

四:wide & deep模型的进化–deep$cross模型

在这里插入图片描述

模型设计的主要思路是使用corss网络代替原来的wide部分。设计cross网络的主要目的是增加特征之间的交互能力,使用多层交叉层(cross layer)对输入向量进行特征交叉,交叉网络由多个交叉层组成,假设第l层交叉层的输出向量为Xl,那么对于第L+1层交叉层输出向量X l+1为:
在这里插入图片描述
可视化结果如下:
在这里插入图片描述
可以看到,交叉层操作的二阶部分非常类似于PNN的外积操作,再次基础上增加了外积操作的权重向量wl,以及原输入向量xl和偏置向量bl,但交叉层在增加参数方面是比较克制,每一个仅增加了一个n维权重向量wl,并且在每一层均保留了输入向量,因此输入与输出的变化不会特别明显。cross网络在wide部分的基础之上进行特征的自动化交叉,避免了更多基于业务理解的人工特征组合。

六:wide & deep模型的优缺点

优势:
1,抓住了业务的本质特点,能够融合传统模型的记忆能力和深度神经网络的泛化能力
2,模型结构不复杂,比较容易在工程上实现训练和上线。
局限:wide & deep 部分特征还是需要人工进行特征赛选。cross网络的复杂度又较高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值