图神经网络的表示学习以及图神经网络笔记

表示学习也就是特征学习,特征提取分为特征工程和特征学习,特征学习强调人工,机械劳动,特征学习是采用技术进行特征提取
在这里插入图片描述
参考资料: https://www.jianshu.com/p/c76cb0ce3c8a

GNN的应用表述

  1. GNN具有强大的图数据拟合能力
  2. GNN 具有强大的推理能力
  3. GNN与知识图谱结合
    小结: GNN强大而灵活的特性,使得其不管在图数据本身的学习任务上,还是在被以端对端的形式融合到其他的学习任务中,都能表现出自己的独特优势

参考资料:https://blog.csdn.net/fengdu78/article/details/104810158?

图嵌入旨在通过保留图的网络拓扑结构和节点内容信息,将图中顶点表示为低维向量空间,图嵌入的深度学习方法也属于图神经网络,包括基于图自动编码的算法(如DNGR和SDNE)和无监督训练的图卷积神经网络(如GraphSage)
在这里插入图片描述

GNN内容

GNN的学习目标是获得每个节点的图感知的隐藏状态(state embedding),这就意味着:对于每个节点,它的隐藏状态包含了来自于邻居节点的信息。那么,如果让每个节点都感知到图上的其他节点呢?GNN通过迭代更新所有节点的隐藏状态来实现,何时停止,即为收敛到一定的范围

状态更新:Xv表示节点v的特征;连接两个节点的边也有自己的特征,在此用X(u,v)表示节点u和节点v之间的边的特征;GNN的学习目标是获得每个节点的图感知的隐藏状态(state embedding),这就意味着:对于每个节点,它的隐藏状态包含了来自于邻居节点的信息。那么,如果让每个节点都感知到图上的其他节点呢?GNN通过迭代更新所有节点的隐藏状态来实现,在时刻,节点的隐藏状态按照如下方式更新:
在这里插入图片描述
就是隐藏状态的状态更新函数,在论文中也被称为局部转移函数(local transaction function)。Xco[v]公式中的指的是与节点相邻的边的特征,Xne[v]指的是节点的邻居节点的特征,hnte[v]则指邻居节点在时刻t的隐藏状态。注意f是对所有的节点都成立的,是一个全局共享的函数。那么怎么把它和深度学习结合在一起呢?利用神经网络(Neural Network)来拟合这个复杂函数。值得一提的是,虽然f看起来的输入是不定长参数,但是在内部我们可以先将不定长的参数通过一定操作变成一个固定的参数,比如说用所有的隐藏状态加起来表示所有的隐藏状态.

不断地利用当前邻居节点的隐藏状态作为部分输入来生成下一时刻中心节点的隐藏状态
状态更新公式仅描述了如何获取每个节点的隐藏状态,
除它以外,我们还需要另外一个函数来描述如何适用下游任务,就是局部输出函数,
举个例子,给定一个社交网络,一个可能的下游任务是判断各个节点是否为水军账号。 在这里插入图片描述两个时刻之间的连线,它与图的连线密切相关。比如在时刻,节点1的状态接受来自节点3的上一个时刻的隐藏状态,因为节点1和节点3相邻。知道时刻,各个结点隐藏状态收敛,每个节点后面接一个即可得到该节点的输出。

不动点理论
GNN的理论基础是不动点(the fixed point)理论,这里的不动点理论专指巴拿赫不动点定理(Banach’s Fixed Point Theorem)。首先我们用表示若干个堆叠得到的一个函数,也称为全局更新函数,那么图上所有节点的状态更新公式可以写成:

在这里插入图片描述

不动点定理指的就是,不论是什么,只要是个压缩映射(contraction map),经过不断地迭代都会收敛到某一个固定的点,我们称之为不动点
在这里插入图片描述
箭头就是指映射,任意两个点,在经过这个映射后,压缩映射就是指变换空间也就是说,经过变换后的新空间一定比原先的空间要小,原先的空间被压缩了。想象这种压缩的过程不断进行,最终就会把原空间中的所有点映射到一个点上。

