LAGCL论文阅读笔记

news/发布时间2024/5/12 4:34:35

LAGCL论文阅读笔记

Abstract

存在的问题:

​ 没有考虑到头和尾部节点之间的显著程度差异。这可能导致不均匀的表示分布,这是影响对比学习方法性能的一个关键因素。

解决方案:

​ 我们提出了一种新的长尾增广图对比学习(LAGCL)推荐方法。具体来说,我们引入了一种可学习的长尾增强方法,通过补充预测的邻居信息来增强尾部节点,并基于所得到的增强图生成对比视图。

​ 为了使数据增强模式可学习,我们设计了一个自动下降模块从头节点生成伪尾节点,一个知识转移模块从伪尾节点生成知识转移模块重建头节点。此外,我们采用生成式对抗网络,以确保生成的尾/头节点的分布与原始的尾/头节点的分布相匹配。

Introduction

继续强调存在的问题:

​ 最近的一些研究试图通过对比学习来缓解交互数据的数据稀疏性,但它们通常依赖于预定义的数据增强策略,如均匀edge dropout或打乱特征。这些方法没有考虑到头节点和尾节点之间的图结构的显著差异,也缺乏针对各种推荐数据集构建自适应数据增强的能力。这可能导致表示分布的不均匀,这是影响对比学习方法性能的关键因素

然后再提出解决方案

​ 鉴于上述局限性和挑战,我们提出了一种新的长尾增广图对比学习(LAGCL)推荐方法。为了说明这一点,考虑图1(a)的头部用户和图1(b)的尾部用户,他们具有相似的偏好。我们的方法旨在从头部用户中提取信息丰富的转换模式,并有效地适应尾部用户,如图1(c).所示具体来说,我们首先设计了一个自动下降模块,将头节点转换为伪尾部节点,模拟真实尾节点的模式。接下来,我们利用伪尾节点中的丢弃的邻居信息来学习知识传递模块,然后通过添加预测的邻居信息,将尾节点增强为伪头节点。利用对抗性训练机制对这些模块进行了更新,以确保伪头/尾节点与真实头/尾节点之间的分布匹配。最后,我们使用一种有效有效的方法来生成对比视图,通过在头节点和增强尾节点的图嵌入中注入随机噪声,利用它们的均匀性来获得更好的对比性能。

pF4M081.png

Method

模型的整体框架如下:

pF4MsKK.png

LAGCL概述

​ 首先,我们利用一个知识转移模块对尾节点进行增强,然后在增广图上生成两个图视图。接下来,我们使用一个对比损失函数来进行对比学习任务,它鼓励两个不同视图中相同节点的表示是相似的,而这些视图中不同节点的表示是不同的。最后,我们采用了多任务训练策略来提高推荐绩效。具体来说,主要任务是推荐任务,而对比学习任务和知识转移约束作为辅助任务。

长尾增强

​ 假设每个节点都有一个ground-truth邻居集,头尾节点的区别在于前者有一个完全观测的邻居集,而后者只有部分观察的邻居信息。这种不完整的信息会对模型的性能产生不利影响。因此,长尾增强技术的目的是用缺失的邻居信息来补充尾节点,以加强头尾节点之间的表示一致性。然而,进行长尾增强是一项具有挑战性的任务,因为缺少尾节点的邻居没有ground-truth标签。这种方法背后的直觉是,头部节点已经充分地观察到了邻居信息。如果我们可以通过删除头节点的邻居信息来模拟尾节点来生成伪尾节点,那么我们就可以利用伪尾节点的删除邻居信息来学习长尾增强策略。我们的长尾增强可以归纳为三个关键模块:自动丢弃模块、知识转移模块和生成式对抗性学习模块。

自动丢弃模块

​ 一种直观的方法是从头部节点中随机抽取邻居,生成伪尾节点。然而,该方法缺乏有效的监控信号来指导采样过程,导致增强的数据样本与实际尾节点样本之间存在分布偏差。为了改进数据增强过程,我们提出了一个具有可训练退出策略的自动丢弃模块,以最大限度地最小化增强的数据样本与实际尾部节点样本之间的分布偏差。具体来说,丢弃策略包括两个主要步骤:按边权排序和根据其重要性权重选择top-K邻居,在节点对之间的重要性权重计算为:

\(\mathbf{S}=(\mathbf{H}^{(0)}\mathbf{W}_s{\mathbf{H}^{(0)}}^T)\odot\mathbf{A}\)

\(W_s\)是可训练的参数,

​ 然后,为了模拟真实的尾节点,我们从尾节点邻居大小\([1,k]\)的范围内均匀地随机选择头节点的邻居大小\(k_i\)

