目录
前言
在读kipf-GCN《Semi-Supervised Classification With Graph Convolutional Networks》的过程中,提到标准化的拉普拉斯矩阵的最大特征值约等于2: λ m a x ≈ 2 \lambda_{max}\approx 2 λmax≈2,所有的特征值范围在区间 [ 0 , 2 ] [0,2] [0,2] 之间,遂搜索一些资料进行验证,写下此文。
本文部分内容参考了经典书籍的修正及改进版本《Spectral Graph Theory (revised and improved)》,值得一读。
拉普拉斯矩阵
公式
Laplacian矩阵
是图的矩阵表示,无向图的Laplacian矩阵:
L
=
D
−
A
L=D-A
L=D−A,其中
D
D
D 为度矩阵,
A
A
A 为邻接矩阵。
性质
可见,Laplacian矩阵是 n n n 阶实对称矩阵。实对称矩阵具有如下性质:
- 实对称矩阵的特征值都是实数,有 n n n 个线性独立的特征向量,且特征向量都是实向量;
- 实对称矩阵的不同特征值对应的特征向量是正交的;
- n n n 阶实对称矩阵必可对角化,且相似对角矩阵上的元素就是它的特征值
证明
性质1: L L L 的特征向量正交
实对称矩阵不同特征值的特征向量正交。
取
L
L
L的 任意两个不相等的特征值
λ
1
,
λ
2
\lambda_1, \lambda_2
λ1,λ2,它们对应的单位特征向量为
p
1
,
p
2
∈
R
n
p_1,p_2 \in \mathbb{R}^n
p1,p2∈Rn,有:
L
p
1
=
λ
1
p
1
L
p
2
=
λ
2
p
2
\begin{aligned} &Lp_1=\lambda_1p_1 \\ &Lp_2=\lambda_2p_2 \\ \end{aligned}
Lp1=λ1p1Lp2=λ2p2
∵
\because
∵
p
1
T
L
p
2
=
p
1
T
L
T
p
2
=
(
L
p
1
)
T
p
2
=
(
λ
1
p
1
)
T
p
2
=
λ
1
p
1
T
p
2
(
1
)
\begin{aligned} {p_1}^TLp_2&={p_1}^TL^Tp_2\\ &={(Lp_1)}^Tp_2 \\ &={(\lambda_1p_1)}^Tp_2 \\ &=\lambda_1{p_1}^Tp_2 \qquad(1) \end{aligned}
p1TLp2=p1TLTp2=(Lp1)Tp2=(λ1p1)Tp2=λ1p1Tp2(1) 又
∵
\because
∵
p
1
T
L
p
2
=
p
1
T
(
L
p
2
)
=
p
1
T
λ
2
p
2
=
λ
2
p
1
T
p
2
(
2
)
{p_1}^TLp_2={p_1}^T(Lp_2)={p_1}^T\lambda_2p_2=\lambda_2{p_1}^Tp_2 \qquad(2)
p1TLp2=p1T(Lp2)=p1Tλ2p2=λ2p1Tp2(2)
(
1
)
−
(
2
)
(1)-(2)
(1)−(2)可得:
(
λ
1
−
λ
2
)
p
1
T
p
2
(\lambda_1-\lambda_2){p_1}^Tp_2
(λ1−λ2)p1Tp2
∵
λ
1
≠
λ
2
\because \lambda_1\neq\lambda_2
∵λ1=λ2
∴ p 1 T p 2 = 0 \therefore {p_1}^Tp_2=0 ∴p1Tp2=0,即 p 1 p_1 p1 与 p 2 p_2 p2 正交。
■ \blacksquare ■
性质2: L L L 的特征向量组成的矩阵 P P P是正交矩阵,有 P − 1 = P T P^{-1}=P^{T} P−1=PT
因为
P
=
[
p
1
,
p
2
,
…
,
p
n
]
∈
R
n
×
n
P=\begin{bmatrix}p_1,p_2,\dots,p_n\end{bmatrix} \in \mathbb{R}^{n\times n}
P=[p1,p2,…,pn]∈Rn×n 的每个向量都是正交,所以有:
P
T
P
=
[
p
1
T
p
1
p
1
T
p
2
⋯
p
1
T
p
n
p
2
T
p
1
p
2
T
p
2
⋯
p
2
T
p
n
⋮
⋮
⋮
p
n
T
p
1
p
n
T
p
2
⋯
p
n
T
p
n
]
=
[
1
1
⋱
1
]
=
E
P^TP= \begin{bmatrix} p_1^Tp_1 & p_1^Tp_2 & \cdots & p_1^Tp_n \\ p_2^Tp_1 & p_2^Tp_2 & \cdots & p_2^Tp_n \\ \vdots & \vdots & & \vdots \\ p_n^Tp_1 & p_n^Tp_2 & \cdots & p_n^Tp_n \\ \end{bmatrix} = \begin{bmatrix} 1 \\ & 1 & \\ & & \ddots\\ & & &1 \\ \end{bmatrix} = E
PTP=
p1Tp1p2Tp1⋮pnTp1p1Tp2p2Tp2⋮pnTp2⋯⋯⋯p1Tpnp2Tpn⋮pnTpn
=
11⋱1
=E 所以有
P
−
1
=
P
T
P^{-1}=P^{T}
P−1=PT
■
\blacksquare
■
代码验证
对于 前言 中的拉普拉斯矩阵,我们通过代码验证它性质2
(性质2
包括了性质1
)。
- 创建拉普拉斯矩阵并求特征向量
import numpy as np
# 创建拉普拉斯矩阵
L = np.array([
[ 2, -1, 0, 0, -1, 0],
[-1, 3, -1, 0, -1, 0],
[ 0, -1, 2, -1, 0, 0],
[ 0, 0, -1, 3, -1, -1],
[-1, -1, 0, -1, 3, 0],
[ 0, 0, 0, -1, 0, 1],
])
# 求特征值和特征向量(vecs_ori是标准化特征向量组成的矩阵)
vals_ori,vecs_ori = np.linalg.eig(L)
- 查看特征值和特征向量
# 保留小数点后3位数便于查看
print(vals_ori.round(3))
"""
[-0. 0.722 1.683 3. 3.705 4.891]
"""
print(vecs_ori.round(3))
"""
[[-0.408 -0.415 -0.505 0.289 -0.567 -0.032]
[-0.408 -0.309 0.04 0.289 0.658 -0.469]
[-0.408 -0.069 0.759 0.289 -0.205 0.356]
[-0.408 0.221 0.201 -0.577 -0.308 -0.562]
[-0.408 -0.221 -0.201 -0.577 0.308 0.562]
[-0.408 0.794 -0.294 0.289 0.114 0.144]]
"""
- 验证性质2
print(np.matmul(vecs_ori.T, vecs_ori).round(3))
"""
[[ 1. 0. 0. 0. -0. 0.]
[ 0. 1. -0. -0. -0. 0.]
[ 0. -0. 1. 0. -0. -0.]
[ 0. -0. 0. 1. -0. -0.]
[-0. -0. -0. -0. 1. 0.]
[ 0. 0. -0. -0. 0. 1.]]
"""
标准化的拉普拉斯矩阵
公式
在《关于谱图理论-图傅里叶变换-谱卷积等谱图领域知识的理解》的Laplacian矩阵一节中,说了拉普拉斯矩阵的三个主要定义,一种是原始版的
L
=
D
−
A
L=D-A
L=D−A ,还有一个叫做 “对称标准化Laplacian矩阵”:
L
s
y
m
=
(
D
+
)
1
2
L
(
D
+
)
1
2
=
I
−
(
D
+
)
1
2
A
(
D
+
)
1
2
L^{sym}=(D^+)^{\frac 1 2}L(D^+)^{\frac 1 2}=I-(D^+)^{\frac 1 2}A(D^+)^{\frac 1 2}
Lsym=(D+)21L(D+)21=I−(D+)21A(D+)21 其中,
D
+
D^+
D+是 穆尔-彭罗斯逆(M-P逆)。
还有一种标准化拉普拉斯的写法为: L n o r m = D − 1 2 L D − 1 2 L^{norm}=D^{-\frac 1 2}LD^{-\frac 1 2} Lnorm=D−21LD−21,两者是等价的。因为 D D D是满秩矩阵, D D D 的M-P逆 D + D^+ D+ 就是 D D D 的常规逆,即 D + = D − D^+=D^- D+=D−。
下文将对
L
n
o
r
m
=
D
−
1
2
L
D
−
1
2
L^{norm}=D^{-\frac 1 2}LD^{-\frac 1 2}
Lnorm=D−21LD−21 进行介绍。
性质
性质 | 拉普拉斯矩阵 L L L | 标准化拉普拉斯矩阵 L n o r m L^{norm} Lnorm |
---|---|---|
对称性 | √ \surd √ | √ \surd √ |
半正定 | √ \surd √ | ? ? ? |
证明
性质1: 对称性(symmetric)
证明:
邻接矩阵 A A A 为对称矩阵,度矩阵 D D D 为对角矩阵,很明显拉普拉斯矩阵 L = D − A L=D-A L=D−A 是对称矩阵。
令
D
−
1
2
=
[
d
1
d
2
⋱
d
n
]
D^{-\frac 1 2}= \begin{bmatrix} d_1 & & & \\ & d_2 & & \\ & & \ddots & \\ & & & d_n \\ \end{bmatrix}
D−21=
d1d2⋱dn
,
L
=
[
l
11
l
12
⋯
l
1
n
l
21
l
22
⋯
l
2
n
⋮
⋮
⋮
l
n
1
l
n
2
⋯
l
n
n
]
L = \begin{bmatrix} l_{11} & l_{12} & \cdots & l_{1n} \\ l_{21} & l_{22} & \cdots & l_{2n} \\ \vdots & \vdots & & \vdots \\ l_{n1} & l_{n2} & \cdots & l_{nn} \\ \end{bmatrix}
L=
l11l21⋮ln1l12l22⋮ln2⋯⋯⋯l1nl2n⋮lnn
,则:
L
n
o
r
m
=
D
−
1
2
L
D
−
1
2
=
[
d
1
d
2
⋱
d
n
]
[
l
11
l
12
⋯
l
1
n
l
21
l
22
⋯
l
2
n
⋮
⋮
⋮
l
n
1
l
n
2
⋯
l
n
n
]
[
d
1
d
2
⋱
d
n
]
=
[
l
11
d
1
l
12
d
1
⋯
l
1
n
d
1
l
21
d
2
l
22
d
2
⋯
l
2
n
d
2
⋮
⋮
⋮
l
n
1
d
n
l
n
2
d
n
⋯
l
n
n
d
n
]
[
d
1
d
2
⋱
d
n
]
=
[
l
11
d
1
d
1
l
12
d
1
d
2
⋯
l
1
n
d
1
d
n
l
21
d
2
d
1
l
22
d
2
d
2
⋯
l
2
n
d
2
d
n
⋮
⋮
⋮
l
n
1
d
n
d
1
l
n
2
d
n
d
2
⋯
l
n
n
d
n
d
n
]
\begin{aligned} L^{norm}=D^{-\frac 1 2}LD^{-\frac 1 2} &=\begin{bmatrix} d_1 & & & \\ & d_2 & & \\ & & \ddots & \\ & & & dn \\ \end{bmatrix} \begin{bmatrix} l_{11} & l_{12} & \cdots & l_{1n} \\ l_{21} & l_{22} & \cdots & l_{2n} \\ \vdots & \vdots & & \vdots \\ l_{n1} & l_{n2} & \cdots & l_{nn} \\ \end{bmatrix} \begin{bmatrix} d_1 & & & \\ & d_2 & & \\ & & \ddots & \\ & & & dn \\ \end{bmatrix} \\ &= \begin{bmatrix} l_{11}d_1 & l_{12}d_1 & \cdots & l_{1n}d_1 \\ l_{21}d_2 & l_{22}d_2 & \cdots & l_{2n}d_2 \\ \vdots & \vdots & & \vdots \\ l_{n1}d_n & l_{n2}d_n & \cdots & l_{nn}d_n \\ \end{bmatrix} \begin{bmatrix} d_1 & & & \\ & d_2 & & \\ & & \ddots & \\ & & & dn \\ \end{bmatrix} \\ &= \begin{bmatrix} l_{11}d_1d_1 & l_{12}d_1d_2 & \cdots & l_{1n}d_1d_n \\ l_{21}d_2d_1 & l_{22}d_2d_2 & \cdots & l_{2n}d_2d_n \\ \vdots & \vdots & & \vdots \\ l_{n1}d_nd_1 & l_{n2}d_nd_2 & \cdots & l_{nn}d_nd_n \\ \end{bmatrix} \end{aligned}
Lnorm=D−21LD−21=
d1d2⋱dn
l11l21⋮ln1l12l22⋮ln2⋯⋯⋯l1nl2n⋮lnn
d1d2⋱dn
=
l11d1l21d2⋮ln1dnl12d1l22d2⋮ln2dn⋯⋯⋯l1nd1l2nd2⋮lnndn
d1d2⋱dn
=
l11d1d1l21d2d1⋮ln1dnd1l12d1d2l22d2d2⋮ln2dnd2⋯⋯⋯l1nd1dnl2nd2dn⋮lnndndn
,可见
L
i
j
n
o
r
m
=
l
i
j
d
i
d
j
L^{norm}_{ij}=l_{ij}d_id_j
Lijnorm=lijdidj,
∵
\because
∵ L是对称矩阵,
l
i
j
=
l
j
i
l_{ij}=l_{ji}
lij=lji,
∴
L
n
o
r
m
\therefore L^{norm}
∴Lnorm 是对称矩阵。
□ \Box □
性质2: 半正定(positive-semidefinite)
即 L n o r m L^{norm} Lnorm 的所有特征值均为非负( λ i ≥ 0 \lambda_i\geq0 λi≥0 for all i i i)。
证明:
L
L
L 是对称且为对角优势矩阵,所以
L
L
L 是半正定矩阵。参见wiki百科-iagonally dominant matrix
□
\Box
□
性质3: 特征值范围介于0和2之间
相比于 L = D − A L=D-A L=D−A , L n o r m = D − 1 2 L D − 1 2 L^{norm}=D^{-\frac 1 2}LD^{-\frac 1 2} Lnorm=D−21LD−21 一开始看起来有点复杂,但 L n o r m L^{norm} Lnorm 的的特征值与一般图的其他图不变量有很好的联系,这是其他定义经常无法做到的。这个定义的优点是因为它与谱几何和随机过程中的特征值一致。它的许多性质可以推广到所有的图。
谱理论(Spectral Theory)的一半主要问题在于推导特征值分布的边界。另一半涉及特征值边界的影响和后果以及它们的应用。
其特征值的一个重要结论是:任何图的标准化拉普拉斯矩阵的特征值范围介于0和2之间。
证明请见:标准化拉普拉斯矩阵特征值范围为什么小于等于2?(证明)
代码验证
import numpy as np
def gen_adj(n):
"""创建邻接矩阵"""
while True:
A = np.zeros(shape=(n,n))
for i in range(1,n):
for j in range(i):
rand = np.random.rand(1)[0]
A[i][j]=1 if rand>0.4 else 0
for i in range(n-1):
for j in range(i+1,n):
A[i][j]=A[j][i]
# 防止孤立的顶点
if A.sum(0).min()!=0:
break
return A
def get_eigval(argL):
# 求矩阵特征值
vals_ori,vecs_ori = np.linalg.eig(argL)
return vals_ori.round(3)
def verify(n):
"""验证特征值范围"""
A = gen_adj(n)
D = np.diag(A.sum(0))
D_norm = np.diag(np.power(A.sum(0), -1/2))
L = D-A
L_norm = np.matmul(np.matmul(D_norm,L),D_norm)
res1 = get_eigval(L)
res2 = get_eigval(L_norm)
return res1,res2
if __name__=="__main__":
## 如果不抛出AssertionError, 则测试通过
for i in range(1000):
assert (verify(10)[1]).max()<2
■ \blacksquare ■