大蟒蛇python教程共享图神经网络GNN算法基本原理详解

前言

python教程分享图神经网络GNN算法基本原理详解结合一个具体的无向图来对最简单的一种gnn进行推导。python教程分享图神经网络GNN算法基本原理详解第一部分是数据介绍,第二部分为推导过程中需要用的变量的定义,第三部分是gnn的具体推导过程,最后一部分为自己对gnn的一些看法与总结。

1. 数据

利用networkx简单生成一个无向图:

# -*- coding: utf-8 -*-  """  @time : 2021/12/21 11:23  @author :ki   @file :gnn_basic.py  @motto:hungry and humble    """  import networkx as nx  import numpy as np  import matplotlib.pyplot as plt  import pandas as pd    g = nx.graph()  node_features = [[2, 3], [4, 7], [3, 7], [4, 5], [5, 5]]  edges = [(1, 2), (1, 3), (2, 4), (2, 5), (1, 3), (3, 5), (3, 4)]  edge_features = [[1, 3], [4, 1], [1, 5], [5, 3], [5, 6], [5, 4], [4, 3]]  colors = []  edge_colors = []    # add nodes  for i in range(1, len(node_features) + 1):      g.add_node(i, feature=str(i) + ':(' + str(node_features[i-1][0]) + ',' + str(node_features[i-1][1]) + ')')      colors.append('#dcbb8a')    # add edges  for i in range(1, len(edge_features) + 1):      g.add_edge(edges[i-1][0], edges[i-1][1], feature='(' + str(edge_features[i-1][0]) + ',' + str(edge_features[i-1][1]) + ')')      edge_colors.append('#3ca9c4')    # draw  fig, ax = plt.subplots()    pos = nx.spring_layout(g)  nx.draw(g, pos=pos, node_size=2000, node_color=colors, edge_color='black')  node_labels = nx.get_node_attributes(g, 'feature')  nx.draw_networkx_labels(g, pos=pos, labels=node_labels, node_size=2000, node_color=colors, font_color='r', font_size=14)  edge_labels = nx.get_edge_attributes(g, 'feature')  nx.draw_networkx_edge_labels(g, pos, edge_labels=edge_labels, font_size=14, font_color='#7e8877')    ax.set_facecolor('deepskyblue')  ax.axis('off')  fig.set_facecolor('deepskyblue')  plt.show()  

如下所示:

图神经网络GNN算法基本原理详解

其中,每一个节点都有自己的一些特征,比如在社交网络中,每个节点(用户)有性别以及年龄等特征。

5个节点的特征向量依次为:

[[2, 3], [4, 7], [3, 7], [4, 5], [5, 5]]

同样,6条边的特征向量为:

[[1, 3], [4, 1], [1, 5], [5, 3], [5, 6], [5, 4], [4, 3]]

2. 变量定义

图神经网络GNN算法基本原理详解

特征向量实际上也就是节点或者边的标签,这个是图本身的属性,一直保持不变。

3. gnn算法

gnn算法的完整描述如下:forward向前计算状态,backward向后计算梯度,主函数通过向前和向后迭代调用来最小化损失。

图神经网络GNN算法基本原理详解

主函数中:

图神经网络GNN算法基本原理详解

上述描述只是一个总体的概述,可以略过先不看。

3.1 forward

早期的gnn都是recgnn,即循环gnn。这种类型的gnn基于信息传播机制: gnn通过不断交换邻域信息来更新节点状态,直到达到稳定均衡。节点的状态向量 x 由以下 f w ​函数来进行周期性更新:

图神经网络GNN算法基本原理详解

 

图神经网络GNN算法基本原理详解

解析上述公式:对于节点 n ,假设为节点1,更新其状态需要以下数据参与:

图神经网络GNN算法基本原理详解

这里的fw只是形式化的定义,不同的gnn有不同的定义,如随机稳态嵌入(sse)中定义如下:

图神经网络GNN算法基本原理详解

由更新公式可知,当所有节点的状态都趋于稳定状态时,此时所有节点的状态向量都包含了其邻居节点和相连边的信息。

这与图嵌入有些类似:如果是节点嵌入,我们最终得到的是一个节点的向量表示,而这些向量是根据随机游走序列得到的,随机游走序列中又包括了节点的邻居信息, 因此节点的向量表示中包含了连接信息。

证明上述更新过程能够收敛需要用到不动点理论,这里简单描述下:

如果我们有以下更新公式:

图神经网络GNN算法基本原理详解

gnn的foward描述如下:

图神经网络GNN算法基本原理详解

解释:

图神经网络GNN算法基本原理详解

3.2 backward

在节点嵌入中,我们最终得到了每个节点的表征向量,此时我们就能利用这些向量来进行聚类、节点分类、链接预测等等。

gnn中类似,得到这些节点状态向量的最终形式不是我们的目的,我们的目的是利用这些节点状态向量来做一些实际的应用,比如节点标签预测。

因此,如果想要预测的话,我们就需要一个输出函数来对节点状态进行变换,得到我们要想要的东西:

图神经网络GNN算法基本原理详解

最容易想到的就是将节点状态向量经过一个前馈神经网络得到输出,也就是说 g w g_w gw​可以是一个fnn,同样的, f w f_w fw​也可以是一个fnn:

图神经网络GNN算法基本原理详解

我们利用 g w g_w gw​函数对节点 n n n收敛后的状态向量 x n x_n xn​以及其特征向量 l n l_n ln​进行变换,就能得到我们想要的输出,比如某一类别,某一具体的数值等等。

在bp算法中,我们有了输出后,就能算出损失,然后利用损失反向传播算出梯度,最后再利用梯度下降法对神经网络的参数进行更新。

对于某一节点的损失(比如回归)我们可以简单定义如下:

图神经网络GNN算法基本原理详解

图神经网络GNN算法基本原理详解

有了z(t)后,我们就能求导了:

图神经网络GNN算法基本原理详解

图神经网络GNN算法基本原理详解

z(t)的求解方法在backward中有描述:

图神经网络GNN算法基本原理详解

图神经网络GNN算法基本原理详解

因此,在backward中需要计算以下导数:

图神经网络GNN算法基本原理详解

4.总结与展望

python教程分享图神经网络GNN算法基本原理详解所讲的gnn是最原始的gnn,此时的gnn存在着不少的问题,比如对不动点隐藏状态的更新比较低效。

由于cnn在cv领域的成功,许多重新定义图形数据卷积概念的方法被提了出来,图卷积神经网络convgnn也被提了出来,convgnn被分为两大类:频域方法(spectral-based method )和空间域方法(spatial-based method)。2009年,micheli在继承了来自recgnn的消息传递思想的同时,在架构上复合非递归层,首次解决了图的相互依赖问题。在过去的几年里还开发了许多替代gnn,包括gae和stgnn。这些学习框架可以建立在recgnn、convgnn或其他用于图形建模的神经架构上。

gnn是用于图数据的深度学习架构,它将端到端学习与归纳推理相结合,业界普遍认为其有望解决深度学习无法处理的因果推理、可解释性等一系列瓶颈问题,是未来3到5年的重点方向。

因此,不仅仅是gnn,图领域的相关研究都是比较有前景的,这方面的应用也十分广泛,比如推荐系统、计算机视觉、物理/化学(生命科学)、药物发现等等。

以上就是图神经网络gnn算法基本原理详解的详细内容,更多关于图神经网络gnn算法的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

需要了解更多python教程分享图神经网络GNN算法基本原理详解,都可以关注python教程分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/pythontutorial/1091531.html

(0)
上一篇 2022年5月11日
下一篇 2022年5月11日

精彩推荐