跳至主要内容

拉普拉斯算子详解:从微积分到机器学习

拉普拉斯算子是现代机器学习中最广泛使用的数学工具之一。它支撑着谱聚类、流形学习、图像边缘检测以及基于图的算法。
· 15分钟 阅读

使用 AI 探索

拉普拉斯算子出现在基于图的算法、图像处理流水线以及谱聚类中。因此,如果您在构建处理图、图像或高维数据的模型,拉普拉斯算子并不是可有可无的背景数学——它正是在幕后真正发挥作用的那个东西。

在本文中,我将从零开始讲解拉普拉斯算子:它背后的数学、几何直觉、图拉普拉斯及其矩阵形式,以及它如何用于真实的机器学习应用。

需要一份微分方程的实用入门吗?阅读我们最近的文章,从基础到机器学习中的实际应用,一步步掌握。

什么是拉普拉斯算子?

拉普拉斯算子是一个二阶微分算子。它告诉您函数在任意给定点的弯曲方式。

您有时会看到它被描述为梯度的散度。

这正是理解该算子实际作用的关键:

  • 梯度告诉您函数在哪个方向增长最快
  • 散度衡量该“流”是发散还是汇聚。

结合起来,拉普拉斯算子会告诉您某一点是局部峰值、局部谷值,还是介于两者之间的平坦区域。

通俗地说,拉普拉斯算子衡量某点处函数值与其邻域平均值的差异。若拉普拉斯为零,函数在局部是“平衡”的。为正表示该点低于其周围;为负表示高于其周围。

公式

在二维情况下,对于函数 f(x, y):

2D Laplacian formula

二维拉普拉斯公式

在三维情况下,对于函数 f(x, y, z):

3D Laplacian formula

三维拉普拉斯公式

这个模式在任意维数中都成立——沿每个坐标轴求二阶偏导数并相加。这使得拉普拉斯算子非常适合高维数据,这也正是它在机器学习中频繁出现的原因。

多变量微积分中的拉普拉斯公式

对于一个在机器学习中如此广泛出现的对象,拉普拉斯公式其实比您想象的更简洁。

在三维中,对于函数 f(x, y, z),它看起来就是这样:

3D Laplacian formula

三维拉普拉斯公式

就是这样。您在沿各个维度求二阶偏导数并相加。

每一项都在对应轴上提出同样的问题:函数是向上弯、向下弯,还是平的?把这些答案加起来,您会得到一个单一的数,描述该点处的整体曲率。

从三维到 n 维

该公式可推广到 n 维。对于具有 n 个输入维度的函数,这是通用公式:

Laplacian formula generalization

拉普拉斯公式的推广

这就是拉普拉斯算子在机器学习中表现良好的原因:您的数据往往处于数百甚至数千维空间中。该算子只是沿每个维度把曲率相加。

与优化的关联

如果您用过梯度下降,您已经在考虑一阶导数——往哪个方向“下坡”?拉普拉斯算子更进一步。

二阶导数告诉您这座“山丘”的形状。

某点处较大的正拉普拉斯意味着函数在各个方向都向上弯曲——您接近一个极小值。较大的负值意味着您接近一个极大值。接近零意味着表面在局部较平坦。

这些曲率信息对于二阶优化方法很重要,它们利用曲率采取比单纯梯度下降更明智的步长。拉普拉斯算子提供了一种将曲率汇总为单个标量的方式。

几何直觉:拉普拉斯算子在测量什么

某点处拉普拉斯算子的符号揭示了该点周围函数的形状。

  • 若 ∇²f > 0 于某点,函数在各方向向上弯曲。该点低于其周围。这体现为凸性。

  • 若 ∇²f < 0,函数向下弯曲。该点高于其周围。这体现为凹性。

  • 若 ∇²f = 0,函数在局部平坦。各方向上没有净曲率。

这就是您已熟悉的二阶导数判别法的多变量版本。在一维中,正的二阶导意味着局部极小,负的二阶导意味着局部极大。拉普拉斯算子通过在各轴上累加曲率,将这一思路推广到任意维数。

与海森矩阵的关系

海森矩阵刻画了完整的曲率信息。它是由所有二阶偏导数组成的矩阵,每个元素描述函数沿一对坐标轴的弯曲情况。

拉普拉斯算子是海森矩阵的迹——即其对角线元素之和。海森矩阵给出完整的曲率拆解,而拉普拉斯算子将其压缩为一个数。

这种取舍在机器学习中很重要。高维模型的完整海森矩阵计算代价高昂——具有 n 个参数的模型,其海森矩阵是 n × n 的。拉普拉斯算子提供了一种廉价的标量曲率摘要,计算快速。

为何这对机器学习很重要

训练模型时,您在“航行”于损失表面。平坦区域意味着学习缓慢。凸区域意味着优化器可能越界。拉普拉斯算子能让您快速判断所处情形。

基于图的方法使用拉普拉斯算子来衡量图节点上的取值随邻居的平滑变化。这正是将连续函数的曲率直觉直接扩展到离散结构上。

拉普拉斯算子与机器学习中的优化

梯度下降只使用一阶导数。

梯度告诉您该往哪个方向走,但并不告诉您该走多大步。在平坦而宽阔的“谷底”,陡峭的梯度也应配合大步长;但在陡峭“悬崖”边,类似的梯度却需要小步长。仅靠一阶导数无法区分这两种情况。

这就是二阶导数发挥作用的地方。

曲率与步长

曲率描述梯度自身变化的快慢。高曲率意味着损失表面弯折剧烈——参数空间中的小步长会引起梯度的大变化。低曲率意味着表面平缓,梯度变化缓慢。

如果忽略曲率而使用固定学习率,您就是在“猜”。学习率过大,会在高曲率区域越界;过小,则在平坦区域“爬行”。

二阶优化方法(如牛顿法)利用曲率自动设定步长。它们用曲率去缩放梯度:表面平坦处迈大步,表面陡峭处迈小步。

拉普拉斯算子扮演的角色

拉普拉斯算子是海森矩阵的迹——用一个标量概括某点的总曲率。它不像海森矩阵那样提供完整信息,但计算开销小,足以作为有用信号。

用日常语言概括,您需要记住的是:

  • 损失在某点的拉普拉斯为较大正值,意味着您接近局部极小——损失在各方向都向上弯曲
  • 为负值意味着您接近极大值
  • 接近零意味着处在平坦或鞍点区域——这正是梯度下降容易停滞的地方

稳定性与正则化

曲率也关系到训练稳定性。尖锐极小值(高曲率区域)通常泛化较差。收敛到尖锐极小值的模型对输入的微小变化更敏感。

一些正则化技术会直接惩罚曲率,推动优化朝更平坦的损失表面区域前进。拉普拉斯算子也常用于此,作为度量并约束模型预测在输入空间中变化剧烈程度的方式。

理解曲率有助于您明白为何优化器会停滞、为何学习率如此关键,以及为何某些极小值的泛化更好。

图拉普拉斯与拉普拉斯矩阵

到目前为止,拉普拉斯算子一直存在于连续函数的世界中。但当您的数据不是光滑表面,而是图(Graph)时会怎样?

这就是图拉普拉斯登场的地方。它将同样的核心思想——衡量某一点的取值与其邻居的差异——应用于节点与边。

公式

图拉普拉斯 L 定义为:

Graph Laplacian formula (simplified)

图拉普拉斯公式(简化)

两个矩阵,就是这样。我们来拆解各自含义。

邻接矩阵

邻接矩阵 A 编码哪些节点彼此相连。对于一个包含 n 个节点的图,A 是一个 n × n 的矩阵,当节点 i 与节点 j 之间存在一条边时有 A_ij = 1,否则为 0。

对于一个简单的无向三节点图:节点 1 连接到节点 2 和 3,但 2 与 3 彼此不连:

The adjacency matrix

邻接矩阵

度矩阵

度矩阵 D 是对角矩阵。每个对角元素 D_ii 表示节点 i 的度(与其相连的边的数量)。所有非对角元素为零。

对于同一个图,其公式为:

The degree matrix

度矩阵

节点 1 的度为 2(连接两个节点)。节点 2 和 3 的度各为 1。

合在一起

用 D 减去 A,即可得到 L:

Subtracting adjacency matrix from the degree matrix

度矩阵减去邻接矩阵

每个对角元素告诉您该节点有多少连接。每个非对角元素 L_ij 若节点 i 与节点 j 相连则为 -1,否则为 0。

如果您用赋予每个节点的取值向量去左乘 L,结果衡量每个节点的取值与其邻居取值的差异。这是此前“曲率”直觉的离散版本——只是应用在图上,而非连续表面。

特征值告诉您关于图的哪些信息

L 的威力来自其特征值与特征向量:

  • 最小特征值总为 0。对应的特征向量是常数向量——每个节点取值相同。这很合理:常值函数在图上没有“变化”。

  • 零特征值的个数等于图的连通分量数。如果您的图有三个彼此不连通的簇,L 就有三个零特征值。这是从矩阵直接读取图连通性的方式。

  • 较小的非零特征值对应的特征向量在图上变化缓慢——相近节点获得相似取值。较大的特征值对应的特征向量在相连节点之间快速振荡。

有趣的是:这一特征值谱正是“谱方法”名称的由来。

谱聚类与社区发现

谱聚类利用 L 的特征向量来寻找图结构数据中的簇。核心思想是:与较小特征值相关的特征向量会给密切相连的节点分配相似取值,而给松散相连的节点分配不同取值。

要找到 k 个簇,取 L 的 k 个最小非零特征值对应的特征向量,将它们按列堆叠成矩阵,然后对行运行 k-means。每一行代表一个节点,其在该低维空间中的位置反映了其图邻域。

这适用于社交网络的社区发现、文档聚类、图像分割,以及任何数据具有天然图结构的场景。紧密相连的两个节点会在特征向量空间中靠得很近;来自不同社区的两个节点则会相距较远。

图拉普拉斯将一个困难的组合优化问题——在图中找簇——转化为易于求解的线性代数问题。

谱聚类中的拉普拉斯算子

谱聚类让图拉普拉斯从有趣的数学走向实用的机器学习工具。

其核心思想是:与其直接对原始数据点聚类,不如在由 L 的特征向量定义的空间中进行聚类。该空间刻画了图结构,因此您可以看出哪些节点紧密相连、哪些连接松散、哪些属于不同社区。

特征向量如何定义簇

取 L 的 k 个最小非零特征值对应的特征向量。将它们按列堆叠成矩阵。该矩阵的每一行代表一个节点,现在它是 k 维空间中的一个点。

与较小特征值相关的特征向量在图上变化缓慢。密切相连的节点在这些特征向量上会得到相似取值——取值相似意味着行相似——行相似意味着它们在新空间中彼此接近。

未归一化与归一化的拉普拉斯

实践中您会看到两种图拉普拉斯。

未归一化的拉普拉斯是直接的 L = D - A。当各节点的度大致相近(即大多数节点拥有相似的连接数)时,它工作良好。

归一化的拉普拉斯会针对度不平衡进行调整。存在若干变体,但最常见的是:

Normalized Laplacian formula

归一化拉普拉斯公式

该形式按节点的度对其贡献进行重缩放。在现实世界图中——社交网络、网页图、引文网络——有些节点有上百个连接,而另一些只有一两个。若不归一化,高度节点会主导特征向量,聚类结果会受损。

除非您确信图的度分布较均匀,否则默认使用归一化拉普拉斯。

实践应用

利用图拉普拉斯进行谱聚类在众多机器学习任务中出现。示例如下:

  • 图像分割——像素作为节点,边权编码相似度,簇对应图像区域
  • 文档聚类——文档作为节点,边编码共享术语或引文
  • 社交网络分析——用户作为节点,边编码连接,簇揭示社区
  • 推荐系统——物品或用户构成图,谱方法发现行为相似的群组

只要您的数据具有天然的图结构,或您能基于两两相似性构建图,谱聚类就能以一种有原则的方式发现纯粹基于距离的方法容易错过的群组。

拉普拉斯算子在图像处理与计算机视觉中的应用

拉普拉斯算子是计算机视觉中最古老的工具之一,至今仍被广泛使用。

在图像处理中,像素强度就是函数。拉普拉斯算子衡量某像素的强度与其邻居的差异。强度变化缓慢处,拉普拉斯接近零;变化剧烈处——边缘——拉普拉斯会有强烈响应。

这正是拉普拉斯边缘检测的全部基础。

为何二阶导能找到边缘

一阶导数能找到强度正在变化的地方。二阶导数能找到这种变化本身的变化之处——换言之,找到变化率达到峰值后又回落的位置。

在边缘处,强度先上升后趋于平缓。一阶导数在上升段尖峰;二阶导数——也就是拉普拉斯——恰在该尖峰的峰顶穿过零。这些零交叉点标记了边缘的精确位置,使拉普拉斯在边缘定位上比像 Sobel 滤波这类一阶方法更精确。

离散拉普拉斯核

在实践中,图像是像素网格,而非连续函数。连续拉普拉斯通过一个卷积核进行近似——一块在图像上滑动的小矩阵。

标准的 3×3 离散拉普拉斯核如下:

3x3 离散拉普拉斯核

中心权重为 -4,四个直接相邻像素各为 +1。当您将该核应用于某像素时,本质上是在计算该像素强度与其四邻域平均值之间的差——这正是此前“该点与其周围相比如何”的离散版本。

实践注意事项

原始的拉普拉斯滤波对噪声敏感。单个噪声像素会产生陡峭的强度尖峰,拉普拉斯会将其标记为边缘。

标准做法是先用高斯模糊平滑图像,再应用拉普拉斯。这种组合称为高斯-拉普拉斯(LoG)。高斯抑制噪声,拉普拉斯定位真实边缘。

在深度学习中,卷积神经网络会从数据中自行学习边缘检测滤波器——而这些学习到的滤波器常与拉普拉斯核相似。从某种意义上说,使拉普拉斯在经典计算机视觉中有用的数学,正是神经网络会自行“再发现”的数学。

离散 vs. 连续的拉普拉斯算子

拉普拉斯算子是在不同语境中出现的三个相关概念。

弄清您所用的是哪个版本,能在您在微积分课本、数值代码与图机器学习论文之间切换时避免大量困惑。

连续拉普拉斯算子

连续拉普拉斯来自微积分。对于定义在连续空间上的光滑函数 f,它是二阶偏导之和:

连续拉普拉斯

该版本假设您的函数处处光滑且可微。它是理论基础——但真实数据从不连续。您无法在像素网格或测量表上计算精确导数。

离散拉普拉斯算子

当从连续函数转向采样数据时,导数会被有限差分取代——由邻近取值计算的近似。

对于在等距点上采样的一维函数,第 i 个点处的离散二阶导为:

The discrete Laplacian

离散拉普拉斯

您在比较第 i 个点与其两个邻点的取值。相同思路可扩展到二维网格(图像)、三维体数据等。图像处理部分的卷积核正是如此——对连续拉普拉斯的有限差分近似,应用于像素网格。

这种离散化使得拉普拉斯算子可以在数值方法与机器学习流水线中计算。每当您在代码中应用拉普拉斯滤波,实际上运行的是有限差分近似,而非精确的微积分算子。

图拉普拉斯算子

图拉普拉斯更进一步。此时不是具有均匀间隔的规则网格,而是由边以不同权重连接的任意节点集合。

这里没有“相邻像素”的概念——只有节点与其连接。图拉普拉斯 L = D - A 用邻接结构取代有限差分结构。核心问题相同:某节点的取值与其邻居相比如何?但“邻居”如今由图来定义,而非空间邻近性。

为何这在机器学习中重要

大多数机器学习数据并不生活在规则网格上。分子、社交网络、知识图谱与三维点云都具有不规则结构。您无法对它们应用标准的有限差分拉普拉斯。

