【论文导读】深入理解PNN模型---加入Product层

前言

本次分享一篇2016年提出的模型PNN(Product-based Neural Networks for User Response Prediction)。本文的主要创新点是在Embedding与MLP之间加入了Product层。对于本篇文章,希望大家能看一下我提出的一个【疑问】,如果知道的话,可以私聊下进行交流。

本篇文章约2.1k字,预计阅读15分钟。

PNN

PNN是2016年上海交通大学研究团队在ICDM(International Conference on Data Mining)会议提出的模型。由于文章距离现在时间过长,所以对其中的背景、挑战不再提及。主要叙述一下文章的创新点:对于之前DIN模型中提到过的BaseModel,PNN在Embedding层与MLP层中间加入了Product层,来更有针对性地获取特征之间的交叉信息。

PNN的简要流程为:

  • 使用Embedding层将高维稀疏数据转化为低维密集型数据;

  • 建立一个乘积层(内积或外积操作),来对embedding特征向量进行特征之间的交互;

  • 使用MLP对高阶特征进行提取;

Model

【论文导读】深入理解PNN模型---加入Product层

文章对模型的结构的分析是从上到下,这里我们还是按照从下到上对模型进行解析。

输入(Input)层

模型输入由个特征域(Field)组成,都是离散稀疏的分类特征,如年龄、性别、id等(经过one-hot编码)。模型中并没有提及密集数值型数据,代码复现中可以在中进行插入。

Embedding 层

与BaseModel一样,对每一个离散稀疏的Field特征域进行Embedding操作,参数是通过神经网络的反向传播进行学习。

例如,第个域的embedding向量是embedding的输出:

其中表示包含多个领域的输入特征向量。表示第域的one-hot向量。表示embedding层的参数。

该层引入一个常数1,是为了方便叙述乘积层的操作。

乘积(Product)层

【论文导读】深入理解PNN模型---加入Product层

关于该层的,文中描述的是linear signalsquadratic signals,翻译过来就是线性信号和平方信号,其实通俗来说,指的就是所有的特征域;而指的是两个embedding向量进行乘积(内积或外积)。公式描述为:

其中是第个域的embedding向量,为embedding维度,定义为特征交互对,表示乘积操作函数。

【注】 提一个很小很小的问题,这部分的结构似乎有点歧义,模型中特征域和其自身是不发生交互的,但是文章的内容却是进行自身的交互的(图应该没有表示清楚)。

L1层

在进行乘积层操作后,并没有把结果直接送入层,而是在乘积层内部有进行了局部全连接层的转换。线性信号和平方信号对应的局部全连接结果为,公式化描述为:

其中是乘积层的权重,为该层的隐藏单元。

故最后该层的输出为:

其中,表示线性向量,表示二次方向量

L2层

即一个全连接层,结构化表示为:

输出层

输出是一个概率值作为CTR预测:

其中是输出层的学习参数,是第二隐藏层的输出,为sigmoid函数,用表示第个隐藏层的维度。

损失函数

最后监督训练使用了最小化对数损失,目标函数为:

其中为真实值,为预测值。

IPNN与OPNN

对于上述提到的乘积层操作函数,文章以内积、外积不同的乘积方式,将PNN分为两种变量:IPNN和OPNN。

IPNN

首先定义内积:

由于线性部分是与常数1【向量】做内积,那么对于可以表示为:

其中指的是特征域的个数,指的是embedding维度。对于每一个,其实就是所有的特征域进行求和,并乘上一个权重,得到一个标量。故,

对于两两特征向量内积相乘,我们可以将所有的项保存到一个矩阵。故对应于可以表示为:

都是对称矩阵。

对于,空间复杂度为,时间复杂度为。受到FM的启发,作者想到用一阶矩阵分解的方式来降低复杂度。

假设,且,可以将公式化为:

其中,且。且,给出的完整形式:

因此的空间复杂度为(即是参数的数量变少了,在大型的CTR预估系统中,通常远大于embedding维度),时间复杂度为,复杂度得到下降。

更一般地,为了减少信息丢失,可以按需要考虑K-阶分解,当然复杂度也会相应提升K倍,这是一个trade-off。

【注】 关于空间复杂度,应该详细的解释一下,因为文章篇幅过短,并没有详细的提到。原本没有得到降维的空间复杂度是的参数空间+的参数空间,所以为。而经过降维【本质上是参数得到共享】,最后总的空间复杂度为,然后空间复杂度将常数去除,所以最后的结果为

【疑问】 关于这部分,我实在没理解为什么是表示二范数么?看到知乎上有篇文章给出的是,这似乎才更对吧。

OPNN

向量的内积运算输入为向量对,输出为一个标量。与其不同的是,向量外积操作的输出是得到一个矩阵。

首先定义外积操作的内积交互:

因此对于的每一个元素,

对于计算,时间和空间复杂度都为。为了减少复杂度,作者提出一种降维的方法,就是把所有两两特征Embedding向量外积互操作的结果叠加(即文中提到的superposition),形成一个叠加外积互操作矩阵

由于是一个对称矩阵,因此也是一个对称矩阵。

的时间和空间复杂度可以降为

对于叠加矩阵,《深度学习推荐系统》提到:它的最终形式类似于让所有特征Embeddding向量通过一个平均池化层(Average Pooling)后,再进行外积操作。

实验

文章实验不在此处叙述,主要讨论的是模型的构建。但文章的实验设计简单明了,可以看一下原文。【图画的好】

【论文导读】深入理解PNN模型---加入Product层

代码复现

本文的模型结构也比较简单,进行了一下简单的复现。采用的数据集依旧是Criteo的样本数据集(原文也是使用了该数据集)。

GitHub地址::https://github.com/BlackSpaceGZY/Recommended-System

总结

文章最主要的创新就是在Embedding层和MLP层之间引入了一个Product层,通过embedding向量的乘积(内积和外积,当然也可以是其他形式)来增强特征域向量之间的交互。第二次看这篇文章,还是有了不少收获。

【论文导读】深入理解PNN模型---加入Product层

往期精彩回顾

【论文导读】Wide&Deep模型的进阶---Cross&Deep模型,附TF2.0复现代码

【论文导读】Wide&Deep模型的深入理解

【论文导读】2019阿里CTR预估模型---DIEN(深度兴趣演化网络)

【论文导读】2018阿里CTR预估模型---DIN(深度兴趣网络),后附TF2.0复现代码

【论文导读】异构信息网络的Embedding进行推荐

扫码关注更多精彩

【论文导读】深入理解PNN模型---加入Product层

【论文导读】深入理解PNN模型---加入Product层

【论文导读】深入理解PNN模型---加入Product层