PNN网络(Product-based Neural Network)

2022-05-12 15:36:01 浏览数 (2)

1. 概述

PNN(Product-based Neural Network)是在2016年提出的用于计算CTR问题的深度神经网络模型,PNN的网络结构对传统的FNN(Feedforward Neural Network)网络结构做了一些优化,使得其能够更适合处理CTR问题。在PNN网络模型中,主要的优化点为:

  1. 通过Embedding层处理离散特征。Embedding层现在已经成为DNN模型处理CTR问题的标配;
  2. 增加Product层,在Product Layer中,通过显式构造特征交叉,在不同的特征域之间进行特征组合,在实际的实施过程中,会有不同的product计算方法,在参考文献[1]中,提到了两种不同的product计算方法,分别为inner producr和outer product。

2. 算法原理

2.1. PNN的网络结构

PNN的网络结构如下图所示:

从网络结构上看,整个网络分成四层,第一层为特征Embedding层,第二层为Product层(PNN最为核心的部分), 第三层与第四层是传统的全连接网络层,最后模型的输出层。其网络结构与传统的DNN网络结构基本一致,不同的就是比传统DNN网络结构增加了Product层,与传统DNN的网络结构对比如下图所示:

2.2. PNN网络的计算过程

从上到下最上层上PNN的输出层,PNN网络的输出为hat{y}=sigma left (mathbf{W}_3mathbf{l}_2 b_3right ) 其中,mathbf{W}_3in mathbb{R}^{1times D_2}b_3in mathbb{R} 是L2层到输出层的参数,mathbf{l}_2in mathbb{R}^{D_2} 是L2层的输出,D_2 为隐层L2层输出向量的维度,sigma 为输出层的激活函数,且是CTR计算中通常使用的激活函数,此处便不在赘述。L2层的输出mathbf{l}_2 为:

mathbf{l}_2=reluleft ( mathbf{W}_2mathbf{l}_1 mathbf{b}_2 right )

其中,mathbf{W}_2in mathbb{R}^{D_2times D_1}mathbf{b}_2in mathbb{R}^{D_2} 为L1层到L2层的参数,mathbf{l}_1in mathbb{R}^{D_1} 是L1层的输出,D_1 为隐层L1层输出向量的维度,relu 为L2层的激活函数。L1层的输出mathbf{l}_1 为:

mathbf{l}_1=reluleft ( mathbf{l}_z mathbf{l}_p mathbf{b}_1 right )

其中,mathbf{b}_1in mathbb{R}^{D_1} 为Product层到L1层的参数。mathbf{l}_zin mathbb{R}^{D_1} 为Product的线形部分,mathbf{l}_pin mathbb{R}^{D_1} 为Product的特征交叉部分。mathbf{l}_zmathbf{l}_p 分别为:

mathbf{l}_z=left ( l_z^1,l_z^2,cdots ,l_z^n,cdots ,l_z^{D_1} right ),; l_z^n=mathbf{W}_z^nodot mathbf{z}
mathbf{l}_p=left ( l_p^1,l_p^2,cdots ,l_p^n,cdots ,l_p^{D_1} right ),; l_p^n=mathbf{W}_p^nodot mathbf{p}

其中,mathbf{W}_z^nmathbf{W}_p^n 是Embedding层到Product层的参数,mathbf{z} 为线型特征部分,mathbf{p} 为交叉特征部分,且mathbf{z} 为:

mathbf{z}=left ( mathbf{z}_1,mathbf{z}_2,cdots ,mathbf{z}_N right )overset{underset{triangle }{}}{=}left ( mathbf{f}_1,mathbf{f}_2,cdots ,mathbf{f}_Nright )

其中,mathbf{f}_iin mathbb{R}^M 为第i 个Embedding特征。交叉特征mathbf{p} 为:

mathbf{p}=left{mathbf{p}_{i,j} right}, i=1cdots N,j=1cdots N

其中,mathbf{p}_{i,j}=gleft ( mathbf{f}_i,mathbf{f}_j right )g 表示不同的特征交叉函数。Embedding特征mathbf{f}_i 为:

mathbf{f}_i=mathbf{W}_0^i: mathbf{x}_ileft [ start_{i} : end_{i} right ]

而对于Product层的函数g ,在参考文献[1]中提到了两种方法,分别为Inner Product和Outer Product。

2.2.1. Inner Product

在Inner Product中,函数g 为:

gleft ( mathbf{f}_i,mathbf{f}_j right )=left<mathbf{f}_i,mathbf{f}_j right>

其中,left<mathbf{f}_i,mathbf{f}_j right> 表示的是向量mathbf{f}_i 和向量mathbf{f}_j 的内积。基于Inner Product的PNN模型又可以称为IPNN(Inner Product-based Neural Network)。此时l_z^nl_p^n 分别为:

