机器学习中踩过的坑,如何让你变得更专业?
作者头像
  • 代梦阳
  • 2020-06-06 17:14:17 3

在机器学习领域,只有经历过一些错误,我们才能变得更加专业。数据科学家 Archy de Berker 在本文中分享了自己及其同行在机器学习探索中遇到的一些常见问题。他的目标是帮助读者了解一些只有深入了解机器学习领域才能发现的有趣错误。

本文并非面向初学者,如果你希望理解其中的内容,建议在 PyTorch 或 TensorFlow 上进行更多实践,以熟悉破坏模型的过程。

本文主要关注的是绿色分布的错误,但也涉及到紫色分布和黄色分布的部分内容。

一、机器学习中的常见错误

Berker 将机器学习中出现的各种错误分为三类,按照严重程度从低到高排列。

1. 只浪费时间的错误

这类错误包括命名和缓存失效问题,其中最常见的是形状错误,通常是由于矩阵相乘时尺寸不匹配导致的。虽然这类错误很容易识别和修复,但它们会反复出现,因此需要持续注意。

2. 导致结果不准确的错误

这类错误会导致模型结果不准确。例如,如果在未进行超参数调优的情况下,增加模型中的特征数量,可能会导致性能下降。错误的模型结果会随着时间推移逐渐恶化,因此早期发现问题至关重要。

3. 让人误以为模型已经完美的错误

这类错误会让用户高估模型的性能。这种错误通常很难发现,因为人们往往更愿意相信看似完美的结果。然而,实际上可能是由于过拟合或其他原因导致的。确认偏差是这种错误的主要原因之一。

二、机器学习的生命周期

机器学习过程可以分为三个阶段:获取数据、将数据输入模型、通过目标评估模型。

接下来我们将讨论每个阶段中一些常见的错误。

1. 输入什么:评估目标

机器学习的核心是不断优化损失函数。然而,损失函数并不是最终的优化目标,它只是一个近似值。例如,在分类任务中,通过交叉熵损失函数优化训练集或验证集,但在实际应用中,我们更依赖测试集上的表现或 F1、AUC 等评价指标。在实际优化过程中,如果损失函数已经不能代表模型的真实表现,那么问题就严重了。

一些导致模型更差的做法包括:

  • 混合训练集和测试集:这种做法虽然容易实现,但会导致模型在复杂环境中的表现不佳。
  • 错误使用损失函数:尽管这种情况较少出现,但仍然需要谨慎。例如,混淆了回归函数和分类函数。

2. 选择合适的评估目标

不同的任务使用不同的损失函数,评估模型性能时通常会结合多个评价指标。例如,机器翻译首选 BLEU 作为评价目标,而自动文摘则采用 ROUGE。评价指标比损失函数更容易理解,因此建议尽可能多地记录日志,以确保模型具有良好的泛化能力。

3. 避免评估目标的错误

  • 首先运行所有评估目标:在没有任何训练的情况下,如果模型表现良好,那么一定有问题。
  • 记录所有过程日志:机器学习是一门定量学科,但数字有时会欺骗人,因此所有可能的数字都应记录下来,但要以易于理解的方式记录。
  • 研究验证集:通过验证集上的表现来确定最佳和最差样本,了解样本情况,并使用量化置信度的方法来评估模型的表现。

三、模型

目前很多课程和文章都侧重于建模,但实际上,作为机器学习从业者,大部分时间都在处理数据和目标,而不是研究创新的算法。

1. 模型错误类型

模型错误类型包括:

  • 包含不可微分运算操作的模型:深度学习模型中的一切都必须是端到端可微分的,以支持反向传播。例如,Keras Lambda 层可能会破坏反向传播。
  • 在测试时不关闭 dropout:测试数据时需要关闭 dropout,否则可能导致随机结果。
  • 维度参数错误:不同框架在样本数、序列长度和通道数上有不同的约定,有些框架提供了调整空间,但其他框架不允许随意调整。

2. 避免模型的错误

  • 模块化,可测试:编写结构合理、易于测试的代码。
  • 维度注释:将维度注释加入到代码中,以确保清晰理解哪些维度应该更改,哪些不应该更改。
  • 小数据过拟合测试:确保模型在非常小的数据集上过拟合,排除明显的错误。

四、数据

1. 首先了解数据

在建模之前,应该已经熟悉数据。数据探查可以帮助识别一些问题,例如数据不平衡或数据偏见。

2. 如何加载数据

有效加载和预处理数据是机器学习工程中较困难的部分之一,需要在效率和透明度之间权衡。

3. 加快数据加载的方法

  • 不要加载当前正在加载的数据:避免数据丢失或重复加载。
  • 正确存放数据:不要将所有数据放在一个目录中,以提高效率。
  • 适当的预处理:在预处理过程中记录所有形状,确保在测试时能够使用相同的方式。

五、结论

总结机器学习中应遵循的五条指导原则:

  1. 从小处着手,实验会停止得很快:减少循环时间可以及早发现问题并验证假设。
  2. 了解数据:不了解数据就无法做好建模工作。
  3. 记录尽可能多的日志:训练过程的信息越多,越容易识别异常并进行改进。
  4. 注重简单性和透明性:不要为了节省时间而牺牲代码的透明性。
  5. 如果模型表现优秀令人难以置信,那可能就是有问题:机器学习中存在很多错误可能会“捉弄”你,成为一名优秀的科学家意味着要理性地发现并消除这些错误。

推荐阅读:Andrej Karpathy 的博客《A Recipe for Training Neural Networks》,深入探讨了机器学习的常见错误。

    本文来源:图灵汇
责任编辑: : 代梦阳
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
变得机器如何学习专业
    下一篇