From 7ebe1648305dffcd637030e456ecd92a63ccfa69 Mon Sep 17 00:00:00 2001 From: RuyiLuo Date: Fri, 8 Apr 2022 17:17:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DPNN=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 +++--- docs/推荐算法基础/经典排序模型/特征交叉/PNN.md | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/README.md b/docs/README.md index 75e77c83..b67c4a6b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -55,9 +55,9 @@ #### 经典排序模型 - **GBDT+LR**【已完成】 - **特征交叉** - - FM【已完成】 - - PNN【已完成】 - - DCN【已完成】 + - [FM](/推荐算法基础/经典排序模型/特征交叉/FM) + - [PNN](/推荐算法基础/经典排序模型/特征交叉/PNN) + - [DCN](/推荐算法基础/经典排序模型/特征交叉/DCN) - AutoInt【完成一半,待优化】 - FiBiNET【完成一半,待优化】 - **WideNDeep系列** diff --git a/docs/推荐算法基础/经典排序模型/特征交叉/PNN.md b/docs/推荐算法基础/经典排序模型/特征交叉/PNN.md index db11bb89..31feda2b 100644 --- a/docs/推荐算法基础/经典排序模型/特征交叉/PNN.md +++ b/docs/推荐算法基础/经典排序模型/特征交叉/PNN.md @@ -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$可以表示为: $$