l_z^n=mathbf{W}_z^nodot mathbf{z}=sum_{i=1}^{N}left ( mathbf{W}_z right )_{i}mathbf{z}_i=sum_{i=1}^{N}left ( mathbf{W}_z right )_{i}mathbf{f}_i
l_p^n=mathbf{W}_p^nodot mathbf{p}=sum_{i=1}^{N}sum_{j=1}^{N}left ( mathbf{W}_p^n right )_{i,j}mathbf{p}_{i,j}=sum_{i=1}^{N}sum_{j=1}^{N}left ( mathbf{W}_p^n right )_{i,j}left<mathbf{f}_i,mathbf{f}_j right>

如何去分析Product层的计算复杂度?已知,mathbf{f}_iin mathbb{R}^M ,特征的个数为N ,因此,l_z^n 的时间复杂度为Oleft ( NM right )l_p^n 的时间复杂度Oleft ( N^2M right ) ,由l_p^nmathbf{l}_p 的时间复杂度为Oleft ( N^2D_1 right ) 。因此,线型部分mathbf{l}_z 的时间复杂度为Oleft ( D_1NM right ) ,交叉部分mathbf{l}_p 的时间复杂度为Oleft ( N^2left ( M D_1 right ) right )

受FM算法中参数矩阵分解的启发,参考文献[1]中提出使用矩阵分解的方式来降低时间复杂度。其中要注意mathbf{p}_{i,j}mathbf{W}_p^n 都是对称矩阵,所以可以使用一阶矩阵分解。假设mathbf{W}_p^n=mathbf{theta }^nmathbf{theta }^{nT} ,其中mathbf{theta }^nin mathbb{R}^Nl_p^n 可以表示为:

begin{aligned} l_p^n&=mathbf{W}_p^nodot mathbf{p}=sum_{i=1}^{N}sum_{j=1}^{N}left ( mathbf{W}_p^n right )_{i,j}left<mathbf{f}_i,mathbf{f}_j right> \ &=sum_{i=1}^{N}sum_{j=1}^{N}theta _i^ntheta _j^nleft<mathbf{f}_i,mathbf{f}_j right> \ &=sum_{i=1}^{N}sum_{j=1}^{N}left<theta _i^nmathbf{f}_i,theta _j^nmathbf{f}_j right> \ &=left<sum_{i=1}^{N}theta _i^nmathbf{f}_i,sum_{j=1}^{N}theta _j^nmathbf{f}_j right> \ &= left| sum_{i=1}^{N}delta _i^nright|^2 end{aligned}

其中,delta _i^n=theta _i^nmathbf{f}_i ,则mathbf{l}_p 为:

mathbf{l}_p=left ( left| sum_{i=1}^{N}delta _i^1right|^2,cdots ,left| sum_{i=1}^{N}delta _i^nright|^2,cdots ,left| sum_{i=1}^{N}delta _i^{D_1}right|^2 right )

时间复杂度为Oleft ( D_1NM right )

2.2.2. Outer Product

在Outer Product中,函数g 为:

gleft ( mathbf{f}_i,mathbf{f}_j right )=mathbf{f}_imathbf{f}_j^T

此时,由于mathbf{f}_iin mathbb{R}^M ,因此mathbf{p}_{i,j}in mathbb{R}^{Mtimes M} 是一个方阵。基于Outer Product的PNN模型又可以称为OPNN(Outer Product-based Neural Network)。此时l_p^n 为:

l_p^n=mathbf{W}_p^nodot mathbf{p}=sum_{i=1}^{N}sum_{j=1}^{N}left ( mathbf{W}_p^n right )_{i,j}p_{i,j}=sum_{i=1}^{N}sum_{j=1}^{N}left ( mathbf{W}_p^n right )_{i,j}mathbf{f}_imathbf{f}_j^T

对于Outer Product,此时的mathbf{p}_{i,j}M times M 的矩阵,而mathbf{p}N times N times M times M 的矩阵,因此mathbf{p} 的计算时间复杂度为Oleft ( M^2N^2 right )mathbf{l}_p 的计算时间复杂度为Oleft ( D_1M^2N^2 right ) 。参考文献[1]使用了叠加(superposition)的思想,重新定义了mathbf{p} 矩阵:

mathbf{p}=sum_{i=1}^{N}sum_{j=1}^{N}mathbf{f}_imathbf{f}_j^T=mathbf{f}_{sum }left ( mathbf{f}_{sum } right )^T,; mathbf{f}_{sum }=sum_{i=1}^{N}mathbf{f}_i

此时, mathbf{p}in mathbb{R}^{Mtimes M} ,通过上述分析,最终mathbf{l}_p 的计算时间复杂度为Oleft ( D_1Mleft ( M N right ) right )

3. 总结

PNN网络结构在传统的DNN中增加了Product层,从而实现了特征的交叉,在具体的实现过程中,提出了两种Product的计算,分别为Inner Product和Outer Product。在具体的数据中,两种Product的表现并不一致,需要根据具体的数据选择合适的Product计算方法,相比较传统的DNN,从实验结果来看,效果上PNN得到了较大提升。

参考文献

[1] Qu Y , Han C , Kan R , et al. Product-Based Neural Networks for User Response Prediction[C]// 2016 IEEE 16th International Conference on Data Mining (ICDM). IEEE, 2016.

0 人点赞