图卷积网络详细介绍(三)
文章目录
- 原标题:如何用图卷积网络在图上进行深度学习
- 第二部分 用谱图卷积进行半监督学习
- 简单回顾
- 谱图卷积
- 加权和聚合
- 求和法
- 均值法
- 谱方法
- 加权和聚合
- 用GCNs进行半监督分类
- 对Zachary空手道俱乐部进行社团预测
- Zachary空手道俱乐部
- MXNet中的谱图卷积
- 建立图卷积网络
- 训练GCN
- 可视化特征
- 表示1
- 表示2
- 还有啥?
- 参考文献
- 第二部分 用谱图卷积进行半监督学习
原标题:如何用图卷积网络在图上进行深度学习
第二部分 用谱图卷积进行半监督学习
均值法
求和法仅依赖于邻接矩阵A定义的邻域,而均值法还依赖于节点的度。
谱方法
我们现在有了一个有用的框架来分析光谱方法。让我们看看它带我们去哪里!
与均值法一样,我们使用度矩阵D来转换邻接矩阵A。但是,如等式3a所示,我们将度矩阵的幂变为-0.5,并在A的每一侧将其相乘。此操作可以如等式3b所示进行分解。再次提醒,度矩阵(及其幂)是对角的。因此,我们可以进一步简化方程3b,直到我们得到方程3d中的表达式。
方程式3d显示了一些非常有趣的东西。在计算第 i个节点的聚合特征表示时,不仅考虑了第 i个节点的度,而且还考虑了第 j个节点的度。
与均值法相似,谱方法规范化了聚合操作,也就是说聚合特征表示与输入特征保持大致相同的尺度。然而,谱方法在求加权和时,会给予低度邻居以较高的权重,大度邻居以较低的权重。当低度邻居比大度邻居提供更多有用信息时,这可能会有用。
用GCNs进行半监督分类
对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_units
和out_units
。通过与单位矩阵I相加,将自环添加到邻接矩阵A中,计算度矩阵D,并根据谱方法将邻接矩阵A变换为A_hat
。这种变换不是严格必要的,但在计算效率上更高,否则变换将在这层的每个前向运算上都执行一次。
最后,在__init__
中的with
中,我们存储了两个模型参数——A_hat
被存储为常数,并且将权重矩阵W
作为可训练参数存储。
hybrid_forward
是魔术发生的地方。在前向传递中,我们用下面的输入执行这个方法:x
,前一层的输出,以及我们在构造函数__init__
中定义的参数A_hat
和W
。
建立图卷积网络
我们现在已经实现了谱方法,可以将这些层堆叠在一起。我们使用与前一篇文章相似的两层架构,其中第一个隐藏层有4个单元,第二个隐藏层有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遍。
如上图所示,这些节点最初非常紧密地聚集在一起,但是在训练开始之前就被分成了一些社区! 随着训练的进行,社区之间的距离越来越大。
还有啥?
尽管有更多关于图卷积网络的知识,我希望将来有时间与您分享,但这是(目前)该系列的最后一篇文章。如果您有兴趣进一步阅读,我想以以下论文作为结尾,这些论文我觉得很有趣:
- Inductive Representation Learning on Large Graphs
汉密尔顿(Hamilton)等人在本文中提出了几个新的聚合函数,例如使用最大/平均池或多层感知器。 此外,他们还提出了一种简单的方法来对GCN进行小批量训练,从而大大提高了训练速度。 - FastGCN: Fast Learning with Graph Convolutional Networks via Importance Sampling
Hamilton等人提出的小批量方法的一个缺点是,由于递归,批处理中节点的数量在执行的聚合数量中呈指数增长。陈等人提出了FastGCN方法,该方法通过独立地执行图卷积层的批量训练来解决此问题。 - N-GCN: Multi-scale Graph Convolution for Semi-supervised Node Classification
在FastGCN解决训练递归图卷积网络问题的地方,N-GCN根本上挑战了GCN需要递归的前提! Abu-El-Haija等人取而代之的是提出了一个具有多个GCN的扁平架构,其输出串联在一起。 每个GCN都会捕获不同距离的邻居(基于随机游走语义),从而避免了递归聚合。感谢Binny Mathew引起我的注意。
参考文献
该系列其他文章
图卷积网络详细介绍(一)
图卷积网络详细介绍(二)
图卷积网络详细介绍(三)相关推荐
- 轻量级图卷积网络LightGCN介绍和构建推荐系统示例
来源:DeepHub IMBA 本文约4500字,建议阅读9分钟 今天介绍的这个模型被称作:Light Graph Convolution Network 或 LightGCN¹. 推荐系统是当今业界 ...
- 图神经网络之图卷积网络——GCN
图卷积网络--GCN 一.前置基础知识回顾 图的基本概念 构造图神经网络的目的 训练方式 二.回顾卷积神经网络在图像及文本上的发展 图像上的卷积网络 文本上的卷积网络 图卷积网络的必要性 三.图卷积网 ...
- 图卷积网络(Graph Convolutional Networks, GCN)详细介绍
本文翻译自博客. 在这篇博文中会为大家详细地介绍目前使用广泛的图神经网络--图卷积网络(Graph Convolutional Networks, GCN)的相关知识.首先将带领大家直觉上感受其工作原 ...
- 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导
文章目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral domai ...
- GCN图卷积网络 | 介绍
目录 0 前言 1 基于空间域的GCN[2] 2 基于谱域的GCN 2.1拉普拉斯矩阵 2.2为什么GCN要用拉普拉斯矩阵? 2.3 拉普拉斯矩阵的谱分解(特征分解) 2.4卷积的定义 2.5傅里叶变 ...
- Survey | 基于图卷积网络的药物发现方法
本期介绍2019年6月发表在Briefings in Bioinformatics的综述,该综述由康奈尔大学等机构的研究人员撰写,系统总结了GCN及其在药物发现方面的最新进展,重点是与药物相关的应用: ...
- LightGCN:用于推荐任务的简化并增强的图卷积网络 SIGIR 2020
论文链接:https://arxiv.org/abs/2002.02126 代码链接:https://github.com/gusye1234/LightGCN-PyTorch 论文来源:SIGIR ...
- (18) 基于时空多图卷积网络的网约车需求预测
交通预见未来(18): 基于时空多图卷积网络的网约车需求预测 1.文章信息 <Spatiotemporal Multi-Graph Convolution Network for Ride-ha ...
- (24) T-GCN-时间图卷积网络用于交通预测
交通预见未来(24): T-GCN-时间图卷积网络用于交通预测 1.文章信息 <T-GCN: A Temporal Graph Convolutional Network for Traffic ...
- 【论文翻译】HCGN:面向集体分类的异构图卷积网络深度学习模型
HCGN:面向集体分类的异构图卷积网络深度学习模型 摘要 集合分类是研究网络数据的一项重要技术,旨在利用一组具有复杂依赖关系的互联实体的标签自相关性.随着各种异构信息网络的出现,集合分类目前正面临着来 ...
最新文章
- 悟道·文澜详解:目前最大的中文多模态通用预训练模型
- eclipse 启动 找不到 JRE JDK的解决方法
- Change Fiori launchpad logo
- HEU 2036 Paths on a Grid
- python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...
- Python基础(十一)--正则表达式
- 三观碎一地:轮子天天见,车轮悖论却2000年无解?
- D. Beautiful numbers
- python3 pdf转成txt
- 模糊综合评价-----层次分析法AHP
- apiCloud实现微信分享功能
- 已知两边求角度公式_有30度角的直角三角形,已知一直角边,求另两边的公式,快速求法...
- Redis常用密令以及使用java连接操作redis
- 机器学习_深度学习毕设题目汇总——运动活动动作
- 线程池系列三:动态修改线程池队列大小
- 3ds Max发生闪退怎么办?
- 运行中的Docker容器添加映射端口
- 【GZH逸佳君】答辩ppt模板-ppt模板免费下载-ppt模板下载免费版 100套
- excel快捷键附录笔记
- 筷云解读企业上云:为什么上云?选什么上云?