Paper Reading: LUNAR Unifying Local Outlier Detection Methods via Graph Neural Networks
Paper Reading 是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需要以原文的内容为准,博客中的图表若未另外说明则均来自原文。
| 论文概况 | 详细 |
|---|---|
| 标题 | 《LUNAR: Unifying Local Outlier Detection Methods via Graph Neural Networks》 |
| 作者 | AdamGoodge, Bryan Hooi, See-Kiong Ng, Wee Siong Ng |
| 发表会议 | The Thirty-Sixth AAAI Conference on Artificial Intelligence (AAAI-22) |
| 发表年份 | 2022 |
| 会议等级 | CCF-A |
| 论文代码 | https://github.com/agoodge/LUNAR |
作者单位:
- School of Computing, National University of Singapore
- Institute of Data Science, National University of Singapore
- Institute for Infocomm Research, A*STAR, Singapore
研究动机
在许多实际应用中,获取足够数量的、已知异常的标记数据非常困难,而无监督异常检测则无需依赖已知异常的标签,是一项极其重要且受到广泛关注的任务。许多经典的无监督异常检测方法(如 LOF、DBSCAN、KNN)通过度量一个数据点与其最近邻点的距离来识别异常,这类方法被称为局部异常方法。它们因原理直接、假设简单、输出可解释性强,且在非结构化的、基于特征的数据上表现出色,因此在实践中非常流行。实验表明,它们的性能与许多新近的深度学习方法相比仍然具有竞争力,但是还存在如下局限性:
- 缺乏可学习性:这些方法没有可训练参数,因此无法从特定的训练数据集中学习或优化,无法适应数据的具体特性。
- 对超参数敏感:对这些方法设置不同的超参数对性能有极大影响,在无监督设置下难以找到最优的超参数(如最近邻数量 k)。
基于上述背景,论文旨在解决传统局部异常检测方法的缺陷,核心问题可以概括为:如何将可学习性和自适应性引入到强大但固定的局部异常检测框架中,使其能够从数据中学习最优的异常评分机制,并降低对超参数(尤其是近邻数量 k)设置的敏感性,从而获得更优、更鲁棒的检测性能?
文章贡献
针对现有无监督异常检测算法中缺乏可学习性、对超参数敏感的不足,本文提出一种新颖的、基于 GNN 的方法 LUNAR,其核心是将经典的无监督局部异常检测(如 KNN、LOF)统一到一个可学习的图消息传递框架下。具体地,LUNAR 为任何特征数据构建 KNN 图,将节点间的距离作为输入,并使用一个可训练的神经网络来聚合一个节点与其所有 k 个邻居的距离信息。该方法相比固定的启发式规则,如取最大值或求平均,能更优地计算异常分数。为了解决无监督训练仅有正常数据的问题,LUNAR 通过均匀采样和子空间扰动混合生成负样本来提供监督信号,使模型能够学习区分正常与异常数据的决策边界。在多个数据集上的实验表明,LUNAR 不仅在检测准确性上超越了现有方法,而且其性能对超参数具有鲁棒性。
预备知识
局部异常方法
局部异常方法指直接利用一个点到其 k 个最近邻点的距离来判断其异常性的方法,其基本假设是:异常点位于数据空间的稀疏区域,远离由正常点组成的密集簇。KNN 是一种直观的方法,其异常分数定义为一个点 \(x_i\) 的异常分数就是它到其第 k 个最近邻的距离,距离越大则该点越有可能是异常点。
局部异常因子 LOF 也是一个经典方法,它通过比较一个点的局部密度与其邻居的局部密度来判断异常,异常点的局部密度应远低于其邻居。LOF 首先计算可达距离,从 \(x_i\) 到 \(x_j\) 的可达距离的定义如下,其中 \(k-\operatorname{dist}\left(x_j\right)\) 是 \(x_j\) 到其第 k 个最近邻的距离,该计算方式平滑了噪声影响。
接着计算局部可达密度,它定义为点 \(x_i\) 的局部可达密度是其到所有邻居的平均可达距离的倒数。其中 \(\mathcal{N}_i\) 是 \(x_i\) 的 k 个最近邻的集合,密度越低则区域越稀疏。
最后计算局部异常因子,最终分数是其邻居的平均局部可达密度与自身局部可达密度的比值。若 \(LOF \approx 1\),该点密度与邻居相近,可能为正常点;若 \(LOF \gg 1\),该点密度远低于邻居,为异常点。
图神经网络
GNN 在图 \(G(V, E)\) 上操作,图由节点集合 \(V\) 和边集合 \(E\) 组成。节点和边都可以拥有特征向量,分别记为 \(x_i\) 和 \(e_{j,i}\)。GNN 的核心是消息传递机制,它通过聚合邻居信息来迭代更新节点的表示,对节点分类任务非常有用。每一层 \(k\) 的计算遵循以下模式:
上述公式的符号定义如下:
| 符号 | 说明 |
|---|---|
| \(h_i^{(k)}\) | 节点 \(i\) 在第 \(k\) 层的隐藏表示,初始 \(h_i^{(0)}=x_i\)。 |
| \(\mathcal{N}_i\) | 节点 \(i\) 的邻居集合。 |
| 消息函数 \(\phi\) | 定义了从邻居节点 \(j\) 发送到目标节点 \(i\) 的信息,通常基于它们的特征和边特征。 |
| 聚合函数 \(\square\) | 将来自所有邻居的消息聚合成一个单一消息 \(h_{\mathcal{N}_i}^{(k)}\),例如通过取平均、求和或最大值。 |
| 更新函数 \(\gamma\) | 结合节点当前表示 \(h_i^{(k-1)}\) 和聚合的邻居消息 \(h_{\mathcal{N}_i}^{(k)}\),生成节点新的表示 \(h_i^{(k)}\)。 |
本文方法
问题定义
本文关注的是无监督异常检测问题,其目标是在没有已知异常标签的情况下仅利用正常样本进行训练,然后为测试样本计算一个异常分数。算法的输入为训练集样本和任意一个测试样本 \(x_{i}^{(\text{test})}\),运行后输出一个异常分数 \(s\left(x_{i}^{(\text{test})}\right)\),如果 \(x_{i}^{(\text{test})}\) 是正常(或异常)的。数据集的划分方式如下:
| 数据集划分 | 定义 |
|---|---|
| 训练集 | 包含 \(m\) 个正常样本,记为 \(x_{1}^{(\text{train})},\ldots, x_{m}^{(\text{train})} \in R^{d}\)。 |
| 测试集 | 包含 \(n\) 个测试样本,记为 \(x_{1}^{(\text{test})},\ldots, x_{n}^{(\text{test})} \in R^{d}\),这些样本可能是正常的也可能是异常的。 |
对于局部异常检测方法,其设计问题是:对于一个测试样本 \(x_{i}^{(\text{test})}\),应该如何利用它与最近邻点之间的距离来计算其异常分数?
统一框架
论文指出,传统的局部异常方法(如 KNN, LOF, DBSCAN)都可以被视为 GNN 消息传递框架的一个特例。在 GNN 中,节点通过聚合邻居的消息来更新自身状态;而在异常检测中,一个数据点通过聚合其最近邻点(邻居)的距离信息来计算自身的异常分数。因此,可以将每个数据样本视为一个图节点。对于一个目标节点 \(i\),将其与它的 \(k\) 个最近邻节点 \(j \in \mathcal{N}_i\) 用有向边 \((j, i)\) 连接,形成一个 \(k\)-NN 图,边的特征 \(e_{j,i}\) 就是两个节点间的距离。
论文以最简单的 KNN 方法为例,该方法和 GNN 消息传递框架的对应关系如下:
| 消息传递步骤 | KNN 的等价性 |
|---|---|
| 图定义 | 构建 \(k\)-NN 图,边特征为 \(e_{j,i} = \text{dist}(x_i, x_j)\)。 |
| 消息 | 每个邻居 \(j\) 传递给目标节点 \(i\) 的信息就是它们之间的距离:\(\phi^{(1)} := e_{j,i}\)。 |
| 聚合 | 节点 \(i\) 聚合来自所有邻居的信息,KNN 采用的是最大池化(取最大值):\(h_{\mathcal{N}_i}^{(1)} := \underset{j \in \mathcal{N}_i}{\text{ max}} \phi^{(1)}\)。 |
| 更新 | 节点 \(i\) 的异常分数就是聚合后的信息,即到其第 \(k\) 个最近邻(距离最远的那个邻居)的距离:\(\gamma^{(1)} := h_{\mathcal{N}_i}^{(1)}\)。 |
通过以上定义,KNN 的异常分数可表示为如下公式,它可以被认为是单层消息传递框架的一个特例。
\(KNN(i) = \underset{j \in \mathcal{N}_i}{\text{max}}(e_{j,i})\)。
多种局部方法都可以统一到消息传递框架下,如下表所示。其中 \(H(\cdot)\) 是单位阶跃函数,\(\epsilon\) 和 minPts 是 DBSCAN 的参数。LOF 的第一层计算局部可达密度,第二层比较密度得到最终分数。

