目录

  • 1 谱域GCN
    • 1.1 GNN 和 GCN 有什么不同?
    • 1.2 为什么GCN中要引入拉普拉斯矩阵?
    • 1.3 为什么拉普拉斯矩阵要正则化?
    • 1.4 为什么要对拉普拉斯矩阵进行特征分解?
    • 1.5 空域GCN是不是就完全不需要考虑拉普拉斯矩阵及其特征分解了?如果不用的话,那是为什么不用呢?
    • 1.6 谱域GCN传播公式中,哪里体现了傅里叶变换、拉普拉斯矩阵、拉普拉斯矩阵的特征值分解?(or 谱域GCN的卷积怎么卷的?是一种怎样的数学运算?梯度下降反向传播体现在哪里?)
    • 1.7 终于明白了谱域GCN的傅里叶变换、拉普拉斯矩阵、特征值体现在哪。。
    • 1.8 谱域和空域的“卷积”到底是怎么卷的?是一种怎样的数学运算?各自的梯度下降反向传播体现在哪里?
    • 1.9 谱域和空域各自的优缺点?各自擅长什么场景、处理哪类问题?
  • 2 参考资料/学习资料

1 谱域GCN

1.1 GNN 和 GCN 有什么不同?

​ GCN可以说是一种特殊的GCN,区别在于聚合邻居节点信息时的聚合方法。GNN和GCN都是要将邻居节点的信息聚合到自身节点i的,然后与自身节点i的信息加权融合后再做变换,但不同的是,GNN采集节点i的邻居节点A、B、C信息时,各隐藏层对A、B、C的系数a、b、c都是一样的,但GCN中每层隐藏层的系数是可变的——“GNN相当于使用了相同层的GCN”。

​ 还有一种说法是,「GNN的思路很简单:为了编码图的结构信息,每个节点可以由低维状态向量表示。即GNN的目标是为每个节点学习一个节点表示 」(这种说法把GNN说的更简单了,相当于GNN只是提出了“要将图的结构信息进行编码”这一想法。)GNN是为了给节点学习一个节点表示,而GCN、GAT等就是采取了不同方法来学习这个节点表示罢了。

1.2 为什么GCN中要引入拉普拉斯矩阵?

在调研总结完全部知识后,最终对该问题进行如下4步的why - because的梳理:
在谱域研究图,需要对图进行傅里叶变换将图投影到傅里叶域
→ 一个域之所以称为“域”,起码得有一组正交基,使得该域的各个位置/各种状态都可以由这组正交基的线性组合来表示
→ 拉普拉斯矩阵的特征向量恰好可以组成一组正交基
→ 使得傅里叶域中的图的任意向量/任意状态,都可以用这组正交基来表示,亦即 可以用矩阵形式来表示图的傅里叶变换了

先介绍一下拉普拉斯矩阵:
对于图 G=(V,E)G=(V, E)G=(V,E) ,其拉普拉斯矩阵 L=D−AL=D-AL=D−A,其中 DDD 是顶点的度矩阵,AAA 是图的邻接矩阵。拉普拉斯矩阵包含了图的节点个数信息、节点的度信息、节点的连接信息,可以很全面地概述一张图所包含的各类信息。


常用的拉普拉斯矩阵有三种:
L=D−AL=D-AL=D−A 普通形式的拉普拉斯矩阵
Lsys=D−12LD−12=I−D−12AD−12L^{sys}=D^{-\frac{1}{2}}LD^{-\frac{1}{2}}=I-D^{-\frac{1}{2}}AD^{-\frac{1}{2}}Lsys=D−21​LD−21​=I−D−21​AD−21​ 正则化且对称的拉普拉斯矩阵
Lrw=D−1L=I−D−1AL^{rw}=D^{-1}L=I-D^{-1}ALrw=D−1L=I−D−1A 随机游走正则化的拉普拉斯矩阵
那么问题来了,**为什么拉普拉斯矩阵要进行正则化呢?**→ 见“2.3 为什么拉普拉斯矩阵要正则化

至于为什么GCN要用到拉普拉斯矩阵呢,因为拉普拉斯矩阵是对称矩阵,可以进行特征分解。

​ 那么问题又来了,为什么我们需要一个「能够被特征分解」的矩阵呢(或者说为什么我们需要一个「能够被特征分解」的拉普拉斯矩阵呢)?→见“2.4 为什么要对拉普拉斯矩阵进行特征分解

