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模型结构图
图1:PNN模型结构图
从上往下来看这个网络结构:
- 输出层
输出层很简单,将上一层的网络输出
l
2
∈
R
D
2
l_{2} \\in \\mathbb{R}^{D_{2}}
l2∈RD2通过一个全链接层,经过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是偏置项。
- 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}
A⊙B≜i,j∑Ai,jBi,j(4)
首先对
A
,
B
\\boldsymbol{A}, \\boldsymbol{B}
A,B进行元素乘法,然后将乘法结果求和为一个标量。之后,
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=Wzn⊙zlpn=Wpn⊙p(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实现