在机器学习的实践中,除了知道有哪些算法和背后原理之外,我们还需要知道如何针对具体应用挑选一个合适的算法以及如何监控,并根据实验反馈改进机器学习系统。

在机器学习系统的日常开发中,实践者需要决定是否收集更多的数据、增加或减少模型容量、添加或删除正则化项、改进模型的优化、改进模型的近似推断或调试模型的软件实现1

因此,在实践中,正确应用一个算法需要掌握一些简单的方法论。
(本文总结自Ian 的《深度学习》第十一章。)

实践设计流程

Ng (2015)2建议参考以下几个实践设计流程:

  • 确定目标——使用什么样的误差度量,并为此误差度量指定目标值。这些目标和误差度量取决于该应用旨在解决的问题。
  • 尽快建立一个端到端的工作流程,包括估计合适的性能度量。
  • 搭建系统,并确定性能瓶颈。检查哪个部分的性能差于预期,以及是否是因
    为过拟合、欠拟合,或者数据或软件缺陷造成的。
  • 根据具体观察反复地进行增量式的改动,如收集新数据、调整超参数或改进算法。

下面具体展开介绍。

1、确定目标—使用什么误差度量?

科研中,目标通常是在某个确定基准下探讨哪个算法更好,一般会固定训练集,不允许收集更多的数据。

学术界,通常我们可以根据先前公布的基准结果来估计预期错误率。

现实世界中,一个应用的错误率有必要是安全的、具有成本效益的或吸引消费者的。一旦你确定了想要达到的错误率,那么你的设计将由如何达到这个错误率来指导。

常用的性能度量比如准确率、PR曲线、F-score等等。

最重要的是首先要确定改进哪个性能度量,然后专心提高性能度量。如果没有明确的目标,那么我们很难判断机器学习系统上的改动是否有所改进。

2、搭建端到端的工作流程

确定性能度量和目标后,任何实际应用的下一步是尽快建立一个合理的端到端的系统。

第一步:根据数据的结构选择一类合适的模型。

  • 如果项目是以固定大小的向量作为输入的监督学习,那么可以使用全连接的前馈网络。
  • 如果输入有已知的拓扑结构(例如,输入是图像),那么可以使用卷积网络。在这些情况下,刚开始可以使用某些分段线性单元(ReLU 或者其扩展,如Leaky ReLU、PReLU 和 maxout)。
  • 如果输入或输出是一个序列,可以使用门控循环网络(LSTM 或 GRU)。
  • 如果我们的任务和另一个被广泛研究的任务相似,那么通过复制先前研究中已知性能良好的模型和算法,可能会得到很好的效果。例如,用ImageNet 上训练好的卷积网络的特征来解决其他计算机视觉任务。

第二步:选择优化算法。比如具有衰减学习率以及动量的 SGD 、Adam 算法。

第三步:加入正则化。除非训练集包含数千万以及更多的样本,否则项目应该在一开始就包含一些温和的正则化,用来降低泛化误差,比如:

  • early stopping(提前终止训练):当验证集上的误差在事先指定的循环次数内没有进一步改善时,算法就会终止训练。

  • Dropout :提供了一种廉价的Bagging集成近似,能够训练和评估指数级数量的神经网络。

  • Batch Normalization(批标准化):BN对优化性能有着显著的影响,特别是对卷积网络和具有 sigmoid 非线性函数的网络而言。虽然在最初的基准中忽略批标准化是合理的,然而当优化似乎出现问题时,应该立刻使用批标准化。批标准化有时也能降低泛化误差,此时可以省略 Dropout 步骤,因为用于标准化变量的统计量估计本身就存在噪声。

3、确定性能瓶颈,并根据观察进行反复改动

先评估训练集上的性能。如果模型在训练集上的性能就很差,学习算法都不能在训练集上学习出良好的模型,那么就没必要收集更多的数据。可以考虑增大模型规模、调整学习率等超参数。

如果训练集上的性能可以接受,再评估测试集上的性能。如果测试集上的性能可以接受,则完成任务。如果训练集上的性能可以,但测试集上的性能不够,可以考虑收集更多数据。如果无法收集更多数据,可以考虑降低模型大小,或者改进正则化。

如果要收集更多数据,建议在对数尺度上考虑训练集的大小,例如在后续的实验中倍增样本数目。

通常,最佳性能来自正则化得很好的大规模模型,比如使用 Dropout 的神经网络。

3.1 选择超参数

大部分深度学习算法都有许多超参数来控制不同方面的算法表现。有些超参数会影响算法运行的时间和存储成本。有些超参数会影响学习到的模型质量,以及在新输入上推断正确结果的能力。

有两种选择超参数的基本方法:手动选择和自动选择。

手动选择超参数

手动选择超参数需要了解超参数做了些什么,以及机器学习模型如何才能取得良好的泛化。

手动搜索超参数的目标:通常是最小化受限于运行时间和内存预算的泛化误差,调整模型的有效容量以匹配任务的复杂性。

模型的有效容量受限于三个因素:模型的表示容量、学习算法成功最小化训练模型代价函数的能力以及代价函数和训练过程正则化模型的程度。

大部分超参数可以通过推理其是否增加或减少模型容量来设置。下图为各种超参数对模型容量的影响:


最常用的超参数就是学习率。当学习率过大时,梯度下降可能会不经意地增加而非减少训练误差。在理想化的二次情况下,如果学习率是最佳值的两倍大时,会发生这种情况 (LeCun et al., 1998b)。当学习率太小,训练不仅慢,还有可能永久停留在一个很高的训练误差。

自动选择超参数

自动选择超参数算法大大减少了解这些想法的需要,但它们往往需要更高的计算成本。比如网格搜索、随机搜索、基于模型的超参数优化等。

3.2 调试策略

当训练集上有很大的误差时,我们需要确定问题是真正的欠拟合,还是算法实现错误。调试策略一般就是用来检查这个问题。

我们可以设计一种足够简单的情况,能够提前得到正确结果,判断模型预测是否与之相符;我们也可以设计一个测试,独立检查神经网络实现的各个部分。

一些常用的调试策略如下:

  • 可视化计算中模型的行为:当训练模型检测图像中的对象时,查看一些模型检测到部分重叠的图像。在训练语音生成模型时,试听一些生成的语音样本。直接观察机器学习模型运行其任务,有助于确定其达到的量化性能数据是否看上去合理。

  • 可视化最严重的错误:通过查看训练集中很难正确建模的样本,通常可以发现该数据预处理或者标记方式的问题。

  • 拟合极小的数据集:通常,即使是小模型也可以保证很好地拟合一个足够小的数据集。如果训练的模型不能正确地再现一个单独的样本,那很有可能是算法实现方面的错误。

  • 监控激活函数值和梯度的直方图:可视化神经网络在大量训练迭代后(也许是一个轮)收集到的激活函数值和梯度的统计量往往是有用的。隐藏单元的预激活值可以告诉我们该单元是否饱和,或者它们饱和的频率如何。


  1. 《深度学习》Ian Goodfellow ↩︎

  2. Andrew Ng. (2015). Advice for applying machine learning. ↩︎

调参方法论:如何提高机器学习模型的性能?相关推荐

  1. 提高机器学习模型性能的五个关键方法

    提高机器学习模型性能的五个关键方法 1. 数据预处理 2. 特征工程 3. 机器学习算法 4. 模型集成与融合 5. 数据增强 以下是各个方面的具体分析和方法: [ 说明:1.这里主要是各个关键方法的 ...

  2. DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优

    DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优 目录 基于keras对LSTM算法进行超参数调优 1.可视化LSTM模型的loss和acc曲线

  3. DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏)

    DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏) 目录 神经网络的参数调优 1.神经网络的通病-各种参数随机性 2.评估模型学习能力

  4. DL之DNN优化技术:利用Dropout(简介、使用、应用)优化方法提高DNN模型的性能

    DL之DNN优化技术:利用Dropout(简介.入门.使用)优化方法提高DNN模型的性能 目录 Dropout简介 Dropout使用 Dropout应用 Dropout简介 随机失活(dropout ...

  5. DL之DNN优化技术:利用Batch Normalization(简介、入门、使用)优化方法提高DNN模型的性能

    DL之DNN优化技术:利用Batch Normalization优化方法提高DNN模型的性能 目录 Batch Normalization简介 Batch Normalization入门 Batch ...

  6. python朴素贝叶斯调参_邹博机器学习升级版II附讲义、参考书与源码下载(数学 xgboost lda hmm svm)...

    课程介绍 本课程特点是从数学层面推导最经典的机器学习算法,以及每种算法的示例和代码实现(Python).如何做算法的参数调试.以实际应用案例分析各种算法的选择等. 1.每个算法模块按照"原理 ...

  7. 【2 - 随机森林 - 案例部分:随机森林在乳腺癌数据上的调参】菜菜sklearn机器学习

    课程地址:<菜菜的机器学习sklearn课堂>_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现 第二期:随机森林在sklearn中的实现 ...

  8. python 随机森林调参_python的随机森林模型调参

    一.一般的模型调参原则 1.调参前提:模型调参其实是没有定论,需要根据不同的数据集和不同的模型去调.但是有一些调参的思想是有规律可循的,首先我们可以知道,模型不准确只有两种情况:一是过拟合,而是欠拟合 ...

  9. 【调参实战】那些优化方法的性能究竟如何,各自的参数应该如何选择?

    大家好,欢迎来到专栏<调参实战>,虽然当前自动化调参研究越来越火,但那其实只是换了一些参数来调,对参数的理解和调试在机器学习相关任务中是最基本的素质,在这个专栏中我们会带领大家一步一步理解 ...

最新文章

  1. 两小时搞定负载均衡51CTO技术沙龙现场视频2
  2. centos6.8 yum mysql7_Centos6.8通过yum安装mysql5.7
  3. tensorflow 就该这么学--2
  4. Jenkins实战演练之Linux服务器快速搭建
  5. 【HDU - 6119】小小粉丝度度熊 (区间合并,尺取,思维)
  6. 周末项目:使用scikit-learn进行手语和静态手势识别
  7. JNI开发笔记(三)--JNI工程的框架分析
  8. SPSS教程—进行皮尔逊相关性分析的步骤
  9. Java接口组装一台计算机编写各组件厂商分别实现CPU,EMS,HardDisk接口
  10. 深度 | 面目全非自动化
  11. java写安卓脚本,一文全懂
  12. java 找不到符号
  13. 微信公众平台之模拟登录
  14. netstat -ano 查看端口是否被占用
  15. 【渝粤题库】广东开放大学 工程经济 形成性考核
  16. HCIP-DATACOM H12-831(161-180)
  17. [庆国庆]来生情缘-温情女儿国
  18. 水哥:用好泳道图,轻松化解复杂系统的业务流程梳理 | 真北敏捷群分享
  19. 2023.1.31 机械系统中应用的零部件
  20. 积极推进市域治理现代化,全力打造国家治理体系新局面

热门文章

  1. 建立简单的VLAN通信
  2. 【斗医】【3】Web应用开发20天
  3. VC学习笔记:文本图形
  4. TyepScript入门教程 之 async await
  5. jdk并发包里常用的类
  6. Java反射示例教程
  7. Spring 处理请求和响应相关的注解
  8. MySQL压缩包安装,MySQL8和MySQL5安装,端口3306和3307
  9. 【Java】判断学生成绩等级
  10. 【非公开】#include