Towards Robust Neural Graph Collaborative Filtering via Structure Denoising and Embedding Perturbation论文阅读笔记
Abstract
现有的鲁棒协同滤波工作主要通过去噪图结构来提高鲁棒性,而其他领域的最新进展表明,在嵌入空间中直接添加对抗性扰动可以显著提高模型的鲁棒性。在本研究中,我们提出通过结构空间的去噪和嵌入空间的扰动来提高神经图协同滤波的鲁棒性。具体地说,在结构空间中,我们测量了交互的可靠性,并进一步利用它来影响主干图神经网络的消息传播过程;在嵌入空间中,我们通过模拟对抗攻击的行为来添加分布扰动,并将其与对比学习结合相结合以提高性能。
Introduction
现有的神经图协同过滤方法很少考虑鲁棒性方面,即当存在许多噪声甚至恶意的用户-项目交互时,它们将如何执行?例如,在网上购物服务中,用户可能会意外地点击不属于他们偏好的产品(例如,随机点击或代理购物);这些点击并不一定表明他/她的真实个人偏好,而在CF中可能被视为有效的反馈。更糟糕的是,恶意用户可以故意插入精心制作的虚假交互,以使推荐系统的偏见符合他们的利益。如果没有正确地进行正则化,那么gnn的消息传递方案可能会聚合误导性的邻域信息,从而可能导致次优的推荐性能。因此,提高神经图协同滤波在噪声作用下的鲁棒性至关重要。
在文献中,有一些研究去噪内隐反馈,以提高推荐系统的鲁棒性。这些工作主要应用于样本空间,大致可以分为两类:样本选择方法和样本重加权方法。样本选择方法侧重于设计更有效的采样器来收集干净的样本,而样本重加权方法的目的是从干净的数据中区分噪声交互,并在训练过程中为噪声交互分配较低的权重。然而,这些方法并不直接影响gnn的消息传递过程,而且来自高阶邻域的聚集噪声的负面影响仍然不受控制。除了样本空间之外,在计算机视觉和自然语言处理方面的最新进展表明,在嵌入空间中直接添加对抗性扰动可以显著提高模型的鲁棒性。最近的一项工作探索了这一想法,观察到嵌入空间中的扰动也可以提高推荐性能。然而,这项工作只是在嵌入中添加了随机噪声,与对抗性扰动相比,这可能效果不佳。此外,现有的工作都没有尝试将结构空间和嵌入空间相结合,以最大限度地提高神经图协同滤波的鲁棒性。
在本文中,我们提出了一种端到端神经图协同滤波方法,RocSE。RocSE旨在从样本(结构)空间和嵌入空间的角度提高模型的鲁棒性。具体来说,在每个训练阶段,RocSE首先通过识别更可靠的交互来去噪用户-项图的结构,并进一步使用可靠性评分来影响骨干gnn的消息传播过程。其次,RocSE在嵌入空间中添加分布扰动,模拟通过插入边来操纵图结构的对抗性攻击,并进一步将其与对比学习结合,有效地提高性能。
本文的贡献如下:
-
我们提出了一种新的神经图协同滤波方法,以缓解推荐系统中噪声交互的副作用。该方法通过结构空间和嵌入空间都提高了算法的鲁棒性。据我们所知,这是第一个考虑从结构和嵌入空间中改进神经图协同过滤鲁棒性的工作。
-
在对比学习框架下,提出了一种神经图协同滤波的分布嵌入扰动方法。它将其他用户的嵌入视为扰动来模拟攻击行为,以进一步提高鲁棒性。
Method
本文的模型结构图如下:
在本节中,我们将介绍所提出的方法--通过结构去噪和嵌入扰动(RocSE)的鲁棒性神经图协同过滤方法。RocSE 的概述如图 1 所示。RocSE 采用多任务框架,通过对结构空间和嵌入空间的扰动实现鲁棒性。具体来说,在每次迭代中,RocSE 首先根据上一次迭代中更新的用户/项目嵌入计算清洁度得分。清洁度得分反映了交互图中边缘的可靠性,在此基础上应用结构去噪。然后,我们在去噪图上训练一个基于 GNN 的骨干推荐器,作为第一个训练任务。接下来,去噪图以及来自骨干 GNN 的节点/项目嵌入被送入嵌入空间扰动模块。在这个模块中,其基本思想是直接添加其他用户/项的嵌入,作为对当前用户/项的扰动。这是为了模拟敌对的攻击者在图中插入或删除边来进行攻击的情况。这种拓扑攻击从本质上改变了在嵌入空间中应用的聚合过程。对于第二个训练任务,我们通过添加不同的嵌入扰动来构造多个视图,然后应用对比学习来约束它们的一致性。对上述两个训练任务进行联合优化,并将反向传播后更新的用户/项目嵌入输入到下一次迭代。重复上述过程,直到收敛。
在下面,我们将详细解释这两个模块。
结构去噪模块
该模块主要旨在识别现有交互图中的一些可疑边缘,减少它们对消息传播的负面影响。接下来,我们将展示如何对用户和项目之间的交互图进行去噪,它主要包括以下两个步骤: (1)清洁度评分计算,(2)交互去噪。
清洁度评分计算
为了在用户-项目图中发现可疑的交互作用,我们求助于同质性理论(即,相似的个体倾向于联系在一起)。事实上,这也是协作过滤的关键构建部分,因为相似的用户倾向于有相似的偏好。剩下的问题是如何计算给定用户-项目交互的用户和项目之间的相似性。这种计算有两个问题。首先,用户嵌入和项目嵌入可能不能直接比较,因此直接计算它们的相似性可能会导致不准确的结果。其次,单个用户/项目的嵌入可能不可靠,特别是当存在有噪声的交互时。
为了解决上述两个问题,我们首先提出利用邻域信息来计算用户/项目嵌入。也就是说,我们使用来自局部邻域的聚合嵌入,而不是用户/项嵌入作为相似度计算的输入。直觉上,邻居社区作为一个整体可以更好地反映噪声影响下用户和项目的真实特征。此外,在聚合邻域时,我们建议只聚合用户嵌入,以同时表示用户和项目。换句话说,我们将相似度计算转移到用户嵌入之间的比较中,这在本质上具有可比性。
具体来说,对于项目i,我们使用它与i交互过的邻居用户来表示它。也就是说:
\(\mathbf{e}_i^{(1)}=\sum_{u\in\mathcal{N}_i}\frac1{\sqrt{|\mathcal{N}_i||\mathcal{N}_u|}}\mathbf{e}_u^{(0)},\)
其中,\(e_u^{(0)}\)表示用户的可学习嵌入。对于用户u,我们使用与 u 至少互动过一个共同项目的邻近用户来表示,即计算\(e_u^{(2)}\)为:
\(\mathbf{e}_u^{(2)}=\sum_{i\in\mathcal{N}_u}\frac1{\sqrt{|\mathcal{N}_u||\mathcal{N}_i|}}\mathbf{e}_i^{(1)},\)
其中\(e_i^{(1)}\)在上一个方程中计算。注意,上面的方程本质上增加了一个权重,使每个邻居用户的重要性与其公共项目的数量成比例(这个感觉就是普通图神经网络的聚合啊,怎么说的这么高级)。例如,如果二阶用户和当前用户节点有两个公共项,则将计算二阶用户的嵌入两次。然后,我们采用用户u与项目i之间的余弦相似度来估计清洁度得分如下:
\(\cos\left(\mathbf{e}_u^{(2)},\mathbf{e}_i^{(1)}\right)=\frac{\mathbf{e}_u^{(2)\top}\mathbf{e}_i^{(1)}}{\left\|\mathbf{e}_u^{(2)}\right\|_2\cdot\left\|\mathbf{e}_i^{(1)}\right\|_2}.\)
由于上式中的余弦值可以是负的,所以我们将该值归一化为[0,1]如下:
\(c_{u,i}=\left(\cos\left(\mathbf{e}_u^{(2)},\mathbf{e}_i^{(1)}\right)+1\right)/2.\)
我们采用\(c_{u,i}\)作为所观察到的交互作用的清洁度评分。\(c_{u,i}\)越大,表示用户u和项目i之间的交互更可靠。
去噪图结构
在获得每个观察到的用户-项目交互的估计清洁度得分后,我们将其视为去噪用户-项目图G的重要性权重。我们将得到的去噪图表示为\(\tilde{G}\)。具体来说,我们利用清洁度评分\(c_{u,i}\)如下,这导致了一个去噪的交互权重\(\tilde{r_{u,i}}\):(这跟同一年的一篇其他的去噪的文章好像啊)
\(\tilde{r}_{u,i}=\mathbb{I}\left(c_{u,i}>\theta\right)\cdot c_{u,i},\)
其中,I是一个指示器函数,如果条件为真,则返回1,θ是一个控制阈值的预定义超参数。如果用户u与项目i之间的交互的清洁度得分\(c_{u,i}\)低于阈值θ,则我们通过直接删除交互边来进行硬去噪策略。但是,当清洁度评分值大于θ时,我们将交互矩阵中对应的值ru,i重加权为cu,i,从而采用软策略减少了噪声传播到高阶邻居的影响。(咋硬软去噪都出来了,这不就是把RGCF缝进去了)
去噪图上的训练
没啥好说的,使用LightGCN作为主干GNN,使用BPR Loss作为损失函数
嵌入空间扰动模块
以往的研究主要是从图结构空间中的样本选择或重新加权的角度来减轻推荐系统中噪声样本的负面影响。在此,我们提出通过在潜在嵌入空间中加入噪声扰动,然后应用对比学习学习更鲁棒嵌入,来进一步增强模型的鲁棒性。这个过程如图2所示。
嵌入扰动
GNN 中现有的对抗性攻击主要通过添加边来操纵图结构,受此启发,我们提议模仿这类攻击,通过直接在潜在嵌入空间中添加扰动,将其纳入训练过程。为此,如图 2 所示,我们建议首先对嵌入矩阵 E(0) 进行随机洗牌操作,然后将洗牌后的嵌入添加到原始嵌入中。具体来说,假设 \(\mathbf{E}^{(0)}=(\mathbf{E}_u^{(0)},\mathbf{E}_i^{(0)})\)是所有用户和项目的初始嵌入矩阵,则有
\[\tilde{\mathbf{E}}_{u}^{(0)}=\mathbf{E}_{u}^{(0)}+\epsilon\cdot f_{\mathrm{norm~}}\left(f_{\mathrm{shuffle~}}\left(\mathbf{E}_{u}^{(0)}\right)\right),\\\tilde{\mathbf{E}}_{i}^{(0)}=\mathbf{E}_{i}^{(0)}+\epsilon\cdot f_{\mathrm{norm~}}\left(f_{\mathrm{shuffle~}}\left(\mathbf{E}_{i}^{(0)}\right)\right), \] 其中,fshuffle是为所有用户和项目随机打乱嵌入的洗牌操作。换句话说,我们引入了来自其他用户或项目的不相关的嵌入作为噪声扰动。这种策略可能对攻击更有效,因为添加的扰动来自来自现有用户/项目的真实分布。函数fnorm表示对嵌入向量的归一化操作,ϵ是一个控制扰动大小的超参数。
此外,我们在所有层中进行上述扰动,得到最终的扰动嵌入,可以写成如下:
\[\begin{aligned} &\tilde{\mathbf{E}}(l)&& =\quad\tilde{\mathbf{A}}\tilde{\mathbf{E}}^{(l-1)}+\Delta^{(l)}, \\ &\Delta^{(l)}&& =\quad\epsilon\cdot f_\text{norm }\left(f_\text{shuffle }\left(\tilde{\mathbf{A}}\tilde{\mathbf{E}}^{(l-1)}\right)\right), \\ &&\mathbf{E}^{\prime}& =\quad\frac1L\left(\tilde{\mathbf{E}}^{(1)}+\tilde{\mathbf{E}}^{(2)}+\cdots+\tilde{\mathbf{E}}^{(L)}\right), \end{aligned} \]互信息最大化
这里没有什么好说的,用了InfoNCE损失函数
损失函数
\(\mathcal{L}=\mathcal{L}_{\mathrm{BPR}}+\lambda_1\mathcal{L}_{\mathrm{cl}}+\lambda_2\|\Theta\|_F^2,\)
整体的算法流程如下:
标签:RocSE,嵌入,mathbf,论文,用户,笔记,鲁棒性,扰动,交互 From: https://www.cnblogs.com/anewpro-techshare/p/18194228