推荐系统中的深度匹配模型(中)

下文要讲的模型,也是在模型结构或者特征层面做的各种变化。

4.1.1.1 NeuMF 模型 ( Neural Matrix Factorization )

Neural MF,顾名思义,同时利用了 MF 和神经网络 MLP 的能力来拟合 matching score;MF 利用向量内积学习 user 和 item 的关联,同时 MLP 部分捕捉两者的其他高阶信息。这篇 paper 其实和 NCF 框架是出自同一篇 paper 的。模型可以分为 GMF 和 MLP 两个部分来看,如图4.4所示。

推荐系统中的深度匹配模型(中)

图4.4 NeuMF 模型结构框架

❶ GMF ( General Matrix Factorization ) 部分

User 和 item 都通过 one-hot 编码得到稀疏的输入向量,然后通过一个 embedding 层映射为 user vector 和 item vector。这样就获得了 user 和 item 的隐向量,一般可以通过向量点积或者哈达马积 ( element-wide product ) 得到交互,不过在 NeuMF 中多连接了一个连接层,也就是 GMF layer:

推荐系统中的深度匹配模型(中)

❷ MLP 部分

输入和 GMF 部分一样,都是 one-hot 的稀疏编码,然后通过 embedding 层映射为 user vector 和 item vector。注意到这里 user 和 item 的 vector 和 GMF 部分是不一样的,原因是 GMF 和 MLP 两个网络结构对隐层维度要求不同,MLP 部分会高一些 ( 个人感觉 share embedding 能更充分训练 embedding )。

Embedding 层之后就是几层常规的 MLP,这块没什么好说的,最后一层输出作为 MLP 的 output。

推荐系统中的深度匹配模型(中)

4.1.1.2 NNCF 模型 ( Neighbor-based NCF )

CIKM2017 提出的一种基于 neighbor 的 NCF 方法,最大的不同在于输入除了 user 和 item 的信息,还各自引入了 user 和 item 各自的 neighbor 信息。

推荐系统中的深度匹配模型(中)

图4.5 NNCF 模型框架

图4.5所示的输入由两部分组成,中间 xu 和 yi 为原始的 user 和 item 的 one-hot 输入,通过 embedding 层后映射为 pu 和 qi 的 embedding 向量,然后通过哈达马积作为 MLP 的输入。而输入层两侧的 nu 和 ni 是 user 和 item 各自的 neighbor 信息的输入,这里 nu 和ni 信息如何提取可以采用多种手段,如二部图挖掘,user-CF 或者 item-CF 等。

对于 neighbor 信息,由于每个用户和 item 的 neighbor 数不一致,输入是不定长的,通过卷积和 pooling 后提取得到定长的 embedding,然后和 user 以及 item 本身的向量 concat 后输入到模型中:

推荐系统中的深度匹配模型(中)

4.1.1.3 ONCF 模型 ( Outer-Product based NCF )

何向南博士2018年在 NCF 模型框架上提出了 outer-product based NCF,在原有的 NCF 框架上,引入了 outer product 的概念,如图4.6所示。

推荐系统中的深度匹配模型(中)

图4.6 ONCF 模型框架

在 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万的网络参数需要训练,参数量非常巨大。

因此,文章提出了一种利用 CNN 局部连接共享参数的方法来减少 embedding layer 到 hidden layer 之间的参数,如图4.7所示。

推荐系统中的深度匹配模型(中)

图4.7 ConvNCF 模型框架

假设隐层维度 K=64,有6层 hidden layer,每一层有32个卷积核 ( feature map ),步长 stride=2,那么经过每个卷积核后的 feature map 大小为原来的1/4 ( 长和宽各少了一半 )。以第一层卷积为例:

推荐系统中的深度匹配模型(中)

那么第一层卷积后得到的网络是个32*32*32的3维 vector,其中最后一个32代表 feature map 个数。这里如何体现特征交叉的思想呢?ei,j,c 代表的就是在前一层的 feature map 中,第 i 个单元和第 j 个 element 的二阶交叉。第一层 feature map 中,每个单元提取的是上一层2*2区域的 local 连接信息,第三层提取的就是第一层4*4的信息,那么在网络的最后一层就能提取到原始 feature map 里的 global 连接信息,从而达到高阶特征提取的目的。

