文章目录

  • 原标题:如何用图卷积网络在图上进行深度学习

    • 第二部分 用谱图卷积进行半监督学习

      • 简单回顾
      • 谱图卷积
        • 加权和聚合

          • 求和法
          • 均值法
          • 谱方法
      • 用GCNs进行半监督分类
      • 对Zachary空手道俱乐部进行社团预测
        • Zachary空手道俱乐部
        • MXNet中的谱图卷积
        • 建立图卷积网络
        • 训练GCN
        • 可视化特征
          • 表示1
          • 表示2
      • 还有啥?
      • 参考文献

原标题:如何用图卷积网络在图上进行深度学习

第二部分 用谱图卷积进行半监督学习

在图上进行机器学习是一项困难的任务,因为它的复杂性很高,同时也是由于信息丰富的图结构。这篇文章是关于如何用图卷积网络(GCNs)在图上进行深度学习的系列文章中的第一篇。GCNs是一种强大的神经网络,旨在直接处理图并利用它们的结构信息。我将简单回顾一下前一篇博文,你也可以在这找到该系列的其他文章:

  1. 图卷积网络的高级介绍
  2. 用谱图卷积进行半监督学习

在上一篇文章中,我对GCNs做了一个深入介绍,并演示了如何基于邻居表示更新节点表示。在这篇文章中,我们首先对在前一篇文章中讨论的相当简单的图卷积中的聚合操作进行了深入的理解。然后,我们看看最近发表的一种图卷积传播规则,我会展示如何用它进行半监督学习,任务是在一个小型的社会网络(即扎卡里空手道俱乐部)上进行社区预测。如下面所示,尽管每个社区只使用一个训练示例,但它能够学习每个节点的潜在特征表示,将两个社区分隔成两个合理的内部聚合和外部隔离的群体。

均值法

要看均值法如何聚合节点表示,我们再次看看如何计算聚合中的第i行,现在使用均值法。为了简单起见,我们只考虑在“原始”邻接矩阵上进行均值聚合操作,而不考虑A\pmb AAAA加上单位矩阵I\pmb IIII之后的变换矩阵,后者对应于向图中添加自环。


从上面的方程中可以看出,推导过程现在稍微长一些。在方程2a中,我们首先通过将邻接矩阵A与度矩阵D的逆相乘来变换邻接矩阵A。该计算在方程2b中更加明确。逆度矩阵是对角线矩阵,其中沿对角线的值是节点度的逆,也就是说位置 (i,i)的元素是第i个节点的倒数。因此,我们可以去掉方程2c的一个求和符号。方程2c进一步简化后得到方程2d和2e。

如等式2e所示,我们现在再次对邻接矩阵A中的 N行中的每一行求和。如在讨论求和规则时所述,这对应于对第 i个节点的每个邻居求和。然而,等式2e中的加权和中的权重之和现在保证为1。因此,方程2e对应于第 i个节点的邻居的特征表示的平均值。

求和法仅依赖于邻接矩阵A定义的邻域,而均值法还依赖于节点的度。

谱方法

我们现在有了一个有用的框架来分析光谱方法。让我们看看它带我们去哪里!

与均值法一样,我们使用度矩阵D来转换邻接矩阵A。但是,如等式3a所示,我们将度矩阵的幂变为-0.5,并在A的每一侧将其相乘。此操作可以如等式3b所示进行分解。再次提醒,度矩阵(及其幂)是对角的。因此,我们可以进一步简化方程3b,直到我们得到方程3d中的表达式。

方程式3d显示了一些非常有趣的东西。在计算第 i个节点的聚合特征表示时,不仅考虑了第 i个节点的度,而且还考虑了第 j个节点的度。

与均值法相似,谱方法规范化了聚合操作,也就是说聚合特征表示与输入特征保持大致相同的尺度。然而,谱方法在求加权和时,会给予低度邻居以较高的权重,大度邻居以较低的权重。当低度邻居比大度邻居提供更多有用信息时,这可能会有用。

用GCNs进行半监督分类

