ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深度学习推荐系统演化

2022-03-02 19:34:57  阅读:301  来源: 互联网

标签:Wide 演化 模型 Deep 学习 特征 深度 FM 向量


深度学习推荐系统演化[1]

Deep Crossing——微软2016

文献来源:https://www.kdd.org/kdd2016/papers/files/adf0975-shanA.pdf

简介

一般机器学习任务需要人工进行特征工程,提取出对任务最有效的特征,在互联网时代,这种方式变的不再可取,越来越多的特征给人工特征工程带来了巨大的麻烦。对于文本或者类别特征而言,最常用的方式是转换为one-hot编码,但这种编码方式很难适用具有于大规模特征的任务,经过one-hot编码的特征想要进行高阶的特征组合,将会产生更高维的特征。Deep Crossing模型能够自动进行特征交叉,而且在进行特征交叉时并不想传统方式那样进行简单的拼接或者是相乘。Deep Crossing模型对dense特征和sparse特征分开处理,下面介绍模型的具体细节。

模型结构

图1 Deep Crossing模型结构

Deep Crossing模型主要包含四个模块,分别是:Embedding Layer、Stacking Layer、Residual Unit和Scoring Layer。

Embedding Layer

该层用于将高维稀疏的特征向量映射到低维稠密的向量,具体的实现是用单层全连接神经网络。

\[X^{O}_{j}=max(\textbf{0},\textbf{W}_{j}X^{I}_{j}+\textbf{b}_{j}) \]

\(max()\)操作可以通过\(ReLU\)激活函数来实现。其中\(X^{I}_{j}\)是第\(j\)个输入特征,可以看出,每个特征都对应一个映射网络,它们之间的参数是独立的。
对于维度低于256的特征不需要进行转换,如图1中的Feature #2。

Stacking Layer

该层将Embedding Layer的输出拼接起来。

\[X^{O}=\left [ X^{O}_{0},X^{O}_{1},...,X^{O}_{K} \right ] \]

\(K\)表示输入特征数量。

Residual Unit

图2 Residual Unit结构

用公式表述为:

Scoring Layer

作为整个模型的输出,为了设计损失函数优化模型而存在的。

Wide&Deep——google2016

文献来源:https://arxiv.org/abs/1606.07792

模型结构

Wide&Deep模型示意图(点击放大)

Wide&Deep模型如上图所示:其中左侧部分为Wide模型,最右侧部分为Deep结构,Wide&Deep是二者的结合。下面分别介绍各个不同的部分

Wide

Wide部分是一个线性模型,用数学公式表示为\(y=w^{T} \times x+b\),\(y\)是模型的输出结果,\(x\)是输入特征,是一个向量:\(x=[x_{1},x_{2},...,x_{d}]\)。输入特征包含两部分,一种是原始数据包含的特征,另外一种是经过特征转化之后得到的特征。最重要的一种特征转化方式就是交叉组合,交叉组合可以定义成如下形式:

\[\phi _{k}(x)=\prod_{i=1}^{d}x^{c_{ki}}_{i} \quad c_{ki}\in \left \{ 0,1 \right \} \]

这里的\(c_{ki}\)是一个bool型的变量,表示的是第\(i\)个特征的第\(k\)种转化函数\(\phi _{k}\)的结果。由于使用的是乘积的形式,只有所有项都为真,最终的结果才是1,否则是0。比如"AND(gender=female,language=en)"这就是一个交叉特征,只有当用户的性别为女,并且使用的语言为英文同时成立,这个特征的结果才会是1;再比如,第二个组合特征为:“AND(user_installed_app=netflix, impression_app=pandora)”,只有当一条记录的user_installed_app为netflix和impression_app为pandora时该组合特征才为1 通过这种方式我们可以捕捉到特征之间的交互,以及为线性模型加入非线性的特征。

Deep

Deep部分的模型细节如下图所示,模型输入是全部特征,对于连续的特征(如用户年龄、安装的APP数量等),直接输入到Deep中;对于类别型的特征需要进行编码之后再输入到Deep中。

Wide&Deep模型细节

Wide&Deep

将Wide和Deep两部分合并到一起,最终模型输出为1的概率为:

\[P(Y=1|x)=\sigma (w^{T}_{wide}[x,\phi (x)]+w^{T}_{deep}a^{l_{f}}+b) \]

