💡 本次解读的文章是 2020 年发表于 AAAI 的一篇基于图卷积神经网络的用户物品协同过滤推荐算法论文, 这篇论文证实了去除图卷积网络中非线性模块会提升推荐性能,并基于此提出了一种专门针对用户-物品协调过滤(CF)的残差网络结构,缓解了具有稀疏用户-物品交互数据的图卷积聚合操作中的过平滑问题。
一、背景介绍
随着近年来图卷积神经网络技术(GCN)的发展,目前该项技术已经在多个领域取得了成效,在推荐系统领域,虽然基于 GCN 的推荐算法取得了一定的效果,但是本文认为基于 GCN 的协同过滤(CF)算法中的两个重要问题仍然没有被解决:1)GCNs 的邻域聚合遵循图卷积操作和非线性变换这两个步骤,其中,图卷积操作对聚合邻域信息和建模高阶图结构是有效的,但引入额外复杂度的非线性变换是否合适的问题有待讨论;2)目前大多数基于 GCN 的模型只能堆叠极少层(例如 2 层),这是因为图卷积操作是一种特殊的图拉普拉斯平滑,随着深度的增加,尤其是在稀疏图结构中,容易引起过度平滑效应,导致更高层的邻居对每个节点来说是不可区分的,而如何更好地对图结构进行建模的同时,避免这一过程中的过度平滑效应,仍然是一个值得思考的问题。
二、本文贡献
(1)从大多数图任务中分析了 CF 的独特性,并证明了去除非线性变换能提升推荐的性能;
(2)提出融入线性残差学习的 GCN 模型,捕捉低阶和高阶特征,以此缓解过度平滑问题。
三、LR-GCCF 模型
本文提出的 LR-GCCF 模型改进了现有基于 GCN 模型的不足,具有两个特点:1)在每一层的特征传播步骤中,使用简单的线性嵌入传播取代非线性变换;2)使用一种基于残差的网络结构来克服以往容易过平滑的局限性。
(1)二分图构建
在符号表示上,
U
\mathcal{U}
U 表示有
M
M
M 个用户的用户集(
∣
U
∣
=
M
|\mathcal{U}| = M
∣U∣=M),
V
\mathcal{V}
V 表示有
N
N
N 个物品的物品集(
∣
V
∣
=
N
|\mathcal{V}| = N
∣V∣=N),
R
∈
R
M
×
N
\mathbf{R} \in \mathbb{R}^{M \times N}
R∈RM×N 表示用户对物品的评分矩阵,其中,
r
a
i
=
1
r_{ai}=1
rai=1 表示用户
a
a
a 喜欢物品
i
i
i,否则取零。对于给定的评分表,用户-物品二分图可表示为
G
=
<
U
∪
V
,
A
>
\mathcal{G} = <\mathcal{U} \cup \mathcal{V},\mathbf{A}>
G=<U∪V,A> ,
A
\mathbf{A}
A 由评分矩阵
R
\mathbf{R}
R 构建得到:
A
=
[
R
0
N
×
M
0
M
×
N
R
T
]
\mathbf{A}=\left[\begin{array}{cc}\mathbf{R} & \mathbf{0}^{N \times M} \\ \mathbf{0}^{M \times N} & \mathbf{R}^{\mathbf{T}}\end{array}\right]
A=[R0M×N0N×MRT]
(2)线性嵌入传播
令
E
∈
R
(
M
+
N
)
×
D
\mathbf{E} \in \mathbb{R}^{(M+N) \times D}
E∈R(M+N)×D 表示用户和物品的自由嵌入(与以节点特征作为固定输入数据的 GCN 任务不同,嵌入矩阵是未知的,需要在 LR-GCCF 中训练进行训练),矩阵的前M行,即
E
[
1
:
M
]
\mathbf{E}[1:M]
E[1:M] 为用户嵌入子矩阵,
E
[
M
+
1
:
M
+
N
]
\mathbf{E}[M+1:M+N]
E[M+1:M+N] 为物品嵌入子矩阵,LR-GCCF 将嵌入作为输入:
E
0
=
E
\mathbf{E}^{0} = \mathbf{E}
E0=E
在迭代的过程中,第
k
+
1
k+1
k+1 层的嵌入表示由第
k
k
k 层的嵌入表示线性聚合获得:
E
k
+
1
=
S
E
k
W
k
\mathbf{E}^{k+1} = \mathbf{S}\mathbf{E}^{k}\mathbf{W}^{k}
Ek+1=SEkWk
其中,
S
=
D
~
−
0.5
A
~
D
~
−
0.5
\mathbf{S}=\tilde{\mathbf{D}}^{-0.5} \tilde{\mathbf{A}} \tilde{\mathbf{D}}^{-0.5}
S=D~−0.5A~D~−0.5 表示添加自环的标准化邻接矩阵,
A
~
=
A
+
I
\tilde{\mathbf{A}} = \mathbf{A} + \mathbf{I}
A~=A+I 表示添加自环,
D
~
\tilde{\mathbf{D}}
D~ 是
A
~
\tilde{\mathbf{A}}
A~ 的度矩阵,
W
k
\mathbf{W}^{k}
Wk 是可训练的线性变换参数。上述矩阵形式等价于将每个用户
u
u
u 和每个物品
i
i
i 的更新嵌入建模为:
[
E
k
+
1
]
u
=
e
u
k
+
1
=
[
1
d
u
e
u
k
+
∑
j
∈
R
u
1
d
j
×
d
u
e
j
k
]
W
k
\left[\mathbf{E}^{k+1}\right]_u=\mathbf{e}_u^{k+1}=\left[\frac{1}{d_u} \mathbf{e}_u^k+\sum_{j \in R_u} \frac{1}{d_j \times d_u} \mathbf{e}_j^k\right] \mathbf{W}^k
[Ek+1]u=euk+1=
du1euk+j∈Ru∑dj×du1ejk
Wk
[
E
k
+
1
]
i
=
e
i
k
+
1
=
[
1
d
i
e
i
k
+
∑
u
∈
R
i
1
d
i
×
d
u
e
u
k
]
W
k
\left[\mathbf{E}^{k+1}\right]_i=\mathbf{e}_i^{k+1}=\left[\frac{1}{d_i} \mathbf{e}_i^k+\sum_{u \in R_i} \frac{1}{d_i \times d_u} \mathbf{e}_u^k\right] \mathbf{W}^k
[Ek+1]i=eik+1=[di1eik+u∈Ri∑di×du1euk]Wk
其中,
d
i
(
d
u
)
d_{i}(d_{u})
di(du) 是物品
i
i
i(用户
u
u
u)的对角度,
R
∗
R_{*}
R∗ 是二分图
G
\mathcal{G}
G 中节点(
∗
*
∗)的邻居。
(3)残差偏好预测
在深度为
K
K
K 的模型中,第
K
K
K 层的输出为
E
K
\mathbf{E}^{K}
EK(由上述传播过程求得),对于每个用户(物品),
e
u
K
\mathbf{e}_u^K
euK(
e
i
K
\mathbf{e}_i^K
eiK)捕获最多
K
K
K 阶二分图相似性。之后,基于用户潜在向量和物品潜在向量之间的内积求取偏好
r
^
u
i
\hat{r}_{ui}
r^ui:
r
^
u
i
=
<
e
u
K
,
e
i
K
>
\hat{r}_{u i}=<\mathbf{e}_u^K, \mathbf{e}_i^K>
r^ui=<euK,eiK>
在实际应用中,大多数基于 GCN 的变体和推荐模型,在
K
=
2
K = 2
K=2 时取得了最好的性能。这些 GCN 变体和推荐模型的总体趋势是:性能随着
K
K
K 从 0 增加到 2 而增加,随着
K
K
K 继续增加,性能迅速下降,一个可能的原因是深层的节点嵌入趋于过度平滑,即它们更相似,而区别信息更少。基于此,本文引入了残差学习机制,将上述偏好公式进行了扩展,得到
r
^
u
i
k
+
1
=
r
^
u
i
k
+
<
e
u
k
+
1
,
e
i
k
+
1
>
\hat{r}_{ui}^{k+1}=\hat{r}_{ui}^{k}+<\mathbf{e}_{u}^{k+1},\mathbf{e}_{i}^{k+1}>
r^uik+1=r^uik+<euk+1,eik+1>,则扩展后的残差预测展开式可表示为:
r
^
u
i
=
r
^
u
i
K
−
1
+
<
e
u
K
,
e
i
K
>
=
r
^
u
i
K
−
2
+
<
e
u
K
−
1
,
e
i
K
−
1
>
+
<
e
u
K
,
e
i
K
>
=
r
^
u
i
0
+
<
e
u
1
,
e
i
1
>
+
…
+
<
e
u
K
,
e
i
K
>
=
<
e
u
0
∥
e
u
1
∥
…
∥
e
u
K
,
e
i
0
∥
e
i
1
∥
…
∥
e
i
K
>
.
\begin{aligned} \hat{r}_{u i} & =\hat{r}_{u i}^{K-1}+<\mathbf{e}_u^K, \mathbf{e}_i^K> \\ & =\hat{r}_{u i}^{K-2}+<\mathbf{e}_u^{K-1}, \mathbf{e}_i^{K-1}>+<\mathbf{e}_u^K, \mathbf{e}_i^K> \\ & =\hat{r}_{u i}^0+<\mathbf{e}_u^1, \mathbf{e}_i^1>+\ldots+<\mathbf{e}_u^K, \mathbf{e}_i^K> \\ & =<\mathbf{e}_u^0\left\|\mathbf{e}_u^1\right\| \ldots\left\|\mathbf{e}_u^K, \quad \mathbf{e}_i^0\right\| \mathbf{e}_i^1\|\ldots\| \mathbf{e}_i^K>.\end{aligned}
r^ui=r^uiK−1+<euK,eiK>=r^uiK−2+<euK−1,eiK−1>+<euK,eiK>=r^ui0+<eu1,ei1>+…+<euK,eiK>=<eu0
eu1
…
euK,ei0
ei1∥…∥eiK>.
四、模型训练
在获取了残差预测向量表示后,对残差预测向量公式进行进一步地转换:
r
^
u
i
=
<
e
u
0
∥
e
u
1
∥
…
∥
e
u
K
,
e
v
0
∥
e
v
1
∥
…
∥
e
v
K
>
=
<
[
E
0
]
u
∥
…
∥
[
S
K
E
0
W
0
…
W
K
]
u
,
[
E
0
]
i
∥
…
∥
[
S
K
E
0
W
0
…
W
K
]
i
>
=
<
[
E
0
]
u
∥
…
∥
[
S
K
E
0
Y
K
]
u
,
[
E
0
]
i
∥
…
∥
[
S
K
E
0
Y
K
]
i
>
\begin{aligned} \hat{r}_{u i}= & <\mathbf{e}_u^0\left\|\mathbf{e}_u^1\right\| \ldots\left\|\mathbf{e}_u^K, \quad \mathbf{e}_v^0\right\| \mathbf{e}_v^1\|\ldots\| \mathbf{e}_v^K> \\ =< & {\left[\mathbf{E}^0\right]_u\|\ldots\|\left[\mathbf{S}^K \mathbf{E}^0 \mathbf{W}^0 \ldots \mathbf{W}^K\right]_u, } \\ & {\left[\mathbf{E}^0\right]_i\|\ldots\|\left[\mathbf{S}^K \mathbf{E}^0 \mathbf{W}^0 \ldots \mathbf{W}^K\right]_i>} \\ = & <\left[\mathbf{E}^0\right]_u\|\ldots\|\left[\mathbf{S}^K \mathbf{E}^0 \mathbf{Y}^K\right]_u, \quad\left[\mathbf{E}^0\right]_i\|\ldots\|\left[\mathbf{S}^K \mathbf{E}^0 \mathbf{Y}^K\right]_i>\end{aligned}
r^ui==<=<eu0
eu1
…
euK,ev0
ev1∥…∥evK>[E0]u∥…∥[SKE0W0…WK]u,[E0]i∥…∥[SKE0W0…WK]i><[E0]u∥…∥[SKE0YK]u,[E0]i∥…∥[SKE0YK]i>
其中,
Y
K
=
W
0
W
1
.
.
.
W
K
\mathbf{Y}^{K} = \mathbf{W}^{0}\mathbf{W}^{1}...\mathbf{W}^{K}
YK=W0W1...WK(意味着在实际训练过程中可用一个矩阵参数代替多个矩阵参数,极大减少参数的数量),
S
K
\mathbf{S}^{K}
SK 表示
S
\mathbf{S}
S 的
K
K
K 次幂。由于本文关注的是隐式反馈,因此采用 BPR 中基于成对排序的损失函数:
min
Θ
L
(
R
,
R
^
)
=
∑
a
=
1
M
∑
(
i
,
j
)
∈
D
a
−
ln
(
s
(
r
^
a
i
−
r
^
a
j
)
)
+
λ
∥
Θ
1
∥
2
\min _{\Theta} \mathcal{L}(\mathbf{R}, \hat{\mathbf{R}})=\sum_{a=1}^M \sum_{(i, j) \in D_a}-\ln \left(s\left(\hat{r}_{a i}-\hat{r}_{a j}\right)\right)+\lambda\left\|\Theta_1\right\|^2
ΘminL(R,R^)=a=1∑M(i,j)∈Da∑−ln(s(r^ai−r^aj))+λ∥Θ1∥2
其中,
Θ
=
[
Θ
1
,
Θ
2
]
\Theta = [\Theta_{1}, \Theta_{2}]
Θ=[Θ1,Θ2],
Θ
1
=
[
E
0
]
\Theta_{1}=[\mathbf{E}^{0}]
Θ1=[E0],
Θ
=
[
[
Y
k
]
k
=
1
K
]
\Theta = [[\mathbf{Y}^{k}]^{K}_{k=1}]
Θ=[[Yk]k=1K],
λ
\lambda
λ 是是控制用户和物品自由嵌入矩阵复杂度的正则化参数,
D
a
=
{
(
i
,
j
)
∣
i
∈
R
a
∧
j
∈
V
−
R
a
}
D_a=\left\{(i, j) \mid i \in R_a \wedge j \in V-R_a\right\}
Da={(i,j)∣i∈Ra∧j∈V−Ra} 表示成对训练数据,
R
a
R_{a}
Ra表示用户
a
a
a 评分过的物品集。