除了谱方法外,kipf和welling还演示了GCNs如何用于半监督分类[1]。在半监督学习中,我们希望同时使用有标签和无标签的样本。到目前为止,我们已经隐式地假设了整个图是可用的,也就是说,我们面对的是一个直推式学习任务。换句话说,我们知道所有的节点,但不知道所有的节点的标签。

在我们看到的所有方法中,我们都是在节点的邻域上聚合信息,因此共享邻域的节点往往具有相似的特征表示。如果图表现出同质性,即相互连接的节点趋于相似(例如具有相同的标签),则此属性非常有用。亲和力存在于许多现实的网络中,尤其是社交网络表现出强烈的亲和力。
(注:网络中的亲和力指相似的个体之间容易互相吸引,进而产生链接。)

正如我们在上一篇文章中所看到的,即使是随机初始化的GCN,也可以通过使用图的结构信息来很好地分离同构图中节点的特征表示。我们可以进一步在有标记的节点上训练GCN,通过更新所有节点共享的权重矩阵,有效地将节点标记信息传播到未标记节点。这可以按如下[1]进行:

  1. 通过GCN执行正向传播。
  2. 在GCN的最后一层按行应用sigmoid函数。
  3. 计算已知节点标签上的交叉熵损失。
  4. 反向传播损失并更新每个层中的权重矩阵 W。

对Zachary空手道俱乐部进行社团预测

让我们看看谱方法如何使用半监督学习将节点标签信息传播到未标记的节点。和上一篇文章一样,我们将以Zachary空手道俱乐部为例。

如果您想继续,您可以在这里找到数据集和包含训练和评估GCN代码的Jupyter笔记本。

Zachary空手道俱乐部

简言之,Zachary空手道俱乐部是一个小型的社交网络,在那里,空手道俱乐部的管理者和教练之间产生了冲突。任务是预测空手道俱乐部每个成员选择冲突的哪一方。网络如下所示。每个节点代表空手道俱乐部的一个成员,成员之间的链接表示他们在俱乐部外部进行交互。管理员和教练分别用A和I标记。

MXNet中的谱图卷积

我在MXNet中实现了谱卷积,这是一个易于使用和高效的深度学习框架。具体实施如下:

class SpectralRule(HybridBlock):def __init__(self,A, in_units, out_units,activation, **kwargs):super().__init__(**kwargs)        I = nd.eye(*A.shape)A_hat = A.copy() + I        D = nd.sum(A_hat, axis=0)D_inv = D**-0.5D_inv = nd.diag(D_inv)        A_hat = D_inv * A_hat * D_invself.in_units, self.out_units = in_units, out_unitswith self.name_scope():self.A_hat = self.params.get_constant('A_hat', A_hat)self.W = self.params.get('W', shape=(self.in_units, self.out_units))if activation == 'ident':self.activation = lambda X: Xelse:self.activation = Activation(activation)    def hybrid_forward(self, F, X, A_hat, W):aggregate = F.dot(A_hat, X)propagate = self.activation(F.dot(aggregate, W))return propagate

__init__将邻接矩阵以及卷积层里每个节点的特征表示的输入维度和输出维度作为输入,分别为A,in_unitsout_units。通过与单位矩阵I相加,将自环添加到邻接矩阵A中,计算度矩阵D,并根据谱方法将邻接矩阵A变换为A_hat。这种变换不是严格必要的,但在计算效率上更高,否则变换将在这层的每个前向运算上都执行一次。

最后,在__init__中的with中,我们存储了两个模型参数——A_hat被存储为常数,并且将权重矩阵W作为可训练参数存储。

hybrid_forward是魔术发生的地方。在前向传递中,我们用下面的输入执行这个方法:x,前一层的输出,以及我们在构造函数__init__中定义的参数A_hatW

建立图卷积网络

我们现在已经实现了谱方法,可以将这些层堆叠在一起。我们使用与前一篇文章相似的两层架构,其中第一个隐藏层有4个单元,第二个隐藏层有2个单元。这种体系结构使可视化的二维嵌入变得容易。它与前一篇文章中的体系结构有三种不同之处:

  1. 我们使用谱方法而不是均值法。
  2. 我们使用不同的激活函数:在第一层中使用Tanh激活函数,因为死神经元的概率会非常高;第二层使用恒等函数,因为我们使用最后一层来对节点进行分类。

