第 6 章 调试 ML 问题 调试 ML 问题
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在 上一章中,我们对第一个模型进行了训练和评估。
要使管道达到令人满意的性能水平非常困难,需要多次迭代。本章的目标就是指导你完成这样一个迭代周期。在本章中,我将介绍调试建模管道的工具,以及编写测试的方法,以确保在我们开始更改管道后,它们仍能正常工作。
软件最佳实践鼓励从业人员定期测试、验证和检查他们的代码,尤其是安全或输入解析等敏感步骤。这一点对于人工智能也不例外,因为模型中的错误可能比传统软件中的错误更难发现。
我们将介绍一些小窍门,帮助您确保管道的稳健性,并确保您可以在不导致整个系统瘫痪的情况下进行尝试,但首先让我们了解一下软件的最佳实践!
软件最佳实践
对于 大多数 ML 项目而言,您将多次重复构建模型、分析其不足之处并加以解决的过程。您还可能不止一次地更改基础架构的每个部分,因此找到提高迭代速度的方法至关重要。
ML 就像其他软件项目一样,您应该遵循久经考验的软件最佳实践。它们中的大多数都可以不加修改地应用于 ML 项目,例如只构建所需的内容,这通常被称为 "保持简单(Keep It Stupid Simple,KISS)"原则。
ML 项目具有迭代性,在数据清理和特征生成算法以及模型选择方面会经历许多不同的迭代。即使遵循了这些最佳实践,仍有两个方面经常会降低迭代速度:调试和测试。加快调试和测试编写速度对任何项目都会产生重大影响,但对 ML 项目来说更为重要,因为模型的随机性往往会将一个简单的错误变成长达数天的调查。
许多 资源可以帮助您学习如何调试一般程序,例如芝加哥大学的简明调试指南。如果您和大多数 ML 实践者一样,选择的语言是 Python,我建议您查阅 Python 标准库调试器pdb 的文档。
然而,与大多数软件相比,ML 代码的执行往往看似正确,却会产生完全荒谬的结果。这意味着,虽然这些工具和技巧适用于大多数 ML 代码,但它们不足以诊断常见问题。我在图 6-1 中对此进行了说明:在大多数软件应用程序中,强大的测试覆盖率可以让我们对应用程序的良好运行充满信心,而 ML 管道可以通过许多测试,但仍然会给出完全不正确的结果。ML 程序不仅要运行,还应该产生准确的预测输出。
图 6-1. ML 流水线在执行过程中可能不会出错,但仍然会出错
在调试过程中,ML 会带来一系列额外的挑战,因此我们将介绍一些有助于调试的具体方法。
特定于 ML 的最佳实践
,与任何类型的软件相比,在人工智能领域,仅仅让程序端到端地执行并不足以让人相信其正确性。整个流水线的运行可能没有任何错误,但却能生成一个完全无用的模型。
比方说,你的程序会加载数据并将其传递给一个模型。模型接收这些输入,并根据学习算法优化模型参数。最后,你训练有素的模型从一组不同的数据中产生输出结果。你的程序在运行过程中没有出现任何明显的错误。问题是,仅仅运行程序,根本无法保证模型预测的正确性。
大多数模型只需接收给定形状的数值输入(例如代表图像的矩阵),并输出不同形状的数据(例如输入图像中关键点的坐标列表)。这意味着,即使数据处理步骤在将数据传递给模型之前破坏了数据,只要数据仍然是数值型的,并且是模型可以作为输入的形状,大多数模型仍然可以运行。 ...