Product-based Neural Network(PNN) - 学习笔记

这篇博客详细介绍了Product-based Neural Network(PNN)模型,重点在于其Product Layer的设计,包括内积形式和外积形式。内积形式通过特征向量的内积进行特征交叉,而外积形式则采用池化后再相乘的方式降低计算复杂度。PNN模型在处理多领域特征交叉问题时表现出优势,并在推荐系统中得到应用。

引言

这篇工作的着眼点是在特征交叉方面,提出了一个乘积层(product layer) 来对多个领域(field) 的特征进行充分的特征交叉。其中,product layer包含两种形式,分别是内积形式(inner product)和外积形式(outer product)。

整体的模型结构

在这里插入图片描述
上图是PNN的整体模型架构,这里简单介绍一下。

InputInputInput是经过one-hot编码的稀疏向量,经过EmbeddingEmbeddingEmbedding层生成稠密的特征向量矩阵xxxx[starti:endi]x[start_i:end_i]x[starti:endi]表示第iiifieldfieldfield的特征向量。

Product LayerProduct\,LayerProductLayer中,包含zzzppp两部分,zzz是由"1""1""1"信号和某个fieldfieldfield的特征组合而成,其实表示的是原始特征的恒等映射:
z=(z1,z2,...,zN)=(f1,f2,...,fN) z = (z_1,z_2,...,z_N) = (f_1,f_2,...,f_N) z=(z1,z2,...,zN)=(f1,f2,...,fN)
ppp是由任意两个fieldfieldfield的特征交叉而成:
p={pi,j},i=1...N,j=1..Npi,j=g(fi,fj) p = \left\{p_{i,j}\right\},i=1...N,j=1..N\\ p_{i,j} = g(f_i,f_j) p={pi,j},i=1...N,j=1..Npi,j=g(fi,fj)
对于内积操作,g(fi,fj)=<fi,fj>g(f_i,f_j) = <f_i,f_j>g(fi,fj)=<fi,fj>;对于外积操作,g(fi,fj)=fifjTg(f_i,f_j) = f_if_j^Tg(fi,fj)=fifjT

得到zzzppp之后,通过以下公式进一步得到lzl_zlzlpl_plp
lz=(lz1,lz2,...,lzn,...,lzD1)lp=(lp1,lp2,...,lpn,...,lpD1)lzn=Wzn⊙zlpn=Wpn⊙pA⊙B≜∑i,jAi,jBi,j l_z = (l_z^1,l_z^2,...,l_z^n,...,l_z^{D_1})\\ l_p = (l_p^1,l_p^2,...,l_p^n,...,l_p^{D_1})\\ l_z^n = W_z^n\odot z\\ l_p^n = W_p^n\odot p\\ A \odot B \triangleq \sum_{i,j}A_{i,j}B_{i,j} lz=(lz1,lz2,...,lzn,...,lzD1)lp=(lp1,lp2,...,lpn,...,lpD1)lzn=Wznzlpn=WpnpABi,jAi,jBi,j

l1l_1l1层的表达式为:
l1=relu(lz+lp+b1) l_1 = relu(l_z+l_p+b_1) l1=relu(lz+lp+b1)
l2l_2l2层的表达式为:
l2=relu(W2l1+b2) l_2 = relu(W_2l_1+b_2) l2=relu(W2l1+b2)
最后的输出为:
y^=σ(W3l2+b3) \hat{y} = \sigma(W_3l_2+b_3) y^=σ(W3l2+b3)

基于内积的Product Layer

内积操作的表达式为g(fi,fj)=<fi,fj>g(f_i,f_j) = <f_i,f_j>g(fi,fj)=<fi,fj>,文章里进行了计算复杂度的讨论,有兴趣可以查看原文。作者为了减少复杂度,对WpnW_p^nWpn进行了比较强的假设:
Wpn=θnθnT W_p^n = \theta^n\theta^{n^{T}} Wpn=θnθnT
通过这样的假设,l1l_1l1的表达式可以简化为:
Wpn⊙p=∑i=1N∑j=1Nθinθjn<fi,fj>=<∑i=1Nδin,∑i=1Nδin> W_p^n\odot p= \sum_{i=1}^N\sum_{j=1}^N\theta_i^n\theta_j^n<f_i,f_j> = <\sum_{i=1}^Nδ_i^n,\sum_{i=1}^Nδ_i^n> Wpnp=i=1Nj=1Nθinθjn<fi,fj>=<i=1Nδin,i=1Nδin>
其中,δinδ_i^nδin可以看作是向量fif_ifi乘以权重θin\theta_i^nθin。通过以上推导,lpl_plp可以改写为以下形式:
lp=(∣∣∑iδi1∣∣,...,∣∣∑iδin∣∣,...,∣∣∑iδiD1∣∣) l_p = (||\sum_iδ_i^1||,...,||\sum_iδ_i^n||,...,||\sum_iδ_i^{D_1}||) lp=(iδi1,...,iδin,...,iδiD1)

基于外积的Product Layer

由于外积操作的表达式为g(fi,fj)=fifjTg(f_i,f_j) = f_if_j^Tg(fi,fj)=fifjT,计算复杂度事非常高的,所以采用先池化再相乘的操作,以降低复杂度,具体可以看原论文:
f∑=∑i=1Nfip=∑i=1N∑j=1Nf∑(f∑)T f_{\sum} = \sum_{i=1}^Nf_i \\p = \sum_{i=1}^N\sum_{j=1}^Nf_{\sum}(f_{\sum})^T f=i=1Nfip=i=1Nj=1Nf(f)T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值