具体实现:
通过限制f对H的偏导数矩阵的大小,这是通过一个对雅可比矩阵(Jacobian Matrix)的惩罚项(Penalty)来实现的。在这里使用表示在空间中的范数(norm)。范数是一个标量,它是向量的长度或者模,是在有限空间中坐标的连续函数。这里把简化成1维的,坐标之间的差值可以看作向量在空间中的距离,根据压缩映射的定义:
在这里插入图片描述
根据拉格朗日乘子法,将有约束问题变成带罚项的无约束优化问题,训练的目标可以表示成如下形式:
在这里插入图片描述
训练模型:
模型的损失就是
正向传播:
1. 调用f若干次,例如Tn次,直到HvTn收敛
2. 此时每个节点的隐藏状态接近不动点的解
3. 对于有监督信号的节点,将其隐藏状态通过g得到输出,进而算出模型的损失
反向传播:

GNN和RNN的区别

在这里插入图片描述
GNN中存在三个节点,相应的,在RNN中有一个序列。在此,GNN和RNN的主要的区别在于以下4点:

  1. GNN的基础理论是不动点理论,这就意味着GNN沿时间展开的长度是动态的,是根据收敛条件确定的,而RNN沿时间展开的长度就等于序列本身的长度。
  2. GNN每次时间步的输入都是所有结点的特征,而RNN每次时间步的输入是该时刻对应的输入。同时,时间步之间的信息流也不相同,前者由边决定,后者则由序列的读入顺序决定。
  3. GNN采用AP算法反向传播优化,而RNN使用BPTT(Bacj Propogation Through Time)优化。前者对收敛性有要求,而后者对收敛性没有要求。
  4. GNN循环调用的目标是得到每个节点的稳定的隐藏状态,所以只有在隐藏状态收敛后才能输出;而RNN的每个时间步上都可以输出,比如语言模型。
    不过鉴于初代GNN和RNN结构上的相似性的,一些文章也喜欢把它称之为Recurrent-based GNN。

GNN的局限性

初代GNN,也就是基于循环结构的图神经网络的核心是不动点理论。它的核心观点是通过节点信息的传播使整张图达到收敛,在其基础上再进行预测。收敛作为GNN的内核,同样局限了其更为广泛的使用

  • GNN只将边作为一种传播手段,但并未区分不同边的功能。虽然我们可以在特征构造阶段为不同类型的边赋予不同的特征,但相比其他输入,边对结点隐藏状态的影响实在有限。并且GNN没有为边设置独立的学习参数,也就意味着无法通过模型学习到边的某些特征
  • 如果把GNN应用在图表示的场景中,使用不动点理论并不合适。这主要是因为基于不动点的收敛会导致节点之间的隐藏状态间存在较多的信息共享,从而导致节点状态太光滑(Over Smooth),并且属于节点自身的特征信息匮乏(Less Informative)

门控图神经网络

门控神经网络不以不动点理论为基础。f不再需要是一个压缩映射;迭代不需要到收敛才输出,可以迭代固定步长优化算法也从AP算法转向BPTT

状态更新

GNN参考了GRU的设计,把邻居节点的信息视作输入,节点本身的状态视为隐藏状态:
在这里插入图片描述
除了GRU式的设计外,GGNN还针对不同类型的边引入了可学习的参数W,每种edge对应一种W_{edge},这样它就可以处理异构图。
在GNN里需要作为输入的节点特征没有出现在GGNN的公式中!但是实际上,这些节点的特征对我们预测至关重要,因为它才是各个节点的根本所在。
为了处理这个问题,GGNN将节点特征作为隐藏状态初始化的一部分。那么重新回顾一下GGNN的流程

  • 用节点特征初始化各个节点的(部分)隐藏状态。
  • 对整张图,按照上述状态更新公式固定迭代若干步
  • 对部分有监督信号的节点求得模型损失,利用BPTT算法反向传播求得和GRU参数的梯度。
    初始化的流程我们也可以看出GNN和GGNN的区别:GNN依赖于不动点理论,所以每个节点的隐藏状态即使使用随机初始化都会收敛到不动点;GGNN则不同,不同的初始化对GGNN最终的结果影响很大

图卷积缘起

