新手小白对于GCN图像卷积网络的理解(1)

这两天写文章需要用到GCN模型,所以一直在查找相关的信息学习,在这里记录一下学习的心得,有不对的地方,欢迎大家指正.

GCN可作为GNN的一种, 所以在看相关视频的时候,经常会看到很多博主是从最基础的GNN开始对模型进行讲解的. 

首先在这里贴几个我觉得讲得特别好的文章和视频:

文章 

https://distill.pub/2021/gnn-intro/

这是发在distill上的一篇文章,上面带有很多可视化的图和可交互性的解读,很多youtube上的博主都对这篇文章进行了分析和解读,很推荐读. 但是这篇文章其实主要是集中在对GNN的分析, 对GCN只是略微带过. 

Understanding Convolutions on Graphs

相同作者的另外一篇文章解读了图像卷积,可以作为第二份阅读资料. 

视频

在youtube上有几个关于GCN的解读的视频,说得很清楚也很形象:

https://www.youtube.com/watch?v=uMtDrG107Ws

下面是我的一些阅读心得,图片均来自以上的两篇文章和视频. 

首先什么是GNN: 

A GNN is an optimizable transformation on all attributes of the graph (nodes, edges, global-context) that preserves graph symmetries (permutation invariances).” 

翻译过来就是: GNN是对图的所有属性(节点、边、全局背景)的可优化转换,它保留了图的对称性(包络不变性)。是对图的属性进行变换,不改变图的结构

GNN的分类主要有以下几种: 1) Recurrent GNN 2) Convolutional GNN 3) Graph Auto Endor (GAE) 4) Spatial temporal GNN 

图像神经网络, 遵循的原则是graph-in, graph out的原则,也就是进去的是图,预测出来的也是图. 对于数据处理而言, GNN也会遵循Turing things (data) into numbers and finding the patterns in those numbers. 所以在构建的时候主要是找到相对应的数据来进行模型的构建,训练和验证. 

在这里作者使用了好几个生活中的例子来表示图G,比如说文章的引用,人的社交圈,百度的链接词条等等. 图也包括了有向图和无向图, 像微信朋友圈(除了拉黑删除等特殊情况), 好友的关系是相互的,这样的形成的图为无向图. 但是比如说微博,B站等,你关注的人不一定会关注你,这样的就是有向图. 

对于图G来说,主要包含三个特征G=(V,E,U) : 1) V: 点特征 (node attributes) 2) E: 边特征 (Edge attribute) 3) U: 全局特征 (global attribute). 在实际的计算中,往往是前面两个的使用频率较高,后面的是可选择的. 

这三个特征构成的矩阵被称为邻接矩阵(adjacency matrices). 值得注意的是, 当对顶点进行不同的排序的时候,构成的矩阵很有可能是不一样的. 比如下图所示,虽然他们表示的是同一张图,但是因为顶点的排序不一样,所以构成的图片也是不一样的.  而且可以看出来,构成的这个图其实是比较稀疏的. 

在这样的情况下,可以使用另外一种更加有效的方式进行储存. 如下图所示,使用这种方式进行储存的话,无论点的顺序如何进行变换,只要相对应调整对应的邻接矩阵的位置即可. 

 然后作者介绍了一个最简单的GNN模型:

对于图的预测,一般也是预测点,边和全局的特征. 在这个最简单的GNN模型中,分别对点,边和全局进行MLP,可以得到最后的预测结果. 

但是其实对于V, E, U三个特征而言,其实是可以互相转化的,比如说点的特征可以转化为边的特征,边的特征可以转化为点的特征(使用pooling), 这种情况适用于当点或者边不存在feature但是有需要进行预测的时候.,过程如下.  

这时候就引出了GCN了, 当分别对边和点都进行pooling的时候,有点类似于卷积的样子,这时候就是对图像进行卷积.

还有几个概念,可能也是在计算的过程中比较重要的. 

Batch Size: 也就是在对数据进行模型的训练的时候,往往不是一个一个顶点(note)进行训练,而是对一个batch的数据进行训练, 这个数值一般取决于计算机的能力以及你本身图的属性,常见的数值包括32,64,128等等

Multigraph: 因为对于点和点之间的连接,他们之间的线可能并不是只有一条(可能有好几条),这时候可能就可以形成不同的图. 可以用不同的邻接矩阵来表示,这种情况下就构成了multigraph GNN. 

常见的用于处理GNN模型的python包有: PyTorch, tensorflow and scikit-learn

猜你喜欢

转载自blog.csdn.net/weixin_44897685/article/details/130688318
今日推荐