总结来说,使用原始的 outer-product 思想,在第一层网络处有近千万的参数需要学习,而使用 CNN 网络一方面能够减少参数量,另一方面又同时提取了低阶和高阶特征的组合。个人觉得引入 CNN 固然能节省内存,但也同时会带来训练和推理时间的增加,是一种时间换空间的思想。另外用 CNN 是否能够比原始 MLP 更有效拟合特征组合也需要结合数据分布去看。

4.1.1.4 小结

基于 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 接近。两种方法的区别可以用图4.8形象的表示。

推荐系统中的深度匹配模型(中)

图4.8 基于矩阵分解和基于翻译的模型区别

4.1.2 基于 translation 框架的方法

4.1.2.1 transRec 模型

2017年的 recsys 会议上提出的一种基于 "translate" 的推荐方法,要解决的是 next item 的推荐问题。基本思想是说用户本身的向量,加上用户上一个交互的 item 的向量,应该接近于用户下一个交互的 item 的向量,输入是 (user, prev item, next item),预测下个 item 被推荐的概率。

推荐系统中的深度匹配模型(中)

图4.9 transRec 模型框架

用户向量表达如下:

推荐系统中的深度匹配模型(中)

这里 ri 和 rj 表示的是用户上一个交互的 item i 和下一个交互的 item j,tu 为用户本身的向量表达。而在实际的推荐系统中,往往存在数据稀疏和用户冷启动问题,因此,作者将用户向量tu 分解成了两个向量:

推荐系统中的深度匹配模型(中)

这里 t 可以认为是全局向量,表示的是所有用户的平均行为,tu 表示用户 u 本身的 bias,例如对于冷启动用户,tu 可以设置为0,用全局用户的表达 t 作为冷启动。

对于热门 item 由于出现次数非常多,会导致最终热门 item 的向量和绝大多数用户向量加上 item 向量很接近,因此文章对热门 item 做了惩罚,最终,已知上一个 item i,用户和下一个 item j 的匹配 score 表达为:

推荐系统中的深度匹配模型(中)

其中, 第一项 βj 表示的是物品 j 的全局热度;第二项 d 表示的是用户向量加上物品 i 的向量与物品 j 向量的距离;距离越小表示 i 和 j 距离越接近,被推荐的可能性就越大。

4.1.2.2 LRML 模型 ( Latent Relational Metric Learning )

前面讲到,基于 translation 框架的方法对比基于 CF 框架方法最大的不同,在于找到一个 relation vector,使得 user vector + relation vector 尽可能接近 item vector。WWW2018 提出的 LRML 模型通过引入 memory network 来学习度量距离。可以分为三层 layer,分别是 embedding layer, memory layer 和 relation layer。

推荐系统中的深度匹配模型(中)

图4.10 LRML 模型框架

❶ embedding layer

底层是常规的双塔 embedding,分别是用户 embedding 矩阵和物品的 embedding 矩阵,用户 one-hot 输入和 item 的 one-hot 输入通过 embedding 后得到用户向量 p 和物品向量 q。

❷ memory layer

记忆网络层是文章的核心模块,作者通过引入 memory layer 作为先验模块。这个模块可以分为三个步骤进行计算:

① 用户和物品 embedding 融合

Embedding 层得到的 user 和 item 向量 p 和 q 需要先经过交叉合成一个向量后输入到下一层,作者提到使用哈达码积效果优于 MLP 效果,也更简单:

推荐系统中的深度匹配模型(中)

② 用户-物品 key addressing

从第一步得到的向量 s 中,去和 memory 记忆网络模块中的各个 memory vector 挨个计算相似度,相似度可以用内积表达并做归一化:

推荐系统中的深度匹配模型(中)

得到的 ai 代表的是当前用户-物品输入对 (p,q) 与 memory-network 中的第 i 个向量的相似度。

③ 最终加权表达

最终得到的 relation vector 是第二步得到的 memory 记忆网络中不同 vector 的加权表达,如下所示:

推荐系统中的深度匹配模型(中)

❸ relation layer

从 memory layer 得到的 r 向量可以认为是用户向量 p 与物品向量 q 的 relation vector,最终的距离用平方损失衡量,如图4.11所示。

推荐系统中的深度匹配模型(中)

推荐系统中的深度匹配模型(中)

图4.11 LRML relation 层以及 loss 结构

由于解决的是推荐物品的排序问题,文章使用的是 pairwise loss,因此在网络的最后一层,对 user 和 item 分别进行负样本采样得到 p' 和 q',然后使用 pairwise hinge loss 进行优化:

推荐系统中的深度匹配模型(中)

4.2 feature-based 的深度模型