在这里插入图片描述
真正的难点聚集在邻居节点数量不固定上。那么,研究者们如何解决这个问题呢是?其实说来也简单的,目前主流的研究从2条路来解决这件事:

  • 提出一种方式把非欧式空间的图转换成欧式空间
  • 找到一种可以处理变长邻居节点的卷积核在图上抽取特征。
    这两条实际上也是后续图卷积神经网络的设计原则,图卷积的本质是想找到适用于图的可学习卷积核

图卷积框架
图卷积神经网络的全貌。如下图所示,输入的是整张图,在Covolution Layer 1里,对每个节点的邻居进行一次卷积操作,并用卷积的结果更新该节点;然后经过激活函数如relu,然后再过一层卷积层Convolution Layer 2与一层激活;反复上诉过程,直到层数达到预期深度。与GNN类似,图卷积神经网络也有一个局部输出函数,用于将节点的状态(包括隐藏状态与节点特征)转换成任务相关的标签
比如水军账号分类,本文称这种任务为Node-Level的任务;
也有一些任务是对整张图进行分类的,比如化合物分类,本文中称这种任务为Graph-Level的任务,它们会在卷积层后加入更多的操作。
在这里插入图片描述

GCN和GNN的区别

GCN是多层堆叠,比如上图中的Layer 1和Layer 2的参数是不同的;
GNN是迭代求解,可以看作每一层Layer参数是共享的。

卷积

图卷积神经网络主要有两类,一类是基于空域的,另一类则是基于频域
空域可以类比到直接的图片的像素点上进行卷积,而频域可以类比到对图片进行傅里叶变换后,再进行卷积。

  • 基于空域卷积的方法直接将卷积操作定义在每个节点的连接关系上,它跟传统的卷积神经网络的卷积更相似一些。在这个类别中比较有代表性的方法有Message Passing Neural Networks(MPNN),GraphSage,Diffusion Convolution Neural Netwrks(DCNN)
    , PATCHY-SAN等。
  • 基于频域卷积的方法则从图信号处理起家,包括 Spectral CNN
    ,Cheybyshev Spectral CNN(ChebNet)
    ,和First order of ChebNet(1stChebNet)等。

基础概念

卷积是一种定义在两个函数(f跟g)上的数学操作,旨在产生一个新的函数。那么f和g的卷积就可以写成f*g,数学定义如下:在这里插入图片描述

实例 掷骰子问题

描述:https://www.jianshu.com/p/c76cb0ce3c8a

空域卷积

空域卷积与深度学习中的卷积的应用方式类似,其核心在于聚合邻居节点的信息。比如说一种最简单的无参卷积方式就是:将所有直连邻居节点的隐藏状态加和,来更新当前节点的隐藏状态:
在这里插入图片描述

这里非参式的卷积只是为了举一个简单易懂的例子,实际上图卷积在建模时需要的都是带参数、可学习的卷积核。

消息传递网络(Message Passing Neural Network)

MPNN不是一种具体的模型,而是一种空域卷积的形式化框架。它将空域卷积分解为两个过程:消息传递状态更新操作,分别由M_l(·)和U_l(·)函数完成,将v的特征x_v作为其隐藏状态的初始态h_v^0,空域卷积对隐藏状态的更新由如下公式表示:
在这里插入图片描述l代表图卷积的第l层,上式的物理意义是:收到来自每个邻居M_{l+1}后,每个节点如何更新自己的状态。

对比之前的GGNN,它们是截然不同的两种方式:GCN中通过级联的层捕捉邻居的消息,GNN通过级联的时间来捕捉邻居的消息;前者层与层之间的参数不同,后者可视为层之间共享参数。MPNN的示意图如下:
在这里插入图片描述

图采样与聚合(Graph Sample and Aggregate)

