GNN学习

图基本模块

点:点由特征向量来表示;比如一个人是一个点,特征是身高,体重,年龄等等

边:边也是由向量表示的;比如预测2个人之间的关系,是塑料的关系,还是青铜的关系

图:图也是一个向量;

图神经网络最终要输出什么?

看任务是什么?对点做分类/回归?对边做分类/回归?对整个图做分类/回归?

邻接矩阵

邻接矩阵表示了谁和谁有关系,谁和谁有连接

GNN应用领域

化学分子预测;轨道交通;社交网络;

GNN常见三种任务:图级别任务;点级别任务;边级别任务

传统的神经网络的要求:

输入的格式是固定的,比如训练图像里面,一个batch里面,一会32×32,一会64×64,这样的是没有的。但是实际生活当中有很多东西都不是固定的。分子:每个分子都不一样;轨道交通:每个城市的交通都不一样,有的点不同,有的边不同;不同的数据结构完全不同的情况应该怎么处理?第一种硬是往神经网络上面靠,多退少补,会导致一些特征被破坏,这是不被希望的。

所以来使用图神经网络来处理这些事情,对与输入结构没有要求(图神经网络的优势)。比如给定100张图,其中每个图的顶点和边都不一样,都没关系。

比如说社交网络,他的顶点和连接不是不变的,是变化的。

消息传递计算方法

消息传递的方法,在更新一个顶点的特征的时候,需要考虑它邻居的特征。计算方式如下图所示,需要结合自己和邻居来更新自己的特征。结合邻居的方式有很多,比如求和,求平均,求最大最小值。。。。。。其中W权重是通过神经网络训练得来的。

多层GNN的作用

GNN的本质是更新各部分特征,其中邻接矩阵不会改变,改变的是特征

只改变特征,为什么要2层呢?只用1层可以吗?

不可以,因为每一个点在更新的时候都受它的邻居影响,那么做了很多层之后,宏观上来看,类似于CNN的感受野,它的感受野就越来越大。

所有的点和边都是向量。

GCN基本模型概述

传统的神经网络解决不了,输入不同应该怎么办。

GCN的输入是:各节点的特征 和 邻接矩阵

很多图的任务并不一定是有监督学习,是半监督学习

比如说下图中针对点,红色的点有标签,?的点没有标签;

所以针对图的数据,有些点没有标签是可以的。

图卷积的基本计算

如下图所示,在第一层的时候,更新每一个点的特征,更新点的特征的方式如上图所示,然后经过以RELU函数,然后在第二层的时候,再次更新每一个点的特征,然后再使用一个RELU函数,最后得到输出,使用多层的目的是为了扩大类似于CNN里面的感受野一样的东西,就是让每一个节点更新的时候都受所有其他点的影响,比如1号点想要受6号点影响,就需要2层才可以。

A表示邻接矩阵,D表示度矩阵(表示那个点有几个邻居),X是特征矩阵。

GCN的层数不易太多,层数多了,相当于感受野就变大了,但是并不总是一件好事,因为距离比较远的两个点之间的关系可能没有那么的大。

### 图神经网络 (GNN) 学习资源 对于希望深入了解图神经网络(Graph Neural Networks, GNNs)的学习者来说,有多种高质量的教程、论文和技术博客可以作为参考资料。 #### 论文阅读 一些重要的研究工作奠定了现代GNN的基础。例如,《DeepWalk: Online Learning of Social Representations》探讨了如何通过随机游走的方式捕捉社交网络中的节点特征[^1];《node2vec: Scalable Feature Learning for Networks》则进一步扩展了这一思路,提出了更灵活的方法来生成节点嵌入表示;而《Semi-Supervised Classification with Graph Convolutional Networks》引入了一种基于卷积操作处理图形数据的新框架——GCN(Graph Convolutional Network),它能够有效地利用未标记的数据进行半监督分类任务。 #### 教程视频 除了学术文章外,在线教育平台也提供了许多易于理解的教学材料。比如B站上有一个名为“GNN从入门到精通”的系列课程,该课程由浅入深地讲解了有关GNN的知识点,并配有实际案例分析和编程练习[^3]。 #### 技术文档与笔记整理 为了帮助初学者更好地掌握理论概念并应用于实践当中,“【GNN】图神经网络学习小结and笔记汇总”这份总结性的资料非常有价值。这里不仅包含了对核心算法原理详尽解释的文字描述,还有配套代码实现供读者参考学习[^2]。 ```python import torch from torch_geometric.nn import GCNConv class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = GCNConv(dataset.num_node_features, 16) self.conv2 = GCNConv(16, dataset.num_classes) def forward(self, data): x, edge_index = data.x, data.edge_index x = self.conv1(x, edge_index) x = F.relu(x) x = F.dropout(x, training=self.training) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) ``` 上述Python代码片段展示了如何使用PyTorch Geometric库构建简单的两层GCN模型来进行节点分类预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值