1.3 为什么拉普拉斯矩阵要正则化?

​ 先给出结论:可以将拉普拉斯矩阵的正则化看作是对原始邻接矩阵的一种「横、纵向正则化」

​ 一般来说,GNN有一下三种正则化的形式(或者说,从代码的层面来理解有三种形式;因为对整个邻接矩阵A的正则化是拆分为了横向正则化和纵向正则化):

​ 1)节点features的正则化。与其他NN训练前要将特征们正则化一样的原理;

​ 2)对于带权图,需要横向正则化。比如一张带权图,节点表示金融的客户,边表示客户之间的交易金额。那不同节点之间边的weight可能差异很大,可能导致难c收敛。但对于整个问题来说,edge weights的绝对大小不重要,相对大小才重要。横向正则化在其他NN中也常见。

​ 3)纵向正则化,这是graph比较“独有”的操作了。纵向标准化实际上是希望将节点的邻居节点对其的“贡献”进行标准化。比如说脉脉上的用户之间的关注关系就是天然的同构图,假设我们要做节点分类判定某个用户A是不是算法工程师,并且假设A仅仅和另一个算法工程师B以及10个猎头有关注的关系,直观上,猎头对用户A的节点类别的判定的贡献应该是很小的,因为猎头往往会和算法,开发,测试,产品等不同类型的用户有关联关系,他们对于用户A的“忠诚关联度”是很低的,而对于算法工程师B而言,假设他仅仅和A有关联, 那么明显,B对A的“忠诚关联度”是很高的,B的node features以及B和A的关联关系在对A进行节点分类的时候应该是更重要的。
​ 那么,纵向标准化就较好的考虑到了上面的问题,思想很简单,假设节点1和节点2有一个权重为1的edge相连,节点2和其他1000个节点也有关联,那么节点2对于节点1的贡献度为1/1000,即用edge weights除以节点1的度(有权图上用加权度)。

参考:https://zhuanlan.zhihu.com/p/412337460

​ 此处补充一些关于**「拉普拉斯矩阵的性质」**的基础知识:
​ 1)拉普拉斯矩阵是半正定的(特征值都≥0);
​ 2)最小的特征值是0,并且最小特征值0对应的特征向量为全1向量;
​ 3)特征值中0出现的次数就是图连通区域的个数。

​ 继续补充一些**「半正定矩阵」**的性质:
​ 1)半正定矩阵的特征值≥0;
​ 2)半正定矩阵是对称矩阵,对称矩阵一定有n个线性无关的特征向量;
​ 3)对称矩阵不同特征值对应的特征向量相互正交(正交:两特征向量做内积,结果为0),这些正交的特征向量构成的矩阵为正交矩阵,对于正交矩阵UUU,有 UUT=EUU^T=EUUT=E。

1.4 为什么要对拉普拉斯矩阵进行特征分解?

​ 先给出结论:由于卷积在傅里叶域的计算相对简单,因此我们要将graph由空域变换到谱域(傅里叶域),而在这一变换过程中,需要找到graph的连续正交基以对应于傅里叶变换的基,因此要使用拉普拉斯矩阵的特征向量。

​ 此处再补充一些关于**「特征分解」**的基础知识:
​ 特征分解 是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。只有对角矩阵、或是具有n个线性无关的特征向量的矩阵才能进行特征分解。
​ 对于拉普拉斯矩阵LLL,对其进行特征分解后得到特征值λ={λ1,λ2,...,λn}\lambda=\{\lambda_1,\lambda_2,...,\lambda_n\}λ={λ1​,λ2​,...,λn​}(λ\lambdaλ为列向量,其中λi\lambda_iλi​为实数),以及各特征值对应的特征向量组成的矩阵η={η1,η2,...,ηn}\eta=\{\eta_1,\eta_2,...,\eta_n\}η={η1​,η2​,...,ηn​}(其中ηi\eta_iηi​为特征向量,是列向量) ,则有Lη=ληL\eta = \lambda\etaLη=λη。
​ 还有一种表示方法,Λ=diag{λ1,λ2,...,λn}\Lambda=diag\{\lambda_1,\lambda_2,...,\lambda_n\}Λ=diag{λ1​,λ2​,...,λn​}(Λ\LambdaΛ为对角矩阵,其中λi\lambda_iλi​为实数),L=ηΛη−1=ηΛηTL=\eta\Lambda\eta^{-1}=\eta\Lambda\eta^TL=ηΛη−1=ηΛηT。(因为对于正交矩阵η\etaη,有ηηT=E=ηη−1\eta\eta^T=E=\eta\eta^{-1}ηηT=E=ηη−1,ηT=η−1\eta^T=\eta^{-1}ηT=η−1)

​ 对拉普拉斯矩阵进行特征分解后,会得到n个线性无关的特征向量,特征向量两两正交。全部的特征向量组成正交矩阵η\etaη,η\etaη构成空间中的一组正交基
​ 重点结论:『这组正交基构成了graph傅里叶变换的基,graph傅里叶变换将graph的输入信号投影到该正交基构成的正交空间。也就相当于把graph上定义的任何向量,表示成了LLL的特征向量的线性组合。』
『拉普拉斯矩阵的特征值是傅里叶变换的频率。』

参考:https://blog.csdn.net/yyl424525/article/details/100058264超全的百科博文,讲的全面详细,值得多看!
同一个博主写的:https://blog.csdn.net/yyl424525/article/details/100634211 GCN代码分析-Tensorflow版

1.5 空域GCN是不是就完全不需要考虑拉普拉斯矩阵及其特征分解了?如果不用的话,那是为什么不用呢?

​ 是的,空域GCN不需要考虑拉普拉斯矩阵(Q:因为L包含D和A,所以需要再考虑一下,究竟是不需要考虑L?还是说需要L,但不需要L的特征分解?)
​ 因为拉普拉斯矩阵本来就是因为我们想在谱域处理图,而引入的。在空域,用拓扑关系能更好地做运算;在谱域,用拉普拉斯矩阵的全部特征向量组成的那组正交基能更好地做运算。

​ 补充知识:
​ 我们常说GCN分为频域的和空域的,实际应该说GCN的“卷积核”是分为频域的和空域的。前者基于拉普拉斯矩阵,后者与节点操作有关。

1.6 谱域GCN传播公式中,哪里体现了傅里叶变换、拉普拉斯矩阵、拉普拉斯矩阵的特征值分解?(or 谱域GCN的卷积怎么卷的?是一种怎样的数学运算?梯度下降反向传播体现在哪里?)

(1)传统的傅里叶变换 → graph上的傅里叶变换:

「把传统的傅里叶变换迁移到graph上来,核心工作其实就是把拉普拉斯算子的特征函数e−iωte^{-i\omega t}e−iωt变为graph对应的拉普拉斯矩阵的特征向量」

对一个连续的周期函数f(x)f(x)f(x)进行传统的傅里叶变换后,得到F(ω)F(\omega)F(ω):
F(ω)=G[f(x)]=∫−∞+∞f(x)e−iωxdωF(\omega)=G[f(x)]=\int_{-∞}^{+∞}{f(x)e^{-i\omega x}}d\omegaF(ω)=G[f(x)]=∫−∞+∞​f(x)e−iωxdω
其逆傅里叶变换为:
(待补充)(待补充)(待补充)

对一个离散的周期性变换的信号xnx_nxn​来说,对其进行传统的傅里叶变换后的结果XkX_kXk​为:
Xk=∑n=0N−1xne−i2πNknX_k=\sum_{n=0}^{N-1}{x_ne^{-i\frac{2\pi}{N}kn}}Xk​=∑n=0N−1​xn​e−iN2π​kn
其逆傅里叶变换为:
xn=∑x=0N−1Xkei2πNknx_n=\sum_{x=0}^{N-1}{X_ke^{i\frac{2\pi}{N}kn}}xn​=∑x=0N−1​Xk​eiN2π​kn

传统傅里叶变换 graph傅里叶变换
傅里叶变换基 e−2πixve^{-2\pi i x v}e−2πixv UTU^{T}UT
逆傅里叶变换基 e2πixve^{2\pi i x v}e2πixv UUU
维度 点的个数nnn

在实数域定义graph的傅里叶变换:
F(λl)=f_hat(λl)=∑i=1Nf(i)ul(i)F(\lambda_l)=f\_hat(\lambda_l)=\sum_{i=1}^{N}{f(i)u_l(i)}F(λl​)=f_hat(λl​)=∑i=1N​f(i)ul​(i)

  • fff是graph上的N维向量,可以表示某个点的特征向量,比如f(i)f(i)f(i)表示第iii个节点的特征
  • ul(i)u_l(i)ul​(i)表示第lll个特征值对应的特征向量的第iii个分量
  • fff 的图傅里叶变换就是将其与λl\lambda_lλl​对应的特征向量ulu_lul​进行内积运算
  • λ\lambdaλ 对应原始傅里叶变换中的频率ω\omegaω
  • f_hatf\_hatf_hat 表示 fff 的傅里叶变换

利用矩阵乘法将上述式子推广到矩阵形式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kYut5gMw-1634521367851)(/Users/a00/Library/Application Support/typora-user-images/image-20211016200907545.png)]

最终得到 fff 在graph上的傅里叶变换的矩阵形式为:
f_hat=UTff\_hat=U^Tff_hat=UTf

(2)graph上的傅里叶变换 → 图卷积:

卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积。对两函数 fff 和 ggg 的的卷积,就是对这两函数各自进行傅里叶变换后得到的结果相乘,再对该结果进行傅里叶逆变换。

!!!!重点来了,谱域GCN的“卷积”就体现在——卷积定理。!!!!
我们想将图上的N维向量fff(可以表示某个节点的特征)与卷积核 ggg 做内积运算(即卷积运算),此处用⊙来表示内积/卷积运算
→ 的内积/卷积运算实际是很麻烦的,但当引入傅里叶变换和傅里叶逆变换这一中间桥梁后,就能简化运算:
f⊙g=F−1{F(f)⊙F(g)}=F−1{f_hat⊙g_hat}f⊙g=F^{-1}\{F(f)⊙F(g)\}=F^{-1}\{f\_hat⊙g\_hat\}f⊙g=F−1{F(f)⊙F(g)}=F−1{f_hat⊙g_hat} (FFF表示傅里叶变换操作)
→ 引入傅里叶变换和傅里叶逆变换,就需要用到该图的拉普拉斯矩阵的特征值及特征向量,特征向量作为构建傅里叶域的基,特征值作为傅里叶变换的频率。

1.7 终于明白了谱域GCN的傅里叶变换、拉普拉斯矩阵、特征值体现在哪。。

​ GCN的傅里叶变换,做到了将图从空域投影到傅里叶域;
​ 求拉普拉斯矩阵的特征值及特征向量,特征向量构成了傅里叶域的一组基,特征值对应了graph傅里叶变换后的频率。
​ 至于为什么“特征值能表示频率”:在由graph确定的 n 维空间中,越小的特征值λl\lambda_lλl​表明它对应的特征向量(也就是基)ulu_lul​上的分量、“信息”越少,那当然就是可以忽略的低频部分了。

1.8 谱域和空域的“卷积”到底是怎么卷的?是一种怎样的数学运算?各自的梯度下降反向传播体现在哪里?

​ 数学中的卷积多为连续的,而算法的卷积多为离散的;严格意义上说,数学上的卷积和算法上的卷积是两种不同的运算。
​ 数学中的“卷积核”都是给定的或已知的,但CNN/GCN中的“卷积核”不是给定的,而是要训练的参数。

参考:https://www.zhihu.com/question/489755001

空域的卷积,实际就是简单地对中心节点i的各邻居节点的信息进行采样聚合,以更新节点i自身的参数。“卷积核”的设置体现在:如何选取被采样的邻居节点?各邻居节点的采样权重是多少?反向传播可以体现在:我们定义一个类似“模块度”概念的衡量标准,在每轮反向传播的参数优化过程中,不断提高衡量标准的值,使得结果更优化。

至于谱域的卷积如何卷、梯度下降的反向传播体现在哪里,见“2.6

1.9 谱域和空域各自的优缺点?各自擅长什么场景、处理哪类问题?

(待补充)

2 参考资料/学习资料

关于GCN的两篇超全博文:

https://blog.csdn.net/yyl424525/article/details/100058264 - 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导

https://www.cnblogs.com/nxf-rabbit75/p/11306198.html#auto-id-10 - GCN总结

之前一直想不通许多谱域GCN的数学知识,这次把自己不懂的问题都整理出来梳理了一遍,终于算是懂了。如有错误请指出~

谱域GCN的一些基础知识总结相关推荐

  1. 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导

    文章目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral domai ...

  2. 【Pytorch神经网络理论篇】 25 基于谱域图神经网络GNN:基础知识+GNN功能+矩阵基础+图卷积神经网络+拉普拉斯矩阵

    图神经网络(Graph Neural Network,GNN)是一类能够从图结构数据中学习特征规律的神经网络,是解决图结构数据(非欧氏空间数据)机器学习问题的最重要的技术. 1 图神经网络的基础知识 ...

  3. GNN在谱域下的演化:Spectral CNN,ChebyNet,GCN

    文章目录 1. 主要脉络梳理 2. 图傅里叶变换(Graph Fourier Transform) 2.1 拉普拉斯矩阵特征分解 2.2 傅里叶基和傅里叶系数 3. 图卷积 4. 卷积神经网络(CNN ...

  4. gcn 图卷积神经网络_谱域图卷积模型---SCNN,ChebNet,GCN

    对于图神经网络(GNN)而言,其实现卷积主要有两种两种方法,分别是谱域图卷积方法和空域图卷积方法.这次主要介绍使用谱方法实现卷积的三个模型,即SCNN,ChebNet,GCN. 近几年图神经网络的越来 ...

  5. FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输

    博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...

  6. python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)

    前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...

  7. 《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识

    本节书摘来自异步社区<精通Matlab数字图像处理与识别>一书中的第6章,第6.2节,作者 张铮 , 倪红霞 , 苑春苗 , 杨立红,更多章节内容可以访问云栖社区"异步社区&qu ...

  8. 小白新人Python哪些基础知识必学?

    点击"程序IT圈"关注我一起学习成长 很多想入门的小伙伴还不知道Python应该怎么学,哪些知识必学,今天我们就来盘点一下. 01 入门方法推荐 总体来讲,找一本靠谱的书,由浅入深 ...

  9. Python哪些基础知识必学?

    一.入门方法推荐 总体来讲,找一本靠谱的书,由浅入深,边看边练. 网上的学习教程有很多,多到不知道如何选择.所有教程在基础知识介绍方面都差不多,区别在于讲的是否足够细(例如运行原理)以及是否有足够的练 ...

最新文章

  1. 如何看电脑安装了python-Python教程第1篇:查看电脑是否安装python
  2. asp.net常规页生命周期阶段列表和事件列表
  3. thinkphp-权限控制
  4. 负数比较大小_【教研活动】整体把握负数脉络 深度解读教材意图——鲤城区实验小学数学组单元整体教学系列研讨活动...
  5. c#学习总结(一)---Mr.Zhang
  6. webpack的一些plugin,怎么使用webpack对项目进行优化
  7. JAVAWeb开发之Servlet-18.Servlet共享变量与变量的作用域
  8. RabbitMQ的项目实际应用
  9. winpe装双系统linux_自制WINPE+MAC安装U盘及双系统存储U盘(增加多系统安装)
  10. c语言求最小公约数和最小公倍数,c语言求最大公约数和最小公倍数
  11. Windows常用设置
  12. 福尔曼大学计算机排名,留学选校指南|纽约时报2019美国精英群体认可的大学榜单Top50...
  13. unbuntu: no network selected for sharing
  14. 5990. 找出数组中的所有孤独数字
  15. 《游戏机制——高级游戏设计技术》一1.1 规则定义游戏
  16. Lesson28_网络编程
  17. 哈工大计算机系王晓龙,林磊,讲师,2004获得哈尔滨工业大学计算机应用专业工学博士学位 ......
  18. 自己做了一个分享网盘资源的网站
  19. linux磁盘挂载方式mount
  20. php主板主要是支持,b360主板能上3000内存吗

热门文章

  1. 采购付款对账管理制度
  2. MATLAB--数字图像处理 图像锐化(纯代码篇)
  3. 国外一些有价值的docker相关的文章
  4. CSAPP:第12章 并发编程
  5. 内行看门道:看似“佛系”的《QQ炫舞手游》,背后的音频技术一点都不简单...
  6. 【人工智能】深度学习、数据库选择和人工智能的革命;人工智能是解锁IoT潜力的钥匙
  7. SpaceBuilder2.0 beta正式上线
  8. python中pivot table 透视表实例
  9. 【Java实验五】字符串加密、模拟用户登录、生成验证码、春节倒计时等
  10. 杰理之麦克风(混响)无法调数字音量解决方法【篇】