解决痛点
传统模型: (应该指的是逻辑回归这种)挖掘特征的能力有限,比如无法挖掘到二阶特征
深度网络模型: 无法应用到大规模高维稀疏特征上。
所以提出了PNN模型,该模型先用embedding层学习到类别特征的表达形式,再用一个乘积层学习到不同特征间的交叉信息,最后用全连接层学习到更高阶的特征表达。
网络结构

从一个top-to-down的视角来看:
最顶层
最上面一层是一个CTR的输出
y^=σ(W3l2+b3)σ(x)=1/(1+e−x)
L2层
l2=relu(W2l1+b2)即一个**层,其中l1∈RD1
L1层
l1=relu(lz+lp+b1)其中 lz,lp,b1∈RD1 ,该维度与l2层维度相对应
这里定义tensor乘积的表达式
A⊙B≜i,j∑Ai,jBi,j即对应位置元素相乘然后求和。
定义:
z=(z1,z2,…,zN)≜(f1,f2,…,fN)p={pi,j},i=1…N,j=1…N
lz和lp的计算方法如下:
lz=(lz1,lz2,…,lzn,…,lzD1),lp=(lp1,lp2,…,lpn,…,lpD1),lzn=Wzn⊙zlpn=Wpn⊙p
其中:
-
fi∈RM,表示每个filed特征的embedding向量,由结构图可以看到,输入的是不同filed下的特征,(对于每个样本而言,每个filed下只有一个特征值),每个filed都有自己对应的权证矩阵Wzn和Wpn。
-
z部分和输入f是完全等价的,只有p部分用了特征的交叉
乘积函数g(fi,fj)及其优化
根绝向量间求积的方式不同,有以下两种方式(内积和外积):
- Inner Product-based Neural Network (IPNN)
- Outer Product-based Neural Network(OPNN)
IPNN
对于内积而言,g(fi,fj)=<fi,fj>,向量对应位置相乘求和得到一个数。
lzn=Wzn⊙z=i=1∑Nj=1∑M(Wzn)i,jzi,jlpd=Wpd⊙P=i=1∑Nj=1∑N(Wpd)i,jPi,j
对于每个部分而言,都有d个W矩阵,w的维度跟f的维度有关,注意这里每个lzn或者lpn的计算都用到了z或者p的所有元素(之前有点confusion,以为是分别乘的)。
对于l1层的计算,其空间复杂度为O(DNM+DN2),时间复杂度为O(DNM+DN2),D1为l1层的维度,M为特征的维度,为超参N为filed的个数。
对于lp的计算,考虑到P是个对称矩阵(Pi,j=Pj,i),W也是对称矩阵(相当于P矩阵中元素系数,相同元素系数相同),可以将W矩阵进行分解,Wpn=θnθnT,θn∈RN,那么:
Wpn⊙p=i=1∑Nj=1∑Nθinθjn⟨fi,fj⟩=⟨i=1∑Nδin,i=1∑Nδin⟩δin=θinfiδn=(δ1n,δ2n,…,δin,…,δNn)∈RN×M
通过该变换,可以将原来时间和空间复杂度都降到 O(DNM)(在真实场景中特征filed的个数N要远大于embedding的维度M);
OPNN
外积的结果是矩阵
Pij=fifjT∈RM∗M
P=i=1∑Nj=1∑NPij=i=1∑Nj=1∑NfifjT=(j=1∑Nfi)(j=1∑Nfi)T∈RM∗M待研究
ps(写完代码再来完善理论)