在读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 为度矩阵, L L L 为邻接矩阵。
可见,Laplacian矩阵是 n n n 阶实对称矩阵。实对称矩阵具有如下性质:
实对称矩阵不同特征值的特征向量正交。
取 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 ■
因为 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]]
"""
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 √ | ? ? ? |
证明:
邻接矩阵 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 □
即 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 □
相比于 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 ■