首页 > 其他分享 >Generative-Contrastive Graph Learning for Recommendation论文阅读笔记

Generative-Contrastive Graph Learning for Recommendation论文阅读笔记

时间:2023-12-03 23:55:31浏览次数:38  
标签:Graph Contrastive 变分 视图 对比 mu 集群 Learning 节点

Abstract

首先介绍了一下GCL的一些缺点,GCL是通过数据增强来构造对比视图,然后通过最大化对比视图之间的互信息来提供自监督信号。但是目前的数据增强技术都有着一定的缺点

  • 结构增强随机退出节点或边,容易破坏用户项目的内在本质
  • 特征增强对每个节点施加相同的尺度噪声增强,忽略的节点的独特特征
    所以这篇论文的主要创新贡献点就在改变GCL的数据增强方面,采用了变分图自编码器来进行数据增强
    为了解决上面的缺点,提出了一个新的变分图生成-对比学习(VGCL)框架的推荐,具体来说,就是利用变分图重建来估计每个节点的高斯分布,然后通过对估计分布的多个抽样,生成多个对比视图,生成的对比视图可以很好的重建输入图而不产生信息失真。考虑到估计分布的相似性,我们提出了一种集群感知的双重对比学习,节点级鼓励节点的对比视图的一致性,集群级鼓励集群中节点的一致性。

Introduction

基于图的CF模型在模型学习中存在稀疏监督问题,所以需要引入一种替代方案。自监督学习利用输入数据本身作为监督信号。然后就开始介绍GCL的缺点,数据增强是GCL的关键,但是当前的数据增强方案都有缺陷。所以在本文中,我们利用了生成模型的潜力来促进对比视图的生成,而不需要数据增强。具体来说,我们提出了一个变分图生成-对比学习框架的推荐,通过对估计分布的多个抽样生成多个对比视图,而不是利用数据来增强图。这样就将生成模型和对比模型之间建立起了联系。生成的对比视图可以很好的重建输入图而不产生信息失真。估计的方差也可以针对每个节点进行定制,可以自适应的调节每个节点的对比损失规模将进行优化,然后因为相似的节点在表示空间中更接近,提出了具有两个对比目标的聚类感知对比学习,第一个是节点级的对比损失,鼓励了每个节点的多个视图的一致性。第二种是集群级的对比损失,鼓励了集群中不同节点的一致性,并从节点的估计分布中学习到集群。
这里有点疑问,为啥鼓励集群中不同节点的一致性,以及怎么从节点的估计分布中学习到集群。
本文的主要贡献:

  • 从更好的对比视图构建的角度,引入了一种新的生成-对比图学习范式,并提出了新的变分图生成对比学习框架进行推荐
  • 利用变分图重建来生成对比视图,并设计了一个集群感知的双重对比学习模块,就可以在不同的尺度上更好的挖掘基于GCL的推荐的自监督信号

Preliminaries

这里介绍一下隐式反馈(implicit feedback)的概念。在推荐系统里,分为隐式数据和显式数据。比如用户对电影的评分,这是显示数据集。隐式数据就是用户的浏览,收藏,购买等行为。
然后介绍一下什么是Readout函数,我们有时候需要整个图的特征表示,但是只有每个节点的特征表示,此时Readout函数通过聚合节点特征的方式来得到整图的特征表示。
GCL通常作为辅助任务,补充自我监督信号,进行多任务学习。
最后简要介绍一下长尾分布,也就是市场中小而散的个性化需求的总和也能产生极为惊人的利益,通俗的说,也就是“小利润,大市场”

Methodology

这个是VGCL的整体的一个架构
piy0ChF.png

变分图重建

图推断