MPNN很好地概括了空域卷积的过程,但在这个框架下的所有模型都有一个共同的缺陷:卷积操作针对的对象是整张图,才能进行卷积操作。
利用采样(sample)部分节点的方式进行学习。当然,即使不需要整张图同时卷积,GraphSage仍然需要聚合邻居的信息,即论文中定义的aggregate的操作。这种操作类似于MPNN的消息传递过程。
在这里插入图片描述
采样过程分为三步:

  1. 在图中随机采样若干个节点,节点数为传统任务中的batch_size。对于每个节点随机选择固定数目的邻居节点(这里邻居不一定是一阶邻居,也可以是二阶邻居)构成进行卷积操作的图。
  2. 将邻居节点的信息通过aggregate函数聚合起来更新刚才采样的结点
  3. 计算采样节点处的损失。如果是无监督任务,我们希望图上的邻居节点的编码相似;如果是监督任务,即可根据具体结点的任务标签计算损失。
    最终,GraphSage的状态更新公式如下:
    在这里插入图片描述
    aggregate函数的设计上。它可以是不带参数的max,mean,也可以是带参数的如LSTM等神经网络。核心的原则仍然是,它需要可以处理变长的数据

图结构序列化(PATCHY-SAN)

图结构转化为序列结构,然后直接利用卷积神经网络在转化成的序列结构上做卷积。PATCHY-SAN在其论文中主要用于图的分类任务
序列转换要保持图结构的两个特点:1.同构的性质。2.邻居节点的连接关系
具体解释:对于前者就是同构图产生的序列应当相似,后者就是保持邻居节点与目标节点的距离关系,如在图中的三阶邻居在序列中不应该成为一阶邻居等。
通过以下三个步骤来解决这两个问题:

  1. 节点选择 :过程旨在与通过一些人为定义的规则(如度大的节点分数高,邻居的度大时分数较高等)为每个节点指定一个在图中的排序。在完成排序后,取出前w个节点作为整个图的代表。
  2. 邻居节点构造 :在完成节点排序后,以第1步选择的节点为中心,得到它们的邻居(这里的邻居可以是一阶邻居,也可以是二阶邻居)节点,就构成了w个团。根据第1步得到的节点排序对每个团中的邻居节点进行排序,再取前k个邻居节点按照顺序排列,即组成个w有序的团。
  3. 图规范化 : 按照每个团中的节点顺序可将所有团转换成固定长度的序列(k+1),再将它们按照中心节点的顺序从前到后依次拼接,即可得到一个长度为w*(k+1)的代表整张图的序列。这样,我们就可以直接使用带1D的卷积神经网络对该序列建模,比如图分类(可类比文本序列分类)。值得注意的一点是,在第1步和第2步中,如果取不到w或k个节点时,要使用空节点作为填充(padding)。
    在这里插入图片描述
    详细的流程:
    在这里插入图片描述

频域卷积(Spectral Convolution)

空域卷积非常直观地借鉴了图像里的卷积操作,但它缺乏一定的理论基础。而频域卷积则不同,相比于空域卷积而言,它主要利用的是图傅里叶变换(Graph Fourier Transform)实现卷积。简单来讲,它利用图的拉普拉斯矩阵(Laplacian matrix)导出其频域上的拉普拉斯算子,再类比频域上的欧式空间中的卷积,导出图卷积的公式。虽然公式的形式与空域卷积非常相似,但频域卷积的推导过程却有些艰深晦涩。接下来我们将攻克这部分看起来很难得数学公式,主要涉及到傅里叶变换(Fourier Transform)和拉普拉斯算子(Laplacian operator)。

什么是傅里叶变换

傅里叶变换(FourierTransform, FT)会讲一个在空域(或时域)上定义的函数分解成频域上的若干频率成分。换句话说,傅里叶变换可以将一个函数从空域变到频域。先抛开傅里叶变换的数学公式不谈,用F来表示傅里叶变换的话,我们先将一个很重要的恒等式:

