| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 图神经网络(8)- GNN-application -> 正文阅读 |
|
[人工智能]图神经网络(8)- GNN-application |
目录 condition 1:输入的图没有节点特征(可能只有邻接矩阵 condition1:图过于稀疏,信息传递效率低——增强稀疏图 摘要: 图的特征增强,图的结构增强,GNN训练过程中的处理和数据集的划分 Augment Graphs在介绍图神经网络时,我们假定认为计算图就是原始的图,但是实际应用中我们很少使用原始图。因为,在实际中,a.得到的图并不是完全符合模型的要求,b.就算符合要求增强得到的效果也更好。 增强图分为两个方面:图的特征增强与图的结构增强 图的特征增强图的特征增强,主要是因为图的特征过少,导致最后模型的实现结果不佳。下面分情况分析。 condition 1:输入的图没有节点特征(可能只有邻接矩阵solution:? ? ? ? ? ? ? ? ? a. 给节点分配相同的实数值做特征。 ? ? ? ? ? ? ? ? ? b. 给节点分配ID值(可以用one-hot的方式)做特征。 两种方法的比较: condition 2:特殊图结构,GNN很难学例如GNN学不会,V1所在环的长度,区分不了下面两种情况!!Jure Leskovec给出的原因是图里面所有点都是度为2,所以这两个图的计算图是一样的二叉树。我没完全理解这个意思。 solution????????增加一个节点特征用来表示这个环的长度,如果是其他情况,就增加节点特征表示其他——这个思路就是,如果GNN从图结构学不会这个特征,那么我们就把它加到节点特征里,让GNN从节点特征学。(GNN的学习经验来源就是节点特征+图结构) 其他常用增强特征:节点度,聚集系数,PageRank,centrality(参考————有空再补) 图的结构增强图的结构增强有三种情况,分别是图过于稀疏,图过于密集以及图过于大。每一种情况中,由于图的结构问题,都会带来实际使用中的问题。 condition1:图过于稀疏,信息传递效率低——增强稀疏图solution:a. 增加虚拟边 b.增加虚拟点——虚拟点连接所有边 condition2:图过于密集,信息传递开销大solution:节点邻居采样有兴趣可以看这篇论文。 Hamilton et al. Inductive Representation Learning on Large Graphs, NeurIPS 2017 具体操作就是:例如求A的embedding,在GNN的每一层,A的邻居都是采样获得,不是所有的邻居。 优点:1.极大的减少了计算代价, ? ? ? ? ? ?2.Allows for scaling to large graphs (more about this later) condition3:图过于大,计算图太大了,数据量大????????Will cover later in lecture: Scaling up GNNs(后面补参考链接) 图的训练过程下面是完成一个GNN task的流程模板: ?可以看出来,前面的GNN就是得到节点embeddings,后面的大致流程其实就和普通的NN一样。当然也有GNN很特殊的地方。 GNN的预测头**(重要)对于GNN得到的节点embeddings,在处理不同层级的任务时,处理方式不同。 节点任务:不需要什么太多的处理,直接把embeddings当作线性回归或者逻辑回归模型的输入就行。 ?边任务:两种处理方式:1. Concatenation + Linear 2.?Dot product ????????????????有一个需要注意的小知识点,就是维度的要求。 ?图任务:需要把所有的节点embeddings聚合到一起,作为图embedding。 聚合一般采用下面的这些全局池化操作 ?这些操作对于小的图效果很好。但是池化操作太简略,对于有些结构不能区分。例如: ?这个时候引入更为复杂的hierarchically global pooling。这种池化的思路很简单,就是全局池化的时候,不是所有点一起,而是把点分成几部分,每个部分进行全局池化,最后的结果再来一次全局池化。 在实际操作中,可以用一个GNN来计算怎么把点分成几部分,另外GNN一个用来计算图中节点embeddings。这两个GNN可以并行执行,在预测头这个位置合二为一,并且可以通用反向传播同时优化两个GNN。 GNN的监督学习与无监督学习对图神经网络而言,监督学习就是利用外部提供的label来训练,无监督学习就是利用图本身的结构关系进行训练。所以可以说,在无监督学习里面,也相当于是有label的,只是说这个label是图自身产生的。譬如说,图有连接,有聚集系数等等特征。 GNN的损失函数这一部分没什么特别的,就和其他神经网络差不多。分类任务就常用交叉熵损失函数,回归任务就常用均方误差。 GNN的评估矩阵和其他神经网络同。略,之后有时间补吴恩达关于评估模型的一些知识点。 GNN数据集的划分**(重要)GNN数据集的划分有一些与众不同之处。一般来讲,当我们训练模型时,我们会把数据分为:训练集(约60%)、验证集(20%)、测试集(20)。训练集用来训练模型,验证集用来选择超参数,测试集用来评估模型好坏。并且,有一个非常重要的注意点:各个数据集的数据要独立同分布。在GNN里面,我们也想这么划分。但是在一些特殊情况下,很难实现所谓独立同分布。 图分类任务的数据集划分是可以达到独立同分布的。 下面介绍一些特殊情况并介绍怎么处理。 condition 1: 节点分类任务solution 1:所有的节点参与embeddings的计算,但是在训练时只使用训练集中的节点。具体一点讲呢,就是只有所有点都通过GNN得到了embeddings,但是在计算loss,和反向传播时,只用训练集中的数据,相当于只划分了label。——transductive(直推法) solution2 :直接把点划分为三个数据集,三个数据集之间存在的边都去掉,相当于把一个图划分会三个图,一个图是一个数据集。——inductive(归纳法) condition 2:边连接预测任务先介绍一下,边连接预测任务。 把输入到GNN的边记作信息边,用来当label的边记作监督边。这样的话,原始图中就有了两类边。 solution1:假设我们有三个图的数据,每个图分别用作训练集、验证集、测试集。——inductive(归纳法) solution2:只有一个图的数据,我们把这个图的边分成四类。用信息边和监督边训练GNN模型,然后用这个GNN模型输入包括信息边和监督边,来预测验证边,然后用这个GNN模型输入包括信息边、监督边、和验证边,来预测测试边。——transductive(直推法) ?DeepSNAP 提供了GNN流程中的核心模块 GraphGym 设计GNN |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 16:05:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |