Wide & Deep
最近在参加一些比赛,在继续深入学习wide&Deep,这是之前学习的东西,先放这儿,复习一遍!
Wide&Deep模型是由单层的Wide部分和多层的Deep部分组成的混合模型。其中,Wide部分的主要作用是让模型具有较强的“记忆能力”;Deep部分的主要作用是让模型具有“泛化能力”,正是这样的结构特点,使模型兼具了逻辑回归和深度神经网络的优点-----能够快速处理并记忆大量历史行为特征,并且具有强大的表达能力,不仅在当时迅速成为业界争相应用的主流模型,而且衍生出了大量以Wide&Deep模型为基础结构的混合模型,影响力一直延续至今。
1.前言
具有非线形特征变换的广义线性模型被广泛用于大规模回归和稀疏输入的分类问题。通过一系列跨产品特征变换来记忆特征交互是有效且可解释的,而泛化则需要更多的特征工程工作。利用较少的特征工程,深度神经网络可以通过稀疏特征学习到的低维稠密向量生成更好的未知特征组合。然而,当用户-商品交互行为比较稀疏且排名较高时,有向量的深度神经网络会过拟合并且推荐不太相关的东西。
有两个概念非常重要,一个是记忆,一个是泛化。“记忆能力”可以被理解为模型直接学习并利用历史数据中物品或者特征的“共现频率”的能力。“泛化能力”可以被理解为模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。
推荐系统可以看作是一个搜索排名系统,其中输入查询是一组用户和上下文信息,输出是一个按顺序排列的物品列表。对于一个查询,推荐任务是在数据库中查找相关的物品,然后根据特定的目标(如单击行为或购买行为)对这些物品进行排序。
基于记忆的推荐通常更贴近主题,并且与用户已经执行的操作直接相关。与记忆相比,泛化倾向于提高推荐项目的多样性。
对于工业环境中的大规模在线推荐和排名系统,逻辑回归等广义线性模型因其简单、可扩展和可解释性而得到广泛应用。在本文中,我们提出了一个Wide&Deep的学习框架,通过联合训练一个线性模型组件和一个神经网络组件,在一个模型中实现记忆和泛化,如图所示。
2.Wide&Deep 模型框架
2.1 Wide部分
wide部分就是一个广义线性模型 y = w T + b y = w^T+b y=wT+b,输入主要由两部分,一部分是原始特征,另一部分是交互特征。
如图(左)所示。y是预测值, x = [ x 1 , x 2 , … , x d ] x = [x_1, x_2,…, x_d] x=[x1,x2,…,xd]是特征向量, w = [ w 1 w 2 , … , w d ] w = [w_1 w_2,…, w_d] w=[w1w2,…,wd]为模型参数,b为偏差。特征集包括原始输入特征和转换后的特征,最重要的转换之一是交叉乘积转换,定义为
ϕ k ( x ) = x i c k i , c k i ∈ ( 0 , 1 ) \phi_k(x) = x_ic^{ki} , c_{ki} \in(0,1) ϕk(x)=xicki,cki∈(0,1)
2.2 Deep部分
Deep部分是前馈神经网络,如图(右)所示。对于类别型特征,原始输入是特征字符串(例如,“语言=英语”)。这些稀疏的高维类别特征会先转换成低维稠密的实数向量,通常被称为嵌入向量。嵌入向量的维度通常通常在 o ( 10 ) o(10) o(10)到 o ( 100 ) o(100) o(100)的量级。随机初始化嵌入向量,然后在模型训练中最小化最终损失函数。这些低维稠密向量馈送到前向传递中的神经网络的隐藏层中。 具体来说,每个隐藏层执行以下计算:
a l + 1 = f ( W l a l + b l ) a^{l+1}=f(W^la^l+b^l) al+1=f(Wla