前言
我们经常可以看到某些算法使用到拉普拉斯矩阵,比如在谱聚类算法中用到拉普拉斯矩阵,在图卷积神经网络中用到拉普拉斯矩阵等等。为什么会用到拉普拉斯矩阵呢,拉普拉斯矩阵的作用及意义是什么,其实这些都和拉普拉斯算子的作用及意义有关。
拉普拉斯算子
在介绍拉普拉斯矩阵之前,先介绍一下拉普拉斯算子。拉普拉斯算子有以下形式:
也就是说拉普拉斯算子是求函数关于参数的二阶梯度。形式上是求二阶梯度,其实本质是求散度。什么是散度呢?在标量场上,我们可以求得梯度,而在向量上,我们可以求得散度。在向量场上,每个点都有一个向量,如果我们在这个场上取一个封闭的单位元,比如在三维空间中就是球体,在二维空间中就是圆,然后使用下面的公式计算单位元表面的积分:
这个积分就是表示散度。而拉普拉斯算子就是首先计算标量函数的梯度,然后再计算梯度的散度,写成的形式就是二阶梯度的形式,但散度是一个标量而不是一个向量。求散度有什么意义呢,对于一个函数,我们知道,在极大值处散度是负的,因为梯度是向内吸收,而在极小处是正的,因为梯度是向外发散,而对于一般的情况,散度可以表示梯度的变化情况,散度为负表示梯度减小,散度为正表示梯度增大。
拉普拉斯矩阵
拉普拉斯矩阵其实本质和拉普拉斯算子一样,都是为了求散度。在图结构的数据中,我们可以给图的节点定义一个函数$F$,表示将节点映射到一个值。有了函数,我们就可以定义梯度,在原来的函数梯度定义中,我们有:
这条式子的分子处表示函数的增量,分母处表示$x$和领域的增量。在图中,我们可以类比,节点的领域就是图中和该节点相邻的节点,所以函数增量和领域距离都可以得到了,这样就可以求出关于节点的函数的梯度了,有下面的式子:
上面的式子是求从节点$a$到节点$b$这条边求梯度,$d_{a,b}$表示这条边的距离,一般我们用权重的倒数表示距离。得到了梯度,求散度就很容易了,将向外的边的梯度加上减去向内的边的梯度就可以得到散度了。对于函数$F$,图的邻接矩阵是$A$,将上面求散度的步骤压缩,最终可以得到这条式子:
上面式子中,$L$就是拉普拉斯矩阵,$\Delta F$是函数$F$在各个节点的散度。在无向图中,拉普拉斯矩阵的计算有下式:
其中$D$是对角矩阵,对角值是对应节点的边权重和。
应用
在求谱分解时,用到了拉普拉斯矩阵瑞丽熵的解;在图卷积神经网络中,通过类比拉普拉斯算子,傅里叶变换的基函数是拉普拉斯算子的特征函数,可以作为新的基底将变量从空间域转换到频域,在图中,将向量转换到拉普拉斯矩阵的特征向量作为基底的空间。