首页/新闻资讯/正文详情

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

发布时间:2026/9/23 4:27:33 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

模拟IC运放失配本质与实战控制:从物理根源到版图落地
模拟IC运放失配本质与实战控制:从物理根源到版图落地

1. 这不是背题,是拆解芯片工程师的“显微镜级”思维“模拟IC面试八股文之运放失配”——这标题乍看像一份备考清单,实则是一把钥匙,打开的是模拟电路设计最底层、最不容妥协的物理世界。我带过十几届校招新人,也做过三年流片前的版… · 2026/9/23 4:27:27

ZYNQ底层认知重建:从物理时序到AXI总线的四层能力体系
ZYNQ底层认知重建:从物理时序到AXI总线的四层能力体系

1. 这不是“学FPGA”,而是重建数字系统工程师的底层认知框架ZYNQ和FPGA学习,从来就不是简单地背几个Verilog语法、点几下Vivado按钮就能通关的游戏。我带过三十多个从零起步的硬件工程师,其中超过七成在第三周就卡在“为什么我的UART接收波形… · 2026/9/23 4:27:27

培训内容怎么写性能优化
培训内容怎么写性能优化

5种图解法教你写培训内容:从看教程到落地实战 看了一堆教程还是不会写项目?这大概是无数程序员和技术管理者最痛的点。你明明看懂了每一行代码,甚至能把原理背得滚瓜烂熟,可一旦让你从零搭个系统,脑子就一片空白。问题出在哪?在于你只看了“结果”,没… · 2026/9/23 4:27:27

拒绝硬编码:refusing 在 Go 与 Rust 中的源码解析与实战选型
拒绝硬编码:refusing 在 Go 与 Rust 中的源码解析与实战选型

拒绝硬编码:refusing 在 Go 与 Rust 中的源码解析与实战选型 复制来的代码跑不通,报错信息里藏着 refusing… · 2026/9/23 5:12:10

GitHub Trending周报:从热度到健康度的开源评估新范式
GitHub Trending周报:从热度到健康度的开源评估新范式

1. 这份周报不是“新闻简报”,而是开源世界的施工图纸你点开这份标题为《GitHub Trending 开源生态周报(2026-09-07 至 2026-09-13)》的文档时,大概率不是想看一串项目名字加星标数的流水账。我干这行十多年,从最早用 … · 2026/9/23 5:12:10

GPT与Codex关系解析:从注册到API接入的完整使用教程
GPT与Codex关系解析:从注册到API接入的完整使用教程

1. 从零理解 GPT 与 Codex 的真实关系很多人第一次接触这两个词的时候,脑子里是一团浆糊的。GPT 和 Codex 到底是什么关系?是同一个东西的两个名字,还是两个完全独立的产品?这个问题不搞清楚,后面所有的操作都会走弯路… · 2026/9/23 5:12:10

从SKILL.md到脚本:如何把安全审计做成AI Agent技能包
从SKILL.md到脚本:如何把安全审计做成AI Agent技能包

最近半年,AI Agent 圈子里最火的一个词就是 skill。Claude、Codex、OpenCode 这些工具先后都加入了 skill 机制,GitHub 上也冒出来一堆"技能库",里面全是别人写好的 SKILL.md。说实话,一开始我并不太理解这玩意和普通的… · 2026/9/23 5:12:10

大模型 Function Calling 实战指南:告别答非所问,打造真正的智能体
大模型 Function Calling 实战指南:告别答非所问,打造真正的智能体

1. Function Calling 到底是什么,为什么说它是大模型落地的拐点大概是从 2023 年年中开始,OpenAI 在 API 里放出了 Function Calling 能力,随后各大模型厂商跟进,国内外的开源模型也陆续支持。到了今天,如果你还在让大… · 2026/9/23 5:12:04

5分钟搞懂mistery核心逻辑,性能优化实战避坑指南
5分钟搞懂mistery核心逻辑,性能优化实战避坑指南

5分钟搞懂mistery核心逻辑,性能优化实战避坑指南 官方文档动辄几百页,翻到第三页就头疼,抓不住重点?别急。 做移动端的都知道, 性能优化 不是玄学,而是对底层逻辑的精准把控。 今天把 mistery… · 2026/9/23 5:12:04

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码