论文笔记——通过图卷积网络识别网络中的复杂节点

通过图卷积网络识别网络中的重要节点

识别网络中的重要节点一直以来是一个热门话题。收到图卷积网络的启发,本文将节点的影响力识别转换为一个回归问题。通过考虑网络的邻接矩阵和卷积神经网络,提出了RCNN方法,来更高效率的识别网络中有影响力的节点。整体思路如下:为每个节点产生一个特征矩阵,用卷积神经网络训练、预测节点的影响力。

1 背景知识

1.1、卷积神经网络

有关神经网络的详细清晰介绍请移步这里: CNN笔记:通俗理解卷积神经网络.
大神讲的十分清楚,这里截取片段做个总结。
在这里插入图片描述
上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:如果是车 那是什么车。
最左边是数据输入层,对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。
中间是
CONV:卷积计算层,线性乘积求和。
RELU:激励层,ReLU是激活函数的一种。
POOL:池化层,简言之,即取区域平均或最大。
最右边是FC:全连接层
在这里插入图片描述

2 提出的方法

和卷积神经网络相似,我们从输入的网络建立局部连接邻居。 这些邻域作为卷积体系结构的接收域,允许框架学习网络表示。RCNN具体步骤如下:
(1)特征矩阵和标签:首先,为每个节点找到 l − 1 l-1 l1阶邻居,这里重点找最近的邻居(1阶或者2阶)。 如果两个节点具有相等的跳数,则优先选择度较大的节点;
从原图中生成子图 G u G_u Gu G u G_u Gu包含节点u和其 l − 1 l-1 l1阶邻居, A u A^u Au则是该子图的邻接矩阵;
u 0 , u 1 , . . . , u l − 1 u_0,u_1,...,u_{l-1} u0,u1,...,ul1为节点u和其 l − 1 l-1 l1个邻居, B u B^u Bu是节点u的特征矩阵,从 A u A^u Au转化而来,转化规则如下:
在这里插入图片描述
其中 k u i k_{u_i} kui是节点 u i u_i ui在原图中的度。也就是说,第一行和第一列,以及对角线的值对会对应改变。
在这里插入图片描述

通过SIR模型得到所有节点的影响程度作为标签
(2)卷积体系结构:此论文提出的方法中卷积神经网络包含了2个卷积层和2个池层(pooling layers)以及1个全连接层。 在第一卷积层中,核大小为5×5,输入通道为1,输出通道为16,步长为1,填充为2;在第二卷积层中,核大小为5×5,输入通道为16,输出通道为32,步长为1,填充为2。 两个池层为2×2最大池,完全连接层为32∗(L/4)∗(L/4)×1。 激活函数为ReLU,损失函数为平方损失函数。
(3)节点排序: 首先,使用训练集(为所有节点生成特征矩阵和标签)来训练CNN模型。 其次,选择任意网络,为所有没有标签的节点生成特征矩阵,并通过训练的CNN模型得到这些节点的分数。 最后,按节点的分数排序。

3 实验部分

该作者采用了BA模型生成了6个合成网络训练RCNN模型,九个合成网络以及十五个真实的网络来测试模型。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要使用图卷积网络识别影响节点,首先需要构建一个形数据集,并将其表示为形数据结构。可以使用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层来实现卷积网络,并使用均方误差损失函数来训练模型。最后,我们预测每个节点的分数,并输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值