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

上图是PNN的整体模型架构,这里简单介绍一下。
InputInputInput是经过one-hot编码的稀疏向量,经过EmbeddingEmbeddingEmbedding层生成稠密的特征向量矩阵xxx。x[starti:endi]x[start_i:end_i]x[starti:endi]表示第iii个fieldfieldfield的特征向量。
在Product LayerProduct\,LayerProductLayer中,包含zzz和ppp两部分,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
得到zzz和ppp之后,通过以下公式进一步得到lzl_zlz和lpl_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=Wzn⊙zlpn=Wpn⊙pA⊙B≜i,j∑Ai,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>
Wpn⊙p=i=1∑Nj=1∑Nθinθjn<fi,fj>=<i=1∑Nδin,i=1∑Nδ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=1∑Nfip=i=1∑Nj=1∑Nf∑(f∑)T
这篇博客详细介绍了Product-based Neural Network(PNN)模型,重点在于其Product Layer的设计,包括内积形式和外积形式。内积形式通过特征向量的内积进行特征交叉,而外积形式则采用池化后再相乘的方式降低计算复杂度。PNN模型在处理多领域特征交叉问题时表现出优势,并在推荐系统中得到应用。

1424

被折叠的 条评论
为什么被折叠?



