赞
踩
我们以民国最出名的七角恋人物关系图为例进行讲解,如下图所示:
这是一张图,包括人物实体以及人物关系。我们抽象成下面的形式,人物是图的顶点(Vertex)、人物关系是图的边(Edge)。顶点和边都可以附带各自的属性(如:姓名、关系类型等)
目的:整合特征
GNN 可以理解为是由 Graph(图) + Nerual Networks 组合而成的
上图中 (1,1,1,1,1) (2,2,2,2,2,) 等,代表节点的特征,这个特征可以是提取到的,也可以是标签,如果没有标签也没有特征,也可以初始化一个特征,做为可训练的变量,参与后续的训练。
核心思路:将邻居的信息结合到自己身上,作为自己特征的补充
通俗解释:假如现在不知道A是否有钱,但知道他的三个朋友BCD都很有钱,那么就基本上可以判断A也很有钱。
利用networkx简单生成一个无向图
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()
如下图所示:
其中,每一个节点都有自己的一些特征,比如在社交网络中,每个节点(用户)有性别以及年龄等特征。
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]]
特征向量实际上也就是节点或者边的标签,这个是图本身的属性,一直保持不变。
完整描述如下:Forward向前计算状态,Backward向后计算梯度,主函数通过向前和向后迭代调用来最小化损失。
主函数中:
早期的GNN都是RecGNN,即循环GNN。这种类型的GNN基于信息传播机制: GNN通过不断交换邻域信息来更新节点状态,直到达到稳定均衡。节点的状态向量x由以下fw函数来进行周期性更新:
解释上述公式:
GNN的Forward描述如下:
解释:
在节点嵌入中,我们最终得到了每个节点的表征向量,此时我们就能利用这些向量来进行聚类、节点分类、链接预测等等。
GNN中类似,得到这些节点状态向量的最终形式不是我们的目的,我们的目的是利用这些节点状态向量来做一些实际的应用,比如节点标签预测。
在GNN中,我们定义z(t)如下:
相对于传统的神经网络模型,GNN在处理图数据时有一些优势:
能够学习到节点和边之间的复杂关系。与传统神经网络只能处理类似向量或矩阵的数据不同,GNN天然地适用于处理有复杂关系的数据,如社交网络、蛋白质结构中残基之间的关系等。
具有很强的泛化性能。不同于传统的机器学习方法,GNN可以在没有预训练的情况下进行端到端的学习和推理。这意味着GNN可以更好地适应广泛的数据和任务,并且可以避免过度拟合。
涉及节点和边的信息量非常大,对于节点和边上存在多种属性或者情境信息的任务,在GNN中可以很自然地将这些信息进行整合。这些属性可以来自节点和边的语义信息、拓扑信息、上下文信息和其他相关信息。
强大的可扩展性:GNN已经在多个领域实现预测性能的颠覆,但其最大优势是可扩展性。 我们可以在GNN中添加更多的参数并训练它们以适用于特定的问题。
芯片的设计比较耗费人力和物力,如果可以通过AI算法自动设计芯片,则可以大大提高芯片制造的效率,降低芯片制造的成本
例如剧本杀中的推理,警匪片中嫌疑人的图推理等
例如,刷抖音,经常看英雄联盟的游戏视频,那么说明你对游戏比较感兴趣,系统会根据网络图结构推荐更多和英雄联盟相关的内容给你
贷款软件,读取用户的通讯录信息和app使用情况,从而测评用户的还款能力,然后决定用户的借款额度
智能客服
预测道路上每条边的流量
根据分子结构进行相关分析
我们可以用图来建立医学本体的模型。下面是一个使用DAG(有向无环图)表示本体的例子
为了利用本体论,我们通过将嵌入的eᵢ与其父节点结合使用,学习出一个为节点cᵢ嵌入的网络gᵢ。为了进行预测,我们将本体知识G与当前访问的xt相乘,并通过神经网络进行传递。例如,它们可以是诊断预测任务或心力衰竭预测任务。
以下是使用t-SNE对不同疾病的最终代表gᵢ的散点图。
DNN可以训练成千上万的化学结构来编码和解码分子,还可以构建预测因子,根据潜在的表征来估计化学性质。例如,我们可以学习一个自编码器来编码一个分子的图形表示,然后用解码器重建分子。目的是学习一个潜在的表示,最大限度地减少重建损失。我们可以使用这个潜在表示来预测合成可及性和药物与另一个DNN(下面的绿色网络)的相似性。
这些潜在的表达方式允许研究人员在潜在空间中通过扰乱已知的化学结构或插入分子之间的简单操作自动生成新的化学结构。
这是麻省理工学院的另一个项目,将深度学习应用于图形对象,从而发现新的抗生素。
Open Catalyst项目是利用人工智能发现用于可再生能源存储的新催化剂的另一个例子。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。