可学习性的重要性
传统的局部异常方法缺少可训练参数,无法利用训练集的数据来优化模型,这导致其性能存在瓶颈并对超参数 \(k\)(最近邻数量)极其敏感。论文通过一个包含 4 个高斯分布和 15 个稀疏离群点的合成数据集展示了 LOF 的缺陷:
- LOF 在小 \(k\) 下的问题:由于只考虑很少的邻居,模型容易受到局部稀疏性的强烈影响。例如在远离任何集群的中心稀疏区域,LOF 错误地给出了低异常分数,因为该区域内仅有的一两个点被视为其邻居,导致局部密度估计不准确。
- LOF 在大 \(k\) 下的问题:当 \(k\) 大于某个小集群的样本数量时,LOF 无法识别出这个集群。它会认为这个集群内的点远离其邻居,从而错误地给出高异常分数。
与 LOF 相比,具备可学习能力的 LUNAR 在不同 \(k\) 值下都表现出更好、更鲁棒的性能:其预测的正常/异常区域能更贴合真实的训练数据分布,能更准确地将最高异常分数赋予那些真正稀疏的离群点。

这个实验表明,缺乏可学习性使得传统方法难以自动适应数据分布,也无法稳健地应对不同 \(k\) 值。它们依赖于预设的启发式规则,而无法从数据中学习到更优化的评分机制。
LUNAR 方法
关键设计
LUNAR 是基于前文所述的消息传递框架构建的一个单层图神经网络,其核心设计如下:
| 设计 | 操作 | 效果 |
|---|---|---|
| 图构建 | 对于一个基于特征(非图结构)的表格数据集,为每个数据样本创建一个节点。然后,为每个目标节点 \(i\) 建立与其 \(k\) 个最近邻(源节点 \(j\))之间的有向边 \((j, i)\),从而构建一个 \(k\)-NN 图 | 使得 LUNAR 能够处理通用的表格数据 |
| 输入 | 网络的输入是一个节点与其所有 \(k\) 个邻居之间的距离向量,而非原始的高维特征向量 | 使得模型更易于泛化 |
| 消息聚合 | 与使用固定聚合函数(如平均、最大值)的传统 GNN 不同,LUNAR 采用了一个可学习的消息聚合函数 | 使得模型能够从数据中自动学习如何最优地组合邻居的距离信息来计算异常分数 |
模型框架
首先进行最近邻图构建,对于数据样本 \(x_i\),定义其对应的目标节点为 \(i\)。对于其 \(k\) 个最近邻 \(\mathcal{N}_i\) 中的每一个样本 \(x_j\),创建一条从源节点 \(j\) 指向目标节点 \(i\) 的有向边 \((j, i)\)。边特征定义为两点间的欧氏距离:
在训练阶段,仅从训练集(假设均为正常样本)中寻找最近邻,确保了评估节点异常性时不受任何潜在异常点的影响。接着针对构建好的图,定义消息传递的具体函数。消息函数 \(\phi^{(1)}\) 用于从邻居 \(j\) 传递给目标节点 \(i\) 的信息,也就是它们之间的距离:
本文的聚合函数 \(\square^{(1)}\) 与固定聚合不同,它将所有 \(k\) 个邻居的消息(距离)拼接成一个 \(k\) 维向量:
然后,通过一个神经网络 \(\mathcal{F}\) 将这个距离向量映射为一个标量,该标量代表了节点 \(i\) 的异常性程度,其中 \(\Theta\) 是神经网络 \(\mathcal{F}\) 的权重。论文中 \(\mathcal{F}\) 由 4 个大小为 256 的全连接隐藏层(使用 tanh 激活函数)和一个输出层(使用 sigmoid 激活函数)构成。
节点的最终异常分数就是由神经网络学习得到的聚合结果,更新函数 \(\gamma^{(1)}\) 如下,该分数是介于 0(正常)和 1(异常)之间的值。
负样本生成
损失函数使用均方误差,训练网络为正常节点输出分数 0,为异常(负样本)节点输出分数 1。由于训练集全是正常样本,模型会倾向于对所有输入都输出 0 以达到“完美”训练精度。为了避免这个平凡解,需要生成负样本来提供监督信号。负样本生成策略如下:
- 均匀采样:从均匀分布 \(\mathcal{U}(-\varepsilon, 1+\varepsilon)^d\) 中采样,其中 \(\varepsilon=0.1\),训练数据被归一化到 \([0,1]\) 范围内。这类样本覆盖了整个数据边界,但可能离正常数据区域太远,过于“简单”。
- 子空间扰动:对随机选取的训练样本进行部分特征维度的扰动,生成更“困难”、更接近正常数据边界的负样本。其中 \(M\) 是一个 \(d\) 维二元掩码向量,每个元素以概率 \(p=0.3\) 取 1(表示扰动该维度),用于模拟局部异常。
计算效率
由于 LUNAR 的输入是 \(k\) 维的距离向量,而非原始高维特征,其训练速度通常比其他直接在特征上操作的深度学习方法更快。但是与所有基于最近邻的方法一样,LUNAR 在极高维空间(如图像)中会面临维数灾难问题,即距离度量会失去判别力,将此方法适配到更高维数据是未来的工作。
实验结果
数据集和实验设置
实验使用了 8 个公开表格数据集,涵盖了不同规模、维度和异常比例。详情如下表所示:

本文的评估方法设置如下:
| 评估设置 | 说明 |
|---|---|
| 无监督设置 | 训练集仅包含标记为“正常”的样本,所有标记的“异常”样本仅出现在测试集中。 |
| 评估指标 | 使用 AUC 来衡量性能,因为它不依赖于预设的异常分数阈值。 |
| 数据处理 | 为控制测试集中正常样本与异常样本的比例,随机对正常样本进行下采样以实现 1:1 的比率,剩余正常样本按 85:15 划分为训练集和验证集。 |
| 负样本 | 在训练和验证集中分别生成均匀采样和子空间扰动两种负样本,负样本与正常样本的比例为 1:1。 |
用于模型对比的 baseline 如下,在大多数实验中邻居数量 \(k\) 设为 100。LUNAR 的聚合网络 \(\mathcal{F}\) 由 4 个大小为 256 的全连接层(tanh 激活)组成,使用 MSE 损失和 Adam 优化器。
| 算法类型 | 对比模型 |
|---|---|
| 经典方法 | IFOREST, OC-SVM, LOF, KNN |
| 深度学习方法 | 自动编码器 (AE), 变分自动编码器 (VAE), DAGMM, SO-GAAL (GAN-based) |
| 深度特征提取 + KNN | DN2 (使用自动编码器提取特征,再在特征空间做 KNN) |
准确性
如下表所示,LUNAR 在 8 个数据集中的 7 个上取得了最佳 AUC 性能,仅在 SATELLITE 上略逊于 KNN。在多数数据集上,LUNAR 的领先优势具有统计显著性 (p < 0.01),可见 LUNAR 在准确性上超越了多种基线,验证了其引入可学习性的有效性。

鲁棒性
此处比较 LOF, KNN, DN2 和 LUNAR 在 \(k\) 从 2 到 200 变化时的性能,结果可见 LOF, KNN, DN2 的性能极度依赖于 \(k\) 的设置。例如在 HRSS 数据集上,当 \(k\) 从2增加到 200 时,它们的 AUC 分数下降了 24-26 个百分点。相比之下,LUNAR 的性能在不同 \(k\) 值下都非常稳定。例如在 HRSS 数据集上,\(k\) 在相同范围内变化时,LUNAR 的 AUC 仅下降约 3 个百分点。LUNAR 不仅性能更好,而且对关键超参数 \(k\) 的鲁棒性远超传统方法。

消融研究实验
论文比较了单独使用子空间扰动、均匀采样以及两者混合的策略,如下表所示。可见子空间扰动通常比均匀采样表现更好,因为它生成了更困难、更接近决策边界的负样本。混合策略在大多数情况下取得了最佳性能,因为它结合了两种策略的优势,均匀采样覆盖全局边界,子空间扰动细化局部边界。消融实验验证了 LUNAR 关键设计选择(如混合负样本生成、足够容量的聚合网络)的必要性和有效性。

优点和创新点
个人认为,本文有如下一些优点和创新点可供参考学习:
- 本文将 KNN、LOF、DBSCAN 等经典局部异常检测方法统一到 GNN 的消息传递框架下,为其建立了通用的理论基础。
- 提出了首个可学习的统一异常检测方法 LUNAR,通过神经网络替代传统固定聚合规则,使模型能从数据中自适应地学习最优的异常评分机制。

浙公网安备 33010602011771号