deep-significance: 深度神经网络显著性测试工具介绍
项目背景
近年来,深度学习取得了显著的进展,但在许多实验研究中,统计假设检验并未得到充分应用。研究人员通常仅通过一些性能指标来得出结论,这不足以准确地比较不同的模型或算法。这是因为神经网络有复杂的特性,它们的性能受到超参数、训练过程中的随机性和其他因素的影响。因此,单纯依赖少量指标或其平均值无法有效比较模型间的优劣。
项目目标
为了解决这一问题,deep-significance
项目提供了深度神经网络显著性测试的完整工具集。该项目通过重实现一些经典的统计显著性测试方法,为用户提供简单且可靠的工具来进行模型性能比较。主要功能包括:
- 统计显著性测试,如几乎随机顺序(ASO)、bootstrap 方法和置换随机化。
- 处理数据集多个比较问题的 Bonferroni 校正。
- bootstrap 功率分析和样本量确定工具。
这些功能经过全面测试,与常用的深度学习数据结构(如 PyTorch、Tensorflow 张量以及 NumPy 和 Jax 数组)兼容。
安装流程
用户可以通过以下命令轻松安装本软件包:
pip3 install deepsig
或者,用户也可以选择从 GitHub 上克隆代码库进行本地安装:
git clone https://github.com/Kaleidophon/deep-significance.git
cd deep-significance
pip3 install -e .
使用示例
场景1:比较两个模型的多次运行
假设我们有两组分数,分别由运行多次的两个模型产生,使用 ASO 测试可以判断哪个模型表现更好:
import numpy as np
from deepsig import aso
seed = 1234
np.random.seed(seed)
# 模拟分数
N = 5 # 随机种子数量
my_model_scores = np.random.normal(loc=0.9, scale=0.8, size=N)
baseline_scores = np.random.normal(loc=0, scale=1, size=N)
min_eps = aso(my_model_scores, baseline_scores, seed=seed) # min_eps = 0.225,说明 A 比 B 好
场景2:跨数据集比较多次运行
当跨多个数据集比较模型时,需要对每个数据集分别设定一个零假设,并通过 Bonferroni 校正调整显著性阈值:
import numpy as np
from deepsig import aso
seed = 1234
np.random.seed(seed)
# 模拟三个数据集的分数
M = 3 # 数据集数量
N = 5 # 随机种子数量
my_model_scores_per_dataset = [np.random.normal(loc=0.3, scale=0.8, size=N) for _ in range(M)]
baseline_scores_per_dataset = [np.random.normal(loc=0, scale=1, size=N) for _ in range(M)]
# 实施 Bonferroni 校正后计算 eps_min
eps_min = [aso(a, b, confidence_level=0.95, num_comparisons=M, seed=seed) for a, b in zip(my_model_scores_per_dataset, baseline_scores_per_dataset)]
其他功能
deep-significance
项目还提供多模型比较、样本级别比较、采样不确定性减少分析及支持多线程并行计算的 ASO 测试等功能。此外,该工具兼容 PyTorch、Tensorflow、Jax 和 NumPy 数据结构,并配备种子设置以确保重复实验的可再现性。
总结
deep-significance
通过为深度学习研究人员提供一整套显著性测试工具,帮助提升模型比较的科学性和准确性,从而推动领域的健康发展。这一包作为公开项目,接受贡献并鼓励在相关研究中使用。