超大图cluster gcn

Cluster-GCN方法简单概括
为了解决普通训练方法无法训练超大图的问题,Cluster-GCN论文提出:

利用图节点聚类算法将一个图的节点划分为 [公式] 个簇,每一次选择几个簇的节点和这些节点对应的边构成一个子图,然后对子图做训练。
由于是利用图节点聚类算法将节点划分为多个簇,所以簇内边的数量要比簇间边的数量多得多,所以可以提高表征利用率,并提高图神经网络的训练效率。
每一次随机选择多个簇来组成一个batch,这样不会丢失簇间的边,同时也不会有batch内类别分布偏差过大的问题。
基于小图进行训练,不会消耗很多内存空间,于是我们可以训练更深的神经网络,进而可以达到更高的精度。
PyG为Cluster-GCN提出的训练方式和神经网络的构建提供了良好的支持。我们无需在意图节点是如何被划分成多个簇的,PyG提供的接口允许我们像训练普通神经网络一样在超大图上训练图神经网络。
from torch_geometric.data import ClusterData, ClusterLoader, NeighborSampler

cluster_data = ClusterData(data, num_parts=1500, recursive=False, save_dir=dataset.processed_dir)
train_loader = ClusterLoader(cluster_data, batch_size=20, shuffle=True, num_workers=12)图节点被聚类划分成多个簇,此数据加载器返回的一个batch由多个簇组成。
subgraph_loader = NeighborSampler(data.edge_index, sizes=[-1], batch_size=1024, shuffle=False, num_workers=12)用此数据加载器不对图节点聚类,计算一个batch中的节点的表征需要计算该batch中的所有节点的距离从 [公式] 到 [公式] 的邻居节点。
图节点如何表征?
其实我们可以将上述学习分成三个部分:

变换(transform):对当前的节点特征进行变换学习,这里就是乘法规则(XW),其中X为节点表征,W为模型权重
聚合(aggregate):通过邻接矩阵聚合领域节点的特征,得到该节点的新特征,根据聚合节点的权重是否可学习可以分为GCN和GAN,GCN直接采用邻接矩阵作为权重聚合邻居节点和自身节点作为当前节点的表征,GAN通过学习邻居节点对当前节点的重要程度的权重,通过加权得到节点的表征;根据聚合节点是否通过采样获得全局图卷积和局部图卷积
激活(activate):采用激活函数,增加非线性
Cluster-GCN的工作方式如下:在每个步骤中,它都会通过图聚类算法,采样与识别出密集子图相关联的节点块,并限制在此子图中搜索邻域。这这种简单而有效的策略导致显著提高内存和计算效率的同时,又能够达到与以前相当的测试精度算法。
Cluster-GCN,一种基于高效设计批次的算法图聚类算法,例如METIS
uster-GCN在大规模图上,实现了最佳内存,尤其是在深层GCN上。 例如,在Amazon2M数据集上,Cluster-GCN使用3层GCN模型中,使用的内存比VRGCN少5倍。 Amazon2M是一个新数据集,是为了演示GCN算法的可扩展性。 这个数据集包含200万个节点和6100万条边。
Cluster-GCN与适用于较浅的网络(例如2层)的VR-GCN达到了类似的训练速度,但当网络更深入(例如4层)时,其速度比VRGCN快,因为VR-GCN的复杂度与L层数成线性关系复杂度是L的指数
Cluster-GCN能够训练一个非常深度的网络,该网络具有大尺寸的embedding-size。 尽管以前的几幅作品都显示深入的GCN不能提供更好的性能,我们发现通过适当的优化,更深的GCN可以帮助提高准确性。例如,使用5层GCN,我们可以获得新的基准PPI数据集的准确度为99.36## 标题

你可能感兴趣的:(笔记)