\(k_i=\begin{cases}\text{Uniform}[1,k],&\mathbf{D}_{ii}>k,\\\mathbf{D}_{ii},&\mathbf{D}_{ii}\leq k.&\end{cases}\)

​ 最后,受[5,15]中的顶级选择方法的启发,根据其重要性权重选择最优邻接矩阵\(\hat{\mathbf{A}}\),并将其用于尾部节点的图聚合。新的邻接矩阵\(\hat{\mathbf{A}}\)被定义为:

\(\hat{\mathbf{A}}_{ij}=\begin{cases}\frac{\exp(\delta\mathbf{S}_{ij})}{1+\exp(\delta\mathbf{S}_{ij})},&\mathbf{S}_{ij}\in\text{top-}k_i(\mathbf{S}_i),\\0,&\mathbf{S}_{ij}\notin\text{top-}k_i(\mathbf{S}_i),&\end{cases}\)

​ 其中,δ是控制邻接矩阵\(\hat{A}\)的平滑度的超参数,并将节点i对应的邻域记为\(\hat{N_i}\)

知识转移模块

​ 在构建了自动丢弃模块之后,我们可以设计一个知识转移模块,利用伪尾节点的丢弃邻居信息来预测实尾节点缺失的邻居信息。具体来说,我们使用一个多层感知器(MLP)函数,用\(f_t(\mathbf{h}_i^{(l)},\mathbf{h}_{\mathcal{N}_i}^{(l)};\theta_t^{(l)})=\mathbf{m}_i^{(l)}\)表示,根据中心节点特征和观察到的邻居信息来预测缺失的邻居信息。这里,\(h_i^{(l)}\)表示节点i的l层图嵌入,\(\mathbf{h}_{\mathcal{N}_i}^{(l)}\)是可观测邻居的平均池化表示。然后,将预测的信息添加到实尾节点的邻居聚合过程中。

​ 我们可以通过知识传递函数计算具有预测邻居信息的稀疏图\(\hat{A}\)中头节点i的节点嵌入情况:

\(\hat{\mathbf{h}}_i^{(l)}=\sum_{j\in\hat{\mathcal{N}}_i}\frac1{\sqrt{|\hat{\mathbf{A}}_i|}\sqrt{|\hat{\mathbf{A}}_j|}}\hat{\mathbf{h}}_j^{(l-1)}+f_t(\hat{\mathbf{h}}_i^{(l-1)},\hat{\mathbf{h}}_{\hat{\mathcal{N}}_i}^{(l-1)},\theta_t^{(l-1)}),\)

​ 为了训练知识传递函数,我们对转移损失的定义如下:

\(\mathcal{L}_{trans}=\sum_{i\in\mathcal{V}_{head}}\sum_{l=1}^{L}\|\mathbf{h}_i^{(l)}-\hat{\mathbf{h}}_i^{(l)}\|_2^2.\)

生成对抗学习模块

​ 为了学习有效的长尾增强,实尾节点的表示分布应与自动丢弃模块生成的伪尾节点的表示分布相匹配,计算方法如下:

\(\tilde{\mathbf{h}}_i^{(l)}=\sum_{j\in\hat{\mathcal{N}}_i}\frac1{\sqrt{|\hat{\mathbf{A}}_i|}\sqrt{|\hat{\mathbf{A}}_j|}}\tilde{\mathbf{h}}_j^{(l-1)},\)

​ 其中,\(\mathbf{\tilde{h}}^{(0)}=\mathbf{h}^{(0)}\)。此外,由知识转移模块增强的伪头节点的分布应与实头节点的分布相匹配。为了实现这一点,我们使用了生成式对抗网络。该鉴别器基于节点表示来区分伪头尾节点与真实头尾节点,而生成器的目标是提供被鉴别器一致分类为真实节点的信息。这里我们将LAGCL的输出层视为生成器,它在学习过程中与鉴别器进行竞争。特别地,我们对尾部节点的对抗性约束使用了以下损失:

\[\begin{aligned}\mathcal{L}_{tail-disc}&=\sum_{i\in\mathcal{V}}1(i\notin\mathcal{V}_{tail})\text{CRossENT}(\mathbf{0},f_d(\tilde{\mathbf{h}}_i;\theta_d))\\&+1(i\in\mathcal{V}_{tail})\text{CROssENT}(\mathbf{1},f_d(\mathbf{h}_i;\theta_d)),\end{aligned} \]

​ 并使用以下头部节点损失对抗约束:

