揭开图深度学习神秘面纱的尝试

2021-08-05 21:14:30

关于什么是图神经网络有很多很好的解释。然而,我发现他们中的很多人很快就深入数学。然而,我们仍然面临着一个古老的问题:所有的图片在哪里??因此,就像我尝试使用贝叶斯深度学习一样,我也想尝试揭开图深度学习的神秘面纱,使用我可以使用的所有工具来最小化方程的数量并最大化使用图片的直觉。这是我的尝试,我希望你觉得它有用!在我的 Network Analysis Made Simple 教程中,我们看到术语“图”实际上只不过是网络的同义词。严格定义,图由定义节点之间关系的节点、实体和边组成。示例是社交网络(节点= 人,边 = 友谊)和飞行网络(节点 = 机场,边 = 存在于两个网络之间的航班)。图 G,在非常简洁的数学符号中,可以表示为 G = (V, E),或者用简单的英语表示,顶点的无序集合(节点的同义词)和边的无序集合。图的一个非常巧妙的特性是我们实际上可以将它们表示为数组。这在 Network Analysis Made Simple 的线性代数部分有介绍;我也在一篇关于消息传递的文章的前面部分中写到了这一点我鼓励你完整地检查它,但这里有一个简化的版本,向你介绍关键思想。因为图是由节点和边组成的,所以我们需要想办法将它们都表示为数组。接下来,我们将探讨如何做到这一点。让我们从节点开始,我们的实体。我们的节点,作为实体,可能具有某些属性。让我们使用分子的具体例子,这是我认为探索关键思想的最小复杂示例。(我使用最小复杂示例作为我的锚点学习一个想法的例子,我希望这个对你也有用!)假设我们有一个乙酸分子。它由两个碳、两个氧和四个氢组成,按以下方式连接:

