修复PNN公式显示

This commit is contained in:
RuyiLuo
2022-04-08 17:17:54 +08:00
parent 9c313fbad1
commit 7ebe164830
2 changed files with 5 additions and 7 deletions

View File

@@ -55,9 +55,9 @@
#### 经典排序模型
- **GBDT+LR**【已完成】
- **特征交叉**
- FM【已完成】
- PNN【已完成】
- DCN【已完成】
- [FM](/推荐算法基础/经典排序模型/特征交叉/FM)
- [PNN](/推荐算法基础/经典排序模型/特征交叉/PNN)
- [DCN](/推荐算法基础/经典排序模型/特征交叉/DCN)
- AutoInt【完成一半待优化】
- FiBiNET【完成一半待优化】
- **WideNDeep系列**

View File

@@ -97,17 +97,15 @@ $$
从外积公式可以发现两个向量的外积得到的是一个矩阵与上面介绍的内积计算不太相同内积得到的是一个数值。内积实现的Product层是将计算得到的内积矩阵乘以一个与其大小一样的权重矩阵然后求和按照这个思路的话通过外积得到的$p$计算$W_p^n \odot{p}$相当于之前的内积值乘以权重矩阵对应位置的值求和就变成了,外积矩阵乘以权重矩阵中对应位置的子矩阵然后将整个相乘得到的大矩阵对应元素相加,用公式表示如下:
$$
\begin{aligned}
l_p^n &= W_p^n \odot{p} \\
&= \sum_{i=1}^N \sum_{j=1}^N (W_p^n)_{i,j}p_{i,j} \\
&= \sum_{i=1}^N \sum_{j=1}^N (W_p^n)_{i,j} f_i f_j^T
\end{aligned}
$$
需要注意的是此时的$(W_p^n)_{i,j}$表示的是一个矩阵,而不是一个值,此时计算$l_p$的复杂度是$O(D_1*N^2*M^2)$, 其中$N^2$表示的是特征的组合数量,$M^2$表示的是计算外积的复杂度。这样的复杂度肯定是无法接受的所以为了优化复杂度PNN的作者重新定义了$p$的计算方式:
$$
p=\sum_{i=1}^N \sum_{j=1}^N f_i f_j^T = f_{\sum}(f_\sum)^T\\
f_\sum = \sum_{i=1}^N f_i
p=\sum_{i=1}^{N} \sum_{j=1}^{N} f_{i} f_{j}^{T}=f_{\Sigma}\left(f_{\Sigma}\right)^{T} \\
f_{\Sigma}=\sum_{i=1}^{N} f_{i}
$$
需要注意这里新定义的外积计算与传统的外积计算时不等价的这里是为了优化计算效率重新定义的计算方式从公式中可以看出相当于先将原来的embedding向量在特征维度上先求和变成一个向量之后再计算外积。加入原embedding向量表示为$E \in R^{N\times M}$,其中$N$表示特征的数量M表示的是所有特征的总维度即$N*emb\_dim$, 在特征维度上进行求和就是将$E \in R^{N\times M}$矩阵压缩成了$E \in R^M$, 然后两个$M$维的向量计算外积得到最终所有特征的外积交叉结果$p\in R^{M\times M}$,最终的$l_p^n$可以表示为:
$$