一份完全解读:是什么使神经网络变成图神经网络?
2019-09-09

所有这些良好的特性使得ConvNet不太容易过度拟合,在不同的视觉任务中更精确,并且易于扩展到大型图像和数据集。因此,当我们想要解决输入数据是图结构的重要任务时,将这些属性全部转移到图神经网络上,以规范它们的灵活性并使它们具有可扩展性。理想情况下,我们的目标是开发一个像GNN一样灵活的模型,可以消化和学习任何数据,但同时我们希望通过打开或关闭某些先验来控制这种灵活性的元素。这可以在很多创新的方向上进行研究。然而,想要控制它并且达到一种平衡状态还是很有挑战性的。

2. 根据图进行图像卷积

我们先来考虑一下具有N个节点的无向图G,边E表示节点之间的无向连接。节点和边通常是由你自己设定的。关于图像,我们认为节点应该是像素或超像素,边是它们之间的空间距离。例如,左下方的MNIST图像通常表示为28×28维矩阵。我们也可以用一组N=28*28=784像素来表示它。因此,我们的图G应该有N=784个节点,而对于位置较近的像素,边会有一个较大的值,对于较远的像素,则相应的有较小的值。

图5:左侧是MNIST数据集的图像,右侧是图的示范。右侧较暗和较大的节点对应较高的像素强度。右图的灵感来自图6


当我们在图像上训练神经网络或Convnet时,潜意识里我们在图上就已经将图像定义成了一个规则的2D网格,如下图所示。这个网格对于所有的训练和测试图像是相同且规则的,也就是说,网格的所有像素都以完全相同的方式在所有图像之间连接,所以这个规则的网格图没办法帮我们从一幅图像中分辨出另一幅图像。下面我可视化了一些2D和3D规则网格,其中节点的顺序是彩色编码的。顺便说一句,我是在Python代码中使用了NetworkX来实现的,例如G=networkx.Grid_Graph。

图6:规则的2D和3D网格的例子。图像在2D网格上的表现,视频在3D网格上的表现。

考虑到这是个4×4的规则网格,我们可以简单地看看2D卷积是如何工作的,就可以理解为什么很难将算子转换成图。规则网格上的滤波器具有相同的节点级,但现代卷积网络通常有小滤波器,例如下面的例子中的3×3。这个滤波器有9个值:W₁,W₂,…,W₉,这是由于我们在训练过程中使用了backprop工具进行更新以尽量减少损失和解决下游任务的问题。在下面的例子中,我们只是受到启发将滤波器初始化成了边缘检测器:

图7:在规则2D网格上的3×3滤波器的例子,左侧是任意权值w,右侧是边缘检测器。

当我们进行卷积的时候,要从两个方向滑动这个滤波器:向右和向下,可以从底角开始,重要的是要滑过所有可能的位置。在每个位置,计算网格上值之间的点积和滤波器的值W:X₁W₁+X₂W₂+…+X₉W₉,并将结果存储在输出图像中。在我们的可视化过程中,改变节点在滑动过程中的颜色,以匹配网格中节点的颜色。在常规网格中,我们始终将滤波器的节点与网格的节点相匹配。但这并不适用于图,我将在下面进行解释。

图8:规则网格上2D卷积的2个步骤。如果我们不应用填充的话,一共会有4个步骤,因此结果是2×2图像。为了使得到的图像更大,我们需要应用填充。在这里,请参阅关于深度学习中卷积的全面指南。

上面使用的点积就是所谓的“聚合算子”之一。广义上来讲,聚合算子的目标是将数据归纳成简单的形式。在上面的例子中,点积将一个3×3矩阵概括为单个值。另一个例子是在Convnet中进行数据汇总。请记住,诸如最大值或和总计值的位置是不变的,也就是说,即使随机地移动该区域内的所有像素,它们还是会在空间区域内汇总成相同的值。为了说明这一点,点积不是置换不变的,因为在一般情况下:X₁W₁+X₂W₂≠X₂W₁+X₁W₂。

现在,让我们使用MNIST图像,来定义规则网格、滤波器和卷积。考虑到我们的图术语,这个规则的28×28网格将是我们的图G,因此这个网格中的每个单元都是一个节点,节点特征是一个实际的图像X,也就是说每个节点只有一个特征,像素强度从0到1。

 

图9:规则28×28网格和该网格上的图像。

接下来,我们要定义滤波器,并让它成为具有 任意参数的著名Gabor滤波器。一旦我们有了图像和滤波器,我们就可以通过在图像上滑动滤波器 ,并在每一步之后将点积的结果放到输出矩阵中来执行卷积。

 

图10:一个28×28滤波器和该滤波器与数字7图像的2D卷积结果。

正如我前面提到的,当你尝试将卷积应用到图时,就会遇到很多问题。

节点是一个集合,该集合的任何排列都不会改变它。因此,人们应用的聚合算子应该是置换不变的.

正如我前面提到的,用于计算每一步卷积的点积对顺序是敏感的。这种灵敏度使我们能够学习与Gabor滤波器相似的边缘检测器,这对于捕获图像特征非常重要。问题在于,在图中没有明确定义的节点顺序,除非你学会给它们排序,或者想出其他一些启发式的方法,能在图与图之间形成规范的顺序。简而言之,节点是一个集合,该集合的任何排列都不会改变它。因此,人们应用的聚合算子应该是置换不变的.最受欢迎的选择是平均值和对所有相邻数值求和,也就是求和或均值池,然后由可训练向量W进行推测,其他聚合器参见Hamilton等人,NIPS, 2017。

图11:说明节点特征X的“图卷积”,滤波器W以节点1为中心。

例如,左侧的图,节点1的求和聚合器的输出为X₁=W₁,节点2:X₂=W₁等,即我们需要对所有节点应用此聚合器。因此,我们将得到具有相同结构的图,节点现在包含了所有邻值的功能。我们可以用同样的方法处理右边的图。

通俗地说,人们称这种平均或求和为“卷积”,因为我们也是从一个节点“滑动”到另一个节点,并在每一步中应用聚合算子。但是,重要的一点,这是一种非常特殊的卷积形式,在这里,滤波器没有方向感。下面我将展示这些滤波器的外观,并给出如何使它们更好的建议。



上一篇:印度首次挑战登月告败,一步之遥≈多大差距?
下一篇:华为方舟编译器正式开源,脱离 GitHub 实现自主托管