4.1介绍的基于 CF 的方法,对大多数推荐系统来说,输入的特征向量往往都是非常高维而且稀疏的,而特征之间的交叉关系对模型来说往往都是非常重要的。例如,用户一般会在一天快吃三餐的时候,打开和订餐相关的 app,这样,用户使用订餐 app 和时间存在着二阶交叉关系;又比如说,男性的青年群体,往往更喜欢射击类的游戏,性别、年龄以及类目之间存在着三阶的交叉关系。因此,如何捕捉特征之间的交叉关系,衍生了众多基于特征的模型,在这里将这些捕捉特征交叉关系的模型称为 feature-based model。

4.2.1 wide&deep 模型

提到深度学习模型,最经典的莫过于2016年 google 提出的 wide and deep 模型。说是模型,不如说是通用的一套范式框架,在整个工业界一举奠定了风靡至今的模型框架,如图4.12所示。

推荐系统中的深度匹配模型(中)

图4.12 wide&deep 模型框架

在这个经典的 wide&deep 模型中,google 提出了两个概念:generalization ( 泛化性 ) 和 memory ( 记忆性 )。

❶ 记忆性:wide 部分长处在于学习样本中的高频部分,优点是模型的记忆性好,对于样本中出现过的高频低阶特征能够用少量参数学习;缺点是模型的泛化能力差,例如对于没有见过的 ID 类特征,模型学习能力较差。

❷ 泛化性:deep 部分长处在于学习样本中的长尾部分,优点是泛化能力强,对于少量出现过的样本甚至没有出现过的样本都能做出预测 ( 非零的 embedding 向量 ),容易带来惊喜。缺点是模型对于低阶特征的学习需要用较多参数才能等同 wide 部分效果,而且泛化能力强某种程度上也可能导致过拟合出现 bad case。尤其对于冷启动的一些 item,也有可能用用户带来惊吓。

推荐系统中的深度匹配模型(中)

图4.13 wide&deep 模型特征框架

值得注意的是,虽然模型的 deep 部分拟合和泛化能力很强,但绝对不意味着把特征交叉都交给 MLP 就够了。实际证明,对于重要的一些人工经验的特征,对于提升整体效果还是非常重要的,如图4.13所示。这个人工特征的所谓缺点,也是后续各种模型结构想对其进行 "自动化" 的优化点。

4.2.2 deep crossing 模型

微软在2016年提出了一套框架 deep crossing,这篇文章在输入到 embedding 这里到是和 wide&deep 没有太多不同,主要区别在于 MLP 部分。

Google 的 wide&deep 模型里深度网络的 MLP 部分是全连接网络,每一层的网络输入都是前一层的输入出,受限于模型结构,越往后越难学习到原始输入的表达,一般深度不会太深,超过5层的网络在工业界已经算很少见了。为了解决这个问题,deep crossing 网络引入了 resnet 残差网络的概念,通过 short-cut,在 MLP 的深层网络,也能接收来自第一层的输入,这样可以使得模型的深度达到10层之多,如图4.14所示。

推荐系统中的深度匹配模型(中)

图4.14 deep crossing 模型框架

上述提到的 wide&deep 以及 deep crossing 框架更像是在模型结构做的改进,一个引入了 wide&deep,一个引入了 resnet,特征层面并没有做太多改造,如何体现 feature-base 呢?SigIR2017 就有一篇文章做了个实验,对 wide&deep 以及 Deep&Cross 实验按照 embedding 是否做初始化分别做了实验。实验发现,如果 embedding 是随机初始化的,两个深度模型连基础的 FM 模型都打不过;哪怕经过 FM 初始化了 embedding,wide&deep 模型效果也仅仅略好于 FM 模型,而 deep crossing 模型依然比不过 FM 模型,实验结果如图4.15所示。

推荐系统中的深度匹配模型(中)

图4.15 不同初始化对模型影响

这个结论也引出了关于 MLP 的一些思考,全连接网络表面上看对所有节点都进行了连接,理论上应该学习到了各个节点的交叉特征,但是从结果上来看,MLP 对这些特征交叉的学习能力确实非常差的。纠其原因,还是在模型结构的设计上。

推荐系统中的深度匹配模型(中)

图4.16 wide&deep 模型和 deep crossing 模型

图4.16里无论是 wide&deep 还是 deep crossing network,embedding 层之后到 MLP 之间,都是将 embedding 做 concat 的。这些 concat 后的信息其实能够表达的特征交叉信息其实是非常有限的,仅靠 MLP 想完全捕捉到特征的有效交叉其实是非常困难的。因此,有大量工作关于在 embedding 这里如何捕捉特征交叉,其实就是在 MLP 网络之前,利用更多的数学先验范式做特征交叉去提取特征,这也是本节提到的方法叫做 feature-based 的原因。

4.2.3 PNN 模型

Embedding layer 进入 MLP 之前,引入了 product layer 来显式的学习每个 field 的 embedding 向量之间的两两交叉,如图4.17所示。

推荐系统中的深度匹配模型(中)

图4.17 PNN 模型框架

左边 z 为 embedding 层的线性部分,右边为 embedding 层的特征交叉部分。这种 product 思想来源于,推荐系统中的特征之间的交叉关系更多是一种 and "且" 的关系,而非 add "加" 的关系。例如,性别为男且喜欢游戏的人群,比起性别男和喜欢游戏的人群,前者的组合比后者更能体现特征交叉的意义。根据 product 的方式不同,可以分为 inner product ( IPNN ) 和 outer product ( OPNN ),如图4.18所示。

推荐系统中的深度匹配模型(中)

图4.18 PNN 模型的两种不同交叉方式

其中,IPNN 模型每个特征是个 inner product,f 个 field 两两交叉,得到的新的特征组合有 f*(f-1)/2个;outer product 是两个向量的乘积,得到的新的特征组合有 f*(f-1)/2*k*k 个。

4.2.4 deepFM 模型

Google 的 wide&deep 框架固然强大,但由于 wide 部分是个 LR 模型,仍然需要人工特征工程。华为诺亚方舟团队结合 FM 相比 LR 的特征交叉的功能,在2017年提出了 deepFM,将 wide&deep 部分的 LR 部分替换成 FM 来避免人工特征工程,如图4.19所示。

推荐系统中的深度匹配模型(中)

图4.19 deepFM 模型框架

比起 wide&deep 的 LR 部分,deeFM 采用 FM 作为 wide 部分的输出,FM 部分如图4.20所示。

推荐系统中的深度匹配模型(中)

图4.20 deepFM 模型中的 FM 部分

除此之外,deepFM 还有如下特点:

❶ 更强的低阶特征表达

Wide 部分取代 WDL 的 LR,与4.2.1和4.2.2提到的 wide&deep 模型以及 deep crossing 模型相比更能捕捉低阶特征信息。

❷ Embedding 层共享

Wide&deep 部分的 embedding 层得需要针对 deep 部分单独设计;而在 deepFM 中,FM 和 DEEP 部分共享 embedding 层,FM 训练得到的参数既作为 wide 部分的输出,也作为 DNN 部分的输入。

❸ end-end 训练

Embedding 和网络权重联合训练,无需预训练和单独训练。

4.2.5 NFM 模型 ( Neural Factorization Machines )

DeepFM 在 embedding 层后把 FM 部分直接 concat 起来 ( f*k 维,f 个 field,每个 filed 是 k 维向量 ) 作为 DNN 的输入。Neural Factorization Machines,简称 NFM,提出了一种更加简单粗暴的方法,在 embedding 层后,做了一个叫做 Bi-interaction 的操作,让各个 field 做 element-wise 后 sum 起来去做特征交叉,MLP 的输入规模直接压缩到 k 维,和特征的原始维度 n 和特征 field 维度 f 没有任何关系,如图4.21所示。

推荐系统中的深度匹配模型(中)

图4.21 NFM 模型框架

这里论文只画出了其中的 deep 部分, wide 部分在这里省略没有画出来。Bi-interaction 所做的操作很简单:让 f 个 field 两两 element-wise 相乘后,得到 f*(f-1)/2 个维度为 k 的向量,然后直接 sum 起来,最后得到一个 k 维的向量。所以该层没有任何参数需要学习,同时也降低了网络复杂度,能够加速网络的训练;但同时这种方法也可能带来较大的信息损失。

4.2.6 AFM 模型 ( Attention Factorization Machines )

前面提到的各种网络结构中的 FM 在做特征交叉时,让不同特征的向量直接做交叉,基于的假设是各个特征交叉对结果的贡献度是一样的。这种假设往往不太合理,原因是不同特征对最终结果的贡献程度一般是不一样的。Attention Neural Factorization Machines,简称 AFM 模型,利用了近年来在图像、NLP、语音等领域大获成功的 attention 机制,在前面讲到的 NFM 基础上,引入了 attention 机制来解决这个问题,如图4.22所示。

