PNN模型及其变体

一:绪论

1,这么是pnn
相对于前面我们讲的deep crossing 模型而言,pnn模型在输入层,embedding层,多层神经网络,输出层等并没有结构上的变化,唯一的区别在于pnn用乘积层(product layer)代替了原来的stacking layer,也就是说embedding后的向量不再是通过简单的拼接而成,而是通过product 操作进行两两交互,更有针对性的获取特征交叉信息。其次,相对于NCF 模型固定的用户-物品特征向量输入而言,pnn模型输入引入了多组特征向量,那么也就要求特征向量的交叉方式不能仅仅只限于简单的通过堆叠后神经网络自动交叉的方式。具体如何操作,下面详细分析。

二:模型的结构

通过上面的绪论,我们大致了解了pnn模型的特点,接下来详细描述,先看图
在这里插入图片描述
输出层
输出层很简单,将上一层的网络输出通过一个全链接层,经过sigmoid函数转换后映射到(0,1)的区间中,得到我们的点击率的预测值:
在这里插入图片描述
l2层
根据l1层的输出,经一个全链接层 ,并使用relu进行激活,得到我们l2的输出结果:
在这里插入图片描述
l1层
l1层的输出由如下的公式计算:
在这里插入图片描述
重点马上就要来了,我们可以看到在得到l1层输出时,我们输入了三部分,分别是lz,lp 和 b1,b1是我们的偏置项,这里可以先不管。lz和lp的计算就是PNN的精华所在了。我们慢慢道来
product思想来源于,在ctr预估中,认为特征之间的关系更多是一种and“且”的关系,而非add"加”的关系。例如,性别为男且喜欢游戏的人群,比起性别男和喜欢游戏的人群,前者的组合比后者更能体现特征交叉的意义。

product layer可以分成两个部分,一部分是线性部分lz,一部分是非线性部分lp。二者的形式如下:
在这里插入图片描述

在这里,我们要使用到论文中所定义的一种运算方式,其实就是矩阵的点乘:
在这里插入图片描述

Embedding Layer

上面提到,product layer 会对Embedding层的输出进行各种product操作来实现不同特征EMbedding的两两交叉,为保证乘积操作顺利进行(不管是内积操作还是外积操作),都需要各Embedding向量维度相同,这是前提条件。
损失函数
使用和逻辑回归同样的损失函数,如下:
在这里插入图片描述

三:product层的多种特征向量交叉方式。

PNN模型对于深度学习结构的创新,在于引进了乘积层。具体来说,乘积层由线性操作部分(上图中的Z部分,对各个特征向量进行线性拼接)和非线性操作部分(上图中的P部分)组成,其中,乘积特征交叉部分又分为内积操作和外积操作,使用内积特征交叉操作的PNN模型被称为IPNN,使用外积特征交叉操作的PNN模型叫做OPNN。
再次强调:为保证乘积操作顺利进行(不管是内积操作还是外积操作),都需要各Embedding向量维度相同,这是前提条件。
内积操作:就是经典的向量内积运算,假设输入向量为Fi和Fj ,特征的内积互操作Ginner(Fi,Fj)定义如下:
Ginner(Fi,Fj) = <Fi,Fj>

外积操作:就是对输入向量为Fi和Fj的各个维度进行两两交叉,生成特征交叉矩阵,i和j 维度相同,则必回生成一个M*M的方阵(假设i的维度为M)。外积互操作Ginner(Fi,Fj)定义如下:

Ginner(Fi,Fj) = Fi,Fj t

由上可知,外机操作会将问题的复杂度由原来的M提升到M平方,PNN模型的论文中提到,为在一定程度上降低训练复杂度,给出来一个降维方法,那就是将所有外积操作结果叠加,形成一个叠加外积互操作矩阵P,定义如下:
在这里插入图片描述
从上式可以看出,叠加矩阵p的最终形式类似于让所有Embedding向量通过一个平均池化后,在进行外积互操作。

四, IPNN

在这里插入图片描述
IPNN中p的计算方式如下,即使用内积来代表pij:
在这里插入图片描述
所以,pij其实是一个数,得到一个pij的时间复杂度为M,p的大小为NN,因此计算得到p的时间复杂度为NNM。而再由p得到lp的时间复杂度是NND1。因此 对于IPNN来说,总的时间复杂度为NN(D1+M)。文章对这一结构进行了优化,可以看到,我们的p是一个对称矩阵,因此我们的权重也可以是一个对称矩阵,对称矩阵就可以进行如下的分解:
在这里插入图片描述
因此:
在这里插入图片描述
因此:
在这里插入图片描述
从而得到:
在这里插入图片描述
可以看到,我们的权重只需要D1 * N就可以了,时间复杂度也变为了D1MN。

五:OPNN

在这里插入图片描述
OPNN中p的计算方式如下:
在这里插入图片描述

此时pij为MM的矩阵,计算一个pij的时间复杂度为MM,而p是NNMM的矩阵,因此计算p的事件复杂度为NNMM。从而计算lp的时间复杂度变为D1 * NNMM。这个显然代价很高的。为了减少负责度,论文使用了叠加的思想,它重新定义了p矩阵:
在这里插入图片描述
这里计算p的时间复杂度变为了D1
M*(M+N)
代码实现:参考该文章

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值