NNI Curve Fitting Assessor 学习曲线拟合早停评估器:原理、源码与实战配置指南

发布时间:2026/9/23 4:27:31

NNI Curve Fitting Assessor 学习曲线拟合早停评估器:原理、源码与实战配置指南 人工智能AutoML机器学习深度学习模型压缩特征工程【免费下载链接】nniAn open source AutoML toolkit for automate machine learning lifecycle, including feature engineering, neural architecture search, model compression and hyper-parameter tuning.项目地址https://gitcode.com/gh_mirrors/nn/nni点击查看免费下载本指南完整讲解 NNI 内置的 Curve Fitting Assessor曲线拟合评估器——一个基于 LPALearning / Predicting / Assessing学习-预测-评估范式的早停算法它用 12 条参数化学习曲线拟合 trial 的历史中间结果外推最终 epoch 的精度从而提前终止注定低分的试验以节省算力。读完本文你将掌握该评估器的算法三步流程、YAML 与 Python 两种配置方式、全部参数的含义与默认值、判断阈值的底层逻辑以及仓库中对应的源码实现与测试验证。一、算法概述基于学习曲线外推的早停Curve Fitting Assessor 的核心思想是学习曲线learning curve的形态通常符合我们对训练过程的先验认知——即一条递增并趋于饱和的函数。因此若某个 trial 当前的中期表现已经明显偏离这一趋势其最终结果几乎不可能超过历史最优继续运行只会浪费计算资源。该算法在运行中的 trial X 的第 S 步做出判断如果对最终 epoch 性能的预测值劣于 trial 历史中的最优最终性能则提前终止该 trial。算法正式名称中 LPA 的三个字母对应其三个核心阶段Learning学习从该 trial 已有的历史中间结果中学习曲线参数Predicting预测用学到的组合模型外推最终 epochtarget position的性能Assessing评估将预测值与历史最优 × 阈值比较决定返回AssessResult.Good继续还是AssessResult.Bad早停。该算法对应的内置评估器注册名称为Curvefitting在 内置算法注册表 中声明实现类为nni.algorithms.hpo.curvefitting_assessor.CurvefittingAssessor。二、12 条候选学习曲线与组合模型原文档采用的参数化曲线族选自 2015 年 IJCAI 论文Speeding up Automatic Hyperparameter Optimization of Deep Neural Networks by Extrapolation of Learning Curves源码 docstring 中亦注明该出处见 curvefitting_assessor.py。仓库中的 curvefunctions.py 完整实现了这一曲线族共 12 条曲线名数学形式以代码为准参数个数vapexp(a b/x c·ln(x))蒸气压模型3pow3c - a·x^(-alpha)3lineara·x b2logx_lineara·ln(x) b对数线性2dr_hill_zero_backgroundtheta·x^eta / (kappa^eta x^eta)零背景 DR-Hill3log_powera / (1 (x/exp(b))^c)逻辑幂3pow4c - (a·x b)^(-alpha)4mmfalpha - (alpha - beta)/(1 (kappa·x)^delta)Morgan-Mercer-Flodin4exp4c - exp(-a·x^alpha b)4ilog2c - a/ln(x)2weibullalpha - (alpha - beta)·exp(-(kappa·x)^delta)威布尔4janoscheka - (a - beta)·exp(-k·x^delta)4每条曲线在 curvefunctions.py 中都预置了一组默认参数作为最小二乘拟合的初值例如vap的初值为[-0.622028, -0.470050, 0.042322]参数个数 24 不等。单条曲线拟合能力有限因此原文档将 12 条曲线组合为一个更强的加权线性组合模型f_combf_comb(pos, sample) Σ_i w_i · f_i(pos)其中f_i为第 i 条候选曲线w_i为组合权重pos为 epoch 位置组合后的参数向量记为 ξ即所有曲线的参数加上权重。该组合体现在 model_factory.py 的f_comb方法中。模型假设噪声为加性高斯噪声且噪声参数初始化为其极大似然估计值随后通过贝叶斯方式从历史数据中学出使组合参数向量 ξ 后验概率最大的取值用它预测未来性能从而尽早叫停不达标的试验。三、LPA 三阶段流程与源码级实现原文档给出了算法的三个具体步骤仓库源码 model_factory.py 与 curvefitting_assessor.py 中的方法一一对应Step 1Learning学习阶段最小二乘拟合各曲线参数fit_theta对 12 条曲线逐一用scipy.optimize.curve_fit拟合 trial 已上报的中间结果序列根据每条曲线参数个数2/3/4分别解出参数。数值计算中出现的RuntimeError、FloatingPointError、OverflowError、ZeroDivisionError会被捕获并跳过见 model_factory.py。过滤离群曲线filter_curve计算每条拟合曲线在已知点上的残差平方和残差平方和超过avg² × point_numavg为历史均值的曲线视为拟合过差被剔除随后再以预测值的中位数 ± 容差带过滤掉预测明显偏离的曲线剩余的曲线进入有效模型集合effective_model见 model_factory.py。MCMC 采样调整权重mcmc_sampling以均匀分布作为权重初值采用 Metropolis-Hastings 风格采样迭代 20 次NUM_OF_SIMULATION_TIME每次维护 10 个权重样本NUM_OF_INSTANCE步长STEP_SIZE 0.0005。接受概率由后验分布之比min{1, P(j)Q(j,i)/P(i)Q(i,j)}决定其中后验 似然 × 先验先验强制权重非负、且要求组合模型在位置 1 处的值小于等于目标位置处的值保证曲线单调不减见 model_factory.py。权重样本最后按行归一化。Step 2Predicting预测阶段利用学到的 ξ 与组合模型f_comb在目标位置target_pos即epoch_num处计算期望的最终精度。CurveModel.predict()会先对全部 10 个权重样本分别计算f_comb(target_pos, sample)再取平均作为最终预测值见 model_factory.py。Step 3Assessing评估阶段评估逻辑位于 curvefitting_assessor.py 的assess_trial方法若拟合结果不收敛即有效曲线数少于LEAST_FITTED_FUNCTION 4说明各曲线预测过于发散predict()返回None。此时评估器返回AssessResult.Good请求更多历史信息后再次预测——即等待更多信息以便精确预测若预测值predict_y非空且严格大于历史最优最终性能 ×threshold默认 0.95返回AssessResult.Good继续运行否则返回AssessResult.Bad提前终止。此外评估前还有三重前置判断均在assess_trial中set_best_performance尚未置位时直接返回Good还没有任何完整跑完的 trial 可供参照当前上报的中间结果数curr_step start_step时返回Good历史数据不足不做预测距上次对该 trial 的判定不足gap步时返回Good控制评估频率见last_judgment_num记录。历史最优最终性能通过trial_end回调维护每当有 trial 成功完成就用其最终结果更新completed_best_performance见 curvefitting_assessor.py。该最优值记录的是已完成 trial 的最终结果而非中途的中间结果这一点在配置阈值时需要留意。关于收敛的补充说明单元测试 test_curvefitting_assessor.py 使用振荡型历史序列[1, 199, 0, 199, 1, 209, 2]验证了CurveModel.predict()返回None且assess_trial返回Good的行为与上述不收敛分支一致。四、在 NNI 中启用 Curve Fitting AssessorCurve Fitting Assessor 是 NNI 内置评估器之一无需额外安装通过配置即可启用。以下两种配置方式等价。方式一YAML 实验配置文件在原文档给出的配置骨架基础上这里给出仓库测试用例 curvefitting.yml 的完整可运行形态authorName: nni experimentName: default_test maxExecDuration: 10m maxTrialNum: 8 trialConcurrency: 8 searchSpacePath: ../naive_trial/search_space.json tuner: builtinTunerName: TPE classArgs: optimize_mode: maximize assessor: builtinAssessorName: Curvefitting classArgs: epoch_num: 20 # (必填) 总 epoch 数用于确定预测的目标位置 start_step: 6 # (可选) 上报多少个中间结果后才开始预测默认 6 threshold: 0.95 # (可选) 早停判定阈值默认 0.95 # gap: 1 # (可选) 两次评估之间的间隔步数默认 1 trial: codeDir: ../naive_trial command: python3 trial.py gpuNum: 0 trainingServicePlatform: local仓库还提供了新版本配置格式name/classArgs顶层字段风格的对照示例 curvefitting-v2.yml其 assessor 段写法为assessor: name: Curvefitting classArgs: epoch_num: 20 start_step: 6 threshold: 0.95方式二Python API 配置在 Python 脚本中通过Experiment的配置对象设置与 curvefitting_assessor.py docstring 中的示例一致config.assessor.name Curvefitting config.assessor.class_args { epoch_num: 20, start_step: 6, threshold: 0.95, gap: 1, }注意Python API 配置路径是config.assessor其内部字段为name/class_args区别于builtinAssessorName/classArgs的 YAML 旧写法。五、参数详解与取值约束评估器的全部参数在CurvefittingClassArgsValidatorcurvefitting_assessor.py中有严格的类型与范围校验参数是否必填类型合法范围默认值说明epoch_num是int0 ~ 9999—训练总 epoch 数算法据此确定需要外推的目标位置target_posstart_step否int0 ~ 99996只有收到至少start_step个中间结果后才开始预测避免前期数据过少导致误判源码中若传入 ≤0 会给出日志警告建议取正数threshold否float0 ~ 99990.95早停判定阈值预测值低于历史最优最终性能 × threshold即终止gap否int1 ~ 99991两次评估判定之间的最小间隔步数threshold的使用逻辑来自源码 docstring 与实现若threshold 0.95、历史最优最终性能为 0.9则预测值低于0.95 × 0.9 0.855的 trial 会被提前终止gap的用法为若gap 2、start_step 6则评估器在收到 6、8、10、12……个中间结果时各评估一次见 curvefitting_assessor.py。在实际使用中需保证 trial 通过 NNI 的中间结果上报接口如nni.report_intermediate_result周期性上报标量精度。assess_trial收到原始历史后会先用extract_scalar_history抽取标量序列支持浮点/整型或含default键的字典见 utils.py。六、运行示例与判定效果下图是原文档展示的算法在 MNIST trial 历史数据上的运行效果绿色点为 Assessor 已观测到的中间结果蓝色点为未来未知数据红色曲线为 Curve Fitting Assessor 拟合外推出的预测曲线。当红色曲线在目标位置的预测值跌破历史最优 × threshold红线时该 trial 即被判定为Bad并提前终止。单元测试 test_curvefitting_assessor.py 覆盖了四类典型行为可作为理解判定逻辑的参照test_initCurvefittingAssessor(20)的start_step默认值为 6、target_pos为 20验证默认参数test_insufficient_point历史数据只有 1 个点时返回AssessResult.Good数据不足不判定test_not_converged振荡序列导致预测返回None评估器返回Good等待更多信息test_curve_model对特定序列逐一断言predict_y(vap, 9)、predict_y(logx_linear, 15)、f_comb(9, ...)、f_comb(15, ...)的数值结果精确到小数位可作为复现算法数值行为的基准。七、适用限制原文档明确声明了该算法的适用边界这一限制同时反映在源码实现中仅支持递增单调不减函数CurveModel.prior()要求组合模型满足f_comb(1) ≤ f_comb(target_pos)违背该约束的权重样本先验概率为 0因此只适用于最大化优化指标例如可用于 accuracy越大越好不能用于 loss越小越好中间结果必须是精度类标量。若指标本身是下降型或非单调型曲线如训练 loss、验证 loss拟合外推会失效应改用 NNI 的 Medianstop 等其他评估器源码 docstring 在 curvefitting_assessor.py 中同样强调intermediate result must be accuracy算法依赖已有完整跑完的 trial作为历史最优参照即set_best_performance机制在首个 trial 完成之前所有 trial 都会被放行返回Good因此maxTrialNum设置得过小可能使早停收益不明显。八、源码结构与扩展指引原文档给出的文件结构对应仓库nni/algorithms/hpo/curvefitting_assessor/目录注意原文档写作时的modelfactory.py在现仓库中命名为model_factory.py各文件职责如下文件职责curvefunctions.py12 条候选曲线函数的数学表达式、默认参数初值、参数个数登记表all_models/model_para/model_para_num/curve_combination_modelsmodel_factory.pyCurveModel类学习fit_theta/filter_curve/mcmc_sampling与预测predict/f_comb/predict_y的全部计算逻辑curvefitting_assessor.pyCurvefittingAssessor评估器本体接收 trial 历史、维护历史最优、执行阈值判定并返回AssessResult含参数校验器CurvefittingClassArgsValidator__init__.py模块导出评估结果类型AssessResult.Good/AssessResult.Bad定义在 assessor.py返回Bad表示该 trial 很可能最终精度不佳NNI 框架会将其终止以释放资源。如果你想基于此实现自定义早停策略可继承 assessor.py 中的抽象基类Assessor覆写assess_trial与可选的trial_end并在 内置算法注册表 中登记自己的算法名称。九、已知方向与使用建议原文档末尾的 TODO 记录了一个明确方向进一步提高预测精度并在更多模型上测试。结合源码可以给出如下实践建议若 trial 数量大、训练 epoch 长建议保持默认start_step 6、threshold 0.95起步再根据业务对误杀率的容忍度微调thresholdthreshold 越接近 1早停越激进误杀风险也越高若希望降低评估频率、减少计算开销可适当调大gap由于不收敛时算法会等待更多数据epoch_num应尽量与训练脚本实际总 epoch 数一致避免目标位置偏移导致预测失真。Curve Fitting Assessor 的核心价值在于把训练到一半发现没希望的浪费扼杀在早期借助 12 条曲线族的组合外推它比单纯的固定阈值截断更贴合真实学习曲线形态是 NNI HPO 流程中兼顾精度与资源效率的常用早停手段之一。除本评估器外NNI 的 HPO 模块还内置了 Medianstop 等其他评估器可按指标类型递增精度 vs 递减 loss与数据量特征在 assessors 文档 中横向比较后选用。赞分享人工智能AutoML机器学习深度学习模型压缩特征工程【免费下载链接】nniAn open source AutoML toolkit for automate machine learning lifecycle, including feature engineering, neural architecture search, model compression and hyper-parameter tuning.项目地址https://gitcode.com/gh_mirrors/nn/nni点击查看免费下载相关推荐NNI Assessor 早停机制详解Median Stop 与 Curve Fitting 的原理、配置与实战NNI Assessor 早停机制详解Median Stop 与 Curve Fitting 的原理、配置与实战 在超参数调优HPO场景中并非所有超参数人工智能AutoML机器学习深度学习模型压缩特征工程终结过拟合Burn深度学习框架早停法实战指南终结过拟合Burn深度学习框架早停法实战指南 在深度学习训练过程中过拟合是一个常见且棘手的问题它会导致模型在训练数据上表现优异但在未见过的测试数据上却效人工智能深度学习机器学习本地部署3行代码防住过拟合DeepFace早停机制实战指南3行代码防住过拟合DeepFace早停机制实战指南 在机器学习模型训练过程中过拟合是一个常见的挑战它会导致模型在训练数据上表现良好但在新数据上泛化能力差人工智能计算机视觉深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/23 4:22:31

SpringBoot+Vue+Hive旅游数据分析系统架构与实现全解析

做了几个大数据方向的Web项目后,我越来越觉得“数据平台”这类系统最大的难点不在技术有多新,而在于“数据怎么取、指标怎么算、结果怎么展示”这一整条链路能不能串起来。这次我整理的这个基于SpringBootVue的Hive旅游数据分析系统,就是一个…

2026/9/23 4:22:31

快慢思考分层:Claude Code+Jev+/loop让AI Agent成本降90%

最近在给团队搭内部AI Agent平台时,一个很现实的问题把我逼到了墙角:什么任务都塞给旗舰模型,结果是账单每天几百美元地涨,而且很多活根本不需要那么强的推理。后来我把整个架构改成“Claude Code Jev /loop”的分层循环方案&am…

2026/9/23 5:27:34

学术论文降重技巧与五大查重平台评测

1. 学术写作重复率检测的现状与痛点2026届毕业生即将面临学术论文写作的高峰期,而重复率问题始终是困扰学术新人的首要障碍。根据我近五年指导本科毕业论文的经验,超过70%的学生在初稿阶段都会遇到重复率超标的问题。这不仅影响论文评审,更可…

2026/9/23 5:27:34

wanhai入门到精通:5步消除StackTrace报错

wanhai入门到精通:5步消除StackTrace报错 满屏的红色报错代码直接糊脸,StackTrace像天书一样堆在控制台,项目进度直接卡死。这种“入门到精通”的断层,往往不是业务逻辑没搞懂,而是底层性能瓶颈没看透。 Stack…

2026/9/23 5:27:34

贝叶斯推理实战:用PyMC实现可解释电影分类与不确定性量化

简介:本资源是大卫巴伯所著《贝叶斯推理与机器学习》中文版PDF电子书,面向机器学习初学者、研究生及研究者,系统解决概率建模能力薄弱、图模型理解抽象、贝叶斯方法落地难等核心问题。全书以概率论为基石,深度融合图模型&#xff…

2026/9/23 5:27:34

SpringBoot+Vue社区医疗可视化系统开发实践

1. 项目背景与核心价值社区医疗服务可视化系统是当前医疗信息化建设中的重要一环。我在实际参与某三甲医院社区医疗项目时发现,传统的纸质档案和分散的电子表格已经无法满足现代社区医疗服务的需求。医护人员经常需要花费大量时间在数据整理和报表制作上&#xff0c…

2026/9/23 5:27:34

UPFC技术在高压输电系统中的应用与优化

1. UPFC技术概述与工程背景在500kV/230kV高压输电系统中,功率流动控制一直是电网运营商面临的重大挑战。传统机械式开关设备调节速度慢、动作次数有限,而柔性交流输电系统(FACTS)中的统一潮流控制器(UPFC)通…

2026/9/23 5:22:34

C# TCP助手实战:基于Socket构建自定义网络调试台

简介:这是一份由C#编写的TCP网络调试助手,集成了源码与可直接运行的程序,面向C#开发者、网络协议调试人员以及需要快速验证服务端逻辑的测试工程师。它基于TcpClient/TcpListener完成客户端与服务器端连接管理,针对TCP调试中常见的…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码