现实世界中的大量问题都可以抽象成图模型(GraphModel),也就是节点和连边的集合。从知识图谱到概率图模型,从蛋白质相互作用网络到社交网络,从基本的逻辑线路到巨大的Internet,图与网络无处不在。然而传统的机器学习方法很难处理图网络信息,这种缺陷大大限制了深度学习的应用领域。于是人们提出了图网络(GraphNetwork),一种基于图结构的广义人工神经网络,它可以直接对真实问题进行建模,又可以利用自动微分技术进行学习,甚至有望将多个传统人工智能领域进行融合。
编译:集智俱乐部翻译组
原题:HowtogetstartedwithmachinelearningonGraphs
目录
一、什么是图数据?
二、为什么要在图数据上使用机器学习?(GraphML)
1.机器学习能自动化人类可以轻易实现但难以向计算机描述的任务。
2.ML可以以人类无法企及的规模来转换信息。
三、什么是GraphML?
1.使用GraphML会遇到什么样的挑战?
2.GraphML系统在实际运行中是怎样的?
四、让我们在图上开始机器学习吧!
1.你想要执行什么类型的任务?
2.基本过程
3.通用GraphML方法
五、节点嵌入Nodeembeddings
1.随机游走
2.node2Vec
3.node2vec扩展
4.使用随机游走的协同过滤
六、图卷积网络
1.对图网络的扩展
七、链接预测
1.节点嵌入和随机游走
2.具有图特征的深度学习
3.神经张量网络
4.强化学习
八、节点,边和整个图的评分和分类
2.图网络
3.注意力序列
4.基于分块或节点属性的传统深度学习
5.节点属性在搜索引擎上的技术
附:参考文献
注:
作者DavidMack是Octavian.ai的创始人。
Octavian.ai是一家开源公司,致力于机器问答系统和图上深度学习。
这是他们的开源项目列表:
通过与这些希望获得机器学习领域协助的团队交流我们得知,图数据真是无处不在——从疾病诊断,遗传学研究还有健康管理,到银行和工程,图都是一种解决困难问题的强有力的分析模式。
简单来说,一张图就是节点(比如人)和他们之间关系(比如Fatima是Jacob的朋友)的集合。这些节点通常具有自己的属性(比如Fatima23岁)。
图1数据库中以图形式的储存数据。如图所示,这个例子在数据库里通常是这样存储的。一个最主流的图数据库是Neo4j,用他们自己的话说“这是一个处于世界领先地位的图数据库,因为它具有本地的图存储和图处理能力。
如图所示,这个例子在数据库里通常是这样存储的。一个最出名的图数据库是Neo4j,用他们自己的话说“这是一个处于世界领先地位的图数据库,因为它具有本地的图存储和图处理能力。
你可以在Neo4j数据库中使用Cypher查询数据,这是一种类似于SQL的图查询语言。在之前的演示示例中,我们可以这样获取一个Fatima朋友的列表:
图是描述数据的一种极具灵活性的强大方式。传统的关系型数据库很难用固定模式存储不同实体之间的联系,然而这些联系是现实世界中普遍且至关重要的一部分。在图数据库中,这些联系是非常易于存储和查询的。此外,通常很多事物之间的联系(例如家庭成员之间的关系)构成分析问题的关键,使用图数据库使得问题分析变得很简单。
二、为什么要在图数据上
使用机器学习?(GraphML)
这里总结来自Ben对于图机器学习(GraphML)两种有用的观点:
真实世界的数据是充满干扰且多层次的。比如像”描述图中的人物“此类任务对于人类来说很简单,但是很难抽象为离散的算法。
我们可以用深度学习把大量的数据转换为执行特定任务的高效功能。
这在图上也是成立的——得益于开放式的关系结构,它们与图像或向量有非常大的不同。我们可以在GraphML上建立适用于通用模式的方法。
另一方面,对于计算机来说,它们可以准确执行我们的指令(虽然偶尔也会出现错误)。
这意味着它们可以完全地运行指令,并且没有任何额外操作。需要它们运行多久,它们就会持续多久。
我不想去写传统的图分析,包括一些广为人知的算法,如PageRank,CliqueIndentification,ShortestPath等。这些强大且能够作为第一选择的算法已经在公开的资料中有了大量的参考。
使用GraphML
会遇到什么样的挑战?
然而在这个令人激动又充满希望的领域里,GraphML还是一项非常年轻的技术。
主流机器学习的讨论更多的是在可应用性(例如使用ResNet进行迁移学习来分类图像,或者在文本中使用BERT预测),还有对开发者的易用性上(例如TensorFlow,PyTorch,FastAI)。这并不是简单而通用的技术,即便如此也没有任何流行的ML库支持图数据。
同样的,像Neo4j这样的图数据库自己也没有支持在数据上运行ML的方法。(尽管Neo4j已经在尝试使它成为可能)
在深度学习库中不支持图的其中一个原因是图具有过于灵活的的数据结构(例如任何节点与其他节点有任意多的连接)并不契合主流深度学习库和GPU架构中使用的固定大小图和固定尺寸张量。
更简单来说,用矩阵来描述并操作一个稀疏图是非常困难的。不是不可能,但绝对比使用向量,文本还有图像要难得多。
尽管如此,GraphML的趋势依然无法阻挡。我个人预测,这将成为我们在很多产业中分析数据的一个主流的基本方式。
再提及一点,就像其他任何机器学习技术,大多数GraphML都需要大量的训练数据。
GraphML系统
在实际运行中是怎样的?
虽然这个问题的答案会随着任务和数据集的变化而变化,但它有助于概括出你,这个敏锐的冒险家,将会遇到的问题。
绝大多数时候,这系统需要你自己来写代码完成——因为高级的GraphML工具还不存在。你可能会想要用Python,还有机器学习库像TensorFlow或者PyTorch来实现。根据你的数据规模,你可以在单机上实现训练模型,也可以使用分布式系统。(有趣的是,很多图训练过程可以很好地在分布式系统上工作)。
图2训练模型
你很可能需要先从存储在CSV文件和在Neo4j这样的数据库,或者其他格式的图数据库中提取你的数据。
然后你需要把数据提供给机器学习库。在我当前的工作中(涉及到百万的小图(smallgraphs)),我把每一张图都预先编译成了TFRecord,特征向量存储了节点,联系,还有相邻矩阵信息。所有节点的属性与文本被标记成了一个字典的格式。
这只在小图上起作用,如果图很大,你需要用某种方案把图分为较小的训练样本(你可以分批训练,或者按照节点-边-节点三个一组的形式训练)。
建议:一些情况下数据在导入机器学习库之前进行表格化(tabularize)。Node2Vec就是一个很好的例子,它的每一个节点都被随机游走(RandomWalk)转换成向量,然后这些向量再以列表的形式传入机器学习模型。
一旦在数据传入之后,真正的模型和训练工作就开始了。这是一个复杂的变化过程。
最终,模型会被用在某些地方。一些情况下,一个模型计算完成后的新节点/边/图信息会存储在外部数据库里。
另外一部分的模型会被部署在线上的产品中。在这种情形下,从图数据建立的模型系统需要更好的性能(可以是从图数据库中导入数据),然后这个预测模型最终会被用户或下一代系统所利用(例如Alexa和用户的问答系统)。
让我们先看一下一些可以用来在图上执行机器学习的建议吧。
我将在这里大概列举一系列方法,指出它们其中的一些缺点和优点,然后给出完整的链接。因为篇幅这里省略了一些细节。尽管这是一个年轻的领域,研究人员还是想出了一系列令人眼花缭乱丰富的方法处理GraphML。即便我想在本文中详尽介绍,遗憾的是也没有办法完全列出主要的部分。
你想要执行什么类型的任务?
对于GraphML有各种各样的开始和执行过程的方式。因此,通过考虑你的任务目的来缩小开始的范围和方式是很有帮助的。
如同任何机器学习系统一样,缩小和明确你要实现的目标,将对你的试验成功和试验过程有极大的帮助。通过提出一个最小的、明确的目标,你的模型和需要数据集就会减小到易于处理的程度。
最后一点,图数据库是特别有吸引力的,它鼓励我们朝着宏伟的“万能”目标前进:因为图数据库几乎可以代表任何东西,所以这对试图建立通用的智能的工作者很有诱惑力的。警告:)
我们将要阐述的任务类型:
本文旨在作为你自己研究的初级参考。与任何数据科学一样,使用方法也需要适应你个人所处的环境。由于许多GraphML尚处于早期研究阶段,因此你应该在找到一个有效的方法之前尝试多种方法。
基本过程
在开始构建一个GraphML系统(可能需要对基础设施进行大量投资)之前,重要的是要考虑简单的方法是否已经足够达成目,这能为你节约下很多不必要的工作。
这里有一些简化问题的方法:
在下面可以适用的部分中,我会回顾其中的一些方法。
通用GraphML方法
一些GraphML的方法通用性强。我已经在这里包含了它们全部的介绍。在下面的章节中,我将参考此部分并着重解释一些应用在特定任务的过程。
你可以自由跳过这个章节,并在开始解决你感兴趣的任务的时候回头再看。
节点层
五、节点嵌入
Nodeembeddings
节点嵌入是graphML早期的一种开发方式,它的流行是因为简单,稳定,且易于计算。
简单来说,节点嵌入就是轮流计算图中的每一个节点的向量。向量可以计算出有用的属性,例如任意两个节点嵌入的内积可以表示它们是否来自于同一个社群。
通过这种方式,节点嵌入将图形数据简化为更易于管理的东西:向量。
节点层经常和很多图结构合并在一起计算(稍后会详细介绍)。
权衡之下必然会放弃一些信息。一个固定长度的向量很少能代表一个节点周围的所有图结构。它可以包含也可以不包含节点和关系属性。
然而,只有少量具有创新性的节点层可以被其他GraphML过程复用。在这样的设置下,节点层成为一种节点属性,并被用作其他技术的催化剂,即使它并没有像生成层一样嵌入到图结构中。
接下来我将重点介绍一些主要的嵌入过程。有关于图嵌入技术的调查和它们之间的比较,请查阅这两篇论文。
论文题目:
AComprehensiveSurveyofGraphEmbedding:Problems,TechniquesandApplications
论文地址:
GraphEmbeddingTechniques,Applications,andPerformance:ASurvey
随机游走
图3随机游走图分析技术图示
随机游走是一种非常强大且简单的图分析技术,和数论有很长一段渊源。
一次随机游走从图中的一个节点开始,随机地选择一个边,并穿过它。然后重复这一过程,直到提供路径足够地长。
随机游走的聪明之处在于它将一个多维度的不规则事物(图)转化为一个简单的矩阵(每个路径由节点组成的固定长度的路径列表)。
在足够大的规模下,从理论上可以从随机游走中重建出基本的图结构。随机游走发挥了机器学习的巨大优势:从大量数据中学习。
有很多方法可以利用随机游走来计算节点嵌入。下面我将重点介绍一些主要的方法。
node2Vec
node2vecscalablefeaturelearningfornetworks
node2vec是一种流行且相当普遍的使用随机游走的嵌入方法。
将这些随机游走转化为计算嵌入的方法有一种智能的优化方式。首先为每个节点分配一个随机层,(例如长度为N的高斯向量)。然后对于每对源相邻节点,我们希望通过调整这些层来最大化它们的点积。同时最后,我们最小化随机节点对的点积。这样做的效果是我们学习了一组嵌入,这些嵌入倾向于在相同的遍历过程中高点积的节点。例如在相同的社群/结构中。
图4由node2vec生成的LesMisérables可视化外观网络,其标签颜色表示了同质性(顶部)和结构等价性(底部)。
你要知道关于node2vec的最后一点是,它是由参数决定随机游走的形式的。通过”In-out“超参数,你可以优先考虑遍历是否集中在小的局部区域(例如这些节点是否在同一个小边中?)或者这些游走是否在图中广范移动(例如这些节点是否处于统一类型的结构中?)。
node2vec扩展
node2vec的优势在于它的简单,但这也是它最大的弱点。标准算法并不包含节点属性或边属性以及其他需要的信息。
但是,扩展node2vec使它包含更多的信息非常简单,只需更改损失函数,比如:
更多了解请查阅大量引用node2vec的论文。
使用随机游走的协同过滤
(Collaborativefiltering)
这大体上遵循了与node2vec相同的方案,尽管已经进一步简化。你可以在本文中找到完整的实现和解释。
图网络是GraphML的一个丰富而重要的领域,其基本前提是在图结构中嵌入神经网络:
图5
通常,这涉及存储每个节点的状态,并使用邻接矩阵将这些状态传播到节点的近邻节点。
图6GN模块块中的更新。蓝色表示正在更新的元素,黑色表示更新中涉及的其他元素(请注意,蓝色元素更新前的值也在更新中使用)。有关符号的详细信息,请参见原论文的公式1。
一个图网络可能包括很多输出:
这些可以像嵌入层一样使用,如分类,评分和预测。
图网络是非常通用的强大技术,它们已经被用来分析很多东西,从自然语言,3D场景到生物学。我们最近的研究表明,它们可以实现许多传统的图算法。
促进了解图网络及其功能的一些参考:
七、对图网络的扩展
在我们的MacGraph研究项目中,我们一直在尝试对图网络进行一些扩展。虽然我们仍在改进这些方法,但它们已经展现出很大的希望,值得长期研究。
我们正在尝试学习不同的推理算法,从图中提取和转换数据。为此,我们在上述网络中添加了一系列组件,使其类似于基于图的图灵机器:
八、链接预测
预测两个节点之间
是否存在关系
这是一项通常且非常简单的任务,基本表示为:
节点A与节点B有关系的概率p(a,r,b)是多少?
例如知识图补全(例如,如果米开朗基罗是托斯卡纳出生的画家,他是意大利人吗?),预测蛋白质相互作用。这两种方法都可以用来预测新的未知事物(例如哪些药物可能有效?)以及改进现有不完善的数据(例如,此任务属于哪个项目?).
关于许多方法的更多信息,可以在前面的“通用GraphML方法”一节中找到。
节点嵌入和随机游走
节点嵌入(通常使用随机游走生成)经常用于链接预测。
嵌入层通常是这样生成的:图中邻近的节点具有相似的嵌入的张量。然后就能比较距离(例如点积或欧几里得距离)来预测存在连接的可能性。有些方法,比如node2vec,实际上是直接训练嵌入层的存/无(presence/absence)链接样本。
图网络可用于生成链接预测的嵌入节点。在这种情况下,需要将链接预测能力纳入到网络的损失函数中。
具有图特征的深度学习
这意味着对图数据进行序列化,然后在其上运行传统的前馈网络。
例如,每个节点可以由其属性表示(串联形成张量)。每个训练示例都有两个节点和关系类型作为特征,存在的边则作为标签。记住要平衡已标注的类数量。
当许多图结构反映在属性中时(例如,街道图和每个节点都有其GPS位置),这种简单的方法可以很好地工作。
神经张量网络
图7神经张量网络
斯坦福大学的这种有趣的方法基本上将图形记忆成张量和矩阵。“我们的模型优于以前的模型,可以对WordNet和Freebase中未公开的关系进行分类,准确率分别为86.2%和90.0%。”
强化学习
强化学习也可用于链接预测。在这种方法中,网络学习从图中提取一系列事实,并结合这些事实生成链接预测。
这种方法的一个例子是“Multi-hopknowledgegraphreasoningwithrewardshaping”,在这种推理中,网络学习遍历图并使用该信息生成链接预测。
九、节点,边和整个图的
评分和分类
分类意味着输出潜在标签之间的概率分布,评分意味着输出一个可用于与其他标签进行比较的权重。两者在概念上相似,分类涉及更多维度。
通常的任务是定义以下函数之一,其中Output是一组可能的类别分布或一组可能的输出分数:
f(n:Node)→r∈Output
g(e:Edge)→r∈Output
h(g:Graph)→r∈Output
执行此操作的大多数方法有两个步骤:
步骤1可以使用许多不同的方法来执行,我将在下面列出。
步骤2通常使用前馈神经网络(FFN)来执行。提取和聚合可以使用手工建立的函数(例如,读取特定节点、将特定边求和)或学习的函数(例如,注意力机制提取、聚合卷积)。
这两个步骤的选择都是数据科学和实验的问题,还没有出现任何明确的“一刀切”的解决方案。
关于其中许多方法的更多信息,可以在前面的“通用GraphML方法”一节中找到。
节点嵌入为分类和评分提供了丰富的节点状态。
当使用嵌入时,通常这些检测的节点通过一个小的FFN网络来得到期望的输出。根据用例的不同,节点的属性也可以包含在FFN的输入中。
图网络
图网络是一种将神经网络嵌入到图中的通用方法。图网络可以计算节点、边和图的状态(根据应用的场景可以省略其中的一些状态)。然后可以转换这些状态以产生最终输出。例如,图状态可以通过一个FFN来创建一个完整的图分类。
在图网络的论文中有许多不同的例子,请参见导论部分了解它们的概述。
注意力序列
一个有趣的方法是在论文“使用结构化注意力进行图分类”中得来的。在这项工作中,我们使用注意力从图中反复读取节点.
图8基于注意力的图分类,由一个初始点v*和一个预算值T=3点用于图分类的选择注意力是用于导航到图中信息更加充分的部分。
网络的中心是一个LSTM单元,它控制从哪个节点读取数据,将注意力读取到的数据合并到其内部的状态,然后输出对图分类的预测。
这类似于“用于机器推理的综合注意力网络”中的方法(尽管不在图数据上),其中一个中心RNN单元引导注意力读取和读取数据的合成。
基于分块或节点属性的
传统深度学习
将问题简化为一个对照数据集,可以找到许多更好的研究方法(例如前馈和卷积神经网络)。
一种方法是将每个节点及其属性视为一个训练样本。这可能涉及手工创建你认为将有助于分类/评分的附加属性。
创建图的另一种方法是提取固定大小的分块。在这个模型中,一个节点、它的边以及它的近邻节点被提取到一个固定大小的表中。固定大小意味着边和节点有最大数量的存储限制,如果表中存在多出边和节点,则必须随机抽样。此外,如果节点和边少于固定表可以存储的数量,则需要用指定的空值填充。最后,必须选择如何选择分块-一个简单的模型是从每个节点或边提取一个分块。
表格化丢弃了隐藏在网络信息中的价值,但简化了工程和模型研究。
节点属性在搜索引擎上的技术
最后,也有一些非机器学习方法值得思考。如果在某种链接、内容或文本的基础上对节点进行评分,可能会对搜索引擎/文档检索效果提升有效。
这包括简单的模糊文本匹配,到PageRank,短语和语义匹配。
附录
在本文中,我引用了很多资源,为了方便起见,都在此列出。此外,我还添加了其他前面未列出的有趣项目。
Surveysofthefield
Randomwalks/embeddings
GraphNetworks
Knowledgegraphs
Miscellaneous
翻译:王舒凡
审校:陈曦
编辑:王怡蔺
原文地址:
先进制造业+工业互联网
产业智能官AI-CPS
加入知识星球“产业智能研究院”:先进制造业OT(自动化+机器人+工艺+精益)和工业互联网IT(云计算+大数据+物联网+区块链+人工智能)产业智能化技术深度融合,在场景中构建“状态感知-实时分析-自主决策-精准执行-学习提升”的产业智能化平台;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链。