排序算法模型(9):优化特征交叉方式的积基神经网络(PNN)

2016年SJTU与UCL合作了一篇论文《Product-based Neural Networks for User Response Prediction》,这篇文章提出了FM和FNN等CTR预估算法的局限性,试图通过在神经网络中引入product layer来解决特征之间交互的问题,并命名为Product-based Neural Networks,积基神经网络。论文发表之后,product layer逐渐成为CTR预估模型中的常见配置,算是众多rank模型中的一个经典款。

FM与FNN的局限性

FM与FNN通过对特种组合的latent vector的挖掘,很大程度上改善了早先需要人工特征工程的问题。但是FNN虽然是将FM的特征组合能力与神经网络进行了结合,但这种“加法操作”对于多个类别的离散特征之间的关联挖掘或许并不是最好的方式。因此PNN的作者提出了product layer,通过求积操作来表现特征之间的关联。

积基神经网络PNN

网络结构

PNN的网络结构是由embedding layer,product layer,hidden layers以及output layer构成的。从原论文中给出的结构图中可以看出,product layer分为 z z z p p p两部分,输出分别记作线性信号 l z l_z lz和二次信号 l p l_p lp
 Product-based Neural Network Architecture.
图中的 l z l_z lz f f f 1 1 1做运算,因此就是embedding layer的结果直接复制而来,目的是为了保留线性特征,而 l p l_p lp则是对embedding layer的结果两两组和求积得到的。根据 l p l_p lp使用的求积方式的不同,PNN又被细分为Inner Product-based Neural Network(IPNN)和Outer Product-based Neural Network(OPNN)。

在得到 l z l_z lz l p l_p lp的结果之后,连接它们并送入hidden layer L1,输出记作 l 1 l_1 l1。这里一般使用ReLU作为激活函数,即 l 1 = r e l u ( l z + l p + b 1 ) l_1=relu(l_z+l_p+b_1) l1=relu(lz+lp+b1)。原论文的结构图中给出的hidden layers是两层FC,实际应用中可以根据情况自行调节。构建时只需要将每个FC layer的结果送入下一层即可,如 l 2 = r e l u ( W 2 l 1 + b 2 ) l_2=relu(W_2l_1+b_2) l2=relu(W2l1+b2)。通过所有hidden layers之后,将最后的结果通过一个output layer得到最终的CTR预估结果。以论文中的两层FC为例,最终的output layer应该表示为 y ^ = σ ( W 3 l 2 + b 3 ) \hat{y}=\sigma(W_3l_2+b_3) y^=σ(W3l2+b3)

可以看出整个PNN的网络结构非常清晰简洁,最重要的就是 l p l_p lp部分的求解。

IPNN

IPNN线性信号部分的处理是,将 z z z与权重矩阵 W z n W^n_z Wzn进行内积运算,其中 n n n是输入特征的field数,因此有 l z = ( l z 1 , l z 2 , . . . , l z n , . . . , l z D 1 ) , l_z=(l_z^1, l_z^2, ..., l_z^n, ..., l_z^{D_1}), lz=(lz1,lz2,...,lzn,...,lzD1),其中 l z n = W z n ⊙ z l_z^n = W_z^n\odot z lzn=Wznz。内积运算的定义为 A ⊙ B ≜ ∑ i , j A i , j B i , j A\odot B\triangleq\sum_{i,j}A_{i,j}B_{i,j} ABi,jAi,jBi,j,因此对于线性信息 z z z及其权重矩阵 W z n W^n_z Wzn l z n = W z n ⊙ z = ∑ i = 1 N ∑ j = 1 M ( W z n ) i , j z i , j , l_z^n = W_z^n\odot z = \sum_{i=1}^N\sum_{j=1}^M (W_z^n)_{i,j}z_{i,j}, lzn=Wznz=i=1Nj=1M(Wzn)i,jzi,j,其中 M M M是embedding之后的维度值。对于二次信号部分, l p n = ∑ i = 1 N ∑ j = 1 N ( W p n ) i , j p i , j l_p^n=\sum_{i=1}^N\sum_{j=1}^N (W_p^n)_{i,j}p_{i,j} lpn=i=1Nj=1N(Wpn)i,jpi,j,这里的 p p p W p n W^n_p Wpn都是对称的。