VGCL由两个模块组成,一个变分图重构模块和一个聚类感知的对比学习模块。具体来说,我们首先使用变分图重建来估计每个节点的概率分布,然后设计聚类感知的两个对比学习目标,以鼓励从估计的分布中产生的多个抽样产生的对比视图的一致性。
VAE的部分就不详细介绍了,来介绍一下图推断(Graph Inference)
假设有一个用户-项目交互图\(\mathcal{G}=\{U\cup V,A\}\) ,和初始化的节点嵌入\(E_0\),图推理的目的是学习概率分布Z,它可以重建输入图的结构 \(\hat{A}\sim p_{\theta}(A|Z)\)。与VAE相似,我们也采用变分推断\(q_{\phi}\{Z|A,E_0\}=\Pi_{i=0}^{M+N-1}q_{\phi}\{z_i|A,E_0\}\)来近似后验概率\(p_{\theta}(A|Z)\) 。具体的说,我们编码每一个节点到一个多元高斯分布\(q_{\phi}\{z_i|A,E_0\}=\mathcal{N}(z_i|\mu_{\phi}(i),diag(\sigma_{\phi}^2(i)))\),其中\(\mu_{\phi}(i)\) 和\(\sigma_{\phi}^2(i)\)表示节点i分布的均值和方差。为了更好地利用高阶用户-项目图结构,我们采用GNN来估计节点分布的参数
\(\mu=GNN(A,E_0,\phi_{\mu}),\sigma=GNN(A,E_0,\phi_{\sigma})\),其中\(\phi_{\mu},\phi_{\sigma}\)表示图推理的可学习参数。根据之前对基于图的协同过滤的研究,我们采用LightGCN作为编码器来部署上述图推理。对于每个节点i,评价值的更新过程如下:
piyUHfJ.png
\(\mu_i^l\)和\(\mu_{i}^{l-1}\)是对应第l层和第l-1层的平均值,\(N_i\)和\(N_j\)是节点i和节点j的平均值,我们初始化平均值\(\mu^0=E^0\),这样我们就可以得到L+1层的平均值输出,然后我们融合所有层的输出并且计算对应的平均值和方差
\(\mu=\frac{1}{L}\sum^{L}_{l=1}\mu^l,\sigma=MLP(\mu)\)
方差是由以平均值为输入的MLP生成的,我们发现单层的MLP达到了最好的表现,于是\(\sigma=exp(\mu W+b)\),在得到均值和方差后,我们通过采样来生成潜在表示\(z_i\),但是因为采样过程是不可微的,所以它不能进行定向优化,于是就采用重参数化的技巧:\(z_i=\mu_i+\sigma_i*\varepsilon\)

图生成

在估计了潜在变量Z的概率分布后,生成图的目标是重建原始的用户-项目图
\(p(A|Z)=\Pi_{i=0}^{M+N-1}\Pi_{j=0}^{M+N-1}p(A_{ij}|z_i,z_j)\)
有许多方法来实现图形生成过程,比如内积,因子分解机和神经网络,这里使用内积来计算节点i与节点j连接的倾向得分(个人的一点想法,为什么是用内积,没有说明,用其它的方法效果会不会好一些)
\(p(A_{ij}=1|z_i,z_j)=\sigma(z_i^Tz_j)\)

集群感知的对比学习

对比视图图重建

