论文标题:Graph Contrastive Learning with Adaptive Augmentation
论文链接:https://arxiv.org/abs/2010.14945
论文来源:WWW 2021
图对比学习中的数据增强在近来的方法中被证明是一个关键的部分,然而对于图数据增强的方法的研究却是不充分的。对于图像和文本来说,数据增强有很多种方式,然而对于图数据来说,数据增强是不容易的,这是由图数据的非欧几里得特性引起的。本文认为过去的图数据增强方法有两个缺点:
①简单的数据增强,比如DGI中的特征打乱,对于生成节点多样化的邻域(也就是上下文)是不充分的,尤其是节点特征较为稀疏时,会导致对比目标函数的优化是困难的;
②在执行数据增强时忽略了不同节点和不同边的影响。
数据增强应该保留原始数据最本质的特征,举例来说,对一张猫的图片进行数据增强(比如对其进行翻转),应该使得增强后的图仍然是一只猫,而不能使其丢失其作为猫的本质特征,这样模型才可以通过对比来学习到猫的特征。同样的,如果在对图通过随机删除边的方式进行数据增强时,某些重要的边被删除掉就会影响最终学习到的embedding的质量,也就是说图的不同节点和不同边在数据增强时产生的影响是不同的,在数据增强时应该尽可能的保留重要的边以及重要的节点特征,而一些图数据增强采用随机处理的方式,这样势必造成性能的损伤。
对比学习得到的表示应该对通过数据增强引入的破坏具备一定的不变性,因而数据增强策略应自适应输入的图,以反映其内在模式。同样的以删除边的数据增强方式为例,我们应该给不重要的边以大的移除概率,给重要的边以小的移除概率。然后,该方案能够引导模型忽略不重要边上引入的噪声,从而学习输入图下的重要模式。
本文提出了Graph Contrastive learning with Adaptive augmentation(GCA)框架来利用自适应的数据增强策略进行图的节点表示学习,整体框架图如下:

本文采用的自适应图数据增强的主要思想是给不重要的边以更大的移除概率,给不重要的节点特征维度以更大的mask概率。
使用代表一个图,
代表节点集合以及边的集合。使用
代表节点特征矩阵,使用
代表邻接矩阵,
是节点
的特征,当
时
。我们的目标是学习一个GNN encoder
,提供低维节点表示,也就是
,使用
表示学习到的
的表示,这些表示将被用于下游任务。本文实验中采用的encoder为两层GCN。
按照GCA的框架,每次迭代时采样两个随机增强函数和
,
是所有可能的增强函数的集合。然后获得图的两个视图
以及
,学习到的节点表示为
以及
,这里的
是视图的特征矩阵和邻接矩阵。
接着使用得到的节点表示来进行对比学习的过程。对于节点关于两个个视图的表示分别为
和
,正样本为
与
的组合,负样本为
和
分别与两个视图中其他节点的表示的组合。对于正样本对
,采用InfoNCE损失:
这里的是一个温度超参数。本文定义discriminator为
,这里
是余弦相似度,
是一个非线性变换(采用两层MLP),用来增强discriminator的表达能力。最终需要最大化的目标函数为:
整个模型的算法如下:

本文研究的重点在于自适应的图数据增强方法,希望数据增强在扰乱不重要的连接和特征时能够保持重要的结构和属性不变。本文采用随机删除边和mask节点属性的方式来进行数据增强,但是删除和mask的概率应该向不重要的边或特征倾斜,也就是对于不重要的边或特征删除或mask的概率要大,对于重要的要小,这是本文数据增强方法设计的基本思想。
对于图的拓扑结构,本文考虑采用随机移除边的方式来进行数据增强,具体的,就是从原始边集合中采样一个子集
,采样过程依照以下概率:
这里的是移除边
的概率,
就是生成的视图的边集合。
应该能够反映边的重要性,对于重要的边
应该要小于不重要的边。
在网络科学中,节点中心性(node centrality)是度量节点影响力时广泛使用的度量。我们通过边的两个节点的中心性来定义边的中心性
。给定一个节点中心性度量
,边的中心性定义为两个节点中心性的平均:
在有向图上,我们简单地使用尾节点的中心性,也就是,因为边的重要性通常由被指向的节点决定。接下来基于边的中心性来获得其移除的概率。首先,由于节点中心性(比如采用节点度时)的数值可能跨越多个数量级,因此设置
来缓解连接密集的节点的影响。接着概率通过一个标准化的过程来获得:
这里的是一个超参数来控制移除边的总体概率,
和
是
的最大值和平均值,并且
,是一个截断概率,用来防止过高的移除概率导致对图的过分破坏。
对于节点中心性的度量,采用以下三种:度中心性、特征向量中心性以及PageRank中心性。这三种度量是简单而高效的。
度中心性 节点的度本身可以作为中心性的度量。在有向图中采用节点的入度。尽管节点度是最简单的中心性度量之一,但它非常有效且具有启发性。这一度量背后的假设是重要的节点就是拥有许多连接的节点。
特征向量中心性 节点的特征向量中心性定义为对应于邻接矩阵的最大特征值的特征向量,具体的,有,这里的
是邻接矩阵的最大特征值,则节点
的特征向量中心性就是
。特征向量中心性的基本思想是,一个节点的中心性是相邻节点中心性的函数。也就是说,与你连接的人越重要,你也就越重要。不同于度中心性,度中心性假设所有邻居对节点的重要性贡献相等,特征向量中心性也考虑了邻居节点的重要性。由于
,那么特征向量中心性向量
就可以表示为
,那么节点
的中心性就是:
上面的式子表明节点的中心性相当于对其邻居节点的中心性做了平均。当一个节点与很多节点相连或者与高影响力的节点相连时会有比较高的节点中心性。在有向图上,我们使用右特征向量来计算中心性,它对应节点的入边。注意,由于只需要最大特征值的特征向量,计算特征向量中心性的计算负担是可以忽略的。
PageRank中心性 PageRank中心性定义为PageRank算法计算得到的PageRank权重。该算法将影响沿有向边传播,将聚集的影响最大的节点视为重要节点。具体的,中心性数值定义为:
这里是PageRank中心性得分向量,
是一个阻尼因子,设置为
。对于无向图,我们通过将一条无向边转换为两条有向边来将其转换为有向图。
下图展示了3种不同的中心性度量的应用:

我们通过随机mask一些维度来为节点特征添加噪声。首先我们采样一个随机向量,每个维度由伯努利分布独立采样得到,也就是
,然后生成的节点特征
为:
这里的是拼接操作,
是哈达玛积。
类似拓扑结构的数据增强,节点属性维度的mask概率应该反映第
个维度的重要性,我们假设在重要的节点中频繁出现的维度是重要的,以此来定义特征维度的权重。对于稀疏one-hot节点特征,比如
,维度
的权重计算为:
这里的是一种节点中心性度量。上面式子中第一项
表示维度
是否在节点
中出现,第二项衡量每次出现的节点重要性。举个直观的例子,考虑一个引用网络,其中每个特征维度对应一个关键字,在一篇影响力很大的论文中频繁出现的关键词应该被认为是信息丰富和重要的。
对于稠密连续的节点特征,采用以下方式:
类似的,以标准化的方式获得概率:
这里的,
和
是
的最大值和平均值,
是一个控制总体概率的超参数。
在GCA中联合执行拓扑和节点的数据增强。对于两个视图来说,和
是不一样的,用
和
来表示。另外采用三种不同的节点中心性度量的GCA分别记作GCA-DE, GCA-EV和GCA-PR。GCA是为学习节点表示而设计的,并未涉及图表示的学习。注意,所有的中心性和权重度量都只依赖于原始图的拓扑和节点属性。因此,它们只需要计算一次,不会带来太大的计算负担。
本文实验采用以下数据集:

下表为上面数据集上的节点分类任务性能指标:

下面的消融实验探究了两种数据增强方式的影响:

下图展示了不同的概率对性能的影响:

我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,