| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 图神经网络(6)-GNN1 -> 正文阅读 |
|
[人工智能]图神经网络(6)-GNN1 |
图数据的特殊性:1. 没有固定的节点顺序或参考点(排列不变性,不同的节点顺序代表同一个图) 2.经常有动态并且多种模式的特征 怎么将深度学习应用到graph上呢??直接将图的邻接矩阵结合节点特征当作输入,应用DNN可以吗? 不行! 这样的话,对于不同size的图用不了,并且这样对节点的顺序敏感! 补充解释一下,为什么MLP对节点顺序敏感。 同一个图两种不同的节点顺序所对应的邻接矩阵完全不一样,所以以邻接矩阵结合节点特征当输入时,得到的结果不一致。可以参考下面这张图。 这其中最重要需要急迫解决的问题是节点的顺序问题。对于图来讲,节点的不同排列顺序代表同一个图。譬如说下图中,左边的C和右边的D从图上看就是同一个点,所以需要找到一种映射,使得不论你是使用哪种表示方式,最后的结果都是一致的。 ????????所以得为图这种数据结构,设计一种全新的神经网络结构 ?图卷积神经网络(graph convolutional networks)? ? ? ? 图卷积网络是许多复杂图神经网络模型的基础。所以图神经网络的介绍从图卷积网络引入。 ? ? ? ? GCN实现的主要思路是:从邻居节点传递(passing)和聚集(aggregating)信息。也就是从图的结构,从节点的连接关系入手。这样不同节点表示顺序就不影响了。 首先,介绍一个概念——由邻居节点定义的计算图(computation graph) 在图中的每一个节点都可以定义一个计算图。顶层是自己,第二层是自己的邻居节点,然后是邻居的邻居。 ?每个计算图中的长方形方框就是对邻居节点传递过来的信息进行预处理,正方形方框就是对节点邻居信息进行聚集处理。 信息传递和聚集也可以合并简化为一个步骤进行表示,如下图。 ?对于信息传递操作和聚集操作有很多种,通过改进这两种操作就可以得到其他图神经网络模型。基础的一种就是GCN,信息传递操作是用神经网络处理,聚集操作就是对多个邻居节点的信息求和取平均。 GCN的计算公式如下:GCN的计算公式是从计算图的底层往上计算,最后得到节点的嵌入(向量表示)。各个节点嵌入初始化为各个点的节点特征,通过聚集和信息传递就得到下一层节点的向量表示。其中Wk和Bk是神经网络中可训练的参数,在各层的计算中用的是同一个。怎么训练GCN在后面讲。 在最开始看这一部分的时候,我一直有个不懂的地方:GCN是根据计算图推导算的,这个计算图是怎么得到的呢?? 看完下面这个GCN公式的矩阵表示我就明白了。 ?这其中的关键就是邻接矩阵,通过邻接矩阵就可以轻易的得到节点v对应的邻居。上面的矩阵表示只需要再与Wk等其他相关矩阵运算就可以得到GCN公式矩阵版本。如下图所示。 ? 而此矩阵运算的到最后结果中,每一行就对应着每个计算图中顶点的嵌入向量表示(也就是每一行就是图中一个节点的嵌入向量表示),也可以说每一行其实就是计算了一个计算图。 设所求的节点嵌入是n维,则矩阵Hk的shape为|v|×n,Wk和Bk的shape为n×n 补充说明说明两个东西: 1.上面图中的蓝色部分(self transformation)是为了解决节点v聚集信息时会丢失掉自己的信息。 2.GCN 网络的局限性: GCN 训练时需要用到整个图的邻接矩阵,依赖于具体的图结构,一般只能用在直推式学习 Transductive Learning。 训练GCN网络GCN,其实就输入图数据,然后得到节点的嵌入向量表示。 训练它的方式分为两大情况:有监督学习的情况和无监督学习的情况。 监督学习训练 在一些监督学习任务中,譬如:每个节点代表一种药物,需要判断节点所代表的药物是否有毒。而任务提供的数据中就已经有了相应节点对应的label(是否有毒)。训练时,只需要将GCN得到的节点嵌入向量当作一个逻辑回归模型的输入X就行,通过梯度下降训练Wk和Bk。(当然也会训练逻辑回归中的参数)。如下图所示。 ?其实在这种监督学习任务中,GCN其实就相当与一个特征提取器,然后将节点嵌入作为下游任务的输入。 无监督学习训练 归纳能力(我愿称之为泛化能力)首先就是计算所有节点嵌入的时候Wk和Bk是共享的(也就是用的同一个)。同样Wk和Bk对于没训练过的节点也能用。(其实在上面提到的无监督和监督学习的情况下,会得到所有节点的嵌入向量,但是只会采取部分节点嵌入向量去训练,然后没训练的节点前向传播,利用Wk和Bk就能算出相应的节点嵌入向量) ? 在一个新图上也可以直接采用Wk和Bk去直接计算节点嵌入向量表示.。(当然对应的邻接矩阵A和相应的矩阵D不一样) ? ?对于图中新添加的矩阵也行。 上面介绍的GCN是一些综述里面出现的基于空间的GCN。还有一种是基于谱的GCN,我看了一下很麻烦且有局限性,而且现在基于空间的GCN比较热门,就略过了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:36:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |