参考:
如何理解Graph Convolutional Network(GCN)
一文读懂图卷积GCN
万字长文带你入门GCN
CNN的平移不变性是什么?
一名刚刚开始学GCN的初学者整理的GCN入门理解:
一、为什么有图卷积这个概念,和普通CNN有什么区别
图卷积神经网络GCN输入图神经网络GNN的一类。
对于普通的CNN,其输入是一个二维的矩阵,排列整齐,而对于常常会遇到的社交网络、交通路线、蛋白质网络等,这些图网络的形式不像图片那样整齐的结构化,而是非结构化的信息。
CNN的卷积核卷积操作是在图片上移动卷积核计算加权和,且无论卷积核平移到图片的哪个位置都可以保证运算结果的一致性,这就是局部平移不变性。
ps:局部平移不变性的解释,可以理解成图片中的目标不管被移动到图片的哪个位置,都会检测到该特征,也就是得到的结果都是相同的,
但局部平移不变性在Graph中并不适用,网络是不规整的关系型数据,不存在平移不变性,那这个时候应该如何卷积呢?
二、传统傅里叶变换
欧拉公式:
解释:考虑横轴单位为1,纵轴为虚单位i的坐标系,图上任意一点可以表示为
也就是沿着单位圆圆周运动θ后到达该点。
f
(
t
)
f(t)
f(t)是原函数,
e
i
w
t
e^{iwt}
eiwt是基函数(可以看成一组正交基)如果原函数中包含频率为
w
w
w的三角函数,那么
F
(
w
)
F(w)
F(w)便为1,否则为0,这样就能分离出相应的信号。
而从数学上看,
e
i
w
t
e^{iwt}
eiwt又是拉普拉斯算子的特征函数:
所以
e
i
w
t
e^{iwt}
eiwt就是变换为△的特征函数(类比特征向量)啊。
三、为什么要介绍傅里叶变换,和图卷积有什么关系
应该就是spectral domain这个概念,也就是希望借助图谱的理论来实现拓扑图上的卷积操作。
spectral graph theory:借助图的拉普拉斯矩阵的特征值和特征向量来研究图的性质。
傅里叶变换在我看来,就是在另一个域中找到一组基,用这组基来表示原来的域中的某个向量。
图的拉普拉斯矩阵是对称矩阵,可以进行特征分解(谱分解),拉普拉斯矩阵只在中心顶点和一阶相连的顶点上有非0元素,其余为0。特征分解后,其特征向量是相互正交的。
上面是我copy的别人写的好像能懂的文字,spectral graph theory的具体内容我并没有看,所以这部分也是一知半解。
但至少由二可知,
e
i
w
t
e^{iwt}
eiwt就是变换为△(拉普拉斯算子)的特征函数,且被用于作为傅里叶变换的基。类比,而拉普拉斯矩阵(离散拉普拉斯算子)的特征向量是不是也可以用来作为傅里叶变换的正交基呢?从而就引到Graph上的傅里叶卷积。
ps:拉普拉斯矩阵为什么就是离散拉普拉斯算子?这篇有讲到。不过我还没深究其证明。
四、Graph上的傅里叶变换和卷积
开始正式介绍拉普拉斯矩阵。
D
D
D是度矩阵,度矩阵是对角矩阵,对角元素
D
i
i
D_{ii}
Dii是顶点
i
i
i的度。
W
W
W是考虑权值的邻接矩阵,元素
W
i
j
W_{ij}
Wij表示顶点
i
i
i和顶点
j
j
j的边的权值。
常用的拉普拉斯矩阵有三种:
- L = D − A L=D-A L=D−A。
- L = D − 1 / 2 L D 1 / 2 L=D^{-1/2}LD^{1/2} L=D−1/2LD1/2,归一化后的拉普拉斯矩阵。
- L = D − 1 L L=D^{-1}L L=D−1L。
那我们就直接对拉普拉斯进行谱分解,是不是就能进而傅里叶变换了呢?
对拉普拉斯矩阵进行谱分解:
U
U
U是列向量为单位特征向量的矩阵。由于
U
U
U是正交矩阵,可以写成下式:
探讨完拉普拉斯矩阵的性质,现在可以重新回到傅里叶变换,也就是第三节讲的,用拉普拉斯矩阵的特征向量来作为傅里叶变换的正交基:
得到Graph上的傅里叶变换:
(ps:对于离散的数据,其累加等效于连续的函数的积分)
这个式子中的
λ
l
λ_l
λl表示第
l
l
l特征值,
u
l
∗
u_l^{*}
ul∗表示该特征值下的特征向量,
i
i
i则表示第
i
i
i个分量。推广到矩阵的形式,可以得到:
有人可能会奇怪哪里来的
f
f
f,这个其实就是Graph上的N维向量,每个顶点都有一个
f
(
i
)
f(i)
f(i),所以说对于图上的一个给定的N维向量,其傅里叶变换就是与该图的拉普拉斯矩阵的特征向量矩阵做内积。这个结论有什么作用呢?可以继续看后面的GCN。
五、Graph Convolution
卷积定理:在适当条件下,两个信号
f
(
t
)
f(t)
f(t)与
h
(
t
)
h(t)
h(t)的卷积的傅里叶变换是他们傅里叶变换的点积。也就是说函数
f
(
t
)
f(t)
f(t)与
h
(
t
)
h(t)
h(t)两者的卷积是其函数傅里叶变换乘积的逆变换:
那对于Graph上卷积是不是也可以用
f
f
f和卷积核
h
h
h的傅里叶变换乘积的逆变换来表示呢?这个问题先放着,还有逆变换没有介绍。
傅里叶逆变换:传统的傅里叶逆变换是对频率
w
w
w求积分:
我们在前面的叙述中,把单位特征向量类比正交基,特征值则可相应类比这里的频率
w
w
w,所以Graph上的傅里叶逆变换就是:
其中的
u
l
u_l
ul是特征值
l
l
l对应的特征向量。再次类比到矩阵上,可以得到逆变换的矩阵表示形式:
所以知道了如果求傅里叶逆变换,Graph上的卷积应该也可以表示出来了:
f
f
f和
h
h
h的卷积计算步骤如下(
f
f
f和卷积核
h
h
h的傅里叶变换的乘积的傅里叶逆变换)。
- f f f的傅里叶变换是 f ′ = U T f f'=U^Tf f′=UTf。
-
h
h
h的傅里叶变换得到的用对角矩阵
表示。 - 乘积是
- 逆变换是在乘积前面乘
U
U
U
上式就是Graph上的卷积!
可以写成:
至于这两个公式的推导,可以参考这篇。
六、深度学习中的GCN
前面几节最终推导出了Graph上的卷积形式,这就可以用于神经网络啦。
公式中的对角矩阵就是可以学习的参数,而
U
U
U则是已知的,所以这样表示更清楚些。
第一代GCN:
也称为Spectral CNN,来自论文Spectral Networks and Locally Connected Networks on Graphs,直接将
变成了
那因而
得到了此式,
σ
σ
σ是**函数,
x
x
x就是graph上对应于每个顶点的feature vector(由数据集提取特征构成的),
g
θ
(
Λ
)
g_θ(Λ)
gθ(Λ)是卷积核。
后续多了理解再继续更新。
(其实本博客开篇参考的第一个链接有讲到为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基,而在本篇中只是简单类比了。)