推荐系统中的深度匹配模型(中)

图4.22 AFM 模型框架

AFM 的 embedding 层后和 NFM 一样,先让 f 个 field 的特征做了 element-wise product 后,得到 f*(f-1)/2 个交叉向量。和 NFM 直接把这些交叉项 sum 起来不同,AFM 引入了一个 Attention Net,认为这些交叉特征项每个对结果的贡献是不同的,例如 xi 和 xj的权重重要度,用 aij 来表示。从这个角度来看,其实 AFM 其实就是个加权累加的过程。Attention Net 部分的权重 aij 不是直接学习,而是通过如下公式表示:

推荐系统中的深度匹配模型(中)

这里 t 表示 attention net 中的隐层维度,k 和前面一样,为 embedding 层的维度。所以这里需要学习的参数有3个,W,b,h,参数个数共 t*k+2*t 个。得到 aij 权重后,对各个特征两两点积加权累加后,得到一个 k 维的向量,引入一个简单的参数向量 hT,维度为 k 进行学习,和 wide 部分一起得到最终的 AFM 输出。

推荐系统中的深度匹配模型(中)

图4.23 AFM 模型中 attention 的可视化解释

关于 AFM 还有个好处,通过 attention-base pooling 计算的 score 值 aij 体现的是特征 vi 和 vj 之间的权重,能够选择有用的二阶特征,如图4.23所示。

4.2.7 DCN 模型 ( Deep Cross Network )

前面提到的几种 FM-based 的方法都是做的二阶特征交叉,如 PNN 用 product 方式做二阶交叉,NFM 和 AFM 也都采用了 Bi-interaction 的方式学习特征的二阶交叉。对于更高阶的特征交叉,只有让 deep 去学习了。为解决这个问题,google 在2017年提出了 Deep&Cross Network,简称 DCN 的模型,可以任意组合特征,而且不增加网络参数。图4.24为 DCN 的结构。

推荐系统中的深度匹配模型(中)

图4.24 DCN 模型结构

整个网络分4部分组成:

❶ embedding and stacking layer

之所以不把 embedding 和 stacking 分开来看,是因为很多时候,embedding 和 stacking 过程是分不开的。前面讲到的各种 XX-based FM 网络结构,利用 FM 学到的 v 向量可以很好的作为 embedding。而在很多实际的业务结构,可能已经有了提取到的 embedding 特征信息,例如图像的特征 embedding,text 的特征 embedding,item 的 embedding 等,还有其他连续值信息,例如年龄,收入水平等,这些 embedding 向量 stack 在一起后,一起作为后续网络结构的输入。当然,这部分也可以用前面讲到的 FM 来做 embedding。为了和原始论文保持一致,这里我们假设 x0 向量维度为 d ( 上文的网络结构中为 k ),这一层的做法就是简答的把各种 embedding 向量 concat 起来。

推荐系统中的深度匹配模型(中)

❷ deep layer network

在 embedding and stacking layer 之后,网络分成了两路,一路是传统的 DNN 结构。表示如下:

推荐系统中的深度匹配模型(中)

为简化理解,假设每一层网络的参数有 m 个,一共有 Ld 层,输入层由于和上一层连接,有 d*m 个参数 ( d 为 x0 向量维度 ),后续的 Ld-1 层,每层需要 m*(m+1) 个参数,所以一共需要学习的参数有 d*m+m*(m+1)*(Ld-1)。最后的输出也是个 m 维向量。

❸ cross layer network

Embedding and stacking layer 输入后的另一路就是 DCN 的重点工作了。每一层 l+1 和前一层l的关系可以用如下关系表示:

推荐系统中的深度匹配模型(中)

可以看到 f 是待拟合的函数,xl 即为上一层的网络输入。需要学习的参数为 wl 和 bl,因为 xl维度为 d,当前层网络输入 xl+1 也为 d 维,待学习的参数 wl 和 bl 也都是 d 维向量。因此,每一层都有 2*d 的参数 ( w 和 b ) 需要学习,网络结构如下。

推荐系统中的深度匹配模型(中)

图4.25 DCN 模型的 cross 原理

经过 Lc 层的 cross layer network 后,在该 layer 最后一层 Lc 层的输出为 Lc2 的 d 维向量。

❹ combination output layer

