近日,一个关于图注意力网络可视化的项目引起了大批研究者的兴趣。上线仅一天,就收获了200+星。这个项目是关于在PyTorch中实现的图注意力网络(GAT),包括易于理解的可视化。项目地址:https://github.com/gordicaleksa/pytorch-GAT在正式介绍项目之前,先提一下图神经网络(GNN)。GNN是一种基于深度学习处理图域信息的方法。由于其良好的性能和可解释性,GNN最近成为一种广泛使用的图分析方法。已广泛应用于计算生物学、计算药理学、推荐系统等领域。GNN将深度学习应用于图结构(Graph),图卷积网络GCN可以对Graph进行卷积运算,但GCN存在一些缺陷。因此,Bengio团队在三年前提出了图注意力网络(GAT,GraphAttentionNetwork),旨在解决GCN存在的问题。GAT是空间(卷积)GNN的代表。由于CNN在计算机视觉领域的巨大成功,研究人员决定将其泛化到图形上,于是GAT应运而生。现在,有人已经用PyTorch实现了GAT可视化。让我们看看该项目是如何实施的。Cora的可视化说到GNN,就不得不介绍一下Cora数据集。Cora数据集由多篇机器学习论文组成,是近年来图深度学习的热门数据集。Cora中的节点代表研究论文,链接是这些论文之间的引用。项目作者添加了一个用于可视化Cora和进行基本网络分析的实用程序。Cora看起来像这样:节点大小对应于它的等级(即传入和传出边的数量)。边缘的厚度大致对应于边缘的“流行”或“连接”程度。这是一张显示Cora上秩分布(传入和传出边数)的图:传入和传出秩图相同,因为我们处理的是无向图。在底部图(等级分布)中,我们可以看到一个有趣的峰值出现在[2,4]范围内。这意味着大多数节点都有少量边,但1个节点有169条边(大绿色节点)。注意力可视化使用经过训练的GAT模型,我们可以可视化某些节点学习到的注意力。节点使用注意力来决定如何聚合周围的节点,如下图所示:这是Cora节点中边数最多的节点之一(参考)。颜色表示同一类的节点。熵直方图另一种理解GAT没有在Cora上学习注意力模式(即它正在学习持续注意力)的方法是将节点邻域的注意力权重视为概率分布,计算熵,然后Neighbors累积信息。我们希望GAT的注意力分布是有偏差的。你可以看到橙色直方图是理想的均匀分布,浅蓝色是学习分布,它们是完全一样的。分析Cora嵌入空间(t-SNE)GAT的输出张量为shape=(2708,7),其中2708是Cora中的节点数,7是类别数。使用t-SNE将这些7维向量投影到2D中以获得:如何使用方法1:JupyterNotebook只需从Anaconda控制台运行JupyterNotebook,它将在您的默认浏览器中打开会话。打开带注释的GAT.ipynb开始。注意,如果在导入win32api时出现DLLloadfailed:Thespecifiedmodulecouldnotbefound,只需pipuninstallpywin32,或者pipinstallpywin32,ondainstallpywin32。方法二:使用您选择的IDE如果您使用您选择的IDE,您只需要连接Python环境和设置部分。训练GAT在Cora上训练GAT所需的一切都已经设置好,只需在运行时调用pythontraining_script.py此外,您还可以:添加--should_visualize--可视化图形数据添加--should_test-评估GAT-enable_tensorboard-开始保存指标(准确性、损失)代码部分有很好的注释,因此您可以看到训练本身是如何工作的。这个脚本会:dumpcheckpoint*.pthmodelsintomodels/checkpoints/dumpfinal*.pthmodelsintomodels/binaries/savemetricsintoruns/,只需在Anaconda中运行tensorboard--logdir=runs就可以运行它来可视化。定期将一些训练元数据写入控制台。在控制台中通过tensorboard--logdir=runs调用,将http://localhost:6006/URL粘贴到浏览器中,训练时可以使用。VisualizeMetrics:VisualizationTools如果你想可视化t-SNEembeddings,请注意或嵌入visualize_gat_properties函数的注解,并将visualization_type设置为:VisualizationType.ATTENTION-如果你想在节点附近可视化attentionVisualizationType.EMBEDDING-如果你想tovisualizeembeddings(viat-SNE)VisualizationType.ENTROPY-如果你想可视化熵直方图那么,你会得到一个优秀的可视化效果图(VisualizationType.ATTENTIONoptional):硬件要求GAT不需要那种强大的硬件资源,特别是如果你只想运行Cora,2GB以上的GPU就可以了。GAT在RTX2080GPU上训练大约需要10秒;保留1.5GB的VRAM内存(PyTorch的缓存开销,分配给实际张量的更少);模型本身只有365KB。视频链接:https://v.qq.com/x/page/v3225t65a0q.html?start=8