在这里插入图片描述
F-1指的是傅里叶逆变换,⊙是哈达玛乘积,指的是两个矩阵(或向量)的逐点乘积(Element-wise Multiplication)。仔细观察上面这个公式,它的直观含义可以用一句话来概括:空(时)域卷积等于频域乘积。简单来说就是,如果要算与的卷积,可以先将它们通过傅里叶变换变换到频域中,将两个函数在频域中相乘,然后再通过傅里叶变换转换出来,就可以得到和的卷积结果。下面的动图形象地展示了傅里叶变换的过程,这里我们把函数傅里叶变换后的结果写作f^。
在这里插入图片描述
简单的应用是给图像去除一些规律噪点。比如说下面这个例子,原图来自知乎
在傅里叶变换前,图像上有一些有规律的条纹,直接在原图上去掉条纹有点困难,但我们可以将图片通过傅里叶变换变到频谱图中,频谱图中那些有规律的点就原图的背景条纹。
在这里插入图片描述只要在频谱图中擦除掉这些点,就可以将背景条纹去掉,得到下图右侧的结果。
在这里插入图片描述

可以用来分离噪声点与正常点,傅里叶变换还凭借上面的恒等式,在加速卷积运算方面有很大的潜力,快速傅里叶变换(Fast fourier Transform)也是由此而生。实际上呢,现在大家最常用的卷积神经网络,完全可以搭配傅里叶变换。下面这张图就表示了一个普通的卷积神经网络如何与傅里叶变换搭配,其中的即快速傅里叶变换的逆变换(Inverse Fast Fourier Transform)。
在这里插入图片描述

我们这里关心得实际上是的物理意义,它是图上类比构造傅里叶变换的关键。这个式子实际上是拉普拉斯算子的广义特征函数。

拉普拉斯算子(Laplacian operator)的物理意义是空间二阶导,准确定义是:标量梯度场中的散度,一般可用于描述物理量的流入流出。比如说在二维空间中的温度传播规律,一般可以用拉普拉斯算子来描述。

据拉普拉斯算子的定义来稍微推导一下。众所周知,特征向量需要满足的定义式是:对于矩阵A,其特征向量满足的条件应是矩阵与特征向量x做乘法的结果,与特征向量乘标量λ的结果一样,即满足如下等式:
在这里插入图片描述
在这里插入图片描述

图上的傅里叶变换

在图上,我们去哪找拉普拉斯算子\Delta与{exp^{-2 \pi ixt}}呢?
图的拉普拉斯矩阵(L)及其特征向量(u),作为上述两者的替代品,至此,形成了图上傅里叶变换的生态系统。拉普拉斯矩阵,实际上是度矩阵(D)减去邻接矩阵(A),
L = D - A
在这里插入图片描述

频域卷积网络

傅里叶变换的目的就是得到不同的频域做处理

切比雪夫网络

基本的频域卷积网络要计算拉普拉斯所有的特征值和特征向量,计算量巨大。在论文中提出了切比雪夫网络,它应用切比雪夫多项式(Chebyshev polynomials)来加速特征矩阵的求解。假设切比雪夫多项式的第k项是Tk, 频域卷积核的计算方式如下:
在这里插入图片描述

图读出操作

得到了各个节点的表示后,如何生成整个图的表示,
图的读出操作,顾名思义,就是用来生成图表示的。它的别名有图粗化(Graph Coarsening)/图池化(Graph Pooling)。对于这种操作而言,它的核心要义在于:操作本身要对节点顺序不敏感
在欧式空间中,如果一张图旋转了,那么形成的新图片就不再是原来那张图片了;但在非欧式空间的图上,如果将一个图旋转一下,例如对它的节点重新编号,这样形成的图域原来的图其实是一个。这就是典型的图重构(Graph Isomorphism)问题。比如下面左右两个图,其实是等价的:
在这里插入图片描述
为了使得同构图的表示能够保持一致,图读出的操作就需要对节点顺序不敏感。在数学上,能表达这种操作的函数称为对称函数。

基于统计的学习方法