经过 cross network 的输出 XL1 ( d 维 ) 和 deep network 之后的向量输入 ( m 维 ) 直接做 concat,变为一个 d+m 的向量,最后套一个 LR 模型,需要学习参数为 1+d+m。

总结起来,DCN 引入的 cross network 理论上可以表达任意高阶组合,同时每一层保留低阶组合,参数的向量化也控制了模型的复杂度。Cross 网络部分的交叉学习的是特征向量中每一个 element 的交叉,本质上是 bit-wise 的。

4.2.8 xDeepFM 模型 ( extreme Deep Factor Machine )

xDeepFM 模型从名字上听好像是 deepFM 模型的升级,但其实更应该拿来和 DCN 模型做对比。DCN 模型引入了高阶特征交叉,但是特征的交叉本质上是在 bit-wise 的。而 xDeepFM 模型认为特征向量 i 和特征向量 j 的交叉过程中,i 本身的元素交叉没有意义,提取 i 和 j 的向量交叉才是更有效捕捉特征的方式,也就是 vector-wise 的交叉,整个模型的框架如图4.26所示,最核心的模块在于特征交叉的 CIN 模块。

推荐系统中的深度匹配模型(中)

图4.26 xDeepFM 模型结构

首先我们来看下整个 CIN 的整体框架图,如图4.27所示,假设特征 field 个数是 m,每个 field 的隐层维度为 d,那么原始 embedding 层的大小为 m*d,而 cross network 有 Hk层,提取的是特征的交叉。每一层网络在做什么事情呢?就是和第一层 x0 做特征交叉得到新的特征向量后,然后这 Hk 层 cross net 得到的特征向量 concat 到一起,作为 MLP 的输入。那么,这里面,每一层的特征 xk 到底是如何输入层 x0 发生交互的?

推荐系统中的深度匹配模型(中)

图4.27 CIN 模块结构

以 cross net 的第 k 层和原始输入 x0 为例,我们看下如何提取得到新的特征,图4.28是其特征交叉的过程。其中 xk 的维度为 Hk*D,表示的是第 k 层有 Hk 个 vector,而原始输入 x0 的维度为 m*D,表示输入层有 m 个 D 维的 vector。

推荐系统中的深度匹配模型(中)

图4.28 CIN 模块中特征交叉过程

推荐系统中的深度匹配模型(中)

这里 Wk,h 表示的是第 k 层的第 h 个 vector 的权重,是模型需要学习的参数。整个公式的理解是整个 xDeepFM 理解的关键,我们具体看下发生了什么:

❶ 首先,从前一层的输入 Xk-1 ( 一共有 Hk-1 个 vector ),取出任意一个 vector;从原始输入x0 ( 一共有 m 个 vector ),取出任意一个 vector,两者两两做哈达码积,可以得到 Hk-1*m 个 vector。

❷ 这 Hk-1*m 个交叉得到的 vector,每个 vector 维度都是 D,我们通过一个 W 矩阵做乘积进行加权求和,相当于是个带权重的 pooling,最终得到加权求和后的 vector Xh,k,表示的是第 h 层第 k 个 vector。这里的 W 矩阵就是模型要学习的。

❸ 为什么说是压缩,压缩体现在哪里?还是用图说话,这里我们看下原始论文给出的图示,有助于整个过程的理解。

推荐系统中的深度匹配模型(中)

图4.29 CIN 模块具体结构

在图4.29左图中,我们把 D 看成是原始二维平面的宽度,我们沿着 D 的方向挨个进行计算。先看 xk 向量中 D 的第一维,有 Hk 个数;x0 向量中 D 的第一维,有 m 个数,让 Hk 和 m 两两计算,就可以得到 Hk*m 的一个平面。一直沿着 D 方向,2,3,4,…D,我们就可以得到一个 Hk*m*D 的三维矩阵,暂且叫做 zk+1,注意这个过程只是简单的矩阵计算,没有参数需要学习。

在4.29右边的图中,我们开始提取前面 zk+1 的信息,还是以 D 方向的第一维为例,一个 m*Hk 的平面,乘以一个大小一样的 m*Hk 矩阵 W,然后加权求和,就可以得到这个平面最后压缩的一个实数。整个平面被 "压缩" 成为了一个一维的数。一直沿着 D 方向求解每个平面压缩后的数,就可以得到一个 D 维的向量。

这就是整个 "压缩" 的取名原因。整个过程非常类似 CNN 的 filter 卷积思想,W 就是卷积核,得到的每个特征映射的值就是 feature map。


分享到:


相關文章: