当前位置: 首页 > article >正文

图神经网络模型扩展(5)--2

1.图的无监督学习

        在数据爆炸的时代,大部分数据都是没有标签的。为了将它们应用到深度学习模型上,需要大量的人力来标注数据,例如我们熟知的人脸识别项目,如果想取得更好的识别效果,则一定需要大量人工标注的人脸数据。因此,研究如何利用大量的无标签数据帮助机器学习得到了越来越多的关注几乎所有的模型(无论是监督学习还是半监督学习)都需要有标签,可以是节点上的标签,也可以是图上的标签。那么,我们怎么将图神经网络扩展到无监督学习呢?

(1图的自编码器

        自编码器是实现神经网络无监督学习的一种重要方式。 一般来说,自编码器由一个编码器和一个解码器构成。 我们先通过一个图神经网络,将输入的图结构信息编码到一个隐藏变量Z:

Z=GNN(X,A),然后对得到的隐藏变量Z∈Rn×m 解码,重构原来的图:

A=sigmoid(ZZ^{T}),最后,比较A与原来的A,   得到重构损失函数(如交叉熵)。

可以把以上自编码器结构扩展到变分自编码器上,以获得一个更具解释性的概率框架,也就是图变分自编码器,在图变分自编码器中,假设要重构一个图结构,则目标是最大化以下概率:

我们用后验概率q(Z|A,X) 来近似p(Z|A,X), 并得到如图所示的下界 LELBO,然后只需要最大化这个下界作为目标函数。LELBo 包含两部分,第一部 Eq(z|A,x)[logp(A|Z)]可以认为是重构误差,第二部分KL散度KL[q(Z|A, X)||p(Z)]则可以认为是一个正则化项。

变分自编码器

        变分自编码器( Variational Auto-Encoder,VAE)的思想是用神经网络来参数化后验概率,然后通过蒙特卡洛采样的方法得到以上目标函数的近似解。回到GVAE 的例子,可以认为q(Z|A,X) 是一个编码器,用来得到隐变量的分布;而p(A|Z) 是一个解码器,用来重构图结构A。 我们可以用图卷积网络来参数化q(Z|A,X):

其中

均由两层图卷积网络得到。而解码器相对于非变分的解码器并无变化,仍然由ZzT 得到

可以看出,图自编码器和图变分自编码器在解码的过程中都是在重构邻接A,   因此,除了可以学习到节点的中间表示Z,   它们还很适合链路预测的任务,最终得到的p(A|Z) 可以用来预测A 中任意未知元素的概率。为什么在编码器里同时用了AX,  在解码器里只解码A呢?

        事实上,除了保持X不变来解码A的方案,还可以给定A来解码X。对每一个输入的图进行图卷积网络编码,解码时通过注意力机制把多个图整合成一个 邻接矩阵进行解码,重构损失函数通过比较输入的节点属性和重构图的节点属 性得到。另外,在介绍池化时讲到的Graph U-Net,则通过池化来编码,通过反池化来解码的对称结构,也可以认为是一种图上的自编码器。

        针对不同的问题,我们可能需要不同的图编码器和解码器,甚至在很多情况下,GVAE的简单框架并不能满足我们的需求,尤其是在需要生成整个图的任务中。

        Graph U-Net的整体框架。编码部分采用图卷积网络和Top-k 池化,并记住池化过程中的序号idx,而在解码部分则利用idx对称的进行反池化 xl+1=distribute(0N×c,X¹,  idx),把粗化节点的属性传播到其他被删 除的节点上(这些节点属性初始化为0)。Graph U-Net本身并没有直接用于无监督学习,而是直接用最后一层解码出的节点特征作为节点嵌入进行下游的分类任务,但是它本质上的确是一个自编码器的结构,因此 定义合适的损失函数后是可以用于无监督学习的。

2.最大互信息

        除了图自编码器,另一种非监督学习的图神经网络方法是利用互信息的最大化。图自编码器虽然取得了不错的效果,但是重构误差小其实并不一定说明学习出来的特征好。Hjelm等人在Deep  InfoMax(DIM,深度最大互信息算法)的论文中认为,好特征应该能够提取出样本的最独特的信息。那如何衡量学习 出来的信息是该样本独有的呢?于是他们引入了“互信息”来衡量。互信息是信息论中一个重要的概念,它表示一个随机变量包含另 一个随机变量的信息量。如果我们能构造一个编码器来最大化学到的嵌入和另 一个变量的互信息,就保留了节点最重要的特征。怎么计算互信息,怎么选取另一个变量呢?

        首先看互信息的表达式,对于两个变量X 与Y, 它们的互信息为:

         这并不是一个容易计算的量。幸运的是,近期有一些可扩展性很好的互信息近似方法被提出,如Belghazi 等人提出的MINE模型(互信息的神经估计),通过训练一个网络区分来自两个变量联合分布的采样和来自边际分布的采样。

        怎么选取变量呢? DIM模型在MINE模型的基础上更进一步,它可以最大化一个全局表示和局部表示之间的互信息来训练编码器。有了模型之后,我们可以把这个方法移植到图神经网络中,这就是DGI(Deep  Graph Infomax, 深度图互信息最大化)的由来。下面介绍它怎么无监督地学习图表示。

(1)负采样得到另一个图(X~,A~)C(X,A)   如果是单图采样,则可以保持 A 不变,随机改变节点特征X 的顺序。如果是多图采样,则可以将另一 个图作为负样本。

(2)得到输入图(正样本)的局部节点的嵌入表示 h=GNN(X,A)。

(3)得到负样本的局部节点表示h~=GNN(X~,A~)

(4)通过一个读取函数得到正样本的全局表示s=READOUT(h)

(5)设计一个判别器D(hi,s)=σ({h_{i}}^{T}Ws),  为样本的局部表示和全局表示形成的二元组(hi,s)打分。互信息最大化等价于优化以下目标函数:

其中N 为正样本的数量,M  为负样本的数量,E 为期望函数。虽然是非监督的图表示学习,但 DGI仍然取得了与其他监督学习相当的效果。而互信息最大化也为图表示学习带来了一个新的窗口,它被用在很多后续的任务中,如图神经网络的可解释性和无监督图分类。

3.图神经网络的预训练

        与无监督训练强相关的领域是自监督学习和预训练。预训练最大的优势是通过输入巨量的数据,使预训练好的模型只需通过微调就能迁移到不同的数据上,并在不同的目标任务上得到巨大的效果提升。由于大量的数据经常是没有人工标注的,预训练常利用无监督学习或自监督学习的方式进行。当然,预训练可以是多任务并行的,因此在有标签时也可以同时加入有监督的任务训练。那么,在图中怎么进行图神经网络的预训练呢?我们前面讲到的通过GraphSAGE 预测邻接节点共现的概率或者DGI中最大化互信息等策略都是可以用的,Hu等人 还进一步详尽地探讨了更多在图数据上进行图神经网络预训练的策略。

        这些策略可以被分为节点级别的和图级别的。在节点级别上,主要有两个自监督的任务一个是上下文(周围节点)预测,一个是属性遮蔽(预测遮蔽的节点属性或边)。展示了上下文预测任务中,一个中心节点的邻接域(其中K=2)   和上下文子图(r=1,r=4); 若为属性遮蔽任务,图中随机遮蔽了节点或边的属性,然后用图神经网络得到的嵌入表示来预测它们。

3.1节点级别的任务:上下文预测

        类似于图中的无监督训练方式,但是这里要预测的不是与周围节点的共现, 而是一个周围的子图,我们称为上下文图。这个任务的目的是希望具有相似上下文结构的节点也能被映射到相近的嵌入表示。

        对于任意节点v, 我们先采用一个要训练的主图神经网络得到这个节点的嵌入h_{v}。由于要训练的图可能很大,如果图神经网络有K 层,则我们只需要抽取节点v 周围距离小于等于K 的邻接节点进行编码。因此,节点的表示 h_{v}也代表了它的邻接域的表示。

        找到这个节点周围的上下文图,上下文图指的是到中心节点的距离大于等于r₁、小于等于r₂ 的所有点构成的子图,r₁ 被限制小于K, 所以上下文图可以和节点的邻接域有部分重合,重合的这些节点被称为上下文锚节点。找到上下文图之后,我们定义一个额外的辅助图神经网络,对上下文图进行编码,然后对所有上下文锚节点的嵌入求平均,作为一个节点上下文的向量表示,图G中节点v 的上下文向量记为{_c{v}}^{g}

        训练的目标是判断一个邻接域和一个上下文图是否属于同一个节点。具体来说,选取两个节点v 和{v}',   如果v=v'是同一个节点,那么以下sigmoid 函数的值将接近1;如果它们不是同一个节点(v'通过在随机选取的图G上随机负采样得到),那么以下 sigmoid 函数的值接近0:

3.2节点级别的任务:属性遮蔽

        先随机遮蔽节点中的一些属性(如在分子图中遮蔽节点的类型信息),然后通过图神经网络学习这个节点的嵌入,再通 过一个简单的预测层预测那些被遮蔽的属性。如果遮蔽的是边的属性,则边的嵌入可以通过与边相连的两个节点的嵌入的和得到。属性遮蔽任务主要对那些具有丰富属性标签的图非常有效,如分子图、蛋白质交互图等。

3.3 图级别的任务:属性预测和相似度预测

        对于大规模的图预训练,只有节点级别的任务是不够的,因为有不少下游任务是与整个图的表示相关的。为了得到更稳定的图嵌入表示,图级别的任务于预训练来说是一个重要的辅助。在很多科学用图数据上,我们其实是有图的各种属性标注的,如分子的化学性质等。因此,我们可以用图神经网络在这些有标签的图数据上进行预测,并作为预训练的任务。另一个可做的图级别的任务是比较两个图的相似度,如可以预测图之间的编辑距离等。

        整个预训练的过程是这样的:先在节点级别做两个自监督的预训练任务, 然后到图级别做有监督的训练。在得到经过预训练的图神经网络模型后,当我们拿到一个新的目标任务时,只需要在这个预训练模型上进行微调。例如,对于图分类任务,我们只需要在得到的图级别的表示上新建一层线性分类器就可以了。

                                                                                   

http://www.kler.cn/news/309972.html

相关文章:

  • 《Effective C++》第三版——让自己习惯C++
  • SpringDataJPA基础增删改查
  • 【OpenGL 学习笔记】01 - CLion 配置 CMake 运行初始 demo
  • 【PyTorch入门·求导相关】一文解释 PyTorch的求导 (backward、autograd.grad)
  • C#中抽象类和接⼝有什么区别?
  • 深入解析:联邦政策如何影响科技行业发展
  • windows10通过coursier安装scala
  • 什么是注解?
  • 硬件工程师笔试面试——电机
  • 25. MyBatis中的RowBounds是什么?如何实现内存分页?
  • Presto如何使用
  • CF EDU 169
  • 初写MySQL四张表:(1/4)
  • 【Kubernetes】常见面试题汇总(二十三)
  • Longman Dictionary of Contemporary English (朗文当代高级英语辞典)
  • MySQL高阶1783-大满贯数量
  • 使用python 将world的题库导入某学习软件的模板
  • 【RabbitMQ】工作模式
  • 20240911软考架构-------软考156-160答案解析
  • 【物联网】深入解析时序数据库TDengine及其Java应用实践
  • 力扣最热一百题——合并两个有序链表
  • do { ... } while (0) 的意义
  • 单片机拍照_将采集的RGB图像封装为BMP格式保存到SD卡
  • Pandas_sqlite
  • bestphp‘s revenge1
  • 排序----数据结构
  • 9.18日常记录
  • cmd修改游戏数据处理量大小
  • vue获取最近7天时间;获取任意时间段时间
  • 【前端】main.js中app.vue中 render函数的作用及使用背景