基于统计的方法应该是最常见的,比如说我们在求各种抽象表示所使用的平均(mean),求和(sum),取最大值(max)等操作。这些方法简单有效,又不会带来额外的模型参数。但同时我们必须承认,这些方法的信息损失太大。假设一个图里有1000个节点,每个节点的表示是100维;整张图本可表示的特征,这些简单的统计函数却直接将信息量直接压缩到了100维。尤其是,在这个过程中,每一维数据的分布特性被完全抹除
考虑到这一点,文献的作者就提出要用类似直方图的方法来对每维数据分布进行建模。具体而言,可以通过以下的对比图来直观感受以下直方图是如何巧妙平衡数据信息的压缩与增强的。假设我们用100个介于[-3,1]的数字,如果我们直接将它们求和,如左图所示,我们完全看不出这100个数据的分布;而如果我们将[-3,1]等分成4个区域,比如说就是[-3,-2),[-2,-1),[-1,0),[0,1)。我们分开统计各个区域的和,可以发现一点原数据的分布特征,就如下右侧子图所示:
在这里插入图片描述
如果要实现上面这个直方图的做法,该如何做呢?其实也很简单,我们举个例子,给定第3个数据点,它们的特征向量(2维)分别是[-2,-1],[-1,2],[-1,1]。如果直接求和,全局的特征向量是[-2±1±1,1+2+1]即[-4,4]。在实践中,文献采用高斯函数来实现名为模糊直方图(Fuzzy Histogram)的操作。
在这里插入图片描述
模糊直方图的原理也很简单:预先定义几个特征值区域的边界点为各个高斯分布的均值,并预设好方差。对任一特征值,根据其与各个高斯分布交点的纵坐标作为其落入该区域的数值,然后将所有数值归一化,就得到了该特征值分布在各个区间的比例。举个例子,图上的[1.8]与三个搞死分布分交点分别在0,0.3, 0.9处,归一化一下,即可知该特征值最终应该用一个3为向量[0.0, 0.25, 0.75]来表示。

基于学习的方法

基于统计的方法的一个坏处大概是它没办法参数化,间接地难以表示节点到图向量的这个“复杂”过程。基于学习的方法就是希望神经网络来拟合这个过程。

采样+全连接

在这里插入图片描述

全局节点

这一种做法的动机也很简单,考虑到图同构问题和基于统计的方法,从结点的表示生成最终的图表示主要有两个难点:

很多情况下我们很难找到一个合适的根节点;
如果直接用基于统计的方法对每个结点一视同仁,无法区别对待(比如某些重要的结点信息更多,就应该表达更多)。
那我直接引入一个全局节点表示这张图的根节点,把它跟图中的每个节点通过一种特殊的边连接,最终拿下这个接地那的表示作为图的表示,岂不妙哉。

可微池化

一种层次化的图表示,而这则依赖于他们所提出的可微池化(Differentiable Pooling, DiffPool)技术。简单来讲,它不希望各个节点一次性得到图的表示,而是希望通过一个逐渐压缩信息的过程,来得到最终图的表示,如下图所示:
在这里插入图片描述
DiffPool则同时完成了两个任务:节点聚类(Soft Clustering)与节点表示(Node Representation)。这两个任务是由两个不共享参数的GCN模块分别完成的,下文用SC和NR分别表示这两个模块。NR模块与传统的GCN一样,输入节点的隐藏状态,通过图上的传播,输出是传播后各个节点的表示。SC模块则不同,它的输入虽然也是各节点的隐藏表示,但其输出的是各节点属于不同聚类簇的概率(注意这里每一层聚类簇的数目是预先定义的)。上图中最左侧每个节点右上方的表格代表这个。举个例子,假设本层子图有6个节点,将各个节点输出的簇分类概率堆叠在一起,即可得到矩阵,如下图所示(蓝色,橙色,和绿色分别表示三个聚类簇。在实际中,聚类矩阵不是离散变量,而是实际变量。):
在这里插入图片描述
在这里插入图片描述

图卷积网络(Graph Convolution Networks,GCN)图注意力网络(Graph Attention Networks)、图自编码器(Graph Autoencoders)、图生成网络(Graph Generative Networks)和图时空网络(Graph Spatial-temporal Networks)。

GCN方法又可以分为 两大类,基于频谱(Spectral-based)和基于空间(spatial-based)。基于频谱的方法是从图信号处理的角度引入滤波器来定义图卷积,其中图卷积操作被解释为图信号中去除噪声。基于空间的方法将图卷积表示为从邻域聚合特征信息,当图卷积网络的算法在节点层次运行时,图池化模块可以与图卷积层交错,将图粗化为高级子结构。如下图所示,这种架构设计可用于提取图的各级表示和执行图分类任务。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值