图拉普拉斯通过邻接矩阵显式地刻画邻域结构,从而解决了这一问题。这就是为何图神经网络与谱方法可以将基于拉普拉斯的运算应用到没有天然坐标系的数据上。

示例演练:计算拉普拉斯

我们通过两个示例来具体说明——一个连续情形,一个基于图的情形。

示例 1:f(x, y) = x² + y² 的连续拉普拉斯

取函数 f(x, y) = x² + y²。这是一个简单的抛物面——向所有方向向上弯曲的“碗”。

要计算拉普拉斯,需要分别求各变量的二阶偏导。

先对 x 求:

Continuous Laplacian computation (1)

连续拉普拉斯计算(1)

再对 y 求:

Continuous Laplacian computation (2)

连续拉普拉斯计算(2)

最后将它们相加:

Continuous Laplacian computation (3)

连续拉普拉斯计算(3)

拉普拉斯在各处皆为常数 4。这很合理,因为抛物面的每一点曲率相同。正值表明函数在各个方向向上弯曲,与“碗”形状一致。

示例 2:小型图的图拉普拉斯

取一个包含 4 个节点的图,其边如下:

  • 节点 1 连接节点 2 和 3
  • 节点 2 连接节点 1 和 4
  • 节点 3 连接节点 1
  • 节点 4 连接节点 2

邻接矩阵 A 编码这些连接:

Graph Laplacian computation (1)

图拉普拉斯计算(1)

度矩阵 D 将每个节点的连接数放在对角线上:

Graph Laplacian computation (2)

图拉普拉斯计算(2)

节点 1 与 2 的连接数各为 2。节点 3 与 4 各为 1。

最后相减得到 L = D - A:

Graph Laplacian computation (3)

图拉普拉斯计算(3)

该矩阵的解读方式如下:第 1 行表示:节点 1 的度为 2,且与节点 2 和 3 相连(-1 的条目)。第 3 行表示:节点 3 的度为 1,只与节点 1 相连。零元素表示对应节点对之间没有边。

您也可以用 Python 计算以进行验证:

import numpy as np

A = np.array([
    [0, 1, 1, 0],
    [1, 0, 0, 1],
    [1, 0, 0, 0],
    [0, 1, 0, 0]
])

D = np.diag(A.sum(axis=1))
L = D - A

print(L)

用 Python 计算图拉普拉斯

常见混淆点

拉普拉斯算子与其他几个概念相似,而仅从名称并不总能看出差别。本节我将力求消除所有疑点。

拉普拉斯算子 vs. 梯度

梯度 ∇f 是一个向量。它指向增长最快的方向,其模长表示函数上升的快慢。它基于一阶导数。

拉普拉斯算子 ∇²f 是一个标量。它不告诉您应该往哪个方向移动——而是告诉您某点处函数的形状。它由二阶导数组成。

拉普拉斯算子 vs. 海森矩阵

这一点最容易让人困惑。

海森矩阵 H 是由所有二阶偏导数组成的矩阵。对于具有 n 个输入的函数,它是一个 n × n 矩阵,刻画梯度沿每一对坐标轴如何变化。它提供完整的曲率信息。

拉普拉斯算子是海森矩阵的迹——对角线元素之和。您会失去非对角线上的曲率信息,但得到一个计算更快的标量。

当您需要完整的曲率拆解时使用海森矩阵;当一个标量摘要已足够时使用拉普拉斯算子。

图拉普拉斯 vs. 微分算子

两者共享名称与核心直觉,但作用对象完全不同。

微分拉普拉斯作用于光滑的连续函数。它需要导数,这意味着假设您的函数处处可微。

图拉普拉斯 L = D - A 作用于图——具有节点与边的离散结构。不涉及导数。它通过矩阵运算衡量每个节点的取值与其邻居的差异。

两者的联系在于概念而非计算。它们都衡量对邻域平均的局部偏离,但彼此完全不同。

符号约定

有些领域将拉普拉斯带上负号定义:-∇²f。您会在物理学以及一些关于图神经网络的论文中见到这种写法。负的拉普拉斯 −L 是半正定的,这在某些优化问题中性质更好,也使特征值分析更简洁。

