[论文阅读笔记25]A Comprehensive Survey on Graph Neural Networks


这是一篇GNN的综述, 发表于2021年的TNNLS. 这篇博客旨在对GNN的基本概念做一些记录.

论文地址: 论文


1. 引言, 背景与定义

对于图像数据来说, CNN具有平移不变性和局部连接性, 因此可以在欧氏空间上良好地学习. 然而, 对于具有图结构的数据(例如社交网络 化学分子等)就需要用GNN来学习.

最早期的GNN网络是遵循类似RNN的循环迭代式的(RecGNN), 主要的对象是DAG(有向无环图). 这个方式停止的条件是节点的表示趋于稳定.

后来发展出了卷积图网络(ConvGNN), 主要有基于谱域(频域)的和基于空域的. 除此之外, 还发展出了图自编码器(Graph autoencoders, GAEs)和时空(spatial-temporal)GNN.

因此这篇文章主要就把GNN分成了这四种:

  • 循环GNN
  • 卷积GNN
  • 图自编码器
  • 时空GNN

后面, 作者主要讲了GNN与两个任务的区别:

GNN与network embedding. network embedding旨在将一个网络的节点编码成低维度的向量表示, 并保持网络的拓扑结构不变, 这样降维之后, 一些分类, 聚类等任务, 就可以通过传统的机器学习方法实现(例如SVM). 因此, GNN和network embedding的关系是, GNN可以通过一个图自编码器来学习一个低维的表示, 即network embedding的任务. 总而言之, network embedding主要是通过降维来实现应用机器学习方法的目的.

GNN与图的核方法(graph kernel methods). 图的核方法主要是将一个图编码到一个向量空间, 以便应用SVM之类的任务(图的层面).

2. 分类和框架

如前所述, 本文将GNN分成了四类, 如下图所示:

在这里插入图片描述

节点分类任务的ConvGNN. 对于每一个节点, 在每次迭代中聚合它临近节点的信息(图卷积), 最后通过一个非线性变换对节点进行分类. 其中 X ∈ R n × d X\in\mathbb{R}^{n\times d} XRn×d表示节点特征拼成的矩阵.

在这里插入图片描述

图分类任务的ConvGNN. 在图卷积操作后, 使用一个池化层, 将图粗糙化成一个子图, 得到图的高阶表示(higher representations). 最后用一个readout函数, 对图进行分类.

在这里插入图片描述

用于network embedding的图自编码器. 先用图卷积得到每个节点的embedding, 然后解码器在给定embedding的情况下计算成对距离. 在应用非线性激活函数后, 解码器重构图邻接矩阵. 通过最小化真实邻接矩阵与重构邻接矩阵之间的差异来训练网络.

在这里插入图片描述

时空GNN. 对每个timestep的GNN都应用卷积, 随后跟一个 1D-CNN 层对时序特征进行提取. 输出层是一个线性变换,为每个节点生成一个预测,例如它在下一个时间步的未来值.

3. 循环GNN

循环GNN一般都是GNN早期的开山之作, 由于计算量的限制, 一般都是应用于有向无环图的. The Graph Neural Network Model(IEEE Trans. Neural Network, 2009)提出了一个更具有普适性的方式, 可以应用于各种图. 节点更新方式如下式:

在这里插入图片描述
为了保证收敛性, f f f必须是一个收缩映射. 如果 f f f是神经网络的话, 则必须加入罚项.

除此之外, 门控GNNGated graph sequence neural networks, (arxiv, 2015)将门控单元(GRU)作为上述的 f f f函数, 减少了收敛时间. 其节点更新用上一个隐藏态和临近节点隐藏态的线性映射组成, 如下式:

h v ( t ) = G R U ( h v ( t − 1 ) , ∑ u ∈ N ( v ) W h u ( t − 1 ) ) h_v^{(t)} = GRU(h_v^{(t - 1)}, \sum_{u\in N(v)}Wh_u^{(t-1)}) hv(t)=GRU(hv(t1),uN(v)Whu(t1))

这个网络的训练用通过时间的反向传播(RNN的反向传播方式)进行梯度下降.

总体来说, 循环GNN的方式类似RNN, 是作用于离散的节点上面. 但是循环GNN每次(层)用的更新函数 f f f是同一个, 因此必须保证收敛性.

4. 卷积GNN

与循环GNN不同, 卷积GNN的每一层都是可学习的不同参数, 具有固定层数, 和循环GNN区别如下:

在这里插入图片描述
卷积GNN基本分为两类, 基于谱的(频域的)和基于空域的.

A. 基于谱的卷积GNN

基于谱的GNN基本对于无向图而言, 我们可以用(归一化的)图Laplace矩阵唯一的表示这个图的拓扑性质:

L = I n − D − 1 / 2 A D − 1 / 2 L = I_n - D^{-1/2}AD^{-1/2} L=InD1/2AD1/2

其中 D D D为对角矩阵, 每个对角元素为邻接阵对应行的和, 也就是这个节点的度.

我们可以看出, 对于Laplace矩阵的 ( i , j ) (i, j) (i,j)个元素:
如果 i = j i=j i=j, a i , j = 0 , d i , j = d e g ( v i ) , l i , j = 1 a_{i,j} = 0, d_{i,j} = deg(v_i), l_{i,j} = 1 ai,j=0,di,j=deg(vi),li,j=1
如果 i ≠ j i \ne j i=j, v i , v j v_i, v_j vi,vj不相连, a i , j = 0 , l i , j = 0 a_{i,j} = 0, l_{i,j} = 0 ai,j=0,li,j=0
如果 i ≠ j i \ne j i=j, v i , v j v_i, v_j vi,vj相连, a i , j = 1 , l i , j = − 1 / d e g ( v i ) d e g ( v j ) a_{i,j} = 1, l_{i,j} = -1/\sqrt{deg(v_i)deg(v_j)} ai,j=1,li,j=1/deg(vi)deg(vj)
因此, 图Laplace矩阵可以唯一表示图

容易看出Laplace矩阵是实对称的, 因此是半正定的, 因此具有非负特征值. 我们可以对其做特征值分解:

L = U Λ U T L = U \Lambda U^T L=UΛUT

因此我们可以基于Laplace矩阵的特征值分解定义图的Fourier变换:

F ( x ^ ) = U T x ^ \mathcal{F}(\hat{x}) = U^T\hat{x} F(x^)=UTx^

由于 U U T = I UU^T = I UUT=I, 因此可以立即定义图的逆Fourier变换:

F − 1 ( x ) = U x \mathcal{F}^{-1}(x)=Ux F1(x)=Ux

所以图Fourier变换实际上就是将图信号 x x x投影到一个标准正交基构成的空间中, 换句话说, x x x可以表示成 U U U的列向量的线性组合: x = ∑ i x ^ i u i x = \sum_i \hat{x}_iu_i x=ix^iui, 这就是正 逆Fourier变换的关系(和信号处理中的一致).

我们考虑将图信号经过滤波器, 根据卷积定理(时域卷积的Fourier变换对应频域乘积), 有:

x ∗ g = F − 1 ( F ( x ) ⊙ F ( g ) ) = U ( U T x ⊙ U T g ) x * g = \mathcal{F}^{-1}(\mathcal{F}(x) \odot \mathcal{F}(g)) \\ = U(U^Tx \odot U^T g) xg=F1(F(x)F(g))=U(UTxUTg)
其中 ⊙ \odot 表示element-wise乘法. 如果我们记 g θ = d i a g ( U T g ) g_{\theta} = diag(U^Tg) gθ=diag(UTg), 则 U T x ⊙ U T g = g θ U T x U^Tx \odot U^Tg = g_{\theta}U^Tx UTxUTg=gθUTx, 所以

x ∗ g = U g θ U T x x * g = Ug_{\theta}U^Tx xg=UgθUTx

谱GNN的关键在于如何选择滤波器 g θ g_{\theta} gθ.

在实际中, 我们考虑网络的第 k k k层, 输入和输出的通道数分别为 f k − 1 , f k f_{k-1}, f_k fk1,fk, 则该层第 j j j个通道的输出为:

H : , j ( k ) = σ ( ∑ i = 1 f k − 1 U Θ i , j ( k ) U T H : , i ( k − 1 ) ) ∈ R n H^{(k)}_{:, j} = \sigma(\sum_{i=1}^{f_{k-1}}U\Theta_{i,j}^{(k)}U^TH^{(k-1)}_{:, i}) \in \mathbb{R}^n H:,j(k)=σ(i=1fk1UΘi,j(k)UTH:,i(k1))Rn

其中 Θ i , j ( k ) \Theta_{i,j}^{(k)} Θi,j(k)是对角阵, 对角元素为一组可学习的参数.

然而, 这样的方式有三个缺点:

  1. 图的任何扰动对特征值和特征向量的影响都很大(特征值分解的性质)
  2. 学习到的滤波器是域相关的, 这意味着它们不能应用于具有不同结构的图.
  3. 特征值分解的复杂度很高( O ( n 3 ) O(n^3) O(n3)).

为了解决复杂度高的问题, ChebNet和GCN经过几个简化将复杂度降为线性复杂度. ChebNet用Chebyshev多项式来估计滤波器 g θ g_{\theta} gθ, 即

g θ = ∑ i = 1 K θ i T i ( Λ ~ ) , Λ ~ = 2 Λ / λ m a x − I n g_\theta = \sum_{i=1}^K \theta_i T_i(\tilde{\Lambda}), ~~\tilde{\Lambda} = 2\Lambda / \lambda_{max} - I_n gθ=i=1KθiTi(Λ~),  Λ~=2Λ/λmaxIn
这样 Λ ~ \tilde{\Lambda} Λ~中的值都落在 [ − 1 , 1 ] [-1, 1] [1,1]内. T i ( x ) T_i(x) Ti(x)表示Chebyshev多项式, 按照如下递推定义:

T 0 ( x ) = 1 T_0(x) = 1 T0(x)=1
T 1 ( x ) = x T_1(x) = x T1(x)=x
T i ( x ) = 2 x T i − 1 ( x ) − T i − 2 ( x ) T_i(x) = 2xT_{i - 1}(x) - T_{i - 2}(x) Ti(x)=2xTi1(x)Ti2(x)

带入, 就得到按照Chebyshev多项式估计的图卷积结果如下:

x ∗ g = U ( ∑ i = 1 K θ i T i ( Λ ~ ) ) U T x x * g = U(\sum_{i=1}^K \theta_i T_i(\tilde{\Lambda}))U^Tx xg=U(i=1KθiTi(Λ~))UTx

可以用数学归纳法证明拉普拉斯矩阵的Chebyshev多项式矩阵和特征值矩阵具有如下关系(?):

T i ( L ~ ) = U T i ( Λ ~ ) U T , L ~ = 2 L / λ m a x − I n T_i(\tilde{L}) = UT_i(\tilde{\Lambda})U^T, ~~ \tilde{L} = 2L / \lambda_{max} - I_n Ti(L~)=UTi(Λ~)UT,  L~=2L/λmaxIn

因此有

x ∗ g = U ( ∑ i = 1 K θ i T i ( Λ ~ ) ) U T x = ∑ i = 1 K θ i T i ( L ~ ) x x * g = U(\sum_{i=1}^K \theta_i T_i(\tilde{\Lambda}))U^Tx = \sum_{i=1}^K \theta_i T_i(\tilde{L})x xg=U(i=1KθiTi(Λ~))UTx=i=1KθiTi(L~)x

ChebNet 定义的过滤器在空间上是局部的, 这意味着过滤器可以独立于图大小提取局部特征. ChebNet的频谱线性映射到[−1,1].

下面再来看经典的图卷积网络GCN. GCN是ChebNet的简化, 取了 K = 1 K = 1 K=1, 并且假定最大特征值为2, 得到

x ∗ g = θ 0 x + θ 1 ( 2 L / λ m a x − I n ) x = θ 0 x + θ 1 ( 2 ( I n − D − 1 / 2 A D − 1 / 2 ) / λ m a x − I n ) x ( λ m a x = 2 ) = θ 0 x − θ 1 D − 1 / 2 A D − 1 / 2 x x * g = \theta_0x + \theta_1 (2L / \lambda_{max} - I_n)x \\ = \theta_0x + \theta_1 (2( I_n - D^{-1/2}AD^{-1/2}) / \lambda_{max} - I_n)x \\ (\lambda_{max} = 2) = \theta_0x - \theta_1 D^{-1/2}AD^{-1/2}x xg=θ0x+θ1(2L/λmaxIn)x=θ0x+θ1(2(InD1/2AD1/2)/λmaxIn)x(λmax=2)=θ0xθ1D1/2AD1/2x

为了进一步减少参数量, 防止过拟合, 假定 θ = θ 0 = − θ 1 \theta = \theta_0 = -\theta_1 θ=θ0=θ1, 立即有

x ∗ g = θ ( I n + D − 1 / 2 A D − 1 / 2 ) x x * g = \theta(I_n + D^{-1/2}AD^{-1/2})x xg=θ(In+D1/2AD1/2)x

在经验上, I n + D − 1 / 2 A D − 1 / 2 I_n + D^{-1/2}AD^{-1/2} In+D1/2AD1/2容易造成稳定性的问题, 因此GCN采用 D ~ − 1 / 2 A ~ D ~ − 1 / 2 \tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2} D~1/2A~D~1/2来代替, 其中 A ~ = A + I n , D ~ \tilde{A} = A + I_n, \tilde{D} A~=A+In,D~ A ~ \tilde{A} A~的度矩阵.

对这种归一化的理解:
由于邻接矩阵的对角元素是0, 因此 θ ( I n + D − 1 / 2 A D − 1 / 2 ) x \theta(I_n + D^{-1/2}AD^{-1/2})x θ(In+D1/2AD1/2)x的第一项可以认为是聚合节点自身信息, 第二项可以认为是聚合邻近节点的信息. 然而这样会造成不稳定, 因此更改一下形式, 即直接添加self-loop也就是自环边, 也就相当于给邻接矩阵 A A A加上单位阵 I n I_n In.

后续跟进GCN的工作主要是对于对称矩阵的选取.

B. 基于空域的卷积GNN

实际上空域上对图进行卷积和在典型具有欧氏空间结构的图像上进行卷积是相似的, 如下图所示:

在这里插入图片描述
例如, NN4G在每一次迭代聚合一个节点和它邻居节点的信息, 如下式所示:

在这里插入图片描述
此外, 还有一种比较有意思的Diffusion GNN, 也就是将图卷积过程视为扩散过程. 在扩散过程中, 信息按照一定的概率从一个节点传入另一个节点, 这样的概率和节点的度有关, 如下式:

H ( k ) = f ( W ( k ) ⊙ P k X ) , P = D − 1 A H^{(k)} = f(W^{(k)} \odot P^kX), ~~P = D^{-1}A H(k)=f(W(k)PkX),  P=D1A

P = D − 1 A P = D^{-1}A P=D1A的意义是对于度大的点, 其信息传入相连邻居节点的就更多(权重大)

在Diffusion Graph Convolution中, 最后的结果是将中间结果加起来, 即:

H = ∑ k = 0 K f ( P k X W k ) H = \sum_{k=0}^Kf(P^kXW^k) H=k=0Kf(PkXWk)

PGC-DGCNN按照节点之间的距离学习权重, 也就是增强距离远的节点的作用. 具体地, 如果节点 v v v到节点 u u u的最短路长度为 j j j, 则记 S v , u ( j ) = 1 S_{v, u}^{(j)} = 1 Sv,u(j)=1, 否则为0.

另外, 还有一种形式的空域GNN, 也就是我们所熟知的消息传递. 消息传递可以解释成信息可以从节点沿着边进行传递, 一般通常来讲有固定的 K K K步迭代, 这样可以让信息传递的更远, 也就是有更大的感受野. 可以用如下公式表示:

在这里插入图片描述

然而, 对于graph-level的任务, 传统的消息传递无法区分不同的图结构. 为此, GIN通过调节中心节点的权重, 这样就区分了中心节点和邻居节点, 如下所示:

在这里插入图片描述
此外, 对于一个节点的邻居节点, 不同邻居的重要性也许是不同的, 因此GAT提出了图注意力机制, 将聚合时邻居节点的权重变成learnable的参数:

在这里插入图片描述

其中

α v u ( k ) = s o f t m a x ( g ( a T [ W ( k ) h v ( k − 1 ) ∣ ∣ W ( k ) h u ( k − 1 ) ] ) ) \alpha_{vu}^{(k)} = softmax(g(a^T[W^{(k)}h_{v}^{(k-1)}||W^{(k)}h_{u}^{(k-1)}])) αvu(k)=softmax(g(aT[W(k)hv(k1)∣∣W(k)hu(k1)]))

图池化层, 图自编码器待更新…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/58261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt5升级到Qt6分步迁移教程

Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用(如果不是现在,可能会在将来),因此最好将应用程序迁移到最新版本的框架。 仍然有许多应用程序仍在使用Qt 5&…

SpringDataRedis 使用

1. SpringDataRedis 特点2. 使用 SpringDataRedis 步骤3. 自定义 RedisTemplate 序列化4. SpringDataRedis 操作对象 1. SpringDataRedis 特点 提供了对不同 Redis 客户端的整合(Lettuce 和 Jedis)提供了 RedisTemplate 统一 API 来操作 Redis支持 Redi…

C++ 改善程序的具体做法 学习笔记

1、尽量用const enum inline替换#define 因为#define是做预处理操作,编译器从未看见该常量,编译器刚开始编译,它就被预处理器移走了,而#define的本质就是做替换,它可能从来未进入记号表 解决方法是用常量替换宏 语言…

Spring Cache的介绍以及怎么使用(redis)

Spring Cache 文章目录 Spring Cache1、Spring Cache介绍2、Spring Cache常用注解2.1、EnableCaching注解2.2、CachePut注解2.3、CacheEvict注解2.4、Cacheable注解 3、Spring Cache使用方式--redis 1、Spring Cache介绍 Spring Cache是一个框架,实现了基于注解的缓…