给出了潜在表示\(z\sim N(\mu,\sigma^2)\)的概率分布,我们引入了一种新的基于估计分布的对比学习范式,我们通过对估计分布的多次抽样来构建对比视图,而不是进行数据增强。对每个节点i,我们生成对比表示\(z_i'\)和\(z_i''\) 。
然后开始介绍这样做的优点,首先从估计的分布中采样,可以很好的重构输入图,其次将估计的方差对每个节点进行量身定制,可以自适应的调节对比损失的规模(这里怀疑一下,为什么可以调节)

节点级别的对比损失

在构建每个节点的对比视图后,我们最大化互信息,提供自监督信号以提高推荐性能。考虑到相似的节点在表示中更接近,我们提出了集群感知的两个优化对比目标,节点级对比损失和集群级对比损失,其中节点级对比损失促进了每个节点的对比视图的一致性,集群级对比损失促进了集群中节点的对比视图的一致性
节点级对比学习的目标函数是\(L_N=L_N^U+L_N^V\) ,分别代表了用户侧损失和项目侧损失。\(B_u,B_i\)表示batch训练数据里面的用户和项目
piy03jA.png

集群级对比损失

设计这个是为了进一步区分批量训练数据中的正、负比对。目标是最大化具有相同集群的节点对的一致性,并最小化具有不同集群的节点对的一致性
假设有\(K_u\)个用户原型\(C_u\)以及\(K_i\)个项目集群原型\(C_i\),我们使用\(p(c_k^u|z_a)\)来表示用户a属于第k个用户集群的概率。给定估计的分布作为输入,我们采用K-Means算法实现了聚类过程,然后计算两个用户(项目)被分配给同一个原型的概率。(个人的一些想法,这篇文章使用的聚类方法真的好吗,可不可以采用其它的聚类方法,或者直接替换掉集群级对比损失变成其它方法呢)
piy0w9g.png
p(a,b)表示用户a和用户b被分配给同一个原型的概率。p(i,j)表示项目i和项目j属于同一个集群的概率。
然后这里定义了集群级别的对比损失\(L_C=L_C^U+L_C^I\)
piy06H0.md.png

其中SP(a)=\(\sum_{b\in B_u,b!=a}p(a,b)\)
(个人不是很理解加上这个SP是为了什么)
最终的对比损失是节点级损失和集群级损失的加权和
\(L_{cl}=L_N+\gamma L_C\)

模型优化

对于变分图重建部分,我们使用ELBO优化图推理和图生成的参数
最后我们提出的VGCL的优化函数为
\(minL=L_{ELBO}+\alpha L_{cl}+\lambda||E^0||^2\)
模型的最终算法如下:
piyBSKA.png

Conclusion

在本篇文章中,我们从更好的对比视图构建的角度研究了基于GCL的推荐,并且提出了一个新的变分图生成-对比学习框架。利用变分图重建技术而不是数据增强来生成对比视图。具体来说,就是先通过图的变分推理来估计每个节点的概率分布,然后从估计的分布中生成具有多个抽样的对比视图。这个方法的优点有两个方面。首先,生成的对比表示可以很好的重建原始图而不产生信息失真。其次,估计的方差来自不同的节点,这可以自适应的条件每个节点的对比损失的规模。然后提出了集群感知的双重对比学习,节点级鼓励节点对比视图的一致性,集群级鼓励集群中节点的一致性。

标签:Graph,Contrastive,变分,视图,对比,mu,集群,Learning,节点
From: https://www.cnblogs.com/anewpro-techshare/p/17874066.html

相关文章

  • 【graphviz笔记】
    入门新建sample.dot文件,打开编辑为:digraphg{xy}在命令行中输入dotsample.dot-Tpng-osample.png-T后接要生成的图片格式,可以是pdf、svg格式等。-o指明生成文件名指定节点属性digraphg{ 1[label="x",color=orange,style=filled] 2[label="y",col......
  • LncDLSM: Identification of Long Non-coding RNAs with Deep Learning-based Sequenc
    关键词:作者:期刊:IEEEJournalofBiomedicalandHealthInformatics年份:2023论文原文:https://doi.org/10.1101/2022.09.02.506180主要内容1问题:长链非编码RNA(LncRNAs)在调控基因表达和其他生物过程中起着至关重要的作用。区分lncRNA和蛋白质编码转录本(PCTs)有助于研究人员深......
  • Java Learning Day4 面向对象基础
    初始化顺序:默认初始化显示初始化构造器初始化(单参先执行)有内部类加载的话,在显式赋值之后,就进行新的加载 Static静态变量:静态成员变量属于类的,完全不需要创建对象使用。 private:同类中缺省:同一包中protected:不同包子类public:不同包 只有成员变量可以用权限修饰符......
  • 克莱·汤普森的合同, 你再也不是那个hero. learning area 和 performance area
    从23年6月就开始了拉锯谈判,要价格5年2.3亿,4年2亿,到4年1.6亿,勇士一直报价4年1亿到1.2亿,到了11月底的第七次谈判,勇士只报价4年5500万。结合了克莱在23-24新赛季的表现,这价格可以说是没有溢价了,这合同谈判有些期权的影子,合同是买未来的performance,时间价值的溢价是包含了不确定性,但是......
  • Vulkan/Graphics Pipelines
    渲染是vulkan最基础的功能,也是众多图形化应用最核心的部分。vulkan的渲染过程可以当作是通过执行不同阶段的命令以此来在展示设备上渲染出图片的过程。 vulkan中,渲染管线可以看作是一条生产流水线,命令在管线的开头进入,并且在管线内不同阶段执行。每个阶段都有诸如变换,读取命令......
  • 无涯教程-Python - 图形数据(Graph)
    CSGraph代表压缩稀疏图,其重点是基于稀疏矩阵表示的快速图算法。稀疏图图只是节点的集合,节点之间具有链接,图几乎可以代表任何事物-社交网络连接,其中每个节点都是一个人,并与熟人相连;图像,其中每个节点是一个像素,并连接到相邻像素;高维分布中的点,其中每个节点都连接到其最近的邻居,并......
  • 问题记录 <Latex 使用bibliography命令,引用文献中包含中文生僻字>
    问题描述LaTeX使用\bibliography和.bib设置参考文献时,中文生僻字无法显示。解决方式下载字体;将simsun.ttf文件放到.tex同一文件夹下;导言部分添加:%%解决生僻字问题,使用自定义命令\usepackage{ctex}\setCJKfamilyfont{myfont}{simsun.ttf}\newcommand{\MyFont}{\CJKfamil......
  • Java Learning Day3 数组
    System.out.print;  System.out.println;每输出一次就会换行Integer.parseInt字符串转intDouble.parseDouble字符串转double数组存储结构连续,存储元素类型相同,随机访问 JVMJVM栈:JVM栈正是java中方法执行时所占有的空间、局部变量会存于栈帧中堆:堆是JVM内存中最大......
  • GraphFrames介绍和基本用法
    阅读本篇博客前需先了解图数据、scala、spark相关知识 GraphFrames是一款图处理类库。该类库构建在DataFrame之上,既能利用DataFrame良好的扩展性和强大的性能,同时也为Scala、Java和Python提供了统一的图处理API。github:https://github.com/graphframes/graphframes官方文档:h......
  • 8-1900E - Transitive Graph
    题意:思路:tarjan缩点后,对新图DAG进行拓扑dp。代码:点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e6+7;constintinf=1e9+7;typedefpair<int,int>pll;intn,m;intdfn[N],low[N];intvis[N];vector<int>ve[N]......