gcn(从空间域理解)

2024-09-07 06:12
文章标签 理解 空间 gcn

本文主要是介绍gcn(从空间域理解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

常见的神经网络,如BP神经网络可以用来处理表格型的数据,卷积神经网络可以用来处理图片数据,循环神经网络则可以用来处理序列数据,这些数据都是结构化的数据,当我们需要处理的数据为图这种非结构化的数据,例如:城市交通的每个路口上的传感器所记录的数据;化学分子结构;人际关系网;推荐系统中每个人构成的图。并不是说以上的神经网络处理不了图这种类型的数据,只是在处理图这种数据上存在欠缺,图数据有一个很明显的特征,相邻或相近的节点存在一定的空间依赖关系,这种关系传统神经网络很难捕获,为此,图神经网络应运而出。

二、什么是图网络?

图网络的核心思想就是依据图结构的空间依赖关系来表征现实世界中真实的特征之间的相互作用关系,通过对节点特征进行聚合生成新的节点特征表示用于后续工作。这句话非常重要,是整个图神经网络的构建的基本原则!!!举个例子,下图为一张交通系统的图结构,在6个位置上分别有一个传感器记录了一段时间的交通流量数据,现在的目标是要预测接下来每个位置上未来一段时间的流量。该怎么去思考?从时间序列本身的角度来思考,未来的数据一定是与过去的数据相关,因此我们可以对6个位置的时间序列单独进行预测生成6个位置未来的预测值,但是这样做有一个缺点,没有考虑到节点之间的空间依赖关系,假设4节点流量非常大,那么他相邻的3/5/6节点大概率流量也是非常大的,既然已经用图结构表示出了这种空间关系,那么我们怎么去应用它?这就是图网络所要解决的问题。

img

现在再来理解下背景中的几种网络,对于BP神经网络其实就是仅仅考虑了历史数据而没有考虑空间关系;卷积网络可以考虑空间中每个像素点之间的关系,但并不适用于图这种非结构化的数据;循环神经网络也是仅考虑了时间上的关系。当然有各种组合网络模型,既考虑了时间依赖关系又考虑了空间依赖关系,能够用来解决该问题,但是图神经网络是专门为了解决图这种数据结构而诞生的一种网络,值得重点学习。

三、图卷积网络——GCN

图卷积网络的本质就是提取图结构的空间特征,基于提取方式的不同可以分为:基于空间域的图网络(GraphSAGE,GAT,MPNN等)、基于谱域的图网络(Spectral CNN、ChebyNet、GCN等)。

①基于空间的方法就是直接从图结构出发,聚合邻居节点的信息作为新的特征,不断的进行消息传递的过程。 ②基于谱域的方法就是将原始数据转换至谱域中,利用图谱理论,引入滤波器进行滤波,在转换回时域的一个过程。

下面分别就这两个角度对GCN进行讲解。

四、从空间域理解

本文假定你已经拥有图结构的相关知识,不再进行赘述。

4.1 邻接矩阵A

首先让我们和BP神经网络对比一下,设输入为X,网络权重为W,则一层的BP网络可以表示为: f=σ(XW) ;图卷积网络可以表示为: f=σ(AXW) ,其中A为图结构的表示矩阵。他们分别是什么含义?

对于BP网络,输入X经过网络的计算后,表示对每个样本的各个特征进行线性组合生成新的特征,再施加激活函数激活的一个过程。 而图神经网络在输入X前多乘了一个图结构矩阵A,假设样本数为n,则A的形状为n*n, nij 表示第 i 个节点与第 j 节点之间的关系,那么AX就表示利用图的结构对各个样本的特征进行重新整合作为新的输入,再输入至BP神经网络中,这样就将空间依赖关系考虑到了。

以上仅是简单的介绍,下面将详细的介绍下具体原理,假设现在有这样一个图结构,有ABCDE五个节点,每个节点之间的相互关系以及每个节点的特征如下图。

img

现在我要重新计算E的特征,根据GCN的基本思想,就是要聚合其邻居节点的信息,也就是ABCD的特征以一定方式进行聚合(平均、求和、拼接等),以求和为例:

img

引入图的邻接矩阵A,则以上聚合可以表示为:

img

设n为节点数,f为每个节点的特征维度,则邻接矩阵A的形状为 (n,n) ,特征矩阵的形状为 (n,f) ,AX相乘后表示考虑到邻居节点信息的新的特征矩阵,形状为 (n,f) ,每一行表示一个节点的特征,可以看出新的E节点,也就是矩阵相乘后的最后一行就是ABCD节点的相加。相比于手动计算,采用邻接矩阵,我们能一次性将所有的节点特征表示出来。

4.2 考虑自身信息的邻接矩阵

上面有一个问题,不知道大家发现没有,两个不同的节点B和C在经过邻接矩阵的运算后,新的特征向量竟然一模一样,这是两个具有不同位置信息、不同特征的不同节点啊,得出来一样的结果明显是不合理的。因此为了防止这种情况,在计算新的节点特征时,不仅要考虑邻居节点的信息,也可以将自身节点的信息考虑进去。在邻接矩阵上面的表现就是加上了一个单位阵:

A~=A+I

则,新的邻接矩阵为:

img

将新的邻接矩阵 A~ 左乘特认矩阵X,得:

img

可以看出,避免的上述的情况,B和C虽然具有相同的邻居,但是由于自身的特征不一样,所以空间变换后的特征也不一样,主要是由于单位矩阵的加入,使得矩阵相乘时,考虑到了自身节点的信息的因素。

4.3 求平均(归一化)

采用以上的方式,相当于我们队所有邻居及自身进行了求和,但是这种聚合方式是有问题的,相当于我们变相的改变了特征的量级,我们每进行一次聚合,就加大了一次量级,随着迭代的增加,量级会越来越大,假设现在我要求小明的收入,那么采用求和的方式就会将小明的邻居朋友们及自己的收入加起来这是不对的。因此更好地方式是求平均,类比到图结构中就是左乘我们的度矩阵。

度矩阵就是与该节点相邻节点的数据,因此就是邻接矩阵A每一行的求和组成的对角阵, D=∑jAij ,如下:

img

同样的这种方式只考虑到了邻居节点的个数,没有考虑到自身的信息,因此在度矩阵D上在加上单位阵 I ,也即 A~ 的每一行的求和, D~=D+I=∑jA~ij ,如下:

img

所以最终的求平均的操作就为 D~−1A~X ,由于矩阵乘法满足结合律,所以 D~−1A~X=D~−1(A~X) ,又由于 D~−1 为初等矩阵,左乘初等矩阵相当于行变换,所以相当于对 A~X 的每一行除以度,这不就是对每一个节点求和后的特征做平均么!,如下

img

这实际上就是邻接矩阵的归一化。

4.4 renormalization

以上求平均的方式仍然有点不合理,想象一下,仍然是要求小明的收入,按照图网络原理,他的收入是与自身及其图上的邻居有关,假设小明收入很低,但他在图上有且只有一个土豪朋友,那么经过土豪的平均,他的收入也会变得很高,所以上面 D~−1A~X 是有问题的,先讲是怎么改进的,后面将为什么这么改进,改进的公式为:

D~−12A~D~−12X

其中, ,D~=D+I,A~=A+I 。公式中 A~ 左乘和右乘一个初等矩阵,相当于分别对 A~ 做初等行列变换, A~ij 表示 A~ 中第 i 行第 j 列的元素,就是 i 节点与 j 节点的关系,那么这个变换就相当于 i 节点与 j 节点的关系系数再除以 i 节点度的平当根与 j 节点系数平方根的积,这样节点之间的关系系数(权重)不再与某一个节点优点,而分别考虑到了两个节点的度,邻居节点的度越大,权重越小,也即一个节点的边越多,由于节点的总的信息是一定的,那么他通过每条边的信息量越少,即通过某条边向外发送的信息越少。

拿上面的例子解释一下,小明的收入很低且只有土豪一个邻居,但是土豪有很多邻居,因此土豪的度很大,在计算小明与土豪之间的关系权重时,小明只是土豪众多邻居中的一个,因此分配到的权重很小,所以土豪并不会对小明的收入产生很大的影响。映射到公式中就是把土豪的度当做分母了,因此计算出来的关系权重比较小。

这篇关于gcn(从空间域理解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144279

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多