谱域GCN的一些基础知识总结
目录
- 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−21LD−21=I−D−21AD−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−1xne−iN2πkn
其逆傅里叶变换为:
xn=∑x=0N−1Xkei2πNknx_n=\sum_{x=0}^{N-1}{X_ke^{i\frac{2\pi}{N}kn}}xn=∑x=0N−1XkeiN2π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=1Nf(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的一些基础知识总结相关推荐
- 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导
文章目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral domai ...
- 【Pytorch神经网络理论篇】 25 基于谱域图神经网络GNN:基础知识+GNN功能+矩阵基础+图卷积神经网络+拉普拉斯矩阵
图神经网络(Graph Neural Network,GNN)是一类能够从图结构数据中学习特征规律的神经网络,是解决图结构数据(非欧氏空间数据)机器学习问题的最重要的技术. 1 图神经网络的基础知识 ...
- GNN在谱域下的演化:Spectral CNN,ChebyNet,GCN
文章目录 1. 主要脉络梳理 2. 图傅里叶变换(Graph Fourier Transform) 2.1 拉普拉斯矩阵特征分解 2.2 傅里叶基和傅里叶系数 3. 图卷积 4. 卷积神经网络(CNN ...
- gcn 图卷积神经网络_谱域图卷积模型---SCNN,ChebNet,GCN
对于图神经网络(GNN)而言,其实现卷积主要有两种两种方法,分别是谱域图卷积方法和空域图卷积方法.这次主要介绍使用谱方法实现卷积的三个模型,即SCNN,ChebNet,GCN. 近几年图神经网络的越来 ...
- FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输
博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...
- python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)
前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...
- 《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识
本节书摘来自异步社区<精通Matlab数字图像处理与识别>一书中的第6章,第6.2节,作者 张铮 , 倪红霞 , 苑春苗 , 杨立红,更多章节内容可以访问云栖社区"异步社区&qu ...
- 小白新人Python哪些基础知识必学?
点击"程序IT圈"关注我一起学习成长 很多想入门的小伙伴还不知道Python应该怎么学,哪些知识必学,今天我们就来盘点一下. 01 入门方法推荐 总体来讲,找一本靠谱的书,由浅入深 ...
- Python哪些基础知识必学?
一.入门方法推荐 总体来讲,找一本靠谱的书,由浅入深,边看边练. 网上的学习教程有很多,多到不知道如何选择.所有教程在基础知识介绍方面都差不多,区别在于讲的是否足够细(例如运行原理)以及是否有足够的练 ...
最新文章
- 如何看电脑安装了python-Python教程第1篇:查看电脑是否安装python
- asp.net常规页生命周期阶段列表和事件列表
- thinkphp-权限控制
- 负数比较大小_【教研活动】整体把握负数脉络 深度解读教材意图——鲤城区实验小学数学组单元整体教学系列研讨活动...
- c#学习总结(一)---Mr.Zhang
- webpack的一些plugin,怎么使用webpack对项目进行优化
- JAVAWeb开发之Servlet-18.Servlet共享变量与变量的作用域
- RabbitMQ的项目实际应用
- winpe装双系统linux_自制WINPE+MAC安装U盘及双系统存储U盘(增加多系统安装)
- c语言求最小公约数和最小公倍数,c语言求最大公约数和最小公倍数
- Windows常用设置
- 福尔曼大学计算机排名,留学选校指南|纽约时报2019美国精英群体认可的大学榜单Top50...
- unbuntu: no network selected for sharing
- 5990. 找出数组中的所有孤独数字
- 《游戏机制——高级游戏设计技术》一1.1 规则定义游戏
- Lesson28_网络编程
- 哈工大计算机系王晓龙,林磊,讲师,2004获得哈尔滨工业大学计算机应用专业工学博士学位 ......
- 自己做了一个分享网盘资源的网站
- linux磁盘挂载方式mount
- php主板主要是支持,b360主板能上3000内存吗
热门文章
- 采购付款对账管理制度
- MATLAB--数字图像处理 图像锐化(纯代码篇)
- 国外一些有价值的docker相关的文章
- CSAPP:第12章 并发编程
- 内行看门道:看似“佛系”的《QQ炫舞手游》,背后的音频技术一点都不简单...
- 【人工智能】深度学习、数据库选择和人工智能的革命;人工智能是解锁IoT潜力的钥匙
- SpaceBuilder2.0 beta正式上线
- python中pivot table 透视表实例
- 【Java实验五】字符串加密、模拟用户登录、生成验证码、春节倒计时等
- 杰理之麦克风(混响)无法调数字音量解决方法【篇】