最后,我们在GCN的最上面添加一个逻辑回归层以进行节点分类。

上述架构的Python实现如下。

def build_model(A, X):model = HybridSequential()    with model.name_scope():features = build_features(A, X)model.add(features)        classifier = LogisticRegressor()model.add(classifier)        model.initialize(Uniform(1))    return model, features

我将包含卷积层的网络的特征学习部分分离为features 分量,并将分类部分分成classifier 组件。单独的features组件使得以后更容易可视化这些层的激活。LogisticRegressor是一个分类层,它通过对最后一个图卷积层提供的每个节点的特征求和,并在这个和上应用sigmoid函数来执行逻辑回归。

您可以在附带的Jupyter笔记本中找到构建features组件的代码和LogisticRegressor代码。

训练GCN

训练GCN模型的代码如下所示。简而言之,我初始化了一个二进制交叉熵损失函数,cross_entropy,和一个SGD优化器,trainer 来学习网络参数。然后根据指定的迭代次数来训练模型,其中计算每个训练实例的损失loss,并且用loss.backward()反向传播误差。然后,调用trainer.step来更新模型参数。在每次遍历之后,由GCN层构建的特征表示被存储在feature_representations列表中,我们将立即检查。

def train(model, features, X, X_train, y_train, epochs):cross_entropy = SigmoidBinaryCrossEntropyLoss(from_sigmoid=True)trainer = Trainer(model.collect_params(), 'sgd',{'learning_rate': 0.001, 'momentum': 1})    feature_representations = [features(X).asnumpy()]    for e in range(1, epochs + 1):for i, x in enumerate(X_train):y = array(y_train)[i]with autograd.record():pred = model(X)[x] # Get prediction for sample xloss = cross_entropy(pred, y)loss.backward()trainer.step(1)        feature_representations.append(features(X).asnumpy())    return feature_representations

关键的是,只有讲师和管理员的标签被标记,网络中剩余的节点是已知的,但没有标记!在图卷积过程中,GCN可以找到标记节点和未标记节点的表示,并且可以在训练过程中利用这两个信息源来执行半监督学习。

具体地说,半监督学习在GCN中进行,因为它通过聚合节点的有标记和无标记邻居来产生节点的潜在特征表示。在训练期间,我们反向传播有监督的二进制交叉熵损失来更新所有节点之间共享的权重。然而,这种损失依赖于标记节点的潜在特征表示,而这些特征表示又依赖于标记节点和未标记节点。这样学习就变成了半监督的。

可视化特征

上面提到,每次迭代中特征表示都被存储下来了,这使得我们可以看到在训练过程中这些特征表示是如何变化的。下面我考虑了两种输入特征表示。

表示1

在第一个表示中,我们仅使用稀疏的34×34的单位矩阵 I作为特征矩阵 X,即图中每个节点的独热编码。这种表示形式的优点是可以在任何图中使用,但是会导致网络中每个节点都有一个输入参数,这需要大量的内存和计算能力才能在大型网络上进行训练,并且可能导致过拟合。值得庆幸的是,空手道俱乐部网络很小。使用此表示,我将网络训练5000遍。

通过对网络中的所有节点进行统一分类,我们可以得出上面所示网络中的错误分布。在此,黑色表示分类错误。尽管将近一半(41%)的节点被错误分类,但是与管理员或教练(但不是同时存在!)紧密联系的节点往往被正确分类。

在上面,我已经说明了特征表示在训练过程中如何变化。这些节点最初紧密地聚集在一起,但是随着训练的进行,教练和管理员被拉开了,并拖着一些节点移动。

尽管为管理员和教练提供了完全不同的表示形式,但是他们拖曳的节点不一定属于他们的社区。这是因为图卷积将在特征空间中紧密共享邻居的节点嵌入在一起,但是共享邻居的两个节点可能不是同时连接到管理员和教练。特别地,使用单位矩阵作为特征矩阵导致每个节点的高度局部表示,即属于图的相同区域的节点可能紧密地嵌入在一起。这使得网络很难以归纳的方式在距离较远的地区之间共享共同的知识。

