论文《Product-based Neural Networks for User Response Prediction》阅读
论文概况
这篇论文是上海交大发表在ICDM 2016上的一篇论文, CCF B会,提出了模型PNN。 模型在因子分解机(Factorization Machines, FMs)具有较大的影响力, 首先提出了product操作用于 field feature之间的 interaction, 经常被引用为baseline方法。接下来,让我们一起学习一下这篇论文!
Introduction
这里我们需要指出的是,文章题目中的user response prediction在这里做出了明确的定义,是指用于预测用户做出定义的正向回应动作的概率,正向回应动作包括点击、购买等等。
Deep Learning for CTR Estimation
先贴图:
这里,我们分成三部分进行介绍。分别是未分解版IPNN, 向量分解版IPNN, 向量分解版OPNN。
未分解版IPNN
这里作者是对N个域(field)向量,分别两两进行内积,得到 N × N N\times N N×N的实数矩阵作为域之间的交互(interaction)参与模型运算。但是本文的时间复杂度和空间复杂度应该是有些问题,欢迎同学们评论区参与讨论。
原文的图片多少有点难于理解,这里放一个比较容易看的图示:
这里只显示了一个 W p W_p Wp,也即 n = 1 n = 1 n=1,实际上这里的映射矩阵应该有 D 1 D_1 D1个,用于将一次项和二次项特征(即将向量内积和向量本身堆叠形成的矩阵,就是图片中一堆箭头指向的部分)进行全连接映射。
IPNN 未分解版本时间复杂度应该为:
并行:
O
(
max
(
N
2
(
D
1
+
M
)
,
M
N
D
1
)
)
O(\max(N^2(D_1+M), \ \ MND_1))
O(max(N2(D1+M), MND1))
串行:
O
(
N
2
(
D
1
+
M
)
+
M
N
D
1
)
O(N^2(D_1+M) + \ \ MND_1)
O(N2(D1+M)+ MND1)
具体如下,我们可以看到,左边一次项的空间复杂度应该是 M N D 1 MND_1 MND1,右边应该是 N 2 D 1 N^2D_1 N2D1,因此,空间复杂度为 O ( D 1 N ( M + N ) ) O(D_1N(M+N)) O(D1N(M+N))。
另外,时间复杂度方面,左边一次项目计算内积,需要逐个进行计算,共 D 1 D_1 D1个矩阵,应该有 M N D 1 MND_1 MND1次运算;右边二次项,首先计算二次项共包含 N 2 M N^2M N2M次运算,计算完成后,形成了 N 2 N^2 N2大小的二次特征交互向量,二次向量向隐含层进行映射,需要完成 N 2 D 1 N^2D_1 N2D1。因此,综合上面所有部分,如果一次项和二次项是并行着运算的,那么时间复杂度应该是 O ( max ( N 2 ( D 1 + M ) , M N D 1 ) ) O(\max(N^2(D_1+M), \ \ MND_1)) O(max(N2(D1+M), MND1)) ;如果一次项和二次项同时运行,那么时间复杂度就应该是两个时间复杂度之和,即 O ( N 2 ( D 1 + M ) + M N D 1 ) O(N^2(D_1+M) + \ \ MND_1) O(N2(D1+M)+ MND1)。
不知道为什么原文中将一次项的时间复杂度略掉了,这是我的理解,欢迎有不同的意见能够在评论区批评指正,我向你敬礼,salute。
向量分解版IPNN
这里作者指出,对于对称矩阵 W p n W_p^n Wpn,可以使用 W p n = θ n θ n T W_p^n = \boldsymbol{\theta}^n {\boldsymbol{\theta}^n}^{\mathsf{T}} Wpn=θnθnT
这里需要指出的是,对于一个对称矩阵 W p n W_p^n Wpn,不一定存在向量 θ n \boldsymbol{\theta}^n θn使得 W p n = θ n θ n T W_p^n = \boldsymbol{\theta}^n {\boldsymbol{\theta}^n}^{\mathsf{T}} Wpn=θnθnT 成立,用反证法很容易证明。
W
p
n
=
[
1
3
3
4
]
W_p^n = \begin{gathered} \begin{bmatrix} 1 & 3 \\ 3 & 4 \end{bmatrix} \quad \end{gathered}
Wpn=[1334]
给定上面的矩阵
W
p
n
W_p^n
Wpn,无法用列向量和其转置乘积来简化,因为如果要得到对角上的元素1 和 4,那么向量
θ
n
\boldsymbol{\theta}^n
θn 必须是
(
1
,
2
)
(1, 2)
(1,2) (矩阵对角元素是向量对应元素的平方),但这样一来3就错误了(
1
×
2
≠
3
1\times2\neq3
1×2=3)。
因此,本文使用 K K K 维向量来代替实数 θ n i {\theta}_n^i θni, θ n i ∈ R K \boldsymbol{\theta}_n^i \in \mathbb{R}^K θni∈RK,表示形式使用向量内积。
向量分解版OPNN
这里不再赘述,具体形式上与IPNN类似,只不过将二次项的内积表达改为外积,这样,中间的权重矩阵就变化为 D 1 × N 2 × M 2 D_1 \times N^2 \times M^2 D1×N2×M2,这里 M 2 M^2 M2 是指 M M M 维的向量做外积形成的一个 M × M M\times M M×M的小矩阵, 这样 M × M M\times M M×M的小矩阵 一共有 N 2 N^2 N2 个(因为N个域特征两两配对)完成外积运算,这样的外积运算完成后,再映射到L1层,共有 D 1 D_1 D1个。
这里作者同样适用了一种简化,即将 特征外积之和 使用 特征之和的外积进行简化。
Experiments
这里突出两点:
-
作者借鉴Net2Net模型,首先不加隐藏层和输出层,作者先对PNN的一部分进行部分预训练,预训练完之后,加上隐含层和输出层进行进一步的训练。这样模型更容易收敛。
-
Criteo数据集很大,作者用连续7天的样本作为训练集,连着的一天作为验证集。使用negative 下采样进行数据集缩小