19推荐系统8PNN模型——加强特征交叉能力

Posted 炫云云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19推荐系统8PNN模型——加强特征交叉能力相关的知识,希望对你有一定的参考价值。

1、前言

NeuralCF模型的主要思想是利用多层神经网络替代经典协同过滤的点积操作,加强模型的表达能力。广义上,任何向量之间的交互计算方式都可以用来替代协同过滤的内积操作,相应的模型可称为广义的矩阵分解模型。但NeuralCF模型只提到了用户向量和物品向量两组特征向量,如果加入多组特征向量又该如何设计特征交互的方法呢? PNN模型给出了特征交互方式的几种设计思路。

2、网络架构

PNN模型的提出同样是为了解决CTR预估和推荐系统的问题。图1所示为模型结构图,相比Deep Crossing模型,PNN模型在输入、Embedding 层、多层神经网络,以及最终的输出层部分并没有结构上的不同,唯一的区别在于PNN模型用乘积层( Product Layer)代替了Deep Crossing模型中的Stacking层。也就是说,不同特征的Embedding向量不再是简单的拼接,而是用Product 操作进行两两交互,更有针对性地获取特征之间的交叉信息。

图 1 : P N N 模 型 结 构 图 图1:PNN模型结构图 1PNN
从上往下来看这个网络结构:

  1. 输出层

输出层很简单,将上一层的网络输出 l 2 ∈ R D 2 l_{2} \\in \\mathbb{R}^{D_{2}} l2RD2通过一个全链接层,经过sigmoid函数转换后映射到(0,1)的区间中,得到我们的点击率的预测值:
y ^ = σ ( W 3 l 2 + b 3 ) , (1) \\hat{y}=\\sigma\\left(\\boldsymbol{W}_{3} \\boldsymbol{l}_{2}+b_{3}\\right),\\tag{1} y^=σ(W3l2+b3),(1)
2. L2层

根据L1层的输出,经一个全链接层 ,并使用relu进行激活,得到L2的输出结果:
l 2 = relu ⁡ ( W 2 l 1 + b 2 ) (2) \\boldsymbol{l}_{2}=\\operatorname{relu}\\left(\\boldsymbol{W}_{2} \\boldsymbol{l}_{1}+\\boldsymbol{b}_{2}\\right)\\tag{2} l2=relu(W2l1+b2)(2)
3. L1层

L1层的输出由如下的公式计算:
l 1 = relu ⁡ ( l z + l p + b 1 ) (3) l_{1}=\\operatorname{relu}\\left(l_{z}+l_{p}+b_{1}\\right)\\tag{3} l1=relu(lz+lp+b1)(3)
L1层与 product layer完全连接。它的输入包括线性信号 l z l_{z} lz和二次信号 l p . l_{p} . lp.​b1是偏置项。

  1. Product Layer

product思想来源于,在ctr预估中,认为特征之间的关系更多是一种and“且”的关系,而非add"加”的关系。例如,性别为男且喜欢游戏的人群,比起性别男和喜欢游戏的人群,前者的组合比后者更能体现特征交叉的意义。

定义张量内积的运算:
A ⊙ B ≜ ∑ i , j A i , j B i , j (4) \\boldsymbol{A} \\odot \\boldsymbol{B} \\triangleq \\sum_{i, j} \\boldsymbol{A}_{i, j} \\boldsymbol{B}_{i, j}\\tag{4} ABi,jAi,jBi,j(4)
首先对 A , B \\boldsymbol{A}, \\boldsymbol{B} AB进行元素乘法,然后将乘法结果求和为一个标量。之后, l z l_{z} lz l p l_{p} lp分别通过 z z z p p p计算:
l z = ( l z 1 , l z 2 , … , l z n , … , l z D 1 ) , l z n = W z n ⊙ z l p = ( l p 1 , l p 2 , … , l p n , … , l p D 1 ) , l p n = W p n ⊙ p (5) \\begin{array}{ll} l_{z}=\\left(l_{z}^{1}, l_{z}^{2}, \\ldots, l_{z}^{n}, \\ldots, l_{z}^{D_{1}}\\right), & l_{z}^{n}=\\boldsymbol{W}_{z}^{n} \\odot \\boldsymbol{z} \\\\ l_{p}=\\left(l_{p}^{1}, l_{p}^{2}, \\ldots, l_{p}^{n}, \\ldots, l_{p}^{D_{1}}\\right), & l_{p}^{n}=\\boldsymbol{W}_{p}^{n} \\odot \\boldsymbol{p} \\end{array}\\tag{5} lz=(lz1,lz2,,lzn,,lzD1),lp=(lp1,lp2,,lpn,,lpD1),lzn=Wznzlpn=Wpnp(5)
其中 W z n \\boldsymbol{W}_{z}^{n} Wzn W p n \\boldsymbol{W}_{p}^{n} Wpn是乘积层的权重,它们的形状分别由 z z z p p p​决定。

通过引入“1”常数信号,乘积层不仅可以产生二次信号 p p p,还可以保持线性信号 z z z,如图1所示。更具体的
z = ( z 1 , z 2 , … , z N ) ≜ ( f 1 , f 2 , … , f N ) p = { p i , j } , i = 1 … N , j = 1 … N (6) \\begin{aligned} &z=\\left(z_{1}, z_{2}, \\ldots, z_{N}\\right) \\triangleq\\left(f_{1}, f_{2}, \\ldots, f_{N}\\right) \\\\ &p=\\left\\{p_{i, j}\\right\\}, i=1 \\ldots N, j=1 \\ldots N \\end{aligned}\\tag{6} 19推荐系统13FNN——TensorFlow2实现

19推荐系统12FM——TensorFlow2实现

19推荐系统9Wide&Deep

推荐系统实践与思考-20201107

19推荐系统4DeeoCrossing

19推荐系统2矩阵分解算法——协同过滤的进化