推荐系统笔记7-Product-based Neural Networks for User Response Prediction

本文介绍Product-based Neural Networks for User Response Prediction(简称PNN),原文Paper链接

摘要

本文和上次介绍的FNN一样,针对用户响应问题(如CTR、CVR等)建模,因为这类问题往往是类别型并且存在多个field,所以传统模型只能挖掘较浅的数据模式,且DNN不能直接用来处理高维稀疏输入(因特征空间过大),文章提出通过PNN来学习类别特征的Embedding表示,Product层用来捕获层间类别的交互模式,用更深的全连接层来进一步提取高阶交互特征。

一、介绍

通常再信息检索领域,包括推荐系统,其数据格式通常是多个field的,比如 [Weekday=Tuesday, Gender=Male, City=London] ,通过One-hot编码转换为稀疏数据,一般可通过LR、FM、GBDT来处理并能得到较不错的结果,但是这些模型依赖特征工程;文章指出FNN的弊端:1、FM限制了Embedding的质量;2、“add”操作不足以提取出多个field的交互特征;所以进而提出了通过product来处理交互;
提出PNN模型:1、直接从Embedding开始,而不需要预训练;2、使用product 层基于Embedding来建模交互特征(包括内积和外积);3、进一步通过FC来提取高阶特征模式;

二、DEEP LEARNING FOR CTR ESTIMATION

2.1、Product-based Neural Network**

多个field的特征,如用户信息(City,hour),广告信息(ID,活动ID),除了FNN中提出的不同field做One-hot编码以外,还存在field中的局部依赖性和层级结构,所以作者提出PNN(FM是经过两个特征向量的内积来实现交互的)。接下来作者详细介绍所提出的两种网络Inner Product-based Neural Network (IPNN)和Outer Product-based Neural Network(OPNN) ;
PNN的网络结构如下图所示:
推荐系统笔记7-Product-based Neural Networks for User Response Prediction
采取从上到下的描述:PNN的输出是一个概率值,y^=σ(W3l2+b3)\hat{y}=\sigma(W_3l_2+b_3)l2=relu(W2l1+b2)l_2=relu(W_2l_1+b_2)l1=relu(lz+lp+b1)l1=relu(l_z+l_p+b_1),其中**函数用的relu,而不是FNN中的tanh,且对于l1l_1层来说,lzl_z是线性信号,lpl_p是二阶信号
定义内积操作如下:
AB=i,jAi,jBi,j{\rm{A}} \odot {\rm{B}} = \sum\limits_{i,j} {{A_{i,j}}{B_{i,j}}} 首先是对于A和B的每个元素对应相乘,然后将结果求和;那么lzlpl_z和l_p的计算公式为:推荐系统笔记7-Product-based Neural Networks for User Response Prediction
也就是说,既保持了原来的线性信号,也提取了二阶信号;
z=(z1,..,zN)=(f1,..,fN)p=(pij),i=1,..N,j=1,..Nz=(z_1,..,z_N)=(f_1,..,f_N),p=(p_{ij}),i=1,..N,j=1,..N
其中fif_i是隐层向量,pij=g(fi,fj)p_{ij}=g(f_i,f_j)定义了特征交互;其中Embedding向量fi=W0x[statri:endi]f_i=W_0x[statr_i:end_i]同FNN定义,损失函数使用交叉熵:L(y,y^)=ylogy^(1y)log(1y^)L(y,\hat y)=-ylog\hat y-(1-y)log(1-\hat y)

2.2、Inner Product-based Neural Network

本节详细介绍IPNN,其中内积定义为g(fi,fj)=<fi,fj>g(f_i,f_j)=<f_i,f_j>;下面介绍上面的lzlpl_z和l_p,其中:lzn=Wznz=i=1Nj=1M(Wzn)i,jzi,j{l_z}^n = {W_z}^n \odot z = \sum\limits_{i = 1}^N {\sum\limits_{j = 1}^M {{{({W_z}^n)}_{i,j}}{z_{i,j}}} } lpn=i=1Nj=1N(Wpn)i,jpi,j{l_p}^n = \sum\limits_{i = 1}^N {\sum\limits_{j = 1}^N {{{({W_p}^n)}_{i,j}}{p_{i,j}}} } 且上式中pWPp和W_P应该是对称的(上式中的WzW_z是N*M维,因为有N个Embedding,且每个Embedding是M维的,所以内积操作产生一个标量);但是这种内积操作会导致复杂度变大,由FM的启发。作者也提出了一种简化的操作;
假设Wpn=θnθnT{W_p}^n = {\theta ^n}{\theta ^{{n^T}}},可以简化lpl_pWpnp=i=1Ni=1Nθinθjn<fi,fj>=<i=1Nδin,j=1Nδjn>{W_p}^n \odot p = \sum\limits_{i = 1}^N {\sum\limits_{i = 1}^N {{\theta _i}^n{\theta _j}^n} } < {f_i},{f_j} > = < \sum\limits_{i = 1}^N {{\delta _i}^n} ,\sum\limits_{j = 1}^N {{\delta _j}^n} >
这也就是SVM中核函数的操作了,为了方便,使用δinRM{\delta _i}^n \in {R^M}来表示内积操作结果,并且δn=(δ1n,δ2n,...,δNn)RN×M{\delta ^n} = ({\delta _1}^n,{\delta _2}^n,...,{\delta _N}^n) \in {R^{N \times M}},所以lpl_p的公式重写为:
推荐系统笔记7-Product-based Neural Networks for User Response Prediction
由此,大大减少了时间复杂度和空间复杂度;

2.3、Outer Product-based Neural Network

内积和外积的不同的地方在于:内积输出一个标量,而外积输出一个矩阵;外积定义g(fi,fj)=fifjTg({f_i},{f_j}) = {f_i}{f_j}^T,因此,pi,jRM×M{{\rm{p}}_{i,j}} \in {R^{M \times M}},因为这种操作的时间复杂度是O(D1M2N2)O({D_1}{{\rm{M}}^2}{N^2}),过于复杂,所以提出一种叠加思想
通过元素相乘的叠加,也就是先叠加N个field的Embedding向量,然后做乘法,可以大幅减少时间复杂度,定义pp
推荐系统笔记7-Product-based Neural Networks for User Response Prediction
时间复杂度变为O(D1M(M+N))O({D_1}{\rm{M(M + }}N))

2.4、Discussion

和FNN相比,PNN多了一个product层,和FM相比,PNN多了隐层,并且输出不是简单的叠加;在训练部分,可以单独训练FNN或者FM部分作为初始化,然后BP算法应用整个网络,那么至少效果不会差于FNN和FM

三、EXPERIMENTS

使用Criteo和iPinYou的数据集,并用SGD算法比较了7种模型:LR、FM、FNN、CCPM、IPNN、OPNN、PNN(拼接内积和外积层)正则化部分(L2和Dropout);
实验结果如下图所示:
推荐系统笔记7-Product-based Neural Networks for User Response Prediction
结果表明PNN提升还是蛮大的;这里介绍一下关于**函数的选择问题,作者进行了对比如下:
推荐系统笔记7-Product-based Neural Networks for User Response Prediction
从图中看出,好像tanh在某些方面要优于relu,但作者采用的是relu,relu的作用: 1、稀疏的**函数(负数会被丢失);2、有效的梯度传播(缓解梯度消失和梯度爆炸);3、有效的计算(仅有加法、乘法、比较操作);

注:上述图片均来自于原文