现在将一些自己觉得非常实用的模型训练经验写下来作为记录,也方便后来者借鉴验证。 调参经验 模型选择 通常我会使用一个简单的CNN模型(这个模型一般包含5个卷积层)将数据扔进去训练跑出一个baseline,这一步工作主要是为了验证数据集的质量。 如果这个模型训练结果很差就不要先调试模型,需要检查一下你的训练集数据,看看图像的质量,图像标签是否正确,模型的代码是否正确等等,否则就是在做无用功,毕竟:garbage in,garbage out。 超参数的选择 调参是项技术活,调得好CVPR,调不好下海搬砖。 数据预处理 训练数据对模型的影响是决定性的,提高训练数据的质量,就是在提高模型的准确率。
模型准确率(Accuracy) 模型准确率反馈了模型的效果,大家看下图: ? 1)左上角子的模型偏差很高。它的训练集和验证集准确率都很低,很可能是欠拟合。 解决欠拟合的方法就是增加模型参数,比如,构建更多的特征,减小正则项。 2)右上角子的模型方差很高,表现就是训练集和验证集准确率相差太多。 解决过拟合的方法有增大训练集或者降低模型复杂度,比如增大正则项,或者通过特征选择减少特征数。 3)右下角的模型就很好。 下图可以看到,模型在测试集表现很好,不过训练集和测试集的准确率还是有一段小间隔,可能是模型有点过拟合。 ? 绘制验证曲线得到超参和准确率关系 验证曲线是用来提高模型的性能,验证曲线和学习曲线很相近,不同的是这里画出的是不同参数下模型的准确率而不是不同训练集大小下的准确率: 1from sklearn.model_selection
,当把模型选择出来之后,我们还得掌握一些调参的技术发挥模型最大的性能,模型选择出来之后,也调完参数,但是模型真的就没有问题了吗? ,适合迁移) 模型的调参技术(贪心调参, GridSearchCV调参和贝叶斯调参) 绘制训练集曲线与验证集曲线(从曲线分析过拟合欠拟合的问题,以及如果发生了这些问题,我们应该怎么去尝试解决) 总结 1 ,这样从这里面选出3-4个进行下面的环节,也就是模型的调参工作。 这样,各个模型的效果就一目了然了,从上图可以看出,随机森林和LGB的效果还是好一些的,后面可以基于这两个进行调参,当然xgboost的效果可能由于参数的原因表现不是那么理想,这里也作为了我们调参备选 那么调参究竟有没有影响呢 所以更多的时候需要我们自己手动先排除掉一部分数值,然后使用GridSearch自动调参 模型调参有三种方式: 贪心调参 网格搜索调参 贝叶斯调参 这里给出一个模型可调参数及范围选取的参考: ?
Spark - ML Tuning 官方文档:https://spark.apache.org/docs/2.2.0/ml-tuning.html 这一章节主要讲述如何通过使用MLlib的工具来调试模型算法和 pipeline,内置的交叉验证和其他工具允许用户优化模型和pipeline中的超参数; 目录: 模型选择,也就是调参; 交叉验证; 训练集、验证集划分; 模型选择(调参) 机器学习的一个重要工作就是模型选择 ,或者说根据给定任务使用数据来发现最优的模型和参数,也叫做调试,既可以针对单个模型进行调试,也可以针对整个pipeline的各个环节进行调试,使用者可以一次对整个pipeline进行调试而不是每次一个pipeline ,每个模型都是通过之前的一组训练&测试集训练得到; 确认了最佳参数后,CrossValidator最终会使用全部数据和最佳参数组合来重新训练预测; 例子:通过交叉验证进行模型选择; 注意:交叉验证在整个参数网格上是十分耗时的 、更多的参数取值以及更多的fold,换句话说,CrossValidator本身就是十分奢侈的,无论如何,与手工调试相比,它依然是一种更加合理和自动化的调参手段; from pyspark.ml import
做一个好的模型,首先要有好的数据,数据的质量决定了你模型效果的上限;其次,要做好特征工程,在无法改变数据质量的条件下,特征工程是重中之重;最后,建立模型。 前2种模型可以调参。 相信网上有很多种调参方法,效果也有好有坏,不过我相信很多人肯定遇到过这种情况:调着调着,怎么越调越差? 好吧,大部分情况是没有调好,因为模型调优,一般会比默认情况好的。 我在这里展示了一下我的模型调参效果,当然,不可能是最好,也许你的比我更好,我这仅是一家之言,欢迎交流。 这次代码不会无偿分享,如果想要的同学可以在公众号发送调参代码 祝大家元旦快乐! 调参完成后,如果还不满意,可以再模型stacking或加权融合一下。 数据:10000行,89列 1.Xgboost调参: 2.lightGBM调参: 3.随机森林:
超参数优化 调参即超参数优化,是指从超参数空间中选择一组合适的超参数,以权衡好模型的偏差(bias)和方差(variance),从而提高模型效果及性能。 常用的调参方法有: 人工手动调参 网格/随机搜索(Grid / Random Search) 贝叶斯优化(Bayesian Optimization) ? 人工调参 手动调参需要结合数据情况及算法的理解,选择合适调参的优先顺序及参数的经验值。 贝叶斯优化 贝叶斯优化(Bayesian Optimization) 与网格/随机搜索最大的不同,在于考虑了历史调参的信息,使得调参更有效率。 2、勘探过程:兼顾不确定性大的参数区域的采样评估,避免陷入局部最优。
MLK,即Machine Learning Knowledge,本专栏在于对机器学习的重点知识做一次梳理,便于日后温习,这次主要讲下Keras 模型的调参。 ? MLK | Keras 入门深度学习逢看必会 上一篇文章讲解了如何简易入门Keras,大致给出了一个深度学习模型,但对于模型如何调参就没有太过于深入讲解,今天继续写一篇文章来整理下 Keras 深度学习模型的调参教程 ,看来机器学习还是需要懂些理论知识的,不然盲目调参并不是明智的选择。 02- batch_size 入手 这个参数在Keras深度学习模型中还是蛮重要的,我们在深度学习模型中做 梯度下降,并不是真的就是 minimize total loss(最小化总损失),而通常的做法是会把训练数据随机分成 N 个 mini-batch,并行训练模型。
当调参成为技术壁垒你是否曾因GPU成本高昂而放弃模型优化?是否在超参数海洋里迷失方向? 普通开发者面对大模型调参时,往往陷入三重困境: 算力门槛:单张3090训练BERT-base需要3天,更别说百亿参数模型 经验鸿沟:学习率衰减策略该选cosine还是linear? 时间成本:手动调参耗时占比超60%,模型效果却提升不足5% AutoML的破局之道传统调参就像手工打磨瑞士手表,而AutoML是智能数控机床: 维度 传统方式 消费力指数 = 交易频率 × 金额"] D --> G["用户行为模式序列"] E --> H["BERT-文本向量"] 初学者的第一个AutoML实战通过腾讯云TI-ONE平台,三步完成自动化调参 > F[亚太实时推理集群] 文化适配性调优方案地域特性 模型调优重点 腾讯云TI-ONE特殊配置 北美市场 隐私保护强化(差分隐私等级≥3)enable_gdpr
在GPT-3掀起的AI浪潮中,大模型开发已不再是顶级实验室的专利。 面对动辄数十亿参数、数百项超参数的巨型模型,传统的手工调参如同用绣花针雕刻摩天大楼。这正是AutoML技术逆袭的最佳战场——通过自动化机器学习技术,普通开发者也能在有限算力下实现专业级模型调优。 batch_size)study = optuna.create_study(direction='minimize')study.optimize(objective, n_trials=100)1.2 大模型特有的调参挑战显存墙与计算效率的平衡艺术稀疏激活与 分类模型微调:Layer-wise Learning Rate Decay的自动化实现第三章:AutoML高级调参技巧3.1 多目标优化的帕累托前沿精度与推理速度的权衡:NSGA-II算法实战模型性能与碳排放的绿色 SHAP值的超参重要性分析动态维度缩减技术(Dynamic Parameter Reduction)遗传算法与强化学习的混合搜索策略第四章:未来战场:AutoML的进击之路4.1 大模型时代的AutoML
现在可以在一个好的模型上进行迭代了。 我喜欢采用的寻找一个好模型的方法有两个阶段: 首先获得一个足够大的模型,使其能够过拟合(即,关注训练损失),然后适当地调整它(放弃一些训练损失以改善验证损失)。 我喜欢这两个阶段的原因是,如果我们在任何模型上都无法达到低错误率,那么这可能再次表明一些问题、bug或错误配置。 这一步的一些建议: 选择模型。要达到良好的训练效果,您需要为数据选择合适的结构。 04 正则化 理想情况下,我们现在所处的位置是,我们有一个至少拟合训练集的大模型。现在需要对其进行正则化,并通过放弃一些训练精度来获得更好的验证精度。这边有一些技巧: 获取更多数据。 根据验证损失停止训练,以便在模型即将过度拟合时捕捉模型。 试试大一点的模型。 05 调模型 现在,您应该“in the loop”使用数据集,为达到低验证损失的结构需要探索更广阔的模型空间。此步骤的一些提示和技巧: 随机网格搜索。
一、前言 这是本系列的第三篇文章,前两篇主要是讲怎么取得速度&精度的平衡以及一些常用的调参技巧,本文主要结合自身经验讲解一些辅助训练的手段和技术。 _update(model, update_fn=lambda e, m: m) EMA的好处是在于不需要增加额外的训练时间,也不需要手动调参,只需要在测试阶段,多进行几组测试挑选最好偶的结果即可。 如果你的任务是不考虑开销的,直接怼大模型就好了,蒸馏也不需要。但是反之,如果线上资源吃紧,要求FLOPs或者Params,那么蒸馏就是一个非常好的选择。 蒸馏过程 先训练一个teacher模型,可以是非常非常大的模型,只要显存放的下就行,使用常规CrossEntropy损失进行训练。 蒸馏,小模型都建议使用,注意一下调参即可,也只有一个参数,多试试就行了。 FixRes,固定FLOPs的场景或者想突破精度都可以使用,简单有效。
ML工作流中最困难的部分之一是为模型找到最好的超参数。ML模型的性能与超参数直接相关。超参数调优的越好,得到的模型就越好。调优超参数可能是非常乏味和困难的,更像是一门艺术而不是科学。 超参数 超参数是在建立模型时用于控制算法行为的参数。这些参数不能从常规训练过程中获得。在对模型进行训练之前,需要对它们进行赋值。 ? 超参数的简单列表 内容 传统的手工调参 网格搜索 随机搜索 贝叶斯搜索 1. 传统手工搜索 在传统的调参过程中,我们通过训练算法手动检查随机超参数集,并选择符合我们目标的最佳参数集。 网格搜索 网格搜索是一种基本的超参数调优技术。它类似于手动调优,为网格中指定的所有给定超参数值的每个排列构建模型,评估并选择最佳模型。 如果超参数空间(超参数个数)非常大,则使用随机搜索找到超参数的潜在组合,然后在该局部使用网格搜索(超参数的潜在组合)选择最优特征。
或者说我们在漫长而苦恼的调参过程中到底调的是哪些参数。。。所以,我花了一部分时间在公开数据集 CIFAR-10 [1] 上进行探索,来总结出一套方法能够快速高效并且有目的性地进行网络训练和参数调整。 最后评估测试集,发现准确率为 69.36%,也没有达到很满意的程度,说明我们对模型需要进行很大的改进,接下来进行漫长的调参之旅吧! 但是对于 80% 左右的识别准确率我们还是不够满意,接下来继续调参。 所以,如果能提出一种模型改进技术并且从原理上解释同时也使其适用于各种模型,那么就是非常好的创新点,也是我想挑战的方向。现在测试集准确率提升至 85% 左右,接下来我们从其他的角度进行调参。 现在深度学习大热,所以,在计算资源足够的情况下,想要获得模型性能的提升,大家最常见打的想法就是增加网络的深度,让深度神经网络来解决问题,但是简单的网络堆叠不一定就能达到很好地效果,抱着深度学习的想法,我按照
historical分冷热节点 不同节点可以参考评论中的配置 historical冷节点
本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验。 二 参数调优实战 目前实际生产中,时序模型的训练往往是数量惊人,因此如果依靠以往的指标和经验调参以不大可行,所以只能采用机器寻参的方式。福布湿在这里给大家介绍下常用的网格寻参。 在调参之前,最重要的是要确定好模型的评价指标。Prophet中内置的评价指标有传统的mse、rmse、mae、mape、coverage。 (当然如果使用2分法一组组参数调,麻烦是麻烦了点,但是速度肯定快不少)。 因此如果想训练出一个好的模型,数据和调参很重要,但更重要的对算法原理的充分理解并根据实际情况改进算法,从而让模型效果达到一个新的台阶。
这里有一份关于模型调优的备忘录,每当出现上述问题的时候或者是建模前,都可以按照这个清单来进行检查,话不多说,大家一起来看看呗~ ? 为了文章阅读的清晰,先在前面简单说明一下文章的目录框架。 Improve Performance With Algorithm Tuning 模型调参也是一个非常费时间的环节,有的时候“好运”可以马上抽查出表现还不错的结果,并持续调参,就可以得到一个不错的结果 调参的直觉:这个就很“玄学”了,但其实都是一些经验,当你调的参足够多,也可以大致可以对这些不同算法的参数有了自己的理解,自然就有了这些所谓的“直觉”。 网格搜索:先固定一个超参,然后对其他各个超参依次进行穷举搜索。 从文献中找ideas:从文献中了解这个算法用到了哪些算法,并且这些算法主要的取值值域,有益于自身工作的开展哦。 从知名网站中找ideas:国内我个人觉得知乎还是蛮可以的,关于这节的参数调参,也是有好多好文章,其外还有csdn也不错。 4.
一、认识管道流 1.1 数据导入 1.2 使用管道创建工作流 二、K折交叉验证 2.1 K折交叉验证原理 2.2 K折交叉验证实现 三、曲线调参 3.1 模型准确度 scores: %s' % scores) 8print('CV accuracy: %.3f +/- %.3f' % (np.mean(scores), np.std(scores))) 三、曲线调参 3.3 绘制验证曲线得到超参和准确率关系 验证曲线是用来提高模型的性能,验证曲线和学习曲线很相近,不同的是这里画出的是不同参数下模型的准确率而不是不同训练集大小下的准确率: 1from sklearn.model_selection 四、网格搜索 网格搜索(grid search),作为调参很常用的方法,这边还是要简单介绍一下。 在我们的机器学习算法中,有一类参数,需要人工进行设定,我们称之为“超参”,也就是算法中的参数,比如学习率、正则项系数或者决策树的深度等。
本文结构: 什么是 LightGBM 怎么调参 和 xgboost 的代码比较 ---- 1. 怎么调参 下面几张表为重要参数的含义和如何应用 Control Parameters 含义 用法 max_depth 树的最大深度 当模型过拟合时,可以考虑首先降低 max_depth min_data_in_leaf group 边界上找到分割点 当类别数量很多时,找分割点很容易过拟合时 Core Parameters 含义 用法 Task 数据的用途 选择 train 或者 predict application 模型的用途 categorical_features 类似,只不过不是将特定的列视为categorical,而是完全忽略 save_binary 这个参数为 true 时,则数据集被保存为二进制文件,下次读数据时速度会变快 ---- 调参 ,在大型数据集时就设置为数百或数千 max_depth 这个也是可以限制树的深度 下表对应了 Faster Speed ,better accuracy ,over-fitting 三种目的时,可以调的参数
? ?
真正率(true positive rate,TPR),指的是被模型正确预测的正样本的比例: ? 假正率(false positive rate,FPR) ,指的是被模型错误预测的正样本的比例: ? 很简单,我们可以根据模型预测的概率值,并且设置不同的阈值来获得不同的预测结果。什么意思? 比如说: 5个样本,真实的target(目标标签)是y=c(1,1,0,0,1) 模型分类器将预测样本为1的概率p=c(0.5,0.6,0.55,0.4,0.7) 我们需要选定阈值才能把概率转化为类别,