今年 6 月份,Deepmind 发表了一篇论文,将图与深度神经网络相结合,由此提出了一种新型图网络。由于图网络主要采用神经网络的方式对图进行操作,因此它又可以称为图神经网络。本文介绍了 DeepMind 最近开源的图网络库,它可以用 TensorFlow 和 Sonnet 快速构建图网络。
项目地址:https://github.com/deepmind/graph_nets
DeepMind 开源的这个项目主要是依据他们在 6 月份发表的论文《Relational inductive biases, deep learning, and graph networks》,他们在该论文中将深度学习与贝叶斯网络进行了融合,并提出了一种具有推理能力的概率图模型。
图网络即可以在社交网络或其它基于图形数据上运行的一般深度学习架构,它是一种基于图结构的广义神经网络。图网络一般是将底层图形作为计算图,并通过在整张图上传递、转换和聚合节点特征信息,从而学习神经网络基元以生成单节点嵌入向量。生成的节点嵌入向量可作为任何可微预测层的输入,并用于节点分类或预测节点之间的连接,完整的模型可以通过端到端的方式训练。
目前图网络在监督学习、半监督学习和无监督学习等领域都有探索,因为它不仅能利用图来表示丰富的结构关系,同时还能利用神经网络强大的拟合能力。
一般图网络将图作为输入,并返回一张图以作为输入。其中输入的图有 edge- (E )、node- (V ) 和 global-level (u) 属性,输入也有相同的结构,只不过会使用更新后的属性。如下展示了输入图、对图实现的计算及输出图,更详细的内容请参考文末提供的原论文地址。
安装
图网络库可以从 pip 安装。此次安装与 Linux/Mac OS X 和 Python 2.7 及 3.4+兼容。
若要安装该库,运行:
$ pip install graph_nets
使用案例
如下代码将创建简单的图网络模块,并将其连接到数据。注意我们需要导入 Sonnet 库,它允许定义一些前向传播的计算模块。我们在使用 sonnet 创建三个多层感知机,并分别作为边、节点和全局模型的函数后,就能直接调用 GraphNetwork 方法创建整个图网络。
import graph_nets as gn
import sonnet as snt
# Provide your own functions to generate graph-structured data.
input_graphs = get_graphs()
# Create the graph network.
graph_net_module = gn.modules.GraphNetwork(
edge_model_fn=lambda: snt.nets.MLP([32, 32]),
node_model_fn=lambda: snt.nets.MLP([32, 32]),
global_model_fn=lambda: snt.nets.MLP([32, 32]))
# Pass the input graphs to the graph network, and return the output graphs.
output_graphs = graph_net_module(input_graphs)
Demo Jupyter notebooks
该库包含一些 demo,展示了如何创建、操作及训练图网络以在最短路径搜索任务、排序任务和物理预测任务中进行图结构数据推理。每个 demo 使用相同的图网络结构,该结构可以突显该方法的复杂性。
在 Colab 运行
若要尝试 demo 而不在本地安装任何东西,你可以借助 Colaboratory 后端并在浏览器(甚至在手机上)中运行 demo。读者可查阅下面的 demo 链接,并按照 notebook 中的说明操作。
「shortest path demo」创建随机图,并训练一个图网络以在任何两个节点的最短路径上标记节点和边。经过一个信息传递步骤序列(如下图所示),模型可以改善其对最短路径的预测。
「sort demo」创建了随机数的几个列表,并训练一个图网络来对列表进行排序。经过一个信息传递步骤序列,模型会对哪个元素(图中的列)出现在另一个元素(行)之后做出准确的预测。
「physics demo」创建了一个随机弹簧物理系统,并训练一个图网络来预测系统在下一个时间步的状态。模型的下一步预测可以被反馈作为输入,以构建未来轨迹。以下每个子图展示了 50 步内的真实和预测的弹簧系统状态。这和 Battaglia 等人(2016)的「interaction networks」中的模型和实验相似。
本地运行
在你的本地计算机上运行 demo 要安装必要的依赖,请运行:
$ pip install jupyter matplotlib scipy
试用 demo 请运行:
$ cd <path-to-graph-nets-library>/demos
$ jupyter notebook
然后通过 Jupyter notebook 接口打开 demo。
论文: Relational inductive biases, deep learning, and graph networks
论文地址: https://arxiv.org/pdf/1806.01261.pdf
摘要:人工智能最近经历了一场复兴,在视觉、语言、控制和决策等关键领域取得了重大进展。取得这些进展的部分原因是由于廉价的数据和计算资源,它们符合深度学习的天然优势。然而,在不同压力下发展起来的人类智力,其许多决定性特征对于目前的方法而言仍是触不可及的。特别是,超越经验的泛化能力——人类智力从幼年开始发展的标志——仍然是现代人工智能面临的巨大挑战。
本论文包含部分新研究、部分回顾和部分统一结论。我们认为组合泛化是人工智能实现与人类相似能力的首要任务,而结构化表示和计算是实现这一目标的关键。正如生物学把自然与人工培育相结合,我们摒弃「手动设计特征」与「端到端」学习二选一的错误选择,而是倡导一种利用它们互补优势的方法。我们探索在深度学习架构中使用关系归纳偏置如何有助于学习实体、关系以及构成它们的规则。我们为具有强烈关系归纳偏置的 AI 工具包提出了一个新构造块——图网络(Graph Network),它泛化并扩展了各种对图进行操作的神经网络方法,并为操作结构化知识和产生结构化行为提供了直接的接口。我们讨论图网络如何支持关系推理和组合泛化,为更复杂的、可解释的和灵活的推理模式奠定基础。