论文笔记——InfGCN:用图卷积网络识别复杂网络中有影响的节点

InfGCN:用图卷积网络识别复杂网络中有影响的节点

在本文中,我们提出了深度学习模型InfGCN的框架,以确定复杂网络中最有影响的节点。 首先,我们采样固定大小的邻居网络,并构造由每个节点的4个经典中心组成的特征向量。 接下来,我们将每个节点的邻居网络和特征向量馈送到一个图形卷积网络(GCN)层中进行表示学习,然后将三个完全连接(FC)层用于任务学习。 最后,将模型的输出与SIR仿真实验得到的地面真相进行了比较,以最小化负对数似然损失。 同时,我们对模型进行了预训练,以克服小网络数据不可靠的问题。本文将前5%的影响节点视为最有影响的节点,其他节点作为影响较小的节点。 通过这样做,将节点重要性的评估转化为一个分类任务,并提出了一个名为InfGCN的深度学习框架,它可以同时处理节点特征和节点之间的链接

1、 构建邻居网络

以前的工作表明,在GCN模型中,节点的 k + 1 k+1 k+1层表示与邻居的第 k k kc层表示有关,这种局部性质导致节点的第 k k k层表示只与其k步网络,即邻居网络有关。 构造节点的邻居网络的一个有效方法是执行广度优先搜索(Breadth First Search)。然而,不同节点的邻居网络的大小可能不同,这不适合于最深度学习模型的小批量学习。
为了解决这些问题,我们指定一个固定的数字 F F F作为网络中每个节点的邻居网络的大小。 对于BFS的每个步骤 i i i,我们得到目标节点的第 i i i步邻居,然后计算不超过目标第 i i i步的邻居的总数(记为 t i t_i ti)。 如果 t i t_i ti小于固定数 F F F,则进入下一步。 如果 t i t_i ti大于 F F F,则根据其betweenness centrality(更反应节点的桥梁作用)对第 i i i步邻居进行过滤,丢弃中间性较小的邻居,保留中间性较大的邻居。

2、使用图卷积神经网络

通过检索每个节点的邻居网络,改论文设计了一个有效的基于图形卷积网络的模型来处理图形结构数据。 如图所示。 所提出的深度学习模型由输入层、GCN层、三个完全连接(FC)层和输出层组成。 接下来,我们逐一介绍这些层,并逐步建立模型。
在这里插入图片描述

2.1 输入层 input layer

输入层构建邻居网络的对称归一化拉普拉斯和节点的特征向量。为了不过多依赖特征工程,只选取了四个特征:(1)度,(2)closeness centrality; (3) betweenness centrality; (4) clustering coefficient.下表是关于这四种特征的描述。
在这里插入图片描述
同时,为了避免过拟合,要对特征进行归一化操作。对于每个特征 k k k,归一化如下:
在这里插入图片描述
其中 f k f_k fk是特征k根据中心性特征k的值表示网络中的排名位置,S则为节点数目。通过归一化,每个特征的值在0.5到0.5之间转换。 GCN层图卷积网络是利用图结构和特征向量学习节点表示向量的半监督算法。
深度学习需要大量的数据。 对于小网络,有几个节点,这意味着没有足够的数据用于深度学习模型对节点进行分类。 为了克服这一问题,使我们的模型与小网络相适应,我们借鉴了transfer learning 技术的思想,并对我们的模型进行了预训练。 迁移学习是指在某些任务上最初训练的模型被重新选择在不同但相关的任务上的设置。 深度迁移学习在计算机视觉和自然语言处理方面取得了巨大成功。 在本文中,我们将预训练推广到图形数据。 虽然不同的网络有不同的类型和大小,但它们都是网络结构,这使得应用预训练成为可能。 首先,利用大型网络数据集对模型进行预训练,然后利用小型网络的训练数据进行微调。 最后,该模型可以预测小网络中的节点。

2.2 FC层

对于任务学习,GCN层的下游层是三个完全连接的(FC)层。 每个FC层后面都有ELU非线性函数。 前两个FC层应用于Dropout技术,以避免过度拟合。

2.3 输出层和损失函数

最后,将完全连接层的输出输入LogSoftMax分类器。 我们将分类结果与第四节中提到的SIR仿真实验得出的地面真相进行了比较,并对负对数似然损失进行了优化。

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
要使用图卷积网络识别影响力节点,首先需要构建一个形数据集,并将其表示为形数据结构。可以使用Python库,如NetworkX或igraph来实现此操作。 然后,使用PyTorch或TensorFlow等深度学习框架,创建一个卷积网络模型,并训练该模型以预测每个节点影响力得分。 以下是一个简单的Python代码示例,用于创建和训练一个卷积网络模型来识别影响力节点: ```python import networkx as nx import numpy as np import torch import torch.nn as nn import torch.nn.functional as F from torch_geometric.nn import GCNConv # 构建形数据集 G = nx.karate_club_graph() edges = np.array(G.edges()) x = np.eye(G.number_of_nodes()) # 将数据转换为PyTorch张量 edges = torch.from_numpy(edges).to(torch.long).t().contiguous() x = torch.from_numpy(x).to(torch.float) # 创建模型 class GCN(nn.Module): def __init__(self): super(GCN, self).__init__() self.conv1 = GCNConv(G.number_of_nodes(), 16) self.conv2 = GCNConv(16, 1) def forward(self, x, edges): x = F.relu(self.conv1(x, edges)) x = self.conv2(x, edges) return x.squeeze() model = GCN() # 训练模型 optimizer = torch.optim.Adam(model.parameters(), lr=0.01) criterion = nn.MSELoss() for epoch in range(100): scores = model(x, edges) loss = criterion(scores, torch.from_numpy(nx.degree_centrality(G)).to(torch.float)) optimizer.zero_grad() loss.backward() optimizer.step() # 预测节点分数 scores = model(x, edges) print(scores) ``` 在此示例中,我们使用了GCNConv层来实现卷积网络,并使用均方误差损失函数来训练模型。最后,我们预测每个节点的分数,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值