本文部分内容来自 腾讯 研究院 辛俊波 有部分修改和整理
部分个人理解前用andy注明,不代表原文观点。
目录:
1.介绍神经网络推荐系统的分类
2.介绍分类之间的细节区别
3.一句话总结
4.参考和建议看的文献和分析
神经网络推荐系统核心——花多少人工就有多少智能 。
----------------------------------------------------------------------------------------------------
1.分类
深度学习匹配模型从大致方向上可以分为两大类,分别是基于 representation learning 的模型以及 match function learning 的模型。
1.1基于 representation learning 的深度学习方法,又可以分为两大类,基于 CF (DMF)以及 CF + side info (DCF)的方法。下面的介绍将分别从 input 、representation function 和 matching function 三个角度分别看不同的模型有什么不同。
1.2基于 match function learning 的深度学习方法,又可以分问两大类,基于 CF-based 的深度模型(NCF)和基于 feature-based 的深度模型(wide&deep )。
andy:其中, feature-based 的深度模型是目前大厂或者文章比较热门的研究方向。
----------------------------------------------------------------------------------------------------
2.介绍分类之间的细节区别
andy:前一章提及了 传统的机器学习方法都可以看成是低纬的神经网络。如果以协同过滤CF套深度学习的三个部分,可以这样理解:
❶ input layer:只有两个,分别是 userid ( one-hot ),itemid ( one-hot )
❷ representation function:线性 embedding layer
❸ matching function:向量内积 ( inner product )
下面分别介绍4个例子,两个经典的基于 representation learning 的深度学习方法2.1.1DMF/2.1.2DCF和两个经典基于 match function learning 的深度学习方法2.2.1NCF/2.2.2
----------------------------------------------------------------------------------------------------
2.1基于 representation learning 的深度学习方法
讲解的策略是:讲4个代表模型中“一个”最经典的方法,提及其算法的问题,罗列其他算法对这个问题的优化策略。每个算法都包含“基本思想”和“优化思想”。
2.1.1DMF模型 ( Deep Matrix Factorization )
2.1.1.1基本思想:
DMF 模型也就是深度矩阵分解模型,在传统的 MF 中增加了 MLP 网络,整个网络框架如图
❶ input layer:由两部分组组成,其中 user 由 user 交互过的 item 集合来表示,是个 multi-hot 的打分表示,如 [0 0 4 0 0 … 1 5 …],在矩阵中用行表示;item 也由交互过的 user 集合来表示,也是个 multi-hot 的表示,如 [5 0 0 3 … 1 3],在矩阵中用列表示。可以发现这里的输入都是 one-hot 的,一般来说 M 用户数比较大,N 作为 item 数量假设是百万级别的。
❷ representation function:用的是Multi-Layer-Perceptron,也就是经典的全连接网络。
❸ matching function:用 cosine 点击表示两个向量的匹配分数。
对比普通的 CF 模型,最大的特点是在 representation function 中,增加了非线性的 MLP多层感知器(Multi-Layer Perceptron,MLP,也叫人工神经网络ANN),但是由于输入是 one-hot 的,假设用户规模是100万,MLP 的第一层隐层是100,整个网络光 user 侧的第一层参数将达到1亿,参数空间将变得非常大。
2.1.1.2 优化思想:
CDAE 模型 ( Collaborative Denoising Auto-Encoders )类似 SVD++ 的思想,用户user输入同时使用:用户历史交互过的 item 以及 userid 本身使用过的偏好这个 bias(例如有些用户打分本身比较严格,再好的 item 打分也不会太高;有些用户打分很宽松,只要 item 别太差都会给高分),两个结合思想很类似 SVD++。
AutoRec 模型:和 DMF 一样,user 用 user 作用过的 item 集合表示,item 则用 itemid 本身表示,但是在输入层做了 user-autoencode的r输入层到隐层的重建(andy:看其损失函数是做了损失函数的最小化预测的平方差优化)。
2.1.1.3 基于 CF 方法的representation learning深度模型总结:
❶ User 或者 item 要么由本身 id 表达,要么由其历史交互过的行为来表达;用历史交互过的行为来作为 user 或者 item 的表达,比用 id 本身表达效果更好,但模型也变得更复杂;
❷ Auto-encoder 本质上等同于 MLP+MF,MLP 用全连接网络做 user 和 item 的 representation 表达;
❸ 所有训练数据仅用到 user-item 的交互信息,完全没有引入 user 和 item 的 side info 信息。
下面介绍带side info的representation learning 的深度学习方法,也就是在 CF 的方法上额外引入了 side info。
----------------------------------------------------------------------------------------------------
2.1.2 DCF 模型 ( Deep Collaborative Filtering )
2.1.2.1 基本思想:
❶input layer
除了用户和物品的交互矩阵,还有用户特征 X 和物品特征 Y。
❷ representation function
和传统的 CF 表示学习不同,这里引入了用户侧特征X例如年龄、性别等(敲黑板!);物品侧特征 Y 例如文本、标题、类目等;user 和 item 侧的特征各自通过一个 auto-encoder 来学习,而交互信息 R 矩阵依然做矩阵分解 U,V。整个模型框架如图所示。
损失函数优化,需要最小化用户侧特征的 reconstruction 和 item 侧的 encoder 部分,以及交互矩阵和预测矩阵的平方差,还有加上 L2 正则。如图第一个公式。
其中 W1,表示的用户侧特征 X 在 auto-encoder 过程中的 encode 部分,也就是输入到隐层的重建,P1 表示的是用户特征到交互矩阵 R 的映射;而 W2 表示物品侧特征 Y 在 auto-encoder 过程中的 encode 部分。P2 表示的是物品特征到交互矩阵 R 的映射。
最下面LU和LV两组公式中,可以看出用户和物品的特征都由两项 error 组成,第一项衡量的是 input 和 corrupted input 构建的预估误差,需要保证 W1 和 W2 对于 corrupted 后的 input x 和 y 不能拟合太差;第二项表达的是映射后的隐层特征空间 W1X 和投射到 U 矩阵的误差不能太大。
简单理解,整个模型的学习,既需要保证用户特征 X 和物品特征 Y 本身 encode 尽可能准确 ( auto-encoder 的 reconstruction 误差 ),又需要保证用户对物品的预估和实际观测的尽可能接近 ( 矩阵分解误差 ),同时正则化也约束了模型的复杂度不能太高。
2.1.2.2 优化思想:
DUIF 模型 ( Deep User and Image Feature Learning ):在 representation function层通过 CNN 网络提取的图片特征作为 item 的表达,然后用一个线性映射可以得到 item 的 embedding 表达。
ACF 模型 ( Attentive Collaborative Filtering ):Sigir2017 提出的 Attention CF 方法,在传统的 CF 里引入了 attention 机制。这里的 attention 有两层意思,第一层 attention,认为用户历史交互过的 item 的权重是不一样的,文章使用了 SVD++ 的方式;另一个 attention 意思是,用户同一个 item 里到的视觉特征的权重也是不一样的,认为对于不同的 components 对 item representation 的贡献程度是不同的(andy:如一些局部特征)。最终 item 的表达为不同的 region 的加权 embedding。
CKB模型 ( Collaborative Knowledge Base Embedding ):CKB 模型是在2016年 KDD 提出的,利用知识图谱做 representation learning,整个 CKB 模型框架其实思想比较简单,分别在结构化信息、文本信息和视觉信息中提取 item 侧特征作为 item 的embedding( representation)。
2.1.2.3 基于 CF+side info 方法的representation learning深度模型总结:
总结上述基于 CF 的方法,可以用如下的范式作为表达:
❶ representation learning:目的是学习到 user 和 item 各自的 representation ( 也叫 latent vector,或者 embedding )。
❷ 特征表达:user 侧特征除了用户 id 本身 userid,可以加上其他 side info;item 侧特征除了物品 id 本身 itemid,还有其他文本特征、图文特征、视频帧特征等信息。(和前面最重要的区别)
❸ 模型表达:除了传统的 DNN,其他结构如 Auto-Encoder ( AE ),Denoise-Auto-Encoder ( DAE ),CNN,RNN 等。
基于 representation learning 的深度匹配模型不是一个 end-2-end 模型,通过 user 和 item 各自的 representation 作为中间产物,解释性较好,而且可以用在出了排序阶段以外的其他环节,例如求物品最相似的 item 集合,召回环节等。
----------------------------------------------------------------------------------------------------
2.2 基于 match function learning 的深度学习方法
对比 representation learning 的方法,基于 match function learning 最大的特点是,不直接学习 user 和 item 的 embedding,而是通过已有的各种输入,通过一个 neural network 框架,来直接拟合 user 和 item 的匹配分数。
andy:在match function learning 的深度学习方法又可以分为两种——CF-based 的深度模型和feature-based 的深度模型
2.2.1 NCF基于神经网络的学习方法
2.2.1.1 基本思想:
前面传统匹配模型以及基于representation学习的模型,其 base 模型都离不开协同过滤,也可以称为基于矩阵分解的模型。基于 match function learning 的模型也不例外。
基于神经网络的学习方法 ( NCF ) 为何向南博士在2017年提出,对比传统的 CF 网络,在得到 user vector 和 item vector 后,连接了 MLP 网络后,最终拟合输出,得到一个 end-2-end 的 model。这套框架好处就是足够灵活,user 和 item 侧的双塔设计可以加入任意 side info 的特征,而 MLP 网络也可以灵活的设计,如图所示。
NCF 框架对比第三章所说的 CF 方法最主要引入了 MLP 去拟合 user 和 item 的非线性关系,而不是直接通过 inner product 或者 cosine 去计算两者关系,提升了网络的拟合能力。然而 MLP 对于直接学习和捕获从 mf 提取的 user 和 item vector 能力其实并不强。
andy:值得一题的是,在ResSys2019的一篇best paper论文,题目:《Are We Really Making Much Progress? A Worrying Analysis of Recent Neural Recommendation Approaches》挑选了4大顶会(KDD,SIGIR,WWW和RecSys)的18篇论文,说其中只有7篇能复现(with reasonable effort),而且它们都能被经典的KNN或图算法超越。知乎有讨论。其实就有何向南博士的NCF文章。
有关结论,以及何向南博士(何老师自己的官网每篇文章都带了源代码下载)自己的表述,在提供的链接中有参考,在此就不展开。
但是文章和讨论至少透漏了3个信息:1.传统算法的研究不是没有意义的,至少有人还在对比。2.神经网络必须根据数据特点调整好参数,否则不如传统模型。3.目前已有的评价指标不能全面的评价各个算的好坏。
2.2.1.2 优化思想:
在 wsdm2018 的一篇文章质疑的就是 MLP 对特征组合的拟合能力。
该 paper 做了一组实验,使用1层的 MLP 网络去拟合数据;实验证明对于二维一阶的数据,也需要100个节点才能拟合;如果超过2阶,整个 MLP 的表现将会非常差。文章因此说明了 DNN 对于高阶信息的捕捉能力并不强(敲黑板!!!!!!!!),只能捕捉低阶信息。
那么接下来match function learning模型优化策略:在模型结构或者特征层面做的各种变化。
NeuMF 模型 ( Neural Matrix Factorization ),顾名思义,同时利用了 MF 和神经网络 MLP 的能力来拟合 matching score;MF 利用向量内积学习 user 和 item 的关联,同时 MLP 部分捕捉两者的其他高阶信息。这篇 paper 其实和 NCF 框架是出自同一篇 paper 的。
GMF ( General Matrix Factorization ) 部分:User 和 item 都通过 one-hot 编码得到稀疏的输入向量,然后通过一个 embedding 层映射为 user vector 和 item vector。这样就获得了 user 和 item 的隐向量,一般可以通过向量点积或者哈达马积 ( element-wide product ) 得到交互,不过在 NeuMF 中多连接了一个连接层,也就是 GMF layer。
NNCF 模型 ( Neighbor-based NCF ):CIKM2017 提出的一种基于 neighbor 的 NCF 方法,最大的不同在于输入除了 user 和 item 的信息,还各自引入了 user 和 item 各自的 neighbor 信息。
ONCF 模型 ( Outer-Product based NCF ):何向南博士2018年在 NCF 模型框架上提出了 outer-product based NCF,在原有的 NCF 框架上,引入了 outer product 的概念。在 embedding layer 之后,O-NCF 模型引入了 interaction map 也就是特征交叉层,对于用户 u 的向量 pu 和物品 i 的向量 qi,引入两者的 outer-product。E 是一个 k*k 维的矩阵,其中的每个 element 两两相乘,得到2维的矩阵。到这,可以通过把二维矩阵展开变成一个 k2 维度的向量,作为 MLP 的输入。假设 k=64,那么 E 就是个4096的向量,每一层隐层单元个数设置为上一层的一半,那么第一层的维度为4096*2048约需要840万的网络参数需要训练,参数量非常巨大。
andy:刚刚说了MLP对高阶信息的捕捉能力不强,因此,文章提出了一种利用 CNN 局部连接共享参数的方法来减少 embedding layer 到 hidden layer 之间的参数,如图所示。
2.2.1.3 基于 match function learning 的CF-based 的深度学习方法总结
使用原始的 outer-product 思想,在第一层网络处有近千万的参数需要学习,而使用 CNN 网络一方面能够减少参数量,另一方面又同时提取了低阶和高阶特征的组合。个人觉得引入 CNN 固然能节省内存,但也同时会带来训练和推理时间的增加,是一种时间换空间的思想。另外用 CNN 是否能够比原始 MLP 更有效拟合特征组合也需要结合数据分布去看。
基于 NCF 框架的方法基础原理是基于协同过滤,而协同过滤本质上又是在做 user 和 item 的矩阵分解,所以,基于 NCF 框架的方法本质上也是基于 MF 的方法。矩阵分解本质是尽可能将 user 和 item 的 vector,通过各种方法去让 user 和 item 在映射后的空间中的向量尽可能接近 ( 用向量点击或者向量的 cosine 距离直接衡量是否接近)。
而另外一种思路,基于翻译的方法,也叫 translation based model,认为 user 和 item 在新的空间中映射的 vector 可以有 gap,这个 gap 用 relation vector 来表达,也就是让用户的向量加上 relation vector 的向量,尽可能和 item vector 接近。两种方法的区别可以用图形象的表示。
如:2017年的 recsys 会议上提出的一种基于 "translate" 的推荐方法,要解决的是 next item 的推荐问题。基本思想是说用户本身的向量,加上用户上一个交互的 item 的向量,应该接近于用户下一个交互的 item 的向量,输入是 (user, prev item, next item),预测下个 item 被推荐的概率。
----------------------------------------------------------------------------------------------------
2.2.2 wide&deep 模型
介绍的基于 CF 的方法,对大多数推荐系统来说,输入的特征向量往往都是非常高维而且稀疏的,而特征之间的交叉关系对模型来说往往都是非常重要的。例如,用户一般会在一天快吃三餐的时候,打开和订餐相关的 app,这样,用户使用订餐 app 和时间存在着二阶交叉关系;又比如说,男性的青年群体,往往更喜欢射击类的游戏,性别、年龄以及类目之间存在着三阶的交叉关系。因此,如何捕捉特征之间的交叉关系,衍生了众多基于特征的模型,在这里将这些捕捉特征交叉关系的模型称为 feature-based model。
2.2.2.1 基本思想
提到深度学习模型,最经典的莫过于2016年 google 提出的 wide and deep 模型。说是模型,不如说是通用的一套范式框架,在整个工业界一举奠定了风靡至今的模型框架:
在这个经典的 wide&deep 模型中,google 提出了两个概念:generalization ( 泛化性 ) 和 memory ( 记忆性 )。
❶ 记忆性:wide 部分长处在于学习样本中的高频部分,优点是模型的记忆性好,对于样本中出现过的高频低阶特征能够用少量参数学习;缺点是模型的泛化能力差,例如对于没有见过的 ID 类特征,模型学习能力较差。
❷ 泛化性:deep 部分长处在于学习样本中的长尾部分,优点是泛化能力强,对于少量出现过的样本甚至没有出现过的样本都能做出预测 ( 非零的 embedding 向量 ),容易带来惊喜。缺点是模型对于低阶特征的学习需要用较多参数才能等同 wide 部分效果,而且泛化能力强某种程度上也可能导致过拟合出现 bad case。尤其对于冷启动的一些 item,也有可能用用户带来惊吓。
值得注意的是,虽然模型的 deep 部分拟合和泛化能力很强,但绝对不意味着把特征交叉都交给 MLP 就够了(敲黑板!!)。实际证明,对于重要的一些人工经验的特征,对于提升整体效果还是非常重要的,如图4.13所示。这个人工特征的所谓缺点,也是后续各种模型结构想对其进行 "自动化" 的优化点。
2.2.2.2 优化思想
deep crossing模型:微软在2016年提出了一套框架 deep crossing,这篇文章在输入到 embedding 这里到是和 wide&deep 没有太多不同,主要区别在于 MLP 部分。Google 的 wide&deep 模型里深度网络的 MLP 部分是全连接网络,每一层的网络输入都是前一层的输入出,受限于模型结构,越往后越难学习到原始输入的表达,一般深度不会太深,超过5层的网络在工业界已经算很少见了。为了解决这个问题,deep crossing 网络引入了 resnet 残差网络的概念,通过 short-cut,在 MLP 的深层网络,也能接收来自第一层的输入,这样可以使得模型的深度达到10层之多。
deepFM 模型:Google 的 wide&deep 框架固然强大,但由于 wide 部分是个 LR 模型,仍然需要人工特征工程。华为诺亚方舟团队结合 FM 相比 LR 的特征交叉的功能,在2017年提出了 deepFM,将 wide&deep 部分的 LR 部分替换成 FM 来避免人工特征工程。
xDeepFM 模型 ( extreme Deep Factor Machine ):xDeepFM 模型从名字上听好像是 deepFM 模型的升级,但其实更应该拿来和 DCN 模型做对比。DCN 模型引入了高阶特征交叉,但是特征的交叉本质上是在 bit-wise 的。而 xDeepFM 模型认为特征向量 i 和特征向量 j 的交叉过程中,i 本身的元素交叉没有意义,提取 i 和 j 的向量交叉才是更有效捕捉特征的方式,也就是 vector-wise 的交叉,整个模型的框架如图4.26所示,最核心的模块在于特征交叉的 CIN 模块。
FGCNN 模型 ( Feature Generate by CNN ):NN 模型在图像,语音,NLP 领域都是非常重要的特征提取器,原因是对图像、视频、语言来说,存在着很强的 local connection 信息。而在推荐系统中由于特征输入都是稀疏无序的,很难直接利用 CNN 作为特征提取。华为诺亚方舟在2019年的 WWW 会议上提出了一种巧妙的利用 CNN 提取特征的方法 FGCNN,整个模型框架如图所示。
FiBiNet 模型 ( Feature Importance & Bilinear feature Interaction ):新浪微博张俊林团队2019年提出的结合特征重要性 ( Fi ) 和双线性特征交叉 ( Bi ) 的方法,Feature Importance & Bilinear feature Interaction,简称 FiBiNet,其实是两个相对独立的模块,两个模块可以独立套用在其他的网络结构上。
2.2.2.3 基于 match function learning 的feature-based model 的深度学习方法总结
Feature-based 的模型主要在于学习特征之间的交叉,是近年来整个推荐系统在排序层面的主流研究方向,按照不同维度,把以上模型分为4个类型。
1 基于框架的模型(深度加宽度的模型范式,本身并不是一个具体的模型,wide 和 deep 部分可以用任意结构框架,wide 的 baseline 是 LR 模型;deep 的 baseline 是 MLP 模型):wide&deep 模型。
2 基于 FM 特征二阶组合的模型(将特征的 embedding 做交叉):deepFM 模型。
3 基于 attention 的模型(每个特征用 self-attention 得到其他特征和自己的 attention 权重): AutoInt 模型
4 基于特征高阶组合的模型(使用多层的 cross 来做特征交叉,对于 cross 网络中每一层的输入都由前一层以及第一层的输入组成,从这个维度上代表的是高阶特征的组合): xDeepFM 模型和FGCNN 模型
----------------------------------------------------------------------------------------------------
3.区别总结
简单来说,第一种方法 representation learning 不是一种 end-2-end 的方法,通过学习 user 和 item 的 embedding 作为中间产物,然后可以方便的计算两者的匹配分数;而第二种方法 matching function learning 是一种 end2end 的方法,直接拟合得到最终的匹配分数。
对于深度模型,主要分为基于 representation learning 的深度模型以及 match function learning 的深度模型。
3.1基于 representation learning 的深度模型学习的是用户和物品的表示,然后通过匹配函数来计算,这里重点在与 representation learning 阶段,可以通过 CNN 网络,auto-encoder,知识图谱等模型结构来学习。
3.2 对于 match function learning 的深度模型,也分为基于协同过滤的模型和基于特征的模型。前者和传统 CF 模型一样,不同在于后面接入了 MLP 模型来增强非线性表达,目的是为了使得 user 和 item 的 vector 尽可能接近,这种方法就是基于 NCF 的模型;也有通过引入 relation vector 来是的 user vector 加上 relation vector 后接近 item vector,这种方法是基于翻译的模型。对于 match function learning 另一种模型框架,是基于特征层面的,有基于 fm 模型的,基于 attention 的,以及高阶特征捕捉的,另外还有基于时间序列的文章中只提到了 DIEN 模型。
andy:一句话总结——没有一个模型是万能的,需要根据数据选择适合的模型。花多少人工就有多少智能:用神经网络的话,你需要结构设计;而用传统模型的话,你需要特征工程。
----------------------------------------------------------------------------------------------------
4.参考
神经网络基础-多层感知器(MLP)-ANN的基本介绍:https://blog.csdn.net/weixin_38206214/article/details/81137911
激活函数之Relu函数(简单易懂):https://www.jianshu.com/p/338afb1389c9
常见的激活函数(sigmoid、tanh、relu):https://zhuanlan.zhihu.com/p/63775557
关于CNN网络靠什么线索学习到深度信息的?(结论:CNN其实是通过物体在图像中的纵坐标而不是物体的长宽来对物体测距的。)https://mp.weixin.qq.com/s?__biz=MzAxMjcyNjE5MQ==&mid=2650489390&idx=1&sn=a82b077f5bdbc794670705326e833145&chksm=83a298eeb4d511f8bcee8d17c0b5e886fa0320d765b6c81b30b274551b48f161357bae4eecd2&mpshare=1&scene=1&srcid=&sharer_sharetime=1579147165848&sharer_shareid=7c12c842ab8472563681eac522da0f54&key=8f4c040c4fe603ebb086fc8da715dea3ae7ec36b511babf9ad84b09c04315c78c8b115b606aefdc189625afe571f97359ee7c13b77202e92c6712a070ad5735b4f49b5e11c94745fb862fc586e1b5683&ascene=1&uin=MTk3MzE0NTE4NQ%3D%3D&devicetype=Windows+10&version=6208006f&lang=zh_CN&exportkey=AeA03FK6t%2F2g6I3tXfp20YI%3D&pass_ticket=LGfTN7ZVpTwWpA8C30rwG2hOQHr%2FHpWmuOKxricfPGxbuiDviAwsEjbLPevJYNbJ
知识图谱(各种机器学习算法虽然在预测能力上很不错,但是在描述能力上非常弱):https://zhuanlan.zhihu.com/p/71128505