每个原子是一个节点,边是原子之间的键。每个原子或节点都带有可以在数组上表示的属性或特征。例如,有原子质量(浮点数,或者整数,如果你想圆它。还有原子的化合价。还有更多!为了简单起见,我现在只使用这两个。正如你所看到的,你最终会得到一个特征向量节点。如果我们将它们堆叠在一起,我们就会得到我们所说的节点特征矩阵,这在以后会变得很方便。类似地,边也有数组表示!如果你想象将乙酸分子内的所有原子沿方阵排列,你可以根据这两个原子之间是否存在边来填充方阵。它会看起来像这样:不过,如果我们愿意,我们可以得到真正的粒度!我们可以有一个显示所有单键的邻接矩阵,以及另一个显示所有双键的邻接矩阵。或者我们可以有一个邻接矩阵基于两个原子之间的键数加权的矩阵。这些都是图边缘的完全有效的表示,每个都有自己的语义和权衡你可能遇到的任何建模问题。现在是考虑消息传递的时候了。消息传递是网络科学和机器学习领域中非常著名的操作,但您不必害怕它!从本质上讲,它实际上非常简单,而且您“会看到它完全具有线性代数解释,在我看来,非常优雅!图上的消息传递与您的直觉相似:如果我在一个节点上有一条消息,我们希望将消息传递给图上的其他节点。我们的消息只能沿边传播,否则 - 否则,图的结构将无关紧要。这是一个非常非常简化的例子。(我们很快就会在我们的乙酸例子中看到完全相同的想法。)这个例子来自我的网络分析教程,特别是线性代数部分.

假设我们有一个由四个节点组成的有向链图。一个“消息”存在于第一个节点上,我们希望通过该图传递它。在第一次消息传递迭代中,我们在第一个节点上获取消息并将其传递到下一个。在之后的迭代中,我们获取消息并将其传递给下一个节点。依此类推,直到我们到达最后一个节点。在这里,消息无处可去;无论多多少步我们可能希望运行消息传递,消息不会去任何地方。事实证明,消息传递存在线性代数解释!对于四节点链图,我们可以将消息视为节点的属性。对于拥有消息的节点,或者更一般地说是消息的副本,我们可以给它赋值 1。如果一个节点没有消息的副本,那么我们给它赋值 0。这就是魔法发生的地方。当我们对这个消息向量对邻接矩阵进行点积(其中类似于我们的节点特征向量),消息将从第一个节点移动到下一个节点。(亲自验证这一点!)所以看起来我们可以通过简单的点积在节点之间传递消息!让我们看看这个通过查看乙酸的相同操作来实际操作。这里,所有节点同时接收来自其邻居的消息。注意执行消息传递后图形的样子。连接到三个氢的碳与连接到三个氢的碳具有不同的值氧气;它们的价值是他们的邻居的总和。“总结邻居”实际上就是我们在这种消息传递形式中所做的一切,换句话说,当我们对邻接矩阵与节点特征矩阵进行点积时。在这一点上,我鼓励你暂停阅读并思考到目前为止的想法。当我第一次真正将消息传递和线性代数联系起来时,这对我来说非常令人兴奋。我花了几个星期来仔细思考我的想法刚刚描述。我们现在将看到消息传递是如何嵌入到神经网络中的——一个在网络上学习的网络。(如果你问我的话,这真是太棒了!)为了巩固我们的理解,我们将从监督学习环境中的图深度学习开始,其中我们的学习任务是为一组图中的每个图预测一个标量数。以前做过的一个经典例子是化学性质预测,我遇到的第一个例子是我的深度学习老师 David Duvenaudon 学习分子的论文指纹。在这里,神经网络的每个输入都是一个图,而不是一个向量。为了比较,经典深度学习从通过神经网络输入的 iid 数据行开始。我们知道神经网络由数学函数链组成。(真的,这就是所有神经网络模型的核心!)前馈神经网络将点积链接在一起;卷积神经网络在混合中加入 n 维卷积;同时,循环神经网络作为其结构的一部分具有滞后性。每一个都提供归纳偏差。顺便说一句,在我看来,这个术语只不过是一种奇特的说法,即我们将数据生成过程的先验知识编码到数学中但是,在每种情况下,在每个 iidsample 的基础上,我们一次传入一个 n 维数组。

那么图神经网络呢,那么 - 输入究竟是什么样子的,这种网络的一般结构是什么? 为了回答这些问题,我们将遍历三种不同类型的图神经网络层,我将介绍的三个层最熟悉的是,作为图神经网络一般形式的具体例子。在我们完成它们的最后,我们应该对这些模型背后的数学有更清晰的掌握。消息传递神经网络,顾名思义,就是我们将消息传递作为一个操作注入到神经网络中。让我们看看如何定义一个消息传递层。消息传递层不是只接受向量或n维图像接受邻接矩阵和节点特征矩阵并执行一轮消息传递。特征矩阵并应用等效的前馈神经网络操作 - 线性变换 + 一些激活函数!我们可以根据需要进行尽可能多的轮次 - 尽管重要的是要注意我们通常不想进行太多轮次。长话短说是消息传递具有平滑节点级信息的效果,这可以变得不受欢迎。一旦我们完成了一轮或两轮消息传递,可能需要我们的图的向量表示。但目前,我们被困在两个矩阵 - 邻接矩阵和消息传递的节点特征矩阵!嗯,创建图级向量表示的一种规范方法是简单地对节点特征矩阵进行节点求和(或平均值)。求和表示图的大小很重要,而平均值表示大小不重要。什么您选择将取决于您的特定问题。顺便说一句,您只要有一个将节点特征矩阵简化为向量的约简函数,就可以满足对图形进行向量摘要的需要...只要你能解释语义:).不管怎样,我们称这个层为“图形摘要层”。一旦我们有了图的向量级表示,我们就可以将经典的前馈神经网络层贴在图处理层的顶部,以获得我们想要预测的东西。我的朋友们,这就是经典消息传递神经网络的工作原理!这是我用来记住 GNN 工作原理的框架:在更广泛的“模型、损失、优化器”机器学习框架中,我们在这里所做的只是设计一个适合我们拥有的数据类型的模型。您可以保持损失和优化器不变。记住这个框架,并使用 MPNN 作为锚定最低复杂度的示例,我们接下来讨论的所有其他内容都将变得清晰!

那么图拉普拉斯网络怎么了?嗯,实际上,它的核心就是用它们的图拉普拉斯矩阵替换每个图的邻接矩阵。就是这样!你在上图中看到的所有其他操作都保持不变。但是什么是图拉普拉斯算子?在其核心,它是图局部导数的度量,当我们想表达节点的局部差异对我们感兴趣的图级属性很重要时,我们会使用它。在这里解释这个想法任何进一步的操作都会分散我们对 GNN 的探索的注意力,因此对于那些希望更深入了解此类图矩阵的人,我会向您推荐维基百科条目。那么图注意力网络呢?嗯,我们知道注意力机制只不过是一种使用神经网络内部的神经网络来学习某种权重的操作。对于图注意力网络,我们使用嵌入式神经网络来学习每个-graph adjacency-like matrix operator,我们用邻接矩阵掩盖,它有效地为我们提供了一个用于消息传递的边缘注意矩阵。纸论文。)图注意力层为我们提供了最通用的消息,我们可以想象的数据驱动的传递运算符。而不是先验地固定消息传递运算符,我们只是以数据驱动的方式学习运算符。好的,我们已经探索了图神经网络的三个例子。这里的一般性究竟是什么?答案是:我们必须有一个消息传递算子 A。它可以被学习,也可以被提供一个先验并在整个神经网络中保持不变。你基本上可以自由定义你需要的任何形式的 A!为方便起见,我们通常将图的数组表示 A 和 Fin 转换为汇总向量,然后由前馈神经网络处理。

同样,保持相对不变的是模型的结构 - 某种形式的广义消息传递,然后是某种形式的图摘要,然后是顶级模型。 只要你有某种语义上有意义的方阵 A 和一个语义上有意义的节点特征矩阵F,您可以按照消息传递-> 摘要-> 前馈结构来构建您的GNN 模型。当大卫教我图神经网络时,一个想法真的很受欢迎:消息传递如何将网格卷积推广到图——这就是“图卷积”术语出现在深度学习文献中的原因。让我们仔细看看这是如何发生的一个简单的网格卷积和一个简单的图卷积。从最简单的网格卷积开始,假设我们有一个 5x5 像素的图像和一个 3x3 的卷积算子,除了中间的单元格之外,其他地方都由 1 组成。当使用卷积操作(具有某些边界设置)时,我们得到以下结果:我们实际上可以将值的网格重新表示为格子图并进行消息传递操作以获得相同的结果:并且在这样做时,我们可以看到使用邻接矩阵作为我们的消息传递算子的消息传递操作等效于带有过滤器的卷积围绕零的 1s。更一般地,图上的消息传递只需要我们放宽我们的图是格图的条件!到目前为止,我们探索了图神经网络如何在有监督的机器学习问题的上下文中工作,我们希望构建一个模型,将图作为输入链接到整个图的属性。不过,除了这个单一的学习任务之外,还有其他学习任务。从我的朋友 Chris Lin 发表的演讲中,我了解到图学习任务有几个主要类别。以下是这些学习任务的简短概述。这是我们上面用来探索图神经网络内部结构的问题类别。基本上,我们将问题构建为“给定图,预测数字”。它假设我们有一堆具有自然图结构作为表示的 iiddata。

这类问题通常处理一个大图及其邻接矩阵,我们想要的输出是一个标签(或一组标签),需要在节点上进行注释。一些节点有标签,而另一些则没有;消息传递在这里可能很方便,因为它编码了同质性假设 - 也就是说,对于我们期望相似事物将链接在一起的问题,我们可以比其他结构方程更自然地将这种归纳偏差编码到我们的模型中。这是另一类问题,其中通常给我们一个大图,期望的输出是两个节点之间是否应该存在一条边。例如,这可以通过预测图邻接矩阵的条目来构建。在这里,我们从单个图的数组表示开始。然后,我们介绍了消息传递操作,这是图神经网络中的一个关键操作。我们探索了如何组合消息传递、图摘要和前馈神经网络来做图级属性预测。最后,我们快速浏览了使用图神经网络的图学习任务的一般类别。我花了 2-3 个月的拖延、头脑风暴和更多的时间来写下所有这些,即便如此,我怀疑我是否已经全面涵盖了图深度学习的所有基础知识。也就是说,我相信在这篇文章中,我们给了我们一个很好的起点——你甚至可以说,一个发射台——用于深入研究大量的文献。我要特别感谢我的 Patreon 支持者,Alejandro、Rafael、Fazal、Brian、Hector、Carol 和 Eddie。有了这个新孩子、角色转换和更多生活中的冲击,我花了一些时间是时候发表这篇文章了,但我终于很高兴完成了! (文献扩展得太快;很难跟上!)