\[\begin{aligned}\mathcal{L}_{head-disc}&=\sum_{i\in\mathcal{V}}\text{CRossENT}(\hat{\mathbf{0}},\hat{f_d(\mathbf{h}_i};\theta_d))\\&+1(i\in\mathcal{V_{head}})\text{CROssENT}(\boldsymbol{1},f_d(\mathbf{h}_i;\theta_d)),\end{aligned} \]

​ 注意:\(\hat{h}\)表示自动丢弃后的又进行知识转移的表示,包含伪头部节点,\(\tilde{h}\)表示自动丢弃后的表示,包含伪尾节点

​ 其中CrossEnt(·)是交叉熵函数,\(\mathbb{1}\left(\cdot\right)\)是指标函数,\(f_d(\cdot;\theta_d)\)是由\(\theta_d\)参数化的鉴别器函数,它计算一个节点成为头节点的概率,计算方式为:

\(f_d(\mathbf{h}_i;\theta_d)=\sigma\Big(\mathbf{w}_d^\top\text{LEAKYRELU}(\mathbf{W}_d\mathbf{h}_i+\mathbf{b}_d)\Big),\)

​ 这个生成对抗模块有点看不懂

对比学习

视图生成

​ 利用上述知识传递函数,我们可以得到增强的尾部节点嵌入,如下:

\(\mathbf{h}_i^{(l)}=\sum_{j\in\mathcal{N}_i}\frac1{\sqrt{|\mathbf{A}_i|}\sqrt{|\mathbf{A}_j|}}\mathbf{h}_j^{(l-1)}+f_t(\mathbf{h}_i^{(l-1)},\mathbf{h}_{\mathcal{N}_i}^{(l-1)};\theta_t^{(l-1)}).\)

​ 然后,我们遵循SimGCL的方法,通过在空间中略微旋转细化的节点嵌入来生成不同的视图。该方法保留了原始信息,同时引入InfoNCE损失作为一个额外的自监督任务,以提高鲁棒性,如下:

\(\mathbf{h}_i^{(l)^{\prime}}=\mathbf{h}_i^{(l)}+\Delta_i^{(l)^{\prime}},\mathbf{h}_i^{(l)^{\prime\prime}}=\mathbf{h}_i^{(l)}+\Delta_i^{(l)^{\prime\prime}},\)

​ 后面就不细写了,跟SimGCL差不多

模型训练

​ 我们利用多任务训练策略,共同优化主要推荐任务和辅助任务,包括转移任务、辨别任务和对比学习任务:

\(\mathcal{L}=\mathcal{L}_{rec}+\lambda_1\mathcal{L}_{trans}+\lambda_2\mathcal{L}_{disc}+\lambda_3\mathcal{L}_{cl}+\lambda_4\|\Theta\|^2,\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/06521571.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

powerpoint:选择窗格

一,用选择窗格选中对象 如果我们想选中被上层的对象覆盖住的下面的对象,例如:表格下面被覆盖住的形状,怎么选中?工具栏->开始->排列->选择窗格: 在选择窗格 面板中,列出了当前页面中的所有对象,选中目标对象即可: 说明:刘宏缔的架构森林—专注it技术的博客,网…

无法安装 Microsoft Access Database Engine 2016 @ accessdatabaseengine_X64.exe 的解决方案

今天一个用户反应,在他的64位window 10 系统上运行 accessdatabaseengine_X64.exe 安装 Microsoft Access Database Engine 2016 时,弹出对话框提示:根据这个字面意思来看,这台电脑上之前安装了 office 32 位版本,需要先把之前安装的 office 32位版本卸载掉,才能安装 Mi…

Eyeriss:卷积神经网络节能数据流的空间架构

Eyeriss:卷积神经网络节能数据流的空间架构 https://people.csail.mit.edu/emer/media/papers/2016.06.isca.eyeriss_architecture.pdf 深度卷积神经网络(CNNs)因其优越的精度,而被广泛应用于现代人工智能系统,但其代价是计算复杂度高。复杂性来自于需要同时处理高维卷积中…

代码随想录算法训练营day32 | leetcode 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II

目录题目链接:122. 买卖股票的最佳时机 II-中等题目链接:55. 跳跃游戏-中等题目链接:45. 跳跃游戏 II-中等 题目链接:122. 买卖股票的最佳时机 II-中等 题目描述: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/…

动态数组

1、数组 数组是一种顺序存储的线性表,所有的元素的内存地址都是连续的。2、对象数组 对象数组就是存储一些相关对象地址的数组。如下图所示。 3、null值处理 关于数组中是否可以存储null取决于你的设计。 注意: 1、如果可以存储null值,那么要对代码中equals()等函数经行相关…