按照上面的方式进行连接之后,神经网络的复杂度会很高。 l 1 = r e l u ( l z + l p + b 1 ) l_1=relu(l_z+l_p+b_1) l1=relu(lz+lp+b1)在求解时,空间复杂度为 O ( D 1 N ( M + N ) ) O(D_1N(M+N)) O(D1N(M+N)),时间复杂度为 O ( N 2 ( D 1 + M ) ) O(N^2(D_1+M)) O(N2(D1+M))。论文受到FM的启发,使用矩阵分解降低模型的复杂度。假设 W p n = θ n θ n T W_p^n=\theta ^n {\theta ^n}^T Wpn=θnθnT l 1 l_1 l1的求解可以被化简为 W p n ⊙ p = ∑ i = 1 N ∑ j = 1 N θ i n θ j n ⟨ f i , f j ⟩ = ⟨ ∑ i = 1 N δ i n , ∑ i = 1 N δ i n ⟩ , W_p^n\odot p=\sum_{i=1}^N\sum_{j=1}^N\theta _i^n\theta _j^n\langle f_i, f_j\rangle=\langle\sum_{i=1}^N\delta_i^n,\sum_{i=1}^N\delta_i^n\rangle, Wpnp=i=1Nj=1Nθinθjnfi,fj=i=1Nδin,i=1Nδin,其中 δ i n = θ i n f i \delta_i^n=\theta_i^nf_i δin=θinfi。因此, l p l_p lp部分的求解就变成了 l p = ( ∥ ∑ i δ i 1 ∥ , . . . , ∥ ∑ i δ i n ∥ , . . . , ∥ ∑ i δ i D 1 ∥ ) l_p=(\parallel\sum_i\delta_i^1\parallel, ..., \parallel\sum_i\delta_i^n\parallel, ..., \parallel\sum_i\delta_i^{D_1}\parallel) lp=(iδi1,...,iδin,...,iδiD1)。原本参数量为 N × N N\times N N×N的矩阵 W p n W_p^n Wpn被分解为大小为 N N N的向量 θ n \theta^n θn,从而使 l p l_p lp部分的空间复杂度和时间复杂度都降为 O ( D 1 M N ) O(D_1MN) O(D1MN)

OPNN

OPNN与IPNN的区别是,IPNN对每对特征向量运算之后返回标量,而OPNN则是生成矩阵。在IPNN中, l p n = ∑ i = 1 N ∑ j = 1 N ( W p n ) i , j p i , j l_p^n=\sum_{i=1}^N\sum_{j=1}^N (W_p^n)_{i,j}p_{i,j} lpn=i=1Nj=1N(Wpn)i,jpi,j,这里的 p i , j p_{i,j} pi,j是一个值,因此 p p p是一个大小为 N × N N\times N N×N的矩阵。而在OPNN中, p i , j = f i f j T p_{i,j}=f_if_j^T pi,j=fifjT,此时对于任意一个 p i , j p_{i,j} pi,j而言,都是一个 M × M M\times M M×M的矩阵。因此OPNN的时间复杂度与空间复杂度,都是 O ( D 1 M 2 N 2 ) O(D_1M^2N^2) O(D1M2N2)。为了降低OPNN的复杂度,PNN的作者提出了一个superposition

作者定义 f Σ = ∑ i = 1 N f i f_\Sigma=\sum_{i=1}^Nf_i fΣ=i=1Nfi,从而重定义了二次信号部分 p = ∑ i = 1 N ∑ j = 1 N f i f j T = f Σ ( f Σ ) T p=\sum_{i=1}^N\sum_{j=1}^Nf_if_j^T=f_\Sigma(f_\Sigma)^T p=i=1Nj=1NfifjT=fΣ(fΣ)T。此时, p p p本身就是一个 M × M M\times M M×M的矩阵了,同理 W p W_p Wp的大小也是 M × M M\times M M×M。这时的 l p l_p lp部分的时间复杂度与空间复杂度再次被降低为 O ( D 1 M 2 ) O(D_1M^2) O(D1M2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值