概述
文章目录
-
-
- 一、CNN卷积
- 二、GCN 图卷积神经网络
-
- 2.1 GCN优点
- 2.3 提取拓扑图空间特征的两种方式
-
- 三、拉普拉斯矩阵
-
- 3.1 拉普拉斯矩阵的谱分解(特征分解)
- 3.2 傅里叶变换、卷积类比到Graph上的傅里叶变换及卷积
- 3.2.1 推广傅里叶变换
- 3.2.2 推广卷积
- 3.3 关于拉普拉斯矩阵的特征向量可以作为傅里叶变换的基,特征值表示频率
-
- 四、Graph Convolution Network
- 附:拉普拉斯基以及一些物理学原理
-
一、CNN卷积
离散卷积:离散卷积本质就是一种加权求和。就是传统的CNN。
CNN 中的卷积本质上就是利用一个共享参数的过滤器(kernel),通过计算中心像素点以及相邻像素点的加权和来构成 feature map 实现空间特征的提取(如下图)。加权系数就是卷积核的权重系数。
卷积核的系数是随机化初值,然后根据误差函数通过反向传播梯度下降进行迭代优化。卷积核的参数通过优化求出才能实现特征提取的作用。GCN的理论很大一部分工作就是为了引入可以优化的卷积参数。
卷积:指深度学习(CNN)中的卷积,与数学中定义的卷积运算严格意义上是有区别的(见scipy中的频谱卷积conv2函数)。
二、GCN 图卷积神经网络
在Computer Vision里我们用CNN可以很有效地提取空间特征。但是有一点需要注意:CNN处理的图像或者视频数据中像素点(pixel)是排列成成很整齐的矩阵(如下图所示,也就是很多论文中所提到的Euclidean Structure)。
关于GNN 详情请点击。
与之相对应,科学研究中还有很多Non Euclidean Structure的数据,如上图右所示。社交网络、信息网络中有很多类似的结构。实际上,这样的网络结构(Non Euclidean Structure)就是图论中抽象意义上的拓扑图。
所以,Graph Convolutional Network中的Graph是指数学(图论)中的用顶点和边建立相应关系的拓扑图。
2.1 GCN优点
-
CNN无法处理Non Euclidean Structure的数据,学术上的表达是传统的离散卷积在Non Euclidean Structure的数据上无法保持平移不变性。通俗理解就是在拓扑图中每个顶点的相邻顶点数目都可能不同,那么当然无法用一个同样尺寸的卷积核来进行卷积运算。
-
由于CNN无法处理Non Euclidean Structure的数据,又希望在这样的数据结构(拓扑图)上有效地提取空间特征来进行机器学习,所以GCN成为了研究的重点。
-
广义上来讲任何数据在赋范空间内都可以建立拓扑关联,谱聚类就是应用了这样的思想(谱聚类(spectral clustering)原理总结)。所以说拓扑连接是一种广义的数据结构,GCN有很大的应用空间。
2.3 提取拓扑图空间特征的两种方式
GCN的本质目的就是用来提取拓扑图的空间特征,在vertex domain(空域 spatial domain)和spectral domain(谱域)实现目标是两种最主流的方式。
(1). 基于空间域(spatial domain)
vertex domain(spatial domain)是非常直观的一种方式。顾名思义:提取拓扑图上的空间特征,那么就把每个顶点相邻的neighbors找出来。
Learning Convolutional Neural Networks for Graphs ——ICML 2016 中为了能够对任意结构的图进行卷积操作,这篇文章提出了PATCHY-SAN (Select-Assemble-Normalize)的方法,
通过三个步骤构建卷积分片:
1.从图中选择一个固定长度的节点序列;
2.对序列中的每个节点,收集固定大小的邻域集合;
3.对由当前节点及其对应的邻域构成的子图进行规范化,作为卷积结构的输入。
通过上述三个步骤构建出所有的卷积片之后,利用卷积结构分别对每个分片进行操作。具体示意图如下图所示。
总体上讲,就是用w个固定size=k的子图来表示输入的graph,再将这w个子图正则化后,生成一个w*k维的向量,作为传统的CNN的输入,进行学习。其实就是做了一个从graph到向量的映射的一个预处理过程。
具体构建卷积分片的步骤:
- 节点序列选择:为对图中所有的节点进行标号排序,将图中的节点集合根据向心性(节点的度、中心度等)映射为有序的节点序列。从该序列中根据一定的间隔s隔段选取w个节点构成最终的节点序列。
- 邻域节点收集:对于上一步获得的节点序列中的每一个节点,利用广度优化搜索扩展邻域节点,和源节点一起构成一个k大小的邻域集合。
- 子图规范化:对邻域集合中的各节点标号排序,得到接受域。那么,对于节点的属性,k个节点属性值构成了一个输入通道,对于边的属性,k2k^2k2 个属性值也构成了一个输入通道。我们可以分别用一维的卷积层来处理这两种输入通道(对于节点属性卷积层长度为k,对于边属性卷积层长度为k2k^2k2)。
这里面蕴含的科学问题有二:
a.按照什么条件去找中心vertex的neighbors,也就是如何确定receptive field?
b.确定receptive field,按照什么方式处理包含不同数目neighbors的特征?
根据a,b两个问题设计算法,就可以实现目标了。详情请查看论文 vertex domain提取空间特征示意图如上。
这种方法主要的缺点如下:
c.每个顶点提取出来的neighbors不同,使得计算处理必须针对每个顶点
d.提取特征的效果可能没有卷积好。
(2) 基于频谱域(spectral domain)
spectral domain就是GCN的理论基础了。这种思路就是希望借助图谱的理论来实现拓扑图上的卷积操作。从整个研究的时间进程来看:首先研究GSP(graph signal processing)的学者定义了graph上的Fourier Transformation,进而定义了graph上的convolution,最后与深度学习结合提出了Graph Convolutional Network。
Spectral graph theory(谱图论)
Spectral graph theory:简单的概括就是借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质
利用Spectral graph theory:待续
三、拉普拉斯矩阵
Graph Fourier Transformation及Graph Convolution的定义都用到图的拉普拉斯矩阵,那么首先来介绍一下拉普拉斯矩阵。
对于图 G=(V,E)G=(V,E)G=(V,E) ,其Laplacian 矩阵的定义为 L=D−AL = D-AL=D−A ,其中 LLL 是Laplacian 矩阵,DDD 是顶点的度矩阵(对角矩阵),对角线上元素依次为各个顶点的度,AAA 是图的邻接矩阵。看图5的示例,就能很快知道Laplacian 矩阵的计算方法。
常用的拉普拉斯矩阵实际有三种:
No.1 L=D−AL = D-AL=D−A 定义 的Laplacian 矩阵更专业的名称叫Combinatorial Laplacian
No.2 Lsys=D−12LD−12L^{sys} = D^{-frac{1}{2}}LD^{-frac{1}{2}}Lsys=D−21LD−21定义的叫Symmetric normalized Laplacian,很多GCN的论文中应用的是这种拉普拉斯矩阵
No.3 Lrw=D−1LL^{rw} = D^{-1}LLrw=D−1L定义的叫Random walk normalized Laplacian,有读者的留言说看到了Graph Convolution与Diffusion相似之处,当然从Random walk normalized Laplacian就能看出了两者确有相似之处(其实两者只差一个相似矩阵的变换,可以参考Diffusion-Convolutional Neural Networks)
Diffusion Graph Convolution与Spectral Graph Convolution相似性证明
维基百科对Laplacian matrix的定义: https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Laplacian_matrix
为什么GCN要用拉普拉斯矩阵?
(1) 拉普拉斯矩阵是对称矩阵,可以进行特征分解(谱分解),这就和GCN的spectral domain对应上了。
(2) 拉普拉斯矩阵只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0。
(3) 通过拉普拉斯算子与拉普拉斯矩阵进行类比(详见第6节)。
当然严格意义上,拉普拉斯矩阵应用于GCN有严谨的数学推导与证明。
3.1 拉普拉斯矩阵的谱分解(特征分解)
GCN的核心基于拉普拉斯矩阵的谱分解:
矩阵的谱分解,特征分解,对角化都是同一个概念(特征分解_百度百科)。
不是所有的矩阵都可以特征分解,其充要条件为n阶方阵存在n个线性无关的特征向量。
但是拉普拉斯矩阵是半正定对称矩阵(半正定矩阵本身就是对称矩阵,半正定矩阵,此处这样写为了和下面的性质对应,避免混淆),
有如下三个性质:
- 对称矩阵一定n个线性无关的特征向量
- 半正定矩阵的特征值一定非负
- 对阵矩阵的特征向量相互正交,即所有特征向量构成的矩阵为正交矩阵。
由上可以知道拉普拉斯矩阵一定可以谱分解,且分解后有特殊的形式。
对于拉普拉斯矩阵其谱分解为:L=U⎛⎝⎜⎜λ1⋱λn⎞⎠⎟⎟U−1L= Uleft(begin{matrix}lambda_1 & \&ddots \ &&lambda_n end{matrix}right) U^{-1}L=U⎝⎛λ1⋱λn⎠⎞U−1
其中 Unexpected text node: ' 'Unexpected text node: ' 'U=(u1,u2,⋯,un) ,是列向量为单位特征向量的矩阵,也就说 ul⃗ bf vec{u_l}ul 是列向量。
而 ⎛⎝⎜⎜λ1⋱λn⎞⎠⎟⎟left(begin{matrix}lambda_1 & \&ddots \ &&lambda_n end{matrix}right)⎝⎛λ1⋱λn⎠⎞ 是 nnn 个特征值构成的对角阵。
由于 UUU 是正交矩阵,即 UUT=EUU^{T}=EUUT=E,所以特征分解又可以写成:L=U⎛⎝⎜⎜λ1⋱λn⎞⎠⎟⎟UTL= Uleft(begin{matrix}lambda_1 & \&ddots \ &&lambda_n end{matrix}right) U^{T}L=U⎝⎛λ1⋱λn⎠⎞UT
3.2 傅里叶变换、卷积类比到Graph上的傅里叶变换及卷积
把传统的傅里叶变换以及卷积迁移到Graph上来,核心工作其实就是把拉普拉斯算子的特征函数e−iωte^{-i omega t}e−iωt 变为Graph对应的拉普拉斯矩阵的特征向量。
3.2.1 推广傅里叶变换
-
传统的傅里叶变换定义为:
F(ω)=F[f(t)]=∫f(t)e−iωtdtF(omega) = F[f(t)] = int f(t)e^{-i omega t} dtF(ω)=F[f(t)]=∫f(t)e−iωtdt
信号 f(t)f(t)f(t) 与基函数 e−iωte^{-i omega t}e−iωt 的积分,那么为什么要找 e−iωte^{-i omega t}e−iωt 作为基函数呢?从数学上看,e−iωte^{-i omega t}e−iωt 是拉普拉斯算子的特征函数(满足特征方程), ωomegaω 就和特征值有关。广义的特征方程定义为:AV=λVAV = lambda VAV=λV
其中AAA 是一种变换,VVV 是特征向量或者特征函数(无穷维的向量), λlambdaλ 是特征值。e−iωte^{-iomega t}e−iωt 满足:
Δe−iωt=∂2∂t2e−iωt=−ω2e−iωtDelta e^{-i omega t} = frac{ partial^{2}}{partial t^{2}} e^{-i omega t}=- omega^{2} e^{-iomega t}Δe−iωt=∂t2∂2e−iωt=−ω2e−iωt
当然 e−iωtmathbf{e^{-iomega t}}e−iωt 就是变换 Δmathbf DeltaΔ 的特征函数, ωmathbf omegaω 和特征值密切相关。那么,处理Graph问题的时候,用到拉普拉斯矩阵(拉普拉斯矩阵就是离散拉普拉斯算子),自然就去找拉普拉斯矩阵的特征向量了。
-
Graph上的傅里叶变换
LLL是拉普拉斯矩阵, VVV是其特征向量,自然满足式: LV=λVLV=lambda VLV=λV离散积分就是一种内积形式,仿上定义Graph上的傅里叶变换:
F(λl)=fˆ(λl)=∑Ni=1f(i)u∗l(i)F(lambda_l)=hat{f}(lambda_l)=sum_{i=1}^{N}{f(i) u_l^*(i)}F(λl)=f^(λl)=i=1∑Nf(i)ul∗(i)
fff 是Graph上的 NNN维向量,f(i)f(i)f(i)与Graph的顶点一一对应, ul(i)u_l(i)ul(i)表示第 lll 个特征向量的第 iii 个分量。那么特征值(频率) λllambda_lλl 下的,fff的Graph 傅里叶变换就是与 λllambda_lλl 对应的特征向量 ulu_lul进行内积运算。注:上述的内积运算是在复数空间中定义的,所以采用了u∗l(i)u_l^*(i)ul∗(i),也就是特征向量 ulu_lul 的共轭。Inner product更多可以参考Inner product space。
-
利用矩阵乘法将Graph上的傅里叶变换推广到矩阵形式:
⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜fˆ(λ1)fˆ(λ2)⋮fˆ(λN)⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟=⎛⎝⎜⎜⎜⎜⎜ u1(1)u2(1)⋮uN(1)u1(2)u2(2)⋮uN(2)……⋱…u1(N)u2(N)⋮uN(N)⎞⎠⎟⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜⎜f(1)f(2)⋮f(N)⎞⎠⎟⎟⎟⎟⎟left(begin{matrix} hat{f}(lambda_1)\ hat{f}(lambda_2) \ vdots \hat{f}(lambda_N) end{matrix}right)=left(begin{matrix} u_1(1) &u_1(2)& dots &u_1(N) \u_2(1) &u_2(2)& dots &u_2(N)\ vdots &vdots &ddots & vdots\ u_N(1) &u_N(2)& dots &u_N(N) end{matrix}right)left(begin{matrix}f(1)\ f(2) \ vdots \f(N) end{matrix}right)⎝⎜⎜⎜⎛f^(λ1)f^(λ2)⋮f^(λN)⎠⎟⎟⎟⎞=⎝⎜⎜⎜⎛ u1(1)u2(1)⋮uN(1)u1(2)u2(2)⋮uN(2)……⋱…u1(N)u2(N)⋮uN(N)⎠⎟⎟⎟⎞⎝⎜⎜⎜⎛f(1)f(2)⋮f(N)⎠⎟⎟⎟⎞
即 fff 在Graph上傅里叶变换的矩阵形式为: fˆ=UTf(a)hat{f}=U^Tf qquad(a)f^=UTf(a)
式中:UTU^TUT 的定义与第五节中的相同 -
Graph上的傅里叶逆变换
类似地,传统的傅里叶变换是对频率 ωomegaω 求积分:
F−1[F(ω)]=12Π∫F(ω)eiωtdωmathcal{F}^{-1}[F(omega)]=frac{1}{2Pi}int_{}^{}F(omega)e^{iomega t} domegaF−1[F(ω)]=2Π1∫F(ω)eiωtdω
迁移到Graph上变为对特征值 λllambda_lλl求和:
f(i)=∑Nl=1fˆ(λl)ul(i)f(i)=sum_{l=1}^{N}{hat{f}(lambda_l) u_l(i)}f(i)=l=1∑Nf^(λl)ul(i)
利用矩阵乘法将Graph上的傅里叶逆变换推广到矩阵形式:
⎛⎝⎜⎜⎜⎜⎜f(1)f(2)⋮f(N)⎞⎠⎟⎟⎟⎟⎟=⎛⎝⎜⎜⎜⎜⎜ u1(1)u1(2)⋮u1(N)u2(1)u1(2)⋮u2(N)……⋱…uN(1)uN(2)⋮uN(N)⎞⎠⎟⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜fˆ(λ1)fˆ(λ2)⋮fˆ(λN)⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟left(begin{matrix}f(1)\ f(2) \ vdots \f(N) end{matrix}right)= left(begin{matrix} u_1(1) &u_2(1)& dots &u_N(1) \u_1(2) &u_1(2)& dots &u_N(2)\ vdots &vdots &ddots & vdots\ u_1(N) &u_2(N)& dots &u_N(N) end{matrix}right) left(begin{matrix} hat{f}(lambda_1)\ hat{f}(lambda_2) \ vdots \hat{f}(lambda_N) end{matrix}right)⎝⎜⎜⎜⎛f(1)f(2)⋮f(N)⎠⎟⎟⎟⎞=⎝⎜⎜⎜⎛ u1(1)u1(2)⋮u1(N)u2(1)u1(2)⋮u2(N)……⋱…uN(1)uN(2)⋮uN(N)⎠⎟⎟⎟⎞⎝⎜⎜⎜⎛f^(λ1)f^(λ2)⋮f^(λN)⎠⎟⎟⎟⎞
即 fff 在Graph上傅里叶逆变换的矩阵形式为: f=Ufˆ(b)f=Uhat{f} qquad(b)f=Uf^(b)
式中: UUU 的定义与第五节中的相同
3.2.2 推广卷积
在上面的基础上,利用卷积定理类比来将卷积运算,推广到Graph上。
卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积,即对于函数f(t)f(t)f(t) 与 h(t)h(t)h(t)两者的卷积是其函数傅立叶变换乘积的逆变换:
f∗h=F−1[fˆ(ω)hˆ(ω)]=12Π∫fˆ(ω)hˆ(ω)eiωtdωf*h=mathcal{F}^{-1}left[ hat{f}(omega)hat{h}(omega) right]=frac{1}{2Pi}int_{}^{} hat{f}(omega)hat{h}(omega)e^{iomega t} domegaf∗h=F−1[f^(ω)h^(ω)]=2Π1∫f^(ω)h^(ω)eiωtdω
类比到Graph上并把傅里叶变换的定义带入,fff与卷积核 hhh 在Graph上的卷积可按下列步骤求出:
fff 的傅里叶变换为 fˆ=UTfhat{f}=U^Tff^=UTf
卷积核 hhh 的傅里叶变换写成对角矩阵的形式即为:
⎛⎝⎜⎜⎜⎜⎜hˆ(λ1)⋱hˆ(λn)⎞⎠⎟⎟⎟⎟⎟left(begin{matrix}hat h(lambda_1) & \&ddots \ &&hat h(lambda_n) end{matrix}right)⎝⎛h^(λ1)⋱h^(λn)⎠⎞
hˆ(λl)=∑Ni=1h(i)u∗l(i)hat{h}(lambda_l)=sum_{i=1}^{N}{h(i) u_l^*(i)}h^(λl)=∑i=1Nh(i)ul∗(i)是根据需要设计的卷积核 在Graph上的傅里叶变换。
两者的傅立叶变换乘积即为:
⎛⎝⎜⎜⎜⎜⎜hˆ(λ1)⋱hˆ(λn)⎞⎠⎟⎟⎟⎟⎟UTfleft(begin{matrix}hat h(lambda_1) & \&ddots \ &&hat h(lambda_n) end{matrix}right)U^Tf⎝⎛h^(λ1)⋱h^(λn)⎠⎞UTf
再乘以 UUU 求两者傅立叶变换乘积的逆变换,则求出卷积:
⎛⎝⎜⎜⎜⎜⎜f∗h⎞⎠⎟⎟⎟⎟⎟G=U⎛⎝⎜⎜⎜⎜⎜hˆ(λ1)⋱hˆ(λn)⎞⎠⎟⎟⎟⎟⎟UTf⎛⎝⎜⎜⎜⎜⎜1⎞⎠⎟⎟⎟⎟⎟(f*h)_G= Uleft(begin{matrix}hat h(lambda_1) & \&ddots \ &&hat h(lambda_n) end{matrix}right) U^Tf qquad(1)(f∗h)G=U⎝⎛h^(λ1)⋱h^(λn)⎠⎞UTf(1)
式中: UUU 及UTU^{T}UT 的定义与第五节中的相同
注:很多论文中的Graph卷积公式为:(f∗h)G=U((UTh)⊙(UTf))(2)(f*h)_G=U((U^Th)odot(U^Tf)) qquad(2)(f∗h)G=U((UTh)⊙(UTf))(2)
表示hadamard product(哈德曼点积),对于两个向量,就是进行内积运算;对于维度相同的两个矩阵,就是对应元素的乘积运算。
其实式(2)与式(1)是完全相同的。
因为 ⎛⎝⎜⎜⎜⎜⎜hˆ(λ1)⋱hˆ(λn)⎞⎠⎟⎟⎟⎟⎟与left(begin{matrix}hat h(lambda_1) & \&ddots \ &&hat h(lambda_n) end{matrix}right)与⎝⎛h^(λ1)⋱h^(λn)⎠⎞与与 UThU^ThUTh 都是 hhh 在Graph上的傅里叶变换
而根据矩阵乘法的运算规则:对角矩阵 ⎛⎝⎜⎜⎜⎜⎜hˆ(λ1)⋱hˆ(λn)⎞⎠⎟⎟⎟⎟⎟left(begin{matrix}hat h(lambda_1) & \&ddots \ &&hat h(lambda_n) end{matrix}right)⎝⎛h^(λ1)⋱h^(λn)⎠⎞与 UThU^ThUTh 的乘积 和 UThU^ThUTh 与 UTfU^TfUTf 进行对应元素的乘积运算是完全相同的。
这里主要推(1)式是为了和后面的deep learning相结合。
3.3 关于拉普拉斯矩阵的特征向量可以作为傅里叶变换的基,特征值表示频率
(1)为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?
傅里叶变换一个本质理解就是:把任意一个函数表示成了若干个正交函数(由sin,cos 构成)的线性组合。
通过第六节中(b)式也能看出,graph傅里叶变换也把graph上定义的任意向量 fff ,表示成了拉普拉斯矩阵特征向量的线性组合,即:
f=fˆ(1)u1+fˆ(2)u2+⋯+fˆ(n)unf=hat{f}(1)u_1+hat{f}(2)u_2+cdots +hat{f}(n)u_nf=f^(1)u1+f^(2)u2+⋯+f^(n)un
那么:为什么graph上任意的向量 都可以表示成这样的线性组合?
原因在于 Unexpected text node: ' 'Unexpected text node: ' '(u1,u2,⋯,un) 是graph上 nnn 维空间中的 nnn个线性无关的正交向量(拉普拉斯矩阵的性质),由线性代数的知识可以知道: nnn维空间中 nnn个线性无关的向量可以构成空间的一组基,而且拉普拉斯矩阵的特征向量还是一组正交基。
(2)怎么理解拉普拉斯矩阵的特征值表示频率?
在graph空间上无法可视化展示“频率”这个概念,那么从特征方程上来抽象理解。
将拉普拉斯矩阵 LLL 的 nnn 个非负实特征值,从小到大排列为 λ1≤λ2≤⋯≤λnlambda_1 le lambda_2 le cdots le lambda_nλ1≤λ2≤⋯≤λn ,而且最小的特征值 λ1=0lambda_1=0λ1=0 ,因为 nnn 维的全1向量对应的特征值为0(由 LLL 的定义就可以得出):L⎛⎝⎜⎜⎜⎜11⋮1⎞⎠⎟⎟⎟⎟=0L left(begin{matrix}1\ 1 \ vdots \1 end{matrix}right)=0L⎝⎜⎜⎜⎛11⋮1⎠⎟⎟⎟⎞=0
从特征方程的数学理解来看:Lu=λuLu=lambda uLu=λu
在由Graph确定的 nnn 维空间中,越小的特征值 λllambda_lλl表明:拉普拉斯矩阵 LLL 其所对应的基 ulu_lul 上的分量、“信息”越少,那么当然就是可以忽略的低频部分了。(类似于一般矩阵的特征分解)
其实图像压缩就是这个原理,把像素矩阵特征分解后,把小的特征值(低频部分)全部变成0,PCA降维也是同样的,把协方差矩阵特征分解后,按从大到小取出前K个特征值对应的特征向量作为新的“坐标轴”。
四、Graph Convolution Network
Deep Learning中的Graph Convolution
Deep learning 中的Graph Convolution直接看上去会和第6节推导出的图卷积公式有很大的不同,但是万变不离其宗,(1)式是推导的本源。
Deep learning 中的Convolution就是要设计含有trainable共享参数的kernel,从(1)式看很直观:graph convolution中的卷积参数就是 diag(hˆ(λl))diag( hat h(lambda_l) )diag(h^(λl))。
第一代的GCN(Spectral Networks and Locally Connected Networks on Graphs),简单粗暴地把 diag(hˆ(λl))diag( hat h(lambda_l) )diag(h^(λl)) 变成了卷积核 diag(θl)diag(theta_l )diag(θl), 也就是:youtput=σ⎛⎝⎜⎜U⎛⎝⎜⎜θ1⋱θn⎞⎠⎟⎟UTx⎞⎠⎟⎟⎛⎝⎜⎜3⎞⎠⎟⎟y_{output}=sigma left(Uleft(begin{matrix}theta_1 &\&ddots \ &&theta_n end{matrix}right) U^T x right) qquad(3)youtput=σ⎝⎛U⎝⎛θ1⋱θn⎠⎞UTx⎠⎞(3)
式(3)就是标准的第一代GCN中的layer了,其中 σ(⋅)sigma(cdot)σ(⋅)是激活函数,Unexpected text node: ' 'Unexpected text node: ' 'Θ=(θ1,θ2,⋯,θn) 就跟三层神经网络中的weight一样是任意的参数,通过初始化赋值然后利用误差反向传播进行调整, xxx 就是graph上对应于每个顶点的特征向量。
第一代的参数方法存在着一些弊端:主要在于:
(1)每一次前向传播,都要计算 U,diag(θl)U,diag(theta_l )U,diag(θl) 及 UTU^TUT 三者的乘积,特别是对于大规模的graph,计算的代价较高,也就是论文中 O(n2)mathcal{O}(n^2)O(n2) 的计算复杂度
(2)卷积核的spatial localization不好,这是相对第二代卷积核而言的,这里不多解释
(3)卷积核需要 nnn 个参数
第二代的GCN(Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering),把 hˆ(λl)hat h(lambda_l)h^(λl)巧妙地设计成了 ∑Kj=0αjλjlsum_{j=0}^K alpha_j lambda^j_l∑j=0Kαjλlj ,也就是:
youtput=σ⎛⎝⎜⎜⎜⎜U⎛⎝⎜⎜⎜⎜∑Kj=0αjλj1⋱∑Kj=0αjλjn⎞⎠⎟⎟⎟⎟UTx⎞⎠⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜4⎞⎠⎟⎟⎟⎟y_{output}=sigma left(Uleft(begin{matrix}sum_{j=0}^K alpha_j lambda^j_1 &\&ddots \ && sum_{j=0}^K alpha_j lambda^j_n end{matrix}right) U^T x right) qquad(4)youtput=σ⎝⎜⎛U⎝⎜⎛∑j=0Kαjλ1j⋱∑j=0Kαjλnj⎠⎟⎞UTx⎠⎟⎞(4)
下面利用矩阵乘法进行变换:
⎛⎝⎜⎜⎜⎜∑Kj=0αjλj1⋱∑Kj=0αjλjn⎞⎠⎟⎟⎟⎟=∑Kj=0αjΛjleft(begin{matrix}sum_{j=0}^K alpha_j lambda^j_1 &\&ddots \ && sum_{j=0}^K alpha_j lambda^j_n end{matrix}right)=sum_{j=0}^K alpha_j Lambda^j⎝⎜⎛∑j=0Kαjλ1j⋱∑j=0Kαjλnj⎠⎟⎞=j=0∑KαjΛj
进而可以导出:U∑Kj=0αjΛjUT=∑Kj=0αjUΛjUT=∑Kj=0αjLjU sum_{j=0}^K alpha_j Lambda^j U^T =sum_{j=0}^K alpha_j ULambda^j U^T = sum_{j=0}^K alpha_j L^jUj=0∑KαjΛjUT=j=0∑KαjUΛjUT=j=0∑KαjLj
上式成立是因为 L2=UΛUTUΛUT=UΛ2UT且UTU=EL^2=U Lambda U^TU Lambda U^T=U Lambda^2 U^T 且 U^T U=EL2=UΛUTUΛUT=UΛ2UT且UTU=E
(4)式就变成了:
youtput=σ(∑Kj=0αjLjx)(5)y_{output}=sigma left( sum_{j=0}^K alpha_j L^j x right) qquad(5)youtput=σ(j=0∑KαjLjx)(5)
其中 Unexpected text node: ' 'Unexpected text node: ' '(α1,α2,⋯,αK) 是任意的参数,通过初始化赋值然后利用误差反向传播进行调整。
式(5)所设计的卷积核其优点在于在于:
(1)卷积核只有K个参数,一般 K远小于n
(2)矩阵变换后,神奇地发现不需要做特征分解了,直接用拉普拉斯矩阵LLL 进行变换,计算复杂度变成了 O(n)mathcal{O}(n)O(n) 。
(3)卷积核具有很好的spatial localization,特别地,K就是卷积核的receptive field,也就是说每次卷积会将中心顶点K-hop neighbor上的feature进行加权求和,权系数就是 αkalpha_kαk
更直观地看, K=1就是对每个顶点上一阶neighbor的feature进行加权求和,(同理,K=2)如下图所示:
注:上图只是以一个顶点作为实例,GCN每一次卷积对所有的顶点都完成了图示的操作。
附:拉普拉斯基以及一些物理学原理
使用OpenCV处理过图片的人会了解到,有时处理图片时会将空域转成频域,这样可以避免卷积带来的高运算和耗时,使用傅里叶变换来处理频域数据用来加快运算。
频谱:我们只需要知道它是将信号/音频/图像/图分解成简单元素(微波、图)的组合就够了。为了在分解过后得到一些好的性质,这些简单元素通常是正交的,就是与相互线性无关,因此就形成了一个基。
当我们讨论信号或者图像处理中的“频谱”时,指的是傅里叶变换,它为我们提供了不同频率的正弦波和余弦波的特定基 (DFT矩阵,例如Python中的scip.linalg.dft),这样我们就可以将信号或是图像表示为这些波的总和。但是当我们讨论图和神经网络图(GNN)时,“频谱”意味着拉普拉斯图L的特征分解,你可以认为拉普拉斯图L是一种特殊的相邻矩阵A,而特征分解就是为了找到构成我们的图基本正交分量的一种方法。
拉普拉斯图直观地显示了当我们在节点I中放置一些“潜在元素”时,“能量”在图上的传播方向和扩散程度。在数学和物理学中,拉普拉斯基的一个典型应用是解决信号(波)如何在动态系统中传播。如果相邻的值没有突然的变化,那扩散就是很平滑的,如下面的动图所示。
鸣谢:
https://blog.csdn.net/weixin_40013463/article/details/81089223
https://www.zhihu.com/question/54504471/answer/332657604
https://blog.csdn.net/u011537121/article/details/81542991
最后
以上就是奋斗母鸡为你收集整理的GCN—图卷积神经网络理解文章目录的全部内容,希望文章能够帮你解决GCN—图卷积神经网络理解文章目录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复