文章目录
一、图卷积神经网络
1.0 为什么要用 GCN,不可以使用CNN?
- 1)Graph的结构是一种非欧几里得空间的数据(Non Euclidean Structure)【通俗的说:在Graph中每个节点的相邻节点的数目都可能不同】,所以无法直接使用CNN。
- 2)广义上来说,任何数据都可以建立拓扑关联(谱聚类的思想)。
1.1 GCN 的目的
提取拓扑图的空间特征。
1.2 GCN的基本思想
-
已知条件
1)图的结构:节点的连接关系;是否是有向图。
2)每个节点对应的 Feature
3)将特征应用于具体任务【比如,在节点分类中是:未知节点中哪些属于已知的类别】 -
计算过程:
得到节点特征表示 ⟶ \longrightarrow ⟶ 类似全连接或卷积的网络提取特征 ⟶ \longrightarrow ⟶ 得到结果表示
1.3 GCN中的名词定义
-
1)邻接矩阵【图结构】 A A A
邻接矩阵的维度是: n × n n × n n×n
{ a i j = 1 表 示 节 点 i 和 节 点 j 存 在 连 接 a i j = 0 无 连 接 \begin{cases} a_{ij} = 1 表示节点 i 和 节点 j 存在连接 \\ a_{ij} = 0 无连接 \end{cases} {aij=1表示节点i和节点j存在连接aij=0无连接
-
- 1.1)无向图的邻接矩阵是对称的。
-
2)度矩阵 D D D
度矩阵的维度是: n × n n × n n×n
只在主对角线上有值。
{ d i j = d e g ( v i ) i f i = j d i j = 0 其 他 情 况 \begin{cases} d_{ij} = deg(v_i) \qquad if i = j \\ d_{ij} = 0 \qquad 其他情况 \end{cases} {dij=deg(vi)ifi=jdij=0其他情况 -
- 2.1)无向图出现自循环时,度数
+
1
+1
+1
这也就是在下图中,节点 1 的度数为 4 的原因。
- 2.1)无向图出现自循环时,度数
+
1
+1
+1
1.4 GCN的计算方式
{ v e r t e x d o m a i n ( s p a t i a l d o m a i n , 节 点 域 ; 空 间 域 ) s p e c t r a l d o m a i n ( 谱 域 ) \begin{cases} vertex \ domain(spatial \ domain,节点域;空间域) \\ spectral \ domain(谱域) \end{cases} {vertex domain(spatial domain,节点域;空间域)spectral domain(谱域)
1.4.1 Vertex domain 的计算方式
-
定义:
找到每个目标节点的所有相邻节点,然后对目标节点进行特征聚合。 -
存在的问题 :
1、如何寻找目标节点的相邻节点?(相对于 CNN 里面的概念就是,如何确定感受野?)
2、如何处理非欧式空间的数据?(如何处理包含不同数目的相邻节点的特征?) -
解决方式 :
1、首先,根据路径的长短,确定相邻节点的数量
2、然后,将相邻节点直接加到目标节点之上。
参考论文:Learning Convolutional Neural Networks for Graphs
1.4.2 Spectral Domain的计算方式
-
定义:
通过Graph 的拉普拉斯矩阵的特征值和特征向量来研究图的性质。 -
什么是拉普拉斯矩阵(Laplacian)?:
拉普拉斯矩阵的计算过程:
L = D − A L 是 拉 普 拉 斯 矩 阵 D 是 度 矩 阵 , A 是 邻 接 矩 阵 L = D - A \\ L 是拉普拉斯矩阵 \\ D 是度矩阵,A 是邻接矩阵 L=D−AL是拉普拉斯矩阵D是度矩阵,A是邻接矩阵
举个例子,如下图所示:
-
常见的拉普拉斯矩阵计算方式:
{ L = D − A → 组 合 拉 普 拉 斯 算 子 ( C o m b i n a t o r i a l L a p l a c i a n ) L = D − 1 2 A D − 1 2 → 对 称 归 一 化 拉 普 拉 斯 算 子 ( S y m m e t r i c n o r m a l i z e d L a p l a c i a n ) L = D − 1 A → 随 机 游 走 归 一 化 拉 普 拉 斯 算 子 ( R a n d o m w a l k n o r m a l i z e d L a p l a c i a n ) \begin{cases} L = D - A \qquad \rightarrow 组合拉普拉斯算子(Combinatorial Laplacian) \\ L = D^{- \frac{1}{2}} A D^{- \frac{1}{2}} \qquad \rightarrow 对称归一化拉普拉斯算子(Symmetric normalized Laplacian) \\ L = D^{-1} A \qquad \rightarrow 随机游走归一化拉普拉斯算子(Random walk normalized Laplacian) \end{cases} ⎩⎪⎨⎪⎧L=D−A→组合拉普拉斯算子(CombinatorialLaplacian)L=D−21AD−21→对称归一化拉普拉斯算子(SymmetricnormalizedLaplacian)L=D−1A→随机游走归一化拉普拉斯算子(RandomwalknormalizedLaplacian) -
为什么要用拉普拉斯矩阵(Laplacian)?:
1、拉普拉斯矩阵是对称矩阵,可以进行特征分解(谱分解;对角化)
2、拉普拉斯矩阵只在中心顶点
和一阶相邻相连的节点
上有非 0 元素,其余位置均为 0 。
1.4.2.1 拉普拉斯矩阵的特征分解(谱分解)
-
注意:
(1)不是所有的矩阵都可以特征分解。【矩阵进行特征分解的充要条件是:n 阶方阵存在 n 个线性无关的特征向量。】
(2)拉布普拉斯矩阵是半正定矩阵。【半正定矩阵是对称矩阵】(根据下面的性质,可以得到拉普拉斯矩阵一定可以谱分解。)- 1) 对称矩阵一定存在 n 个线性无关的特征向量。
- 2)半正定矩阵的特征值一定是非负的。
- 3)对称矩阵的特征向量相互正交,即所有的特征向量构成的矩阵为正交矩阵。
- 4)正交矩阵 若是 A A A 为正交矩阵,则存在 A A T = E A A^T = E AAT=E,也就是 A T = A − 1 A^T = A^{-1} AT=A−1
-
拉普拉斯矩阵的谱分解:
- L = U λ U − 1 L = U \lambda U^{-1} L=UλU−1
-
U
U
U是
列向量
为特征向量的矩阵。其中 U = ( u 1 → , u 2 → , . . . , u n → ) U = (\mathop{u_1}\limits ^{\rightarrow},\mathop{u_2}\limits ^{\rightarrow},...,\mathop{u_n}\limits ^{\rightarrow} ) U=(u1→,u2→,...,un→)【左乘行,右乘列。 解读:左乘对角矩阵是行变化,右乘对角矩阵是列变换。】 - λ \lambda λ 是特征值构成的对角矩阵。
1.5 GCN 公式说明
-
具体的公式可以表示为:
H l + 1 = σ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) W ( l ) ) H^{l+1} = \sigma(\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} H^{(l)} W^{(l)}) Hl+1=σ(D~−21A~D~−21H(l)W(l))
对比上述公式可以得到: 图 结 构 特 征 : A ′ = D ~ − 1 2 A ~ D ~ − 1 2 图结构特征:A^{'} = \tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} 图结构特征:A′=D~−21A~D~−21 -
1、GNN 逐步计算过程
A × x ↓ D ~ − 1 A ~ x ↓ D ~ − 1 A ~ D ~ − 1 x ↓ D ~ − 1 2 A ~ D ~ − 1 2 x A × x \\ \downarrow \\ \tilde{D}^{-1} \tilde{A} x \\ \downarrow \\ \tilde{D}^{-1} \tilde{A}\tilde{D}^{-1} x \\ \downarrow \\ \tilde{D}^{-\frac{1}{2}} \tilde{A}\tilde{D}^{-\frac{1}{2}} x A×x↓D~−1A~x↓D~−1A~D~−1x↓D~−21A~D~−21x -
1)为什么需要图结构特征 A ′ A^{'} A′?
因为在相同的图节点中,不同的节点连接,就能得到不同的节点特征表示。
2)图结构特征 A ′ A^{'} A′ 是固定的吗?
答:是固定的,因为这代表了图中节点之间的连接,所以是固定的。
3)图结构特征为什么用 A ′ A^{'} A′表示,而不用 A A A ?
答: A A A 代表最原始的图结构, A ′ A^{'} A′ 则是在 A A A 上进行了变化,更有利计算。 -
2、 A ~ \tilde{A} A~ 得到的过程
最直观的节点特征表示: A × x A × x A×x
但是这种操作存在一个问题:就是不存在目标节点自身的节点特征。
为了解决上述问题:
A
~
=
A
+
λ
I
\tilde{A} = A + \lambda I
A~=A+λI
其中
I
I
I 表示单位矩阵。
-
3、 D ~ \tilde{D} D~ 得到的过程
相对应的度数矩阵也进行变化
D ~ = D + λ I \tilde{D} = D + \lambda I D~=D+λI
其中 I I I 表示单位矩阵。
-
4、为什么取逆矩阵?
神经网络对输入数据非常敏感,一般来说,我们希望对所有的向量进行归一化操作(缩放)。
在本身的矩阵上乘一个对角线矩阵,就可以减小规模 -
5、为什么分别左乘 和 右乘 度的逆矩阵?
左 乘 、 右 乘 , 两 次 归 一 化 { 左 乘 : 表 示 对 邻 接 矩 阵 的 行 信 息 进 行 变 换 右 乘 : 表 示 对 邻 接 矩 阵 的 列 信 息 进 行 变 换 左乘、右乘, 两次归一化 \begin{cases} 左乘:表示对邻接矩阵的行信息进行变换 \\ 右乘:表示对邻接矩阵的列信息进行变换 \end{cases} 左乘、右乘,两次归一化{左乘:表示对邻接矩阵的行信息进行变换右乘:表示对邻接矩阵的列信息进行变换
-
6、为什么使用 D ~ − 1 2 \tilde{D}^{-\frac{1}{2}} D~−21?
为了进一步减少计算规模
-
节点分类的公式: