一、MLP based Recommender System
1. Deep Crossing模型
Deep Crossing模型完整的解决了从特征工程、稀疏向量稠密化、多层神经网络进行优化目标拟合等一系列深度学习在推荐系统中的应用问题。
为完成端到端的训练Deep Crossing模型要在其内部解决如下问题:
- 离散类特征编码后过于稀疏,不利于直接输入神经网络进行训练,如何解决稀疏特征向量稠密化的问题
- 如何解决特征自动交叉的问题
- 如何在输出层中打成问题设定的优化目标
通过加入embedding层将稀疏特征转化为低维稠密特征,用stacking layer,或者叫做concat layer将分段的特征向量连接起来,再通过多层神经网络完成特征的组合、转换,最终用scoring layer完成CTR的计算。跟经典DNN有所不同的是,Deep crossing采用的multilayer perceptron是由残差网络组成的。
Embedding层:将稀疏的类别性特征转换成稠密的Embedding向量,以经典的全连接层结构为主。通常,Embedding向量的维度应该远小于原始稀疏特征向量。这里Feature #2世纪代表了数值型特征,可以看到,数值型特征不需要经过Embedding层,直接进入了Stacking层。
Stacking层:Stacking层(堆叠层)的作用比较简单,是把不同的Embedding特征和数值型特征拼接在一起,也被称为连接(concatenate)层。
Multiple Residual Units层:主要结构时多层感知机,相比标准的多层感知机为基本单元的神经网络,Deep Crossing模型采用了多层残差网络(Multi-Layer Residual Network)作为MLP的具体实现。通过多层残差网络对特征向量各个维度进行充分的 交叉组合。
Scoring层:Scoring层作为输出层,就是为了拟合优化目标,对CTR预估这类二分类问题,Scoring层往往使用的是逻辑回归模型,对于图像等多分类问题,Scoring层往往采用softmax模型。
2. Neural Collaborative Filtering
2.1 基础NCF模型
若将矩阵分解层的用户隐向量和物品隐向量看作是一种Embedding方法,最终的“Scoring层”就是将用户隐向量和物品隐向量进行内积操作后得到的“相似度”,这里的相似度就是对评分的预测。在实际应用中,往往发现模型容易欠拟合,主要原因是MF的模型结构相对简单,尤其“Scoring层”,无法对优化目标进行有效的拟合。
NeuralCF用“多层神经网络+输出层”的结构替代了MF中简单的内积操作,优点如下:1、让用户向量和物品向量左更充分的交叉;2、引入更多的非线性特征。
事实上,用户向量和物品向量的互操作层可以被任意的互操作形式所替代,即所谓的广义矩阵分解模型(Generalized Matrix Factorization)。为了让向量在各维度上进行更充分的交叉,可以通过“元素积”(element-wise product,长度相同的两个向量按元素乘得到新的同维度的向量)进行交互,再通过逻辑回归等输出层拟合最终预测目标。
2.2 NCF混合模型
再进一步,可以把通过不同互操作网络得到的特征向量拼接起来,交由输出层进行目标拟合。
2.3 CCCFNet
再进一步来说,还可以使用Cross Domain跨领域推荐——假设跨领域存在一些一致的模式(如不同的domain共享user-side sub-network),因此可以从相对密集的辅助领域获取知识,如:CCCFNet (Cross-domain Content-boosted Collaborative Filtering neural Network)
其框架图如下:
总的来说,NCF的优点是对于用户向量和物品向量这俩Embedding层可以自由的选择不同互操作层的拼接。但是也有缺点——基于协同过滤的思想,没有引入更多其他类型的特征。
3. PNN模型
PNN模型的框架为:
与Deep Crossing模型相比,PNN模型在输入、Embedding层、多层神经网络,以及最终的输出层部分并没有结构上的不同。唯一的区别在于PNN模型用乘积层(Product Layer)代替了Deep Crossing模型中的Stacking层,即不同特征的Embedding向量不再是简单的拼接,而是利用Product操作进行两两交互。
另外,相比于NeuralCF,PNN模型的输入不仅包括用户和物品信息,还可以有更多不同形式、不同来源的特征,通过embedding层的编码生成同样长度的稠密特征embedding向量。
PNN 模型对于深度学习结构的创新主要在于乘积层的引入。具体地说,PNN 模型的乘积层由线性内积操作部分(图中乘积层的 z 部分,对各特征向量进行线性拼接)和乘积外积(outer product) 操作部分(图中乘积层的 p 部分)组成。其中,乘积特征交叉部分又分为内积操作和还是外积操作,使用内积操作的PNN模型被称为IPNN(Inner Product-based Neural Network),使用外积操作的PNN被称为OPNN(Outer Product-based Neural Network)。
无论是内积操作还是外积操作,都是对不同的特征embedding向量进行两两组合。为保证乘积操作能够顺利进行,各embedding向量的维度必须相同。
内积操作就是经典的向量内积运算: g i n n e r ( f i , f j ) = < f i , f j > g_{inner}(f_i,f_j)=<f_i, f_j> ginner(fi,fj)=<fi,fj>
外积操作是对输入特征向量 f i , f j f_i,f_j fi,fj的各维度进行两两交叉,生成特征交叉矩阵: g o u t e r ( f i , f j ) = f i f j T > g_{outer}(f_i,f_j)=f_i f_j^T> gouter(fi,fj)=fifjT>
外积互操作生成的是特征向量 f i , f j f_i,f_j fi,fj各维度两两交叉而成的一个MxM的方形矩阵。这样的外积操作无疑会直接将问题的复杂度从原来的M提升到 M 2 M^2 M2,为了在一定程度上减小模型训练的负担,PNN模型的论文中介绍了一种降维的方法,就是把所有两两特征embedding向量外积互操作的结果叠加,形成一个叠加外积互操作矩阵p:
p = ∑ i = 1 N ∑ j = 1 N g o u t e r ( f i , f j ) = ∑ i = 1 N ∑ j = 1 N f i f j T = ∑ i = 1 N f i ∑ j = 1 N f j T = f Σ f Σ T p=\sum_{i=1}^{N}\sum_{j=1}^{N}g_{outer}(f_i,f_j)=\sum_{i=1}^{N}\sum_{j=1}^{N}f_if_j^T=\sum_{i=1}^{N}f_i\sum_{j=1}^{N}f_j^T=f_{\Sigma} f_{\Sigma}^T p=i=1∑Nj=1∑Ngouter(f