使⽤图神经⽹络(GNN)寻找最短路径
使⽤图神经⽹络(GNN)寻找最短路径
在本⽂中,我们将展⽰具有关注读写功能的图形⽹络如何执⾏最短路径计算。经过最少的培训后,该⽹络可以100%的准确率执⾏此任务。
引⾔
在Octavian,我们相信图是表⽰复杂知识的强⼤媒介(例如BenevolentAI使⽤它们来代表药物研究和知识)。
神经⽹络是⼀种创造⼈类⽆法表达的函数的⽅法。⼈们使⽤⼤型数据集对⽹络进⾏训练。对于神经⽹络可以处理的模型,我门使⽤⽰例的⽅法训练神经⽹络拟合输⼊和输出的关系.
我门需要能够从图结构中进⾏学习的神经⽹络,这些神经⽹络学习有效的归纳偏置⽤以可靠的学习处理图中的函数.在这个基础上,我门建⽴了⼀个强⼤的神经图系统.
在这⾥我门提出了⼀个’⾯向读写的图⽹络’,⼀个可以有效处理最短路径的简单的⽹络.它是如何组合不同神经⽹络组件以使系统易于学习经典图算法的⼀个例⼦。
这个⽹络本⾝是⼀个新的运算系统,但更重要的是,⽹络是进⼀步研究神经图计算的基础。
代码在这⾥
问题陈述
考虑⼀个问题“站A和B之间最短路径的长度是多少?
如果考虑⼀个图中任意两点的最短路径呢?
我们想要通过训练神经⽹络返回整数的答案.
相关⼯作
机器学习图表是⼀个年轻但不断发展的领域。
详细的请参见综述⽂章Graph Neural Networks: A Review of Methods and Applications or our introduction
⽤于计算最短路径的经典算法是A-star,Dijkstra和Bellman Ford算法。
这些⽅法有效并且可以⼴泛的被应⽤。 Dijkstra与我们的⽤例最相似,即在没有路径成本启发的情况下找到两个特定节点之间的最短路径。
最早的基于神经的最短路径解决⽅案的⼯作是通过通信和分组路由来驱动的,这样的近似算法⽐经典算法速度更快。 这些操作与当今的神经⽹络完全不同,它们使⽤迭代反向传播来解决特定图形上的最短路径。 该领域的⼯作⽰例包括 Neural networks for routing communication traffic (1988), A Neural Network for Shortest Path Computation (2000) 和 Neural Network for Optimization of Routing in Communication Networks (2006).
本⼯作建⽴了⼀个可以在未知结构图中⼯作的模型,与前⽂提到的只能解决某个图中问题的⽅法形成鲜明的对⽐.另外,我门寻求为从输⼊输出对中寻找解决复杂图问题运算提供基础.
最近⼀个突破性的解决⽅法在 Differentiable neural computers, 它通过将图形作为连接元组序列并使⽤读写存储器学习逐步算法来实现这⼀点。训练的过程以⼀个学习计划的形式提供,逐步的提⾼图和问题的规模.
描写大山的词语相⽐之下,我们的解决⽅案在更⼤的路径(长度9对4)上表现更好(100%对55.3%),不需要计划学习,不需要训练LSTM控制器,参数更少,⽹络更简单组件更少。虽然我们还没有找到任何其他公布的解决⽅案来解决这个问题,但是有很多类似技术被⽤于不同的问题。⼏个相关的例⼦:
· Commonn Knowledge Aware Conversation Generation with Graph Attention 使⽤注意⼒来读出知识图
· Deeply learning molecular structure-property relationships using attention- and gate-augmented graph convolutional network 在每⼀个图节点使⽤GRU模型,在节点处使⽤注意⼒机制
· DeepPath: A Reinforcement Learning Method for Knowledge Graph Reasoning 使⽤策略⽹络在图中进⾏导航据我们所知,我们的第⼀个将注意⼒读写与图形⽹络相结合的例⼦
节日的由来我门将要解决的问题
提出问题,状态1和状态15之间有多少个状态,我们需要的正确答案可能是6.
更具体地说,我们将使⽤Graph-Question-Answer元组训练⽹络。每个元组包含⼀个独特的随机⽣成的图形,⼀个英语语⾔问题和预期的答案。
⽐如:
这些数据被分为不重叠的训练集,验证集和测试集。
这些数描述的⽹络将⽤于以前从未见过的新图形。也就是说,它将学习图算法。
我门将使⽤ CLEVR-Graph 数据集来描述这些问题.
CLEVR-Graph介绍
在构建机器学习解决⽅案⽽⽅案不要求⾼精度时,很难知道模型是否存在缺陷,或者数据是否具有固有的噪声和模糊性。
为了消除这种不确定性,我们使⽤了⼿⼯数据集。 也就是说我们根据⾃⼰的规则⽣了数据集。 由于数据结构明确,⼀个好的模型可以获得100%的准确率。 在⽐较不同的架构时,这确实很有⽤。
CLEVR图包含⼀组有关程序⽣成的传输⽹络图的问题和答案。 以下是其中⼀个传输⽹络的样⼦(以伦敦地铁为模型)以及⼀些⽰例问题和答案:
CLEVR-Graph中的每个问题都带有⼀个答案和⼀个产⽣的图。
CLEVR-Graph可以⽣成许多不同类型的问题。
在本⽂中,我们将⽣成与最短路径相关的那些。 通过模版(“A和B之间有多少个站?”),它与每个随机⽣成的图形中随机选择的⼀对站点组合在⼀起,给出⼀个( 图形 - 问题 - 答案)三元组。
图形-问题-答案三元组⽣成为YAML⽂件,然后我们将其编译为TFRecords。
由于只有⼀个问题模板,培训数据缺乏多样性。 你会得到⼀个更⾃然(⼈类)的来源。 这使数据集更容易解决。 我们将语⾔多样性作为未来的延伸挑战(并希望看到读者的解决⽅案!)。
路灯安装
解决⽅案
儿童急性肠胃炎
我们在tensorflow建⽴了神经⽹络来解决这个问题,代码在这⾥. The code for this system is available in our repository.
我们将构建的系统需要⼀个问题,执⾏多次迭代处理,然后最终⽣成⼀个输出:
绿道我们将使⽤的结构是循环神经⽹络(RNN) - 在RNN中,相同的单元被顺序执⾏多次,将其内部状态向前传递到下⼀次执⾏。
RNN单元将问题和图形作为输⼊,以及来⾃单元的早期执⾏的任何输出。对它们进⾏变换,并由单元⽣成输出向量和更新的节点状态。
RNN单元内部有两个主要组件:图形⽹络和输出单元。他们的细节是理解这个⽹络如何运作的关键。我们将在下⼀节详细介绍这些内容。
RNN单元向前传递隐藏状态,即“节点状态”。这是节点状态表,图中每个节点⼀个向量。⽹络使⽤它来跟踪每个节点的正在进⾏的计算。
RNN单元执⾏固定次数(通过实验确定,通常⽐两个节点之间的最长路径长),然后将最终⼩区的输出⽤作系统的总输出。
这样就完成了对整体结构的简要介绍。接下来的部分将概述⽹络的输⼊,以及RNN单元的⼯作原理。
数据输⼊
T建⽴系统的第⼀步是建⽴输⼊数据的管道,这提供了3件事.
· 输⼊的问题是“两个节点间的距离是”
· 输⼊的图结构是
· 期望的输出是
所有这些都被预处理成TFRecords,因此可以有效地加载它们并传递给模型。 此过程的代码位于随附的GitHub存储库中的build.py中。 您也可以下载预编译的TFRecords。
问题⽂本的输⼊
将英⽂问题转化成信息使⽤如下三个步骤
· Split the text into a ries of ‘tokens’ (e.g. common words and special characters like ? and spaces)将问题区分为⼀系列的tokens
· 为每个唯⼀标记分配⼀个整数ID,并将该标记的每个实例表⽰为该整数ID
· 将每个标记(例如,单词,特殊字符)嵌⼊为⽮量。此步骤在模型运⾏时完成,对于这个简单的⽰例,我们使⽤单热⽮量来编码整数。
图的输⼊
该图由TFRecord⽰例中的三个数据结构表⽰:
1,具有id,名称和属性的节点列表
2,边列表及其源节点ID和⽬标节点ID以及边属性
3,邻接矩阵,映射节点之间的连接。 如果两个节点直接连接则为1.0,否则为0.0。
使⽤多维张量进⾏描述
期望输出
期望输出(对于该数据集,始终是从0到9的整数)表⽰为单个⽂本标记(即,作为整数),使⽤与问题⽂本和节点/边缘属性相同的编码⽅案。
在训练模式期间使⽤预期答案进⾏损耗计算和反向传播,在验证和测试期间,它⽤于测量模型精度并确定⽤于调试的失败数据⽰例。
海南有几所大学RNN 如何⼯作
⽹络的核⼼是RNN。 它由⼀个RNN单元组成,该单元被重复执⾏,并将其结果向前传递。
在我们的实验中,我们使⽤了10次RNN迭代(通常,迭代次数需要⼤于或等于要测试的最长路径)。
这个RNN单元每次迭代都会做四件事:
1,将数据写⼊选定的节点状态
2,沿图中的边沿传播节点状态
3,从选定节点状态读取数据
4,获取读到的数据、所有先前RNN单元的输出,组合它们,并为此RNN迭代⽣成输出
只需这四个步骤,⽹络就能够轻松学习如何计算最短路径。
图⽹络你好英文怎么写
图形⽹络是该模型功能的关键。 它使它能够计算图形结构的功能。
在图形⽹络中,每个节点n在时间t具有状态向量S(n,t)。 我们使⽤宽度为4的状态向量。每次迭代,节点状态都传播到节点的邻居adj(n):
空调除湿图标
上标和下标⽤于公式效果图中,以便于理解⽽不是函数符号S(n,t)
初始状态S(n,0)是零向量。
这种简单的状态传播需要两个以上的部分才能进⾏最短路径计算:节点状态写⼊和节点状态读取。
节点状态写⼊和节点状态读取
节点状态写⼊是模型将信号向量添加到图中特定节点的状态的机制:
该机制⾸先从问题中提取单词,以形成写⼊查询q_write。此查询将⽤于选择节点状态以将写⼊信号p添加.
使⽤索引关注⽣成写查询,其计算问题词Q中应该关注哪些索引(作为RNN迭代id r,单热⽮量的函数),然后将它们提取为加权和:
通过获取RNN迭代id并应⽤具有S形激活的密集层来计算写信号。
接下来,写⼊信号和写⼊查询被内容层馈送到注意,以确定如何将写⼊信号添加到节点状态。 内容注意⼒只是标准的点积注意机制,其中每个项⽬与点积的查询进⾏⽐较,以产⽣⼀组分数。 然后通过softmax将得分转换成⼀个总和为1的分布:
在这种情况下,分数被计算为每个节点状态的相关节点id与写查询的点积。 最后,写⼊信号与分数成⽐例地添加到节点状态:
节点状态读取