表示2

我们将通过添加两个独立于网络的任何节点或区域的功能来改善表示1,这些功能可以衡量其他人员与管理员和教练的连接程度。 为此,我们计算了从网络中每个节点到管理员和教练的最短路径距离,并将这两个功能加入到先前的表示形式中。

也许有人会认为这有点作弊,因为我们加入了有关图中每个节点位置的全局信息。features组件中的图卷积层应该(理想地)捕获这些信息。然而,图卷积层始终是从局部的角度(获取信息),获此类全局信息的能力有限。 尽管如此,它还是了解GCN的有用工具。

和以前一样,我们对网络中的所有节点进行了分类,并绘制了上面显示的网络中错误的分布图。 这次,只有四个节点被错误分类; 这是对表示1的重大改进! 在仔细检查特征矩阵后,这些节点要么与教练和管理员等距(在最短路径上),要么更接近管理员,但属于教练社区。 采用表示2,GCN被训练了250遍。

如上图所示,这些节点最初非常紧密地聚集在一起,但是在训练开始之前就被分成了一些社区! 随着训练的进行,社区之间的距离越来越大。

还有啥?

在这篇文章中,我对GCN中的聚合方式进行了深入的说明,并展示了如何使用均值法,总和法和谱方法将其表示为加权总和。我真诚希望,当你在构建自己的图卷积网络中考虑使用什么样的加权方法时,发现我给出的框架很有用。

我还展示了如何在MXNet中实施和训练GCN,以Zachary的空手道俱乐部作为简单示例网络,对其进行了半监督分类。我们看到了仅使用两个标记节点,GCN仍然有可能在表示空间中实现两个社区之间的高度隔离。

尽管有更多关于图卷积网络的知识,我希望将来有时间与您分享,但这是(目前)该系列的最后一篇文章。如果您有兴趣进一步阅读,我想以以下论文作为结尾,这些论文我觉得很有趣:

  1. Inductive Representation Learning on Large Graphs
    汉密尔顿(Hamilton)等人在本文中提出了几个新的聚合函数,例如使用最大/平均池或多层感知器。 此外,他们还提出了一种简单的方法来对GCN进行小批量训练,从而大大提高了训练速度。
  2. FastGCN: Fast Learning with Graph Convolutional Networks via Importance Sampling
    Hamilton等人提出的小批量方法的一个缺点是,由于递归,批处理中节点的数量在执行的聚合数量中呈指数增长。陈等人提出了FastGCN方法,该方法通过独立地执行图卷积层的批量训练来解决此问题。
  3. N-GCN: Multi-scale Graph Convolution for Semi-supervised Node Classification
    在FastGCN解决训练递归图卷积网络问题的地方,N-GCN根本上挑战了GCN需要递归的前提! Abu-El-Haija等人取而代之的是提出了一个具有多个GCN的扁平架构,其输出串联在一起。 每个GCN都会捕获不同距离的邻居(基于随机游走语义),从而避免了递归聚合。感谢Binny Mathew引起我的注意。

喜欢您阅读的内容吗? 考虑在Twitter上关注我,在那里我会分享一些除了我自己的帖子之外的一些我感兴趣的与数据科学和机器学习的实践、理论和道德相关的论文、视频和文章。
对于专业查询,请通过LinkedIn或通过Twitter上的直接消息与我联系。


参考文献

[1] Paper called Semi-Supervised Classification with Graph Convolutional Networks by Thomas Kipf and Max Welling.


该系列其他文章
图卷积网络详细介绍(一)
图卷积网络详细介绍(二)

