翻译原文:https://arxiv.org/abs/2405.10350
Monitizer: 自动化设计与评估神经网络监控器
穆克西特·阿泽姆1, 玛塔·格罗贝尔纳1, 苏迪普·卡纳夫2, 扬·克列特因斯基2,1,
斯特法妮·莫尔1, 萨宾·里德1,2,3
1 慕尼黑工业大学,德国慕尼黑
2 马萨里克大学,捷克布尔诺
3 奥迪股份公司,德国因戈尔施塔特
摘要
神经网络(NN)在以前未见过的数据类型(分布外数据或OOD)上的行为通常是不可预测的。如果网络的输出用于决策安全关键系统, 这可能是危险的。因此,检测输入是否为OOD对于NN的安全应用至关重要。验证方法无法扩展到实际的NN,使得运行时监控在实际使用中更具吸引力。尽管最近提出了各种监控器,但对特定问题的优化以及彼此之间的比较和结果重现仍然具有挑战性。
我们为NN监控器的用户和开发人员提供了一种工具。它允许(i)将文献中的各种类型监控器应用于给定的输入NN,(ii)优化监控器的超参数,以及(iii)进行实验评估并与其他方法进行比较。此外,它还促进了新监控方法的开发。我们在不同类型用户的多个使用案例以及一个比较最近文献中不同方法的案例研究中展示了该工具的可用性。
1 引言
神经网络(NN)由于其在复杂问题上的良好性能,越来越多地用于安全关键应用。然而,它们的声名狼藉的不可靠性使得其安全保障更为重要。特别是,即使NN在给定的数据上经过良好训练,并且在类似的数据(所谓的分布内数据(ID数据))上表现良好,但在遇到显著不同的输入(所谓的分布外数据(OOD数据))时,它会做什么仍然不明确。例如,如果在内华达州拍摄的交通标志识别NN现在遇到雨天的交通标志、欧洲的交通标志或带有大象广告牌的情况,该怎么办?
为了在所有情况下确保安全,我们至少必须识别输入是OOD;因此,不管网络的置信度如何,其答案是不可靠的。验证,这种经典的安全证明方法,成本极高,且基本上不适用于实际的NN【38】。此外,它主要用于ID或相关数据【6, 38】。例如,通常会在重要点的邻域内证明鲁棒性,这可能确保在有噪声或雨天情况下的正确行为,但对于大象就不行了【22, 28, 29, 39】。相比之下,运行时验证和特别是运行时监控提供了一种廉价的替代方案。此外,工业界也对其表示兴趣,因为这是目前唯一适用于工业级NN的形式方法。
OOD运行时监控方法最近开始蓬勃发展【7, 17, 24, 26, 36, 47】。这种运行时监控器试图检测当前输入的NN是否为OOD。为此,它通常监控网络的行为(例如,输出概率或神经元的激活值),并评估获得的值是否类似于在已知ID数据上观察到的值。如果不是,监控器会发出警报,以传达对OOD数据的怀疑。
挑战:尽管这种方法展示了潜力,但出现了几个实际问题:
-
我们如何比较两个监控器并确定哪个更好?考虑自动驾驶的例子,OOD输入可能来自传感器引入的一些噪声或环境亮度被扰动。一个监控器可能在某种类的OOD输入上表现良好,但在另一种类上可能不佳【50】,因为在一种OOD数据类中的更好表现并不意味着在另一种类中也是如此(见图1a)。
-
将特定监控技术应用于具体的NN涉及大量调整和超参数调优,目前没有现成的技术可用。OOD监控器通常根据输入和NN的行为计算一个值。如果该值小于可配置的阈值τ(见图1b),则认为输入为OOD。这个阈值的值对监控器的性能有重大影响。如果阈值高,更多的输入会被分类为OOD,反之亦然。此外,OOD监控器通常有多个参数需要调优,从而增加了手动配置的复杂性。
-
由于OOD监控目前可以描述为寻找一个好的启发式方法,更多的启发式方法将会出现,因此需要简化它们的处理和公平比较。
在本文中,我们为旨在检测OOD输入的NN监控器的用户和开发人员提供了基础设施(以下简称“监控器”)。
我们的贡献可以总结如下:
-
我们提供了一种称为Monitizer的模块化工具,用于自动学习/构建、优化和评估监控器。
-
Monitizer支持(i)轻松实用,提供了文献中的各种最近监控器,可直接优化并应用于用户给定的网络和数据集,而无需其他输入;按键式解决方案提供了最佳可用监控器的自动选择,而无需用户具备任何知识;(ii)高级开发使用,能够轻松集成新监控器或新评估技术。框架还预见并允许集成监控其他属性而不仅仅是OOD。
-
我们提供了一个包含19个科学文献中知名监控器的库,伴随9个数据集和15个NN,可用于在各种OOD类别上的轻松但丰富的自动评估和比较监控器。
-
我们通过示例和一个比较一些最近监控方法的案例研究展示了功能。
总之,我们为用户提供了自动创建监控器、开发新方法及其与类似方法比较的基础设施。
2 相关工作
NN监控框架。OpenOOD【53, 54】包含用于OOD检测的特定任务基准,包含一个ID和多个特定任务的OOD数据集(例如,开放集识别和异常检测)。OpenOOD和Monitizer都包含几种不同的监控器和基准。Monitizer提供了为给定目标调优监控器的功能,支持通过自动提供生成的OOD输入(例如,添加噪声)对特定ID数据集上的监控器进行综合评估,并且可以轻松扩展更多数据集。相比之下,OpenOOD不支持超参数调优和生成OOD输入。
Samuels等人提出了一个在运行时优化OOD监控器的框架【30】。虽然包含了优化,但该框架特定于一个监控器,并基于主动学习。Monitizer旨在在离线环境中工作,并在部署前优化监控器。此外,Monitizer构建于可扩展性和可重用性上,而其他工具不是,例如,它缺少可执行文件。
PyTorch-OOD【31】是一个用于OOD检测的库,但尽管其名称,它不是官方PyTorch库的一部分。它包括几个监控器、数据集,并支持集成监控器的评估。Monitizer和PyTorch-OOD都提供了监控器和数据集库。然而,存在显著差异。Monitizer支持监控器的优化,使我们能够返回针对选择目标的最佳监控器,提供了更结构化的数据集视图,并提供透明且详细的评估,显示监控器在不同OOD类上的表现。此外,我们提供了一键式解决方案,可以轻松评估整个监控器集并自动返回针对案例精细调优的最佳可用选项。因此,Monitizer是一种更易于使用和扩展的工具。最后但同样重要的是,它是一种替代实现,可以交叉检查结果,从而使监控更可靠。
OOD基准测试。已经发布了各种用于OOD基准测试的数据集【19, 20, 23, 41, 42】。Breitenstein等人提出了一种针对自动驾驶中不同类型OOD数据的分类【5】,Ferreira等人提出了一个具有多个不同类别的OOD基准集【11】。
3 Monitizer
Monitizer旨在通过支持监控器的优化和透明评估,帮助NN监控器的开发人员和用户及新监控技术的开发人员。它将OOD数据结构化为类的层次结构,并且监控器可以针对这些类的任何(组合)进行调优。它还提供了一键式解决方案,可以评估一组监控器并返回针对给定需求优化的最佳可用选项。
3.1 概述
Monitizer提供了两个主要构建模块,如图2所示:NN监控器的优化和评估。NN监控器通常是参数化的,通常依赖于NN和数据集。在评估它们之前,需要配置并可能调优它们。我们将未配置的监控器称为监控器模板。Monitizer优化监控器模板,并随后在几种不同的OOD类(即,OOD数据类型)上对其进行评估。
Monitizer至少需要两个输入(见图2):一个NN和一个ID数据集。用户还可以提供一个监控器模板和一个优化配置(包括优化目标和优化方法)。如果未提供这些内容,Monitizer将恢复为默认值(即,使用AUROC分数在没有优化的情况下评估所有监控器)。对于这两个输入,用户可以从我们提供的选项中选择或提供自定义实现。
Monitizer基于给定ID数据集上的优化目标和方法优化所提供的监控器。优化的一个例子是:最大化对模糊图像的检测准确率,但在ID图像上的准确率至少保持在70%。优化对于获得可用的监控器是必要的。然而,可以使用AUROC分数(接收器操作特性曲线下面积)评估具有参数默认值的监控器模板。
成功执行后,Monitizer向用户提供监控器模板的配置和评估结果。这可以是每个OOD数据集的OOD检测准确率表格及其对应的平行坐标图(在优化情况下)或AUROC分数。
3.2 使用案例
我们设想Monitizer有三种不同类型的用户:
-
终端用户
- 背景:终端用户,例如航空业的工程师,对最终产品感兴趣,而不是底层监控技术的细节。她打算评估Monitizer提供的一个或所有监控器以用于她的自定义NN和数据集,并希望得出使用哪个监控器的结论。她有一个需要监控的NN。此外,她还有自己的专有ID数据集,例如,她的NN是在此数据集上训练的。她希望一个满足某些要求的监控器,例如平均在所有类上最优的监控器或能够检测她的NN无法正常处理的特定类型的OOD监控器。
- 使用:这样的用户可以使用Monitizer轻松获得满足她需求的监控器。Monitizer支持开箱即用的功能。它提供了文献中的各种监控器(目前为19个),可以针对给定网络进行优化。如果她想使用自定义NN或数据集,她需要提供NN作为PyTorch-dump或onnx格式,并添加一些代码行以实现加载她数据的接口。
- 所需努力:提供自定义数据集的接口后,用户只需触发执行。执行时间取决于硬件质量、NN的大小、所选监控器的复杂性和数据集的大小。
-
监控器开发者
- 背景:监控技术的开发人员,例如从事NN运行时验证的研究人员,旨在创建新颖的技术并评估它们相对于现有方法的性能。
- 使用:这样的用户可以将他们的新监控器插入Monitizer并进行评估。Monitizer直接提供了学术评估中最常用的NN和数据集。
- 所需努力:监控器的代码需要用Python编写,并实现Monitizer中监控器接口中指定的功能。之后,她可以触发她的监控技术的评估。
-
学者
- 背景:监控方面的专家,例如在NN运行时验证方面经验丰富的研究人员,打算超越当前边界进行探索。她可能想要将NN监控器适应于OOD以外的属性,或尝试使用自定义NN或数据集进行实验。
- 使用:Monitizer提供接口和说明,解释如何集成新的NN、数据集、监控器、自定义优化方法和目标。
- 所需努力:集成所需的努力取决于具体使用案例的复杂性。例如,添加NN所需的时间比开发新的监控器要少得多。
更多详细示例请参见附录D。
3.3 Monitizer的阶段
Monitizer的执行通常包括三个阶段:解析、优化和评估。如前所述,用户可以决定跳过优化或评估。
解析。该阶段解析输入,加载NN和数据集,并实例化监控器。它还对输入执行合理性检查,例如,确保文件系统中存在数据集,提供的监控器正确实现等。
优化。该阶段调整给定监控器模板的参数以最大化目标。它依赖于两个输入,优化方法和优化目标,用户必须提供。
评估。Monitizer中的NN监控器评估根据OOD分类结构化。我们引入了这种OOD数据分类,以便更清晰的评估,并了解哪个监控器在特定OOD类上的表现良好。通常,没有任何监控器能在所有OOD类上表现良好【50】。我们在评估中强调这一点,以确保监控器之间的公平和有意义的比较,而不仅仅局限于不透明且可能有偏差的平均分数。
评估后,Monitizer报告每个OOD类的检测准确率,还可以生成显示报告准确率的平行坐标图。Monitizer还可以提供评估质量的置信区间,具体说明见附录C。
3.4 分布外数据的分类
我们现在介绍我们的OOD数据分类。在顶层,OOD输入可以是生成的,即通过扭曲ID数据获得的【3, 17, 21, 35, 46】,也可以是使用一些其他可用数据集收集的。
3.5 监控器、NN和数据集库
Monitizer目前包括19个监控器,伴随9个数据集和15个NN。在以下内容中,我们将概述可用选项。
监控器。Monitizer提供了不同高度引用的监控器,这些监控器也包含在其他工具如OpenOOD/Pytorch-OOD中。我们通过添加来自形式方法社区的监控器(例如Box监控器、Gaussian监控器)扩展了这个列表。Monitizer中提供的监控器有:ASH-B、ASH-P、ASH-S【10】、Box监控器【24】、DICE【47】、Energy【36】、Entropy【37】、Gaussian【16】、GradNorm【27】、KL Matching【19】、KNN【48】、MaxLogit【56】、MDS【34】、Softmax【21】、ODIN【35】、ReAct【46】、Mahalanobis【43】、SHE【55】、Temperature【15】、VIM【51】。
数据集。Monitizer中提供的数据集有:CIFAR-10、CIFAR-100【32】、DTD【8】、FashionMNIST【52】、GTSRB【25】、ImageNet【44】、K-MNIST【9】、MNIST【33】、SVHN【40】。
神经网络。Monitizer为每个可用数据集提供至少一个预训练的NN。库中包含更多在学术界常用数据集(如MNIST和CIFAR-10)上训练的NN,允许用户在不同架构上评估监控器。附录E包含预训练NN的详细描述。
4 案例研究的评估摘要
我们通过表1展示了清晰评估的必要性。表3中包含所有可用OOD数据集的完整表。我们在GPU上对MNIST数据集上训练的网络评估了可用的监控器,并显示了AUROC分数。在切换CPU和GPU时,MDS和Mahalanobis的值可能会有所不同;详细信息请参见附录H。Box监控器【24】未包含,因为它没有单一阈值,因此无法计算AUROC分数。表格显示了在检测高斯噪声、对比度增加、颜色反转、旋转和新的但相似的数据集(KMNIST)时监控器的排名。较深的颜色表示更好的排名。可以看出,监控器之间几乎没有共同的行为。例如,尽管GradNorm在高斯噪声上表现最佳,但在反转图像上表现最差。
这也表明用户必须明确她的监控器目标。并非每个监控器都能在检测特定类型的OOD时表现出色,她必须仔细选择适合其设置的监控器。Monitizer简化了这一任务。此外,它强调了在科学出版物中清晰评估新监控方法的必要性。
我们通过以下四个监控器展示Monitizer的更多功能:Energy【36】、ODIN【35】、Box【24】和Gaussian【16】。前两个由机器学习社区提出,后两个由形式方法社区提出。
Monitizer生成的表格和图(如图5所示)帮助用户了解监控器选择、目标和数据集对监控器有效性的影响。Monitizer允许用户尝试不同的选择,并选择适合其需求的选择。图5显示了使用MNIST数据集作为ID数据进行评估,并通过优化目标检测完全未知的CIFAR-10数据集图像的评估。优化是随机进行的。这导致Gaussian监控器仅正确分类约70%的ID数据,而其他监控器在ID数据上的准确性更高。因此,在检测OOD数据时,其他监控器的表现比Gaussian监控器差,因为在ID和OOD数据上的良好性能之间存在权衡。这强调了为每个监控器进行适当优化的必要性。有关详细评估,请参见附录F,我们报告了不同监控器、优化目标和数据集的实验结果。
5 结论
Monitizer是一个自动化设计和评估NN监控器的工具。它支持新监控技术的开发人员、现有监控器的潜在用户以及试图改进现有技术的研究人员。特别是,它针对用户指定的目标优化监控器,并彻底评估它。
Monitizer提供了19个监控器库,伴随9个数据集和15个NN(每个数据集至少一个),以及三种优化方法(随机搜索、网格搜索和梯度下降)。此外,所有这些输入都可以通过几行Python代码轻松定制,允许用户提供他们的监控器、数据集和网络。框架是可扩展的,用户可以实现自定义优化方法和目标。
Monitizer是一个开源工具,提供了一个用于新监控器的免费平台,并简化了它们的评估。它在https://gitlab.com/live-lab/software/monitizer上公开可用。
数据可用性声明。包含我们所有结果的再现包在Zenodo上可用【2】。
附录
附录的结构如下:
- 在附录A中,我们更详细地解释了不同的OOD类别。
- 在附录B中,我们提供了关于MONITIZER优化步骤的额外信息。
- 在附录C中,我们解释了如何为计算值生成置信区间。
- 附录D提供了每个用例的具体示例,以展示相应用户如何使用MONITIZER。
- 附录E展示了我们用于实验并由MONITIZER提供的网络信息。
- 附录F包含更详细的评估。
A. OOD类别的描述
在本节中,我们描述了我们识别的不同OOD类别。我们在图6中提供了这些类别的示例。
-
(a) 是来自CIFAR-10的ID数据。
-
(b)-(m) 是不同OOD类别的示例,其中(m) 是来自GTSRB的不应被视为OOD的图像。
-
(b) 光照(增加)
-
© 对比度(增加)
-
(d) 高斯模糊
-
(e) 颜色反转
-
(f) 旋转
-
(g) 高斯噪声
-
(h) 盐和胡椒噪声
-
(i) FGSM
-
(j) 来自CIFAR-100的未见过的对象
-
(k) 来自DTD的新世界
-
(l) 来自GTSRB的新世界
扰动 (Perturbation)
该类别包含由于拍摄图像时的设置或环境条件变化引起的OOD数据。例如,模糊、对比度、光照、反转或旋转等。我们通过采用标准的图像变换生成这些数据。
噪声 (Noise)
实际上,传感器输入可能会被噪声污染。我们当前的分类考虑了两种噪声类型:高斯噪声和盐椒噪声。该框架允许用户设置在ID数据中引入噪声的参数。
错误预测 (Wrong Prediction)
根据[14]的建议,监视器还应该能够检测神经网络的错误预测,特别是对抗样本[49]。该类别包含使用对抗攻击(在我们的例子中为FGSM[13])从ID数据集改变的图像。对抗样本是根据预定义的网络计算的。然而,我们知道有研究专注于检测不同于通常监视方法的对抗样本。
未见对象 (Unseen Object)
这种失真类别对应于训练时未考虑的对象。这意味着网络未被训练以检测这类对象,即使新对象在环境和形状上与已知对象相似。例如,K-MNIST数据集[9](图4d),包含日文字母而非数字,可以被视为MNIST[33](图4c)的类似但未知OOD数据。另一个例子是将CIFAR-100作为CIFAR-10的OOD数据集。然而,需要注意不要将重叠类别视为OOD。
未见环境 (Unseen Environment)
这种失真类别对应于网络已知的对象或类型,但环境略有变化。例如,考虑MNIST作为ID数据,包含真实世界中房屋号码的SVHN数据集[40]将代表可能的OOD数据集。这些图像以类似于网络已知的方式缩放,但嵌入在不同的环境中。一个实际例子是自动驾驶,其中由于不同的天气条件,驾驶过程中拍摄的图像可能会失真。
新世界 (New World)
这种失真类别对应于网络训练时完全不同的数据。例如,对于训练在MNIST上的网络,这可能是CIFAR-10[32]中的图像。该类别需要特别小心以确保OOD数据确实不同。这可能意味着比较网络与OOD输入的预测,因为某些相似信息可能隐藏在OOD输入中。图6m中展示了一个例子。训练在CIFAR-10[32]上的网络可能仍然会预测卡车,这样是正确的。当在New World类型的数据集上报告监视器的性能时,我们不应该考虑这种情况。
B. 优化
C. 置信区间
在MONITIZER中对监视器的评估是在一组输入上进行的。由于此集合的大小会影响计算值的可靠性,MONITIZER允许计算置信区间:
[ \hat{p} \pm Z \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} ]
其中,(\hat{p})是预测率(即,真阳性、真阴性、假阳性、假阴性),Z是95%的Z值,n是评估数据集的大小。
对于AUROC置信度的计算,我们使用了一种公开可用的实现。
D. 用例示例
在主体部分,我们提到了MONITIZER的三种典型用户。在以下部分中,我们为这些用户提供示例。
D.1 最终用户场景
假设Alice是一名航空业的工程师,正在开发一个自动无人机。她的同事训练了一个感知神经网络,能够检测空中的障碍物。他们还告诉她,雷达(无人机最重要的传感器)在恶劣天气条件下可能会输出噪声数据。
目标: Alice需要为这个网络和雷达输入建立一个监视器,以便监视器能够检测噪声数据。
需要的工作: Alice需要为她的数据集实现一个加载机制。之后,她可以简单地指示MONITIZER使用自定义数据集并评估所有现有的监视器,以找到最好的一个。由于她不关心监视器的一般性能,而是关心其检测噪声数据的能力,她可以使用MONITIZER的优化来返回最佳监视器,用于检测噪声图像(在不将超过80%的好图像标记为噪声的约束下)。
D.2 监视器开发者场景
假设Bob是一名大学的研究员,他有一个关于新监视方法的酷想法。他已经实现并尝试测试了这个想法,但需要训练许多神经网络并希望有一个更简单的解决方案来测试和比较他的想法。
目标: Bob希望评估他的监视方法在不同数据集上的表现,并将其与其他方法进行比较。
需要的工作: 他需要为他的监视方法实现接口。然后,他可以直接将其输入MONITIZER,并在现有的数据集和网络上进行评估。
D.3 学者场景
假设Catherine是一名经验丰富的研究员,想探索完全新的监视方法。她希望创建一个监视器,以检测神经网络是否正确检测到视频中的对象移动。她已经有一个网络,应该跟踪视频中的对象。
目标: 她希望有一个监视器在网络丢失对象跟踪时进行检测。
需要的工作: Catherine需要实现她自己的目标函数以定义监视器的目标。此外,她需要更改她的网络和视频数据,使其只能在视频中的有限帧上使用。这可以通过,例如,拥有两次网络来完成。每个副本获取视频的一帧并检测某个对象。
然后,她可以使用MONITIZER的框架来尝试不同的监视器以实现她的目标。
E. 网络
网络
我们展示了MONITIZER库中提供的神经网络架构。请注意,我们在描述中省略了最后一层,因为它取决于数据集中的类别数量。
MNIST
- MNIST3x100:由3层每层100个神经元和ReLU激活函数组成
- MNIST-conv:由两个卷积层组成,每个卷积层后跟一个最大池化层和ReLU激活函数,最后是一层全连接层。具体来说,它是Conv(channel=16, kernel=5x5)-MaxPool(2)-Conv(channel=32, kernel=5x5)-MaxPool(2)-FullyConnected(100)
CIFAR-10
- CIFAR-10-VGG11:来自[45]
- CIFAR-10-conv:由三个卷积层组成,每个卷积层结合批量归一化和最大池化。具体来说,它是Conv(channel=8, kernel=5)-BatchNorm(8)-ReLU-MaxPool(kernel=2, stride=2)-Conv(channel=24, kernel=3)-BatchNorm(24)-ReLU-MaxPool(kernel=2, stride=2)-Conv(channel=48, kernel=1)-BatchNorm(48)-ReLU-MaxPool(kernel=2, stride=2)-FullyConnected(120)-ReLU-FullyConnected(84)
GTSRB, DTD, SVHN, CIFAR-100, K-MNIST, FashionMNIST
- 网络结构:Conv(channel=100, kernel=5)-ELU(alpha=1)-MaxPool(kernel=2, stride=2)-BatchNorm(100)-Conv(channel=150, kernel=3)-ELU(alpha=1)-MaxPool(kernel=2, stride=2)-BatchNorm(150)-Conv(channel=250, kernel=1)-ELU(alpha=1)-MaxPool(kernel=2, stride=2)-BatchNorm(250)-FullyConnected(350)-ELU(alpha=1)-BatchNorm(350)
ImageNet
MONITIZER包含一个存储的ResNet50[18]。用户可以从PyTorch库中下载其他网络。
F. 评估结果
该部分内容详细解释了Monitizer使用四种监视器的能力:Energy [36],ODIN [35],Out-of-the-Box [24]和Gaussian [16]。前两种是由机器学习社区提出的,后两种是由形式化方法社区提出的。
F.1 评估选定的监视器
我们展示了所选监视器在OOD(Out-of-Distribution)类上的有效性,以及选择目标对这些结果的影响。
监视器选择的影响。Monitizer能够透明地评估监视器在所有OOD类上的表现。论文主要部分中的图5显示了在保持ID(In-Distribution)数据70%准确率的同时,优化以检测CIFAR-10为OOD的监视器在每个OOD类上的表现。这些监视器使用随机方法进行了优化。表2显示了Monitizer返回的相应数据。
各个监视器有不同的优点和缺点。值得注意的是,Gaussian监视器在所有OOD类中相比其他监视器表现优越。相反,在ID数据上,Energy、Box和ODIN比Gaussian监视器表现更好。Energy监视器在ID数据上的表现优于ODIN和Box监视器。在OOD数据上,它们的表现各异。Box监视器和ODIN表现相似。请注意,Gaussian监视器是唯一一个能可靠检测到反转图像的监视器,与其他监视器不同。
目标选择的影响。图8显示了相同监视器在相同OOD类上的表现,但优化目标不同。这次,监视器被优化为在保持ID数据70%准确率的同时,检测KMNIST数据集为OOD。Energy和ODIN使用网格搜索进行优化,而非随机搜索。
监视器在性能上存在差异。仔细观察可以发现,Gaussian监视器在ID、FashionMNIST、KMNIST和反转图像上表现优于Energy。然而,值得注意的是,Energy在噪声(Gaussian和Salt-and-Pepper噪声)、模糊和旋转图像上优于Gaussian监视器。ODIN在ID上的表现较好,但在OOD数据上几乎总是比其他监视器差。Box监视器在噪声和扰动图像上表现优于其他监视器,除了反转图像。
回想图1a中的例子,Gaussian监视器在Gaussian Noise上表现较差,但在对比度和亮度变化上表现更好。这些结果取自图8。我们可以看到,当优化为检测CIFAR-10时,Gaussian监视器在Gaussian Noise上的表现更好。因此,要对OOD监视器进行一般比较,必须定义监视器优化和评估的OOD类。
选择优化目标会影响监视器的性能。Monitizer允许指定优化目标,从而能够透明地评估监视器在选定目标上的表现。
数据集的影响。我们还在图9中提供了CIFAR-10的实验。不幸的是,Box监视器在CIFAR-10上无法工作,因为它超过了内存。我们可以看到,在这种情况下,Energy在训练于CIFAR-10的神经网络上的表现比在MNIST上更好。它在六个OOD类上优于Gaussian监视器,而Gaussian监视器只在四个类上表现更好。ODIN监视器在所有OOD类上的表现始终比其他两个监视器差,这与MNIST的情况一致。
多目标优化。Monitizer还支持多目标优化。图10显示了Energy监视器在不同权重下为两个目标优化时的Pareto前沿曲线。灰线上的标签描述了每个目标的权重。彩线与灰线的交点对应的值显示了每个目标的评估检测率。这种绘制Pareto曲线的方式遵循[12]的标准程序。
该图显示,当我们只关注CIFAR-10作为OOD类时,目标的加权在极限情况下会有所不同。然后,我们可以在ID数据上达到更高的检测率,但在KMNIST上的检测率较低。在其他情况下,优化程序总是找到相同的平衡点。
可扩展性和运行时间。我们还评估了我们方法的运行时间。我们的实验在以下配置的机器上执行:一个2.85GHz的CPU(AMD EPYC 7443 24核处理器)和190 GB的RAM,运行Ubuntu 22.04.2 LTS。简要总结,我们所有的实验运行时间最少为105秒,最多为16,805秒。然而,这在不同数据集之间有所不同:在MNIST上,运行时间仅在105秒到2,198秒之间;在CIFAR-10上,范围在142秒到16,805秒之间。自然,我们的方法随着神经网络的大小和优化目标的复杂性而扩展。网络越大,前向传递时间越长,优化时间越长。同样,计算目标的复杂性越高,整个优化时间越长。总之,我们不能保证任何运行时间,因为它完全取决于输入和监视器。
G. 实现的所有监控器的性能
在本节中,我们展示了所有实现的监控器在所有OOD类上的性能,详见表3。
表3:所有实现的监控器的AUROC分数比较。它们在一个训练有素的MNIST完全连接网络上进行了评估。我们将小数点后的两位数字四舍五入并显示百分比。
(表格展示不同监控器在不同扰动和OOD类上的AUROC分数)
H. CPU和GPU上的MDS和Mahalanobis
我们的实验揭示了CPU和GPU上的浮点数可能会有高达1e-6的差异。虽然这通常不是问题,但在使用Python包“scikit-learn”的标准函数“empirical_covariance”时,这可能会产生影响。该函数计算给定输入的经验协方差矩阵,对于输入中的小变化可能会导致输出的显著不同(例如,总差异可能达到1e4)。因此,当在使用CPU的机器上运行时,表1和表3的结果会有所不同。我们在表4中提供了在CPU上运行的替代表(对MDS和Mahalanobis有影响)。
表4:所有实现的监控器的AUROC分数比较。它们在一个训练有素的MNIST完全连接网络上进行了评估。我们将小数点后的两位数字四舍五入并显示百分比。监控器在CPU上进行了评估(对MDS和Mahalanobis有影响)。
(表格展示不同监控器在不同扰动和OOD类上的AUROC分数)