图神经网络GNN,RNN神经网络基本原理

  图神经网络GNN,RNN神经网络基本原理

  这篇文章主要为大家介绍了图神经网络全球网络导航器全球网络导航器算法基本原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  

目录
前言1.数据2.变量定义3 .全球网络导航器全球网络导航器算法3.1向前3.2向后4。总结与展望

  

前言

  本文结合一个具体的无向图来对最简单的一种全球网络导航器全球网络导航器进行推导。本文第一部分是数据介绍,第二部分为推导过程中需要用的变量的定义,第三部分是全球网络导航器全球网络导航器的具体推导过程,最后一部分为自己对全球网络导航器全球网络导航器的一些看法与总结。

  

1. 数据

  利用网络x简单生成一个无向图:

  # -*-编码: utf-8 -*-

  @时间:2021/12/21 11:23

  @作者:KI

  @File :gnn_basic.py

  @座右铭:饥渴卑微

  将网络x作为(同nonexpendable)非消耗品导入

  将数组作为铭牌导入

  将matplotlib.pyplot作为血小板计数导入

  进口熊猫作为螺纹中径

  G=nx .图表()

  node_features=[[2,3]、[4,7]、[3,7]、[4,5]、[5,5]]

  边=[(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]]

  颜色=[]

  edge_colors=[]

  #添加节点

  对于范围(1,len(node_features) 1):中的我

  G.add_node(i,feature=str(I) :( str(node _ features[I-1][0]), str(node_features[i-1][1]))

  颜色。追加(# DCBB8A )

  #添加边缘

  对于范围(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])))

  边缘颜色。追加(# 3c a9 C4 )

  #画

  fig,ax=plt.subplots()

  pos=nx.spring_layout(G)

  nx.draw(G,pos=pos,node_size=2000,node_color=colors,edge_color=black )

  节点标签=NX。获取节点属性(G,“特征”)

  nx.draw_networkx_labels(G,pos=pos,labels=node_labels,node_size=2000,node_color=colors,font_color=r ,font_size=14)

  边缘标签=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("关")

  fig.set_facecolor(深蓝)

  plt.show()

  如下所示:

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

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

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

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

  ush:plain;">[[1, 3], [4, 1], [1, 5], [5, 3], [5, 6], [5, 4], [4, 3]]

  

  

2. 变量定义

  

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

  

  

3. GNN算法

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

  

  主函数中:

  

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

  

  

3.1 Forward

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

  

  

  

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

  

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

  

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

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

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

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

  

  GNN的Foward描述如下:

  

  解释:

  

  

  

3.2 Backward

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

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

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

  

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

  

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

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

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

  

  

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

  

  

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

  

  

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

  

  

  

4.总结与展望

  本文所讲的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算法的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: