推荐系统模型演化

LR-->GBDT+LR

FM-->FFM-->GBDT+FM|FFM

FTRL-->GBDT+FTRL

Wide&DeepModel (Deep learning era)

将从以下3方面进行模型分析:

1.why(模型设计背后的原理)

2.how(具体怎么设计,如何应用)

3.discussion(模型讨论)

Wide&Deep

  • why

Memorization 和 Generalization

假如你设计了一个外卖推荐系统gugu,用户睡觉醒来需要点个外卖,推荐系统推荐给用户了一个烤肉饭,用户如果购买了就标记为1,否则为0(说明不是一个好的推荐)。点击率预估就是衡量推荐系统的一个线下指标。

wide(memorization)

​ 那如何对用户合适的商品呢,我们需要记住用户的爱好。所以,你设计了几个相关的特征,用一个简单的线性模型学习这些特征的权重组合,模型会预测对特定产品的点击概率, gugu2.0上线了。一段时间后,用户吃腻了,需要换个口味,但是模型只记住了特定的模式。对一些训练集中未出现的组合特征,由于模型没有见过,记忆中没有关于这个特征的信息,导致模型单一,用户就会不满意。

deep(generalization)

​ 为了推荐一些新的食物而且和用户之前点的食物相关,但是要口味不一样。模型需要能都捕捉到食物之间的内在联系,普通的离散特征无法满足这一要求,embedding引入了低维稠密向量表示离散特征的方法,相似的食物在embedding的一些维度上可能是一样的。比如口水鸡和椒麻鸡,经过embedding用4个维度[鸡肉,辣,麻,甜]表示

[0.52,0.23,0.312,0.002] [0.52,0.23,0.45,0.002]

使用embedding后的稠密向量,可以充分挖掘不同食物的相似性,可以做出新的合理的推荐,使用前馈神经网络进行学习,对于没有见过的特征,由于深度学习的泛化能力,模型也可以做出不错的预测。但是你发现模型会过度泛化,当用户的行为比较稀疏时,gugu会推荐一些相关性较小的食物。

wide+deep

​ 为什么不同时进行memorization和generalization呢?Wide&Deep联合线性模型和深度模型,利用两个模型的优点进行联合训练。

  • how

input

wide: 包括sparse类型的特征以及cross类型的特征等。原始输入特征和手动交叉特征

deep: 稠密特征,包括real value类型的特征以及embedding后特征

training

wide: \(y=wx+b\)

deep: \(a^{(l+1)}=f(w^{(l)}a^{(l)}+b^{(l)})\)

joint: \(P(Y=1 | \mathbf{x})=\sigma\left(\mathbf{w}_{w i d e}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}_{d e e p}^{T} a_{f}^{\left(l_{f}\right)}+b\right)\)

Wide部分用FTRL+L1来训练;Deep部分用AdaGrad来训练。 使用BP算法采用joint train的方式训练。

  • discussion

1.利用wide和deep组合,wide手动交叉特征,deep对离散进行embedding

2.对wide部分进行改进,自动化交叉特征,DeepFM,DCN

3.embedding在线训练得到,可否离线预训练

4.deep部分进行改进,AFM

离散值低阶vector-wise交互;连续值高阶bit-wise交互
vector-wise和bit-wise文末有解释

DeepFM

连续值离散化,低阶vector-wise组合,高阶bit-wise组合

DCN

  • why

FM可以自动组合特征,但也仅限于二阶叉乘。告别人工组合特征,并且自动学习高阶的特征组合呢

\(x1x2x3\)

  • how

拟合残差
\[
\mathbf{x}_{l+1}=\mathbf{x}_{0} \mathbf{x}_{l}^{T} \mathbf{w}_{l}+\mathbf{b}_{l}+\mathbf{x}_{l}=f\left(\mathbf{x}_{l}, \mathbf{w}_{l}, \mathbf{b}_{l}\right)+\mathbf{x}_{l}
\]

为什么work?
\[
\boldsymbol{x}_{1}=\boldsymbol{x}_{0} \boldsymbol{x}_{0}^{T} \boldsymbol{w}_{0}+\boldsymbol{x}_{0}=\left[\begin{array}{c}{x_{0,1}} \\{x_{0,2}}\end{array}\right]\left[x_{0,1}, x_{0,2}\right]\left[\begin{array}{c}{w_{0,1}} \\{w_{0,2}}\end{array}\right]+\left[\begin{array}{c}{x_{0,1}} \\{x_{0,1}}\end{array}\right]=\left[\begin{array}{c}{w_{0,1} x_{0,1}^{2}+w_{0,2} x_{0,1} x_{0,2}+x_{0,1}} \\{w_{0,1} x_{0,2} x_{0,1}+w_{0,2} x_{0,2}^{2}+x_{0,2}}\end{array}\right]
\]

\[
\begin{aligned}\boldsymbol{x}_{2} &=\boldsymbol{x}_{0} \boldsymbol{x}_{1}^{T} \boldsymbol{w}_{1}+\boldsymbol{x}_{1} \\&=\left[\begin{array}{l}{w_{1,1} x_{1,1}^{2}+w_{1,2} x_{1,1} x_{1,2}+x_{1,1}} \\{w_{1,1} x_{1,2} x_{1,1}+w_{1,2} x_{1,2}^{2}+x_{1,2}}\end{array}\right]\end{aligned}
\]

  • discussion
  1. 显示的高阶特征组合,特征组合阶数随着网络深度增加而增加

  2. 复杂度线性增长,相比DNN更快

  3. 利用最后的高阶组合特征,实际高层特征组合已经包含了低层的组合,考虑单层的组合引入最后的计算

  4. 特征交互还是bit-wise,对模型记忆能力提升是否有帮助

  5. 是否真的学到了高阶特征交互?输出是输入的标量乘积

连续值离散化,高阶bit-wise组合

xDeepFm

  • why

传统特征工程缺点:

1.好的特征需要专家知识

2.大数据量下无法无法手动交叉特征

3.手动交叉特征的无法泛化

FM对所有特征组合,引入噪声;FNN、PNN聚焦于高阶特征,忽略了低阶特征;

DNN学习高阶特征交互,但是学习到特征交互是隐含的,bit-wise级的,那么DNN是否真的有效在高阶特征处理上?CIN被设计在vector-wise级进行学习高阶特征

embedding: 不同样本的长度不同,但embedding维度是一样的

隐式高阶特征:bit-wise

显示高阶特征交互: DCN,输出受限于和x0的交互、bit-wise

CIN(Compressed Interaction Network(CIN))

DCN没有有效的学习到高阶特征交互,输出是x0的标量乘积
\[
\begin{aligned}
\mathrm{x}_{i+1} &=\mathrm{x}_{0} \mathrm{x}_{i}^{T} \mathrm{w}_{i+1}+\mathrm{x}_{i} \\
&=\mathrm{x}_{0}\left(\left(\alpha^{i} \mathrm{x}_{0}\right)^{T} \mathrm{w}_{i+1}\right)+\alpha^{i} \mathrm{x}_{0} \\
&=\alpha^{i+1} \mathrm{x}_{0}
\end{aligned}
\]
但是标量并不意味着线性!!!

  • how

bit-wise到vector-wise

显示交互

复杂度非指数级增长
\[
\mathrm{X}_{h, *}^{k}=\sum_{i=1}^{H_{k-1}} \sum_{j=1}^{m} \mathrm{W}_{i j}^{k, h}\left(\mathrm{X}_{i, *}^{k-1} \circ \mathrm{X}_{j, *}^{0}\right)
\]

取前一层的\(H_{k-1}\)的个vector,与输入层的 个vector,进行两两Hadamard乘积运算,得到\(H_{k-1}*m\)个 vector,然后加权求和

层的不同vector区别在于,对这\(H_{k-1}*m\)个 vector 求和的权重矩阵不同。 \(H_k\)即对应有多少个不同的权重矩阵\(W^k\)

1.为什么做Hadamard积

保持维度不变,做到vector-wise级交互

2.vector-wise交互

网络的每一层计算是以embedding向量的方式进行哈达玛积,保持embedding的结构

3.每一层的输出由当前输入和隐状态共同决定,类RNN

4.类CNN(装饰)

sum pooling 有效性:\(p_{i}^{k}=\sum_{j=1}^{D} \mathrm{X}_{i, j}^{k}\)

当只有一层,sum pooling就是两两向量的内积之和,降为FM

组合

\[
\hat{y}=\sigma\left(\mathbf{w}_{\text {linear}}^{T} \mathbf{a}+\mathbf{w}_{d n n}^{T} \mathbf{x}_{d n n}^{k}+\mathbf{w}_{\operatorname{cin}}^{T} \mathbf{p}^{+}+b\right)
\]
线性单元、DNN、CIN;记忆、泛化、记忆+泛化

1.CIN如何显示的执行特征交互

2.必须组合显示和隐式表达吗

3.xDeepFm参数设置影响

  • discussion

1.特征交叉利用稠密向量进行,是否存在一个网络进行离散高阶向量级特征交互

2.交互深度改进,残差,全局信息观

连续值离散化,高阶bit-wise组合,CIN高阶vector-wise组合

bit-wise VS vector-wise

假设隐向量的维度为3维,如果两个特征(对应的向量分别为(a1,b1,c1)和(a2,b2,c2)的话)在进行交互时,交互的形式类似于f(w1 * a1 * a2,w2 * b1 * b2 ,w3 * c1 * c2)的话,此时我们认为特征交互是发生在元素级(bit-wise)上。如果特征交互形式类似于 f(w * (a1 * a2 ,b1 * b2,c1 * c2))的话,那么我们认为特征交互是发生在特征向量级(vector-wise)。
\(x1=(a1,b1,c1),x2=(a2,b2,c2)\)

bitwise: \(f(w1*a1*a2,w2*a2*b2,w3*a3*b3)\)

vector-wise: \(f(w(a1*a2,a2*b2,a3*b3))\)

explicitly VS implicitly

显式的特征交互和隐式的特征交互。以两个特征为例xi和xj,在经过一系列变换后,我们可以表示成 wij * (xi * xj)的形式,就可以认为是显式特征交互,否则的话,是隐式的特征交互。

reference:

https://zhuanlan.zhihu.com/p/55234968

Cheng H T, Koc L, Harmsen J, et al. Wide & deep learning for recommender systems[C]//Proceedings of the 1st workshop on deep learning for recommender systems. ACM, 2016: 7-10.

Guo H, Tang R, Ye Y, et al. DeepFM: a factorization-machine based neural network for CTR prediction[J]. arXiv preprint arXiv:1703.04247, 2017.

Wang R, Fu B, Fu G, et al. Deep & cross network for ad click predictions[C]//Proceedings of the ADKDD'17. ACM, 2017: 12.

Lian J, Zhou X, Zhang F, et al. xdeepfm: Combining explicit and implicit feature interactions for recommender systems[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2018: 1754-1763.

wide&deep模型演化的更多相关文章

  1. Wide&Deep 模型学习教程

    WDL 学习教程 推荐系统+WDL 教学视频: https://www.bilibili.com/video/av29905315/ WDL 模型介绍: https://blog.csdn.net/g ...

  2. 深度学习在美团点评推荐平台排序中的应用&& wide&&deep推荐系统模型--学习笔记

    写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运 ...

  3. 深度排序模型概述(一)Wide&Deep/xDeepFM

    本文记录几个在广告和推荐里面rank阶段常用的模型.广告领域机器学习问题的输入其实很大程度了影响了模型的选择,因为输入一般维度非常高,稀疏,同时包含连续性特征和离散型特征.模型即使到现在DeepFM类 ...

  4. 巨经典论文!推荐系统经典模型Wide & Deep

    今天我们剖析的也是推荐领域的经典论文,叫做Wide & Deep Learning for Recommender Systems.它发表于2016年,作者是Google App Store的 ...

  5. 【RS】Wide & Deep Learning for Recommender Systems - 广泛和深度学习的推荐系统

    [论文标题]Wide & Deep Learning for Recommender Systems (DLRS'16) [论文作者] Heng-Tze Cheng, Levent Koc, ...

  6. 推荐系统系列(六):Wide&Deep理论与实践

    背景 在CTR预估任务中,线性模型仍占有半壁江山.利用手工构造的交叉组合特征来使线性模型具有"记忆性",使模型记住共现频率较高的特征组合,往往也能达到一个不错的baseline,且 ...

  7. Wide & Deep Learning Model

    Generalized linear models with nonlinear feature transformations (特征工程 + 线性模型) are widely used for l ...

  8. Wide & Deep的OneFlow网络训练

    Wide & Deep的OneFlow网络训练 HugeCTR是英伟达提供的一种高效的GPU框架,专为点击率(CTR)估计训练而设计. OneFlow对标HugeCTR搭建了Wide & ...

  9. Wide & Deep Learning for Recommender Systems

    Wide & Deep Learning for Recommender Systems

随机推荐

  1. 在WPF中绘制多维数据集

    原文 https://stuff.seans.com/2008/08/13/drawing-a-cube-in-wpf/ 是时候使用WPF绘制一个简单的3D对象了.作为WPF中3D图形的快速介绍,让我 ...

  2. 如何创建一个非常酷的3D效果菜单

    http://www.cocoachina.com/ios/20150603/11992.html 原文地址在这里.原文 去年,读者们投票选出了Top5的iOS7最佳动画,当然也很想看到有关这些动画如 ...

  3. c++中单引号和双引号的区别

    在C++中单引号表示字符,双引号表示字符串. 例如 :在定义一个数组的时候string a [5]={"nihao","henhao","good&q ...

  4. 21Hash算法以及暴雪Hash

    一:哈希表简介 哈希表是一种查找效率极高的数据结构,理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值(key),然后在常量时间内 ...

  5. python selenium 测试 LOG

    1.首先在根目录中新建一个Logs文件夹,写入文件 2.在framework文件夹中写入logger.py 3.在testsuits文件夹中写入test_log.py logger.py # _*_ ...

  6. 2018年NOIP普及组复赛题解

    题目涉及算法: 标题统计:字符串入门题: 龙虎斗:数学题: 摆渡车:动态规划: 对称二叉树:搜索. 标题统计 题目链接:https://www.luogu.org/problem/P5015 这道题目 ...

  7. Laravel实现找回密码及密码重置的例子

    https://mp.weixin.qq.com/s/PO5f5OJPt5FzUZr-7Xz8-g Laravel实现找回密码及密码重置功能在php实现与在这里实现会有什么区别呢,下面我们来看看Lar ...

  8. C# 比较两张图片是否完全相同

    本文演示如何比较两张图片是否完全相同. (注意:如果是比较两张图片是否相似,则比较复杂,涉及到机器学习) 方法一:把图片保存到内存流中,然后转化成 Base64 字符串进行比较 using Syste ...

  9. Jenkins安装总结

    Jenkins官方文档说的安装步骤,http://jenkins.io/zh/doc/pipeline/tour/getting-started/ 相关安装资源可在官方文档下载 安装Jenkins之前 ...

  10. C#的循环语句(一)

    循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变) {循环体} for 格式: for(int i=1/*初始条件*/;0<=10 ...