当您阅读论文并看到拉普拉斯的特征值全为非负时,请检查他们用的是 L 还是 -L。数学上二者等价,但混用约定可能导致错误结果。

为何拉普拉斯算子对数据科学重要

至此,您已经看到拉普拉斯算子横跨微积分、图论、图像处理与优化。同一个算子在不同语境中解决同一类基本问题:衡量某一点的取值与其周围的关系。

在数据科学中,它体现在以下方面:

  • 基于图的机器学习: 图拉普拉斯 L = D - A 是谱方法的基础。只要您的数据有天然图结构,拉普拉斯就会给出一 个可进行线性代数运算的矩阵来编码完整的连通模式

  • 聚类: 谱聚类使用 L 的特征向量来发现纯距离方法容易错过的分组。当簇不是凸集或线性可分时,它尤为有效

  • 半监督学习: 许多半监督方法用图拉普拉斯将标签从已标注节点传播到未标注节点。假设是相连节点很可能具有相同标签,而拉普拉斯量化了标签在图上应当如何平滑变化

  • 流形学习: 如 Laplacian Eigenmaps 等算法使用图拉普拉斯为高维数据寻找低维表示。L 的特征向量会将原空间中相近的点映射为降维空间中相近的点

  • 图像特征提取: 离散拉普拉斯可检测边缘与强度快速变化区域。这些特征直接进入经典视觉流水线,也可作为深度学习架构中的先验

总之,拉普拉斯算子是少数能从一条微积分公式一路扩展到大型图神经网络的数学工具之一。

结语

拉普拉斯算子起初是一个微积分算子,用来衡量连续函数的曲率。等到了基于图的机器学习中,它变成了一整个网络结构的编码矩阵。核心思想完全相同,只是呈现形式不同。

报名参加我们的Linear Algebra for Data Science in R 课程,亲手实践本文涉及的诸多概念与主题。

Dario Radečić

作者

Dario Radečić

常驻克罗地亚的高级数据科学家。顶级科技写作者,已发表 700 多篇文章,累计获得超过 1,000 万次阅读。著有《使用 TPOT 实现机器学习自动化》。

FAQs

用通俗的话说,什么是拉普拉斯算子?

拉普拉斯算子是一个数学算子,用来衡量某点处函数值与其邻域平均值的比较关系。若拉普拉斯为正,说明该点低于其周围;若为负,说明该点高于其周围。它用一个数概括了函数在局部的曲率。

拉普拉斯算子与梯度有何区别?

梯度是一个向量,指向增长最快的方向——它告诉您应该往哪儿走。拉普拉斯是一个标量,告诉您某点处函数的形状,而不是方向。两者都由导数构成,但回答的是完全不同的问题。

拉普拉斯算子在机器学习中用于哪里?

拉普拉斯算子广泛用于各种机器学习任务——谱聚类、半监督学习、流形学习以及图像边缘检测都以某种形式依赖它。在基于图的方法中,图拉普拉斯矩阵编码了网络结构,并驱动 Laplacian Eigenmaps 和图神经网络等算法。它是少数能从单个方程扩展到大型、真实机器学习系统的数学工具之一。

什么是图拉普拉斯?如何计算?

图拉普拉斯是一个矩阵,定义为 L = D - A,其中 D 为度矩阵,A 为图的邻接矩阵。每个对角元素是节点的连接数,每个非对角元素在两节点相连时为 -1,不相连时为 0。该矩阵的特征值与特征向量揭示图的聚类结构,这正是谱聚类方法所利用的。

归一化与未归一化的图拉普拉斯有什么区别?

未归一化的拉普拉斯 L = D - A 适用于图中各节点的连接数大致相近的情形。归一化拉普拉斯通过重缩放每个节点的贡献来纠正度的不平衡——这在社交网络等现实图中很重要,因为有些节点有上百个连接,而另一些只有一两个。若不做归一化,高度节点会主导特征向量,聚类效果会受影响,因此在大多数实际应用中,归一化版本更稳妥。

主题