图卷积网络详细介绍(三)相关推荐

  1. 轻量级图卷积网络LightGCN介绍和构建推荐系统示例

    来源:DeepHub IMBA 本文约4500字,建议阅读9分钟 今天介绍的这个模型被称作:Light Graph Convolution Network 或 LightGCN¹. 推荐系统是当今业界 ...

  2. 图神经网络之图卷积网络——GCN

    图卷积网络--GCN 一.前置基础知识回顾 图的基本概念 构造图神经网络的目的 训练方式 二.回顾卷积神经网络在图像及文本上的发展 图像上的卷积网络 文本上的卷积网络 图卷积网络的必要性 三.图卷积网 ...

  3. 图卷积网络(Graph Convolutional Networks, GCN)详细介绍

    本文翻译自博客. 在这篇博文中会为大家详细地介绍目前使用广泛的图神经网络--图卷积网络(Graph Convolutional Networks, GCN)的相关知识.首先将带领大家直觉上感受其工作原 ...

  4. 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导

    文章目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral domai ...

  5. GCN图卷积网络 | 介绍

    目录 0 前言 1 基于空间域的GCN[2] 2 基于谱域的GCN 2.1拉普拉斯矩阵 2.2为什么GCN要用拉普拉斯矩阵? 2.3 拉普拉斯矩阵的谱分解(特征分解) 2.4卷积的定义 2.5傅里叶变 ...

  6. Survey | 基于图卷积网络的药物发现方法

    本期介绍2019年6月发表在Briefings in Bioinformatics的综述,该综述由康奈尔大学等机构的研究人员撰写,系统总结了GCN及其在药物发现方面的最新进展,重点是与药物相关的应用: ...

  7. LightGCN:用于推荐任务的简化并增强的图卷积网络 SIGIR 2020

    论文链接:https://arxiv.org/abs/2002.02126 代码链接:https://github.com/gusye1234/LightGCN-PyTorch 论文来源:SIGIR ...

  8. (18) 基于时空多图卷积网络的网约车需求预测

    交通预见未来(18): 基于时空多图卷积网络的网约车需求预测 1.文章信息 <Spatiotemporal Multi-Graph Convolution Network for Ride-ha ...

  9. (24) T-GCN-时间图卷积网络用于交通预测

    交通预见未来(24): T-GCN-时间图卷积网络用于交通预测 1.文章信息 <T-GCN: A Temporal Graph Convolutional Network for Traffic ...

  10. 【论文翻译】HCGN:面向集体分类的异构图卷积网络深度学习模型

    HCGN:面向集体分类的异构图卷积网络深度学习模型 摘要 集合分类是研究网络数据的一项重要技术,旨在利用一组具有复杂依赖关系的互联实体的标签自相关性.随着各种异构信息网络的出现,集合分类目前正面临着来 ...

最新文章

  1. 悟道·文澜详解:目前最大的中文多模态通用预训练模型
  2. eclipse 启动 找不到 JRE JDK的解决方法
  3. Change Fiori launchpad logo
  4. HEU 2036 Paths on a Grid
  5. python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...
  6. Python基础(十一)--正则表达式
  7. 三观碎一地:轮子天天见,车轮悖论却2000年无解?
  8. D. Beautiful numbers
  9. python3 pdf转成txt
  10. 模糊综合评价-----层次分析法AHP
  11. apiCloud实现微信分享功能
  12. 已知两边求角度公式_有30度角的直角三角形,已知一直角边,求另两边的公式,快速求法...
  13. Redis常用密令以及使用java连接操作redis
  14. 机器学习_深度学习毕设题目汇总——运动活动动作
  15. 线程池系列三:动态修改线程池队列大小
  16. 3ds Max发生闪退怎么办?
  17. 运行中的Docker容器添加映射端口
  18. 【GZH逸佳君】答辩ppt模板-ppt模板免费下载-ppt模板下载免费版 100套
  19. excel快捷键附录笔记
  20. 筷云解读企业上云:为什么上云?选什么上云?

热门文章

  1. 第二季-专题6-点亮指路灯
  2. UOJ 55 【WC2014】紫荆花之恋——点分治+平衡树
  3. valgrind--CPP程序内存泄露检查工具
  4. MongoDB干货系列1-定期巡检之Mtools
  5. 构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下后篇)—减少不必要...
  6. 读取xml数据装配到字典中之应用场景
  7. docker-2 深入了解docker
  8. Ulipad中设置自定义模块(module)路径的方法(图)
  9. 自minibox-b配置说明
  10. 如何设置高度为1的分隔线