C++--动态规划背包问题(1)

1. 【模板】01背包_牛客题霸_牛客网 你有一个背包,最多能容纳的体积是V。 现在有n个物品,第i个物品的体积为vivi​ ,价值为wiwi​。 (1)求这个背包至多能装多大价值的物品? (2)若背包恰好装满&a…

【数据结构】排序(插入、选择、交换、归并) -- 详解

一、排序的概念及其运用 1、排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记…

文件属性与目录

目录 Linux 系统中的文件类型普通文件目录文件字符设备文件和块设备文件符号链接文件管道文件套接字文件总结 stat 函数struct stat 结构体st_mode 变量struct timespec 结构体练习 fstat 和lstat 函数fstat 函数lstat 函数 文件属主有效用户ID 和有效组IDchown 函数fchown 和l…

leetcode 567. 字符串的排列(滑动窗口-java)

滑动窗口 字符串的排列滑动窗口代码演示进阶优化版 上期经典 字符串的排列 难度 -中等 leetcode567. 字符串的排列 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句…

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

在启动oracle的服务OracleOraDb11g_home1TNSListener时,提示服务启动后又停止了。 解决方法: 修改oracle安装目录下的两个配置文件: 以上两个文件,对应的HOST的值,都改为127.0.0.1 然后再启动服务,启动成…

Linux通过libudev获取挂载路径、监控U盘热拔插事件、U盘文件系统类型

文章目录 获取挂载路径监控U盘热拔插事件libusb 文件系统类型通过挂载点获取挂载路径添libudev加库 获取挂载路径 #include <stdio.h> #include <libudev.h> #include <string.h>int main() {struct udev *udev;struct udev_enumerate *enumerate;struct ud…

Android Activity启动过程一:从Intent到Activity创建

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、概览二、应用内启动源码流程 (startActivity)2.1 startActivit…

curl通过webdav操作alist

创建目录: url202320230828;curl -v -u "admin":"这里是密码" -X MKCOL "http://127.0.0.1:5244/dav/my189tianyi/${url2023}/" 上传文件: curl -v -u "admin":"这里是密码" -T /tmp/aa.json "http://127.0.0.1:52…

flink on yarn with kerberos 边缘提交

flink on yarn 带kerberos 远程提交 实现 flink kerberos 配置 先使用ugi进行一次认证正常提交 import com.google.common.io.Files; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.flink.client.cli.CliFrontend; import o…

网工内推 | IT网工,华为、华三认证优先,15k*13薪

01 广东善能科技发展股份有限公司 招聘岗位&#xff1a;IT网络工程师 职责描述&#xff1a; 1、负责公司项目售后技术支持工作&#xff1b; 2、负责项目交付实施&#xff0c;配置调试、运维等&#xff1b; 3、参加合作厂商产品技术知识培训&#xff1b; 4、参加合作厂商工程师…

pdf怎么删除其中一页?

pdf怎么删除其中一页&#xff1f;现在&#xff0c;pdf文件已经深入影响着我们的工作和学习&#xff0c;如果你是一个上班族&#xff0c;那么几乎每天都会使用到pdf格式的电脑文件。当我们阅读一个页数众多的PDF文件时&#xff0c;可能会发现实际上只需要其中的一小部分内容。很…

【golang】go语句执行规则(goroutine)(上)

Don’t communicate by sharing memory;share memory by communicating. 从Go语言编程的角度解释&#xff0c;这句话的意思就是&#xff1a;不要通过共享数据来通讯&#xff0c;恰恰相反&#xff0c;要以通讯的方式共享数据。 进程和线程 进程&#xff0c;描述的就是程序的执…

QT初始学习中的个人基础认知

整体感觉 安装的时候感觉更像python的库安装和编译器版本的配合安装。进入创建工程时&#xff0c;感觉是c语言的创建工程的感觉&#xff0c;而且可以看到main和h的头文件&#xff0c;整体来看是C来编写的程序。完成整个工程个人感觉是C编写功能&#xff0c;使用VB实现界面设计…

Java 体系性能优化工具

Java 体系性能优化 目录概述需求&#xff1a; 设计思路实现思路分析1.oom 异常来说&#xff1a;2.visualvm3.Arthas4.JProfiler &#xff08;全面&#xff09;5.jmeter 特有 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect…

Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问

前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff08;原为 Node.js Foundation&#xff0c;已与 JS Foundation 合并&#xff09;持有和维护&#xff0c;亦为 Linux 基金会的项目。Node.js 采用 Google 开发…

PHP教学资源管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 教学资源管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88260480 论文 https://downl…