其中\(a_{l_{f}}\)是Deep部分的最后一层输出。

代码实现

代码可直接运行,但本复现没有加入交叉积特征(因为实在不知道哪些特征适合交叉),数据集包含在项目中,与原始论文中不一样,谨慎参考
https://github.com/LUGANGo/Wide-Deep

简介

简单线性模型,缺乏学习high-order特征的能力,很难从训练样本中学习到从未出现或极少出现的重要特征。FM模型可以通过点积和隐向量的形式学习交叉特征。由于复杂度的约束,FM通常只应用order-2的2重交叉特征。深层模型善于捕捉high-order复杂特征。现有模型用于CTR预估的有很多尝试,如CNN/RNN/FNN/PNN/W&D等,但都有各自的问题。FNN和PNN缺乏low-order特征,W&D需要人工构造Wide部分交叉特征。

本文提出的DeepFM模型是一种可以从原始特征中抽取到各种复杂度特征的端到端模型,没有人工特征工程的困扰。本文贡献如下:

  • DeepFM模型包含FM和DNN两部分,FM模型可以抽取low-order特征,DNN可以抽取high-order特征。无需Wide&Deep模型人工特征工程。
  • 由于输入仅为原始特征,而且FM和DNN共享输入向量特征,DeepFM模型训练速度很快。

模型结构

DeepFM模型结构

DeepFM模型结构如上图所示,包含因子分解机(FM)和全连接神经网络(Deep)两部分,这两部分的输入数据是共享的,模型采用联合训练的方式:

\[\hat{y}=sigmoid(y_{FM}+y_{DNN}) \]

FM部分

FM模型不但可以建模1阶特征,还可以通过隐向量点积的方法高效的获得2阶特征表示,即使交叉特征在数据集中非常稀疏甚至是从来没出现过。这也是FM的优势所在。模型的输入包含连续特征和离散特征,连续特征直接输入或者经过离散化,离散特征需要进行one-hot编码。

Deep部分

Deep部分是一个前馈神经网络,用于学习高阶特征交互。在输入特征部分,由于原始特征向量多是高纬度、高度稀疏、连续和类别混合的特征,为了更好的发挥DNN模型学习high-order特征的能力,文中设计了一套子网络结构(就是Dense Embeddings层),将原始的稀疏表示特征映射为稠密的特征向量。

子网络结构

子网络设计时的两个要点:

  • 不同field特征长度不同,但是子网络输出的向量需具有相同维度;
  • 利用FM模型的隐特征向量V作为网络权重初始化来获得子网络输出向量。所有特征转成的embedding向量拥有相同的维度k。并且和FM模型当中的维度也是一样的,并且这个embedding的初始化也是借用FM当中的二维矩阵V来实现的。我们都知道V是一个d x k的二维矩阵,而模型原始输入是一个d维的01向量,那么和V相乘了之后,自然就转化成了k x 1的embedding了。

这里的第二点可以这么理解,如上图假设k=5,对于输入的一条记录,同一个field只有一个位置是1,那么在由输入得到dense vector的过程中,输入层只有一个神经元起作用,得到的dense vector其实就是输入层到embedding层该神经元相连的五条线的权重,即vi1,vi2,vi3,vi4,vi5。这五个值组合起来就是我们在FM中所提到的Vi。文中将FM的预训练V向量作为网络权重初始化替换为直接将FM和DNN进行整体联合训练,从而实现了一个端到端的模型。

Deep&Cross——google2017

文献来源:https://arxiv.org/abs/1708.05123

模型结构

Deep&Cross模型结构

Deep&Cross和Deep&Wide模型的不同之处主要在于Cross部分,其他部分比较相似,模型结构如上图所示,分为Embedding layer、Cross Network、Deep Network和Combination layer四部分。

Embedding layer

该层的主要目的是将稀疏的类别特征进行嵌入,然后和稠密类特征拼接起来,作为后续模块的输入。原文中对dense特征和sparse特征的处理有一些小trick;对于dense类的特征取对数(log)进行归一化;对于sparse类的特征编码方式为:假设某个类别特征的取值个数为\(k\),那么该类别特征将被Embedding成维度为\(6\times k^\frac{1}{4}\)的稠密特征。

Cross Network

Cross部分引入了残差结构。可以使交叉的层数更深。每一层的计算公式如下:

\[x_{l+1}=x_{0}x_{l}^{T}w_{l}+b_{l}+x_{l} \]

\(x_{0}\)是Embedding layer得到的嵌入向量。

Deep Network

该部分就是普通的全连接神经网络。

Combination layer

该部分将Cross部分和Deep部分的输出拼接起来,用逻辑回归模型做最终点击率的估计。

NFM

文献来源:http://staff.ustc.edu.cn/~hexn/papers/sigir17-nfm.pdf

简介

许多预估任务需要对类别变量(如用户ID、性别职业等人口属性特征)进行建模。为了应用标准的机器学习技术,类别变量总是通过one-hot编码转换为二值化特征的集合,导致特征向量高度稀疏。为了有效的从稀疏数据中学习,解释特征间交互是至关重要的。

FM模型是一种流行的解决方案,它使用二阶特征交互。然而,FM模型的特征交互是一种线性的方式,不能充分的捕获真实数据中的非线性和复杂的固有结构。随着深度神经网络(如Wide&Deep、DeepCross)在工业界逐步用于学习非线性特征交互,网络结构也变得更加难以训练。

NFM将FM模型(用于建模二阶特征交互)的线性和神经网络(用于建模高阶特征交互)的非线性结合在一起。从概念上讲,NFM比FM更具有表达能力,因为FM可看作没有隐藏层的NFM的特例。NFM通过在神经网络建模中设计了一种新的操作:Bilinear Interaction(Bi-Interaction) pooling。通过在Bi-Interaction层上堆砌非线性层,能够加深浅层的线性FM,用来建模更高阶和非线性的特征交互关系,有效的提升FM的表达力。传统的深度学习方法通常在低层次上拼接或求平均嵌入向量,Bi-Interaction pooling的使用可以编码更多的特征交互,极大的促进了“deep layers”学习更有意义的信息。

NFM数学描述

\[\hat{y}_{NFM}(\textbf{x})=w_{0}+\sum_{i=1}^{n}w_{i}x_{i}+f(\textbf{x}) \]

公式的前两部分与矩阵分解模型的线性部分一样,是线性回归模型。关键在于\(f(\textbf{x})\)的设计。

\(f(\textbf{x})\)模型结构

Embedding Layer

该层是一个全连接神经网络,将每个特征映射到一个稠密且低维的向量\(v_{i}\),将原始特输入的征值\(x_{i}\)乘以其对应的\(v_{i}\)便可得到转换后的嵌入向量集合\(\textbf{v}_{x}=\left\{ x_{1}v_{1},x_{2}v_{2},...,x_{n}v_{n}\right\}\)。

Bi-Interaction Layer

该层的主要目的是将Embedding Layer得到的嵌入向量集合\(\textbf{v}_{x}\)变换成一个向量,在这个过程中需要进行两两向量的特征交互。

优点:实现特征交互的同时不需要引入额外的需要学习的参数

Hidden Layers和Prediction Score部分比较常规,不做介绍

AFM

文献来源:https://arxiv.org/pdf/1708.04617.pdf

简介

因子分解机(FMs)是一种有监督学习方法,通过结合二阶特征交互作用来增强线性回归模型。尽管FM有效,但它平等的看待各种特征交互,这限制了模型的能力,因为并非所有特征交互都同样有用和具有预测性。例如,与无用特性的交互甚至可能引入噪声并对性能产生不利影响。该文利用注意力机制识别有用的特征交互,能有效提升FM模型的性能。

模型结构

Sparse Input

该部分就是原始的稀疏输入数据。

Embedding Layer

该层对输入数据进行嵌入,每个特征都有一个对应的嵌入向量\(\textbf{v}_{i}x_{i}\)。其中\(\textbf{v}\)是可学习的参数。

Pair-wise Interaction Layer

该层对所有的非零嵌入向量进行两两交互,假设有\(m\)个特征,则共产生\(m(m-1)/2\)个交互向量。

Attention-based Pooling

该层为每一个交互特征向量分配一个注意力分数,使得模型能够有区分地对待各个交互,提升模型的性能。该层的输出可表示如下:

其中注意力分数是通过单层神经网络计算出来的:

\(\textbf{h}\)、\(\textbf{W}\)和\(\textbf{b}\)是注意力网络的参数。

Prediction Score

参考

标签:Wide,演化,模型,Deep,学习,特征,深度,FM,向量
来源: https://www.cnblogs.com/foghorn/p/15680615.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有