谁应该学习本课程?
了解本课程的简要概述及其目标受众。
目标受众
本课程旨在提升机器学习系统的鲁棒性,并增强你对工作成果的信心。课程内容面向具备机器学习和软件工程经验的人员,帮助他们构建可靠的机器学习系统。
什么是防御性编程?
编写可靠的软件也被称为防御性编程。
这一概念源于防御性驾驶。在防御性驾驶中,你始终假定无法预知其他司机的行为,因此要采取措施确保即使他人做出危险操作,你也不会受到伤害。即便问题出在别人身上,你也主动承担起保护自己的责任。在防御性编程中,核心思想是:当一个程序模块接收到错误的数据时,它不会因此受损,即使这些错误数据是由其他模块造成的。
——Steve McConnell,《代码大全》
我们将 Steve McConnell 提出的这一精彩比喻延伸至机器学习领域。作为机器学习从业者,我们希望所构建的系统能够抵御各种潜在风险(例如人为错误、意外使用场景,甚至外部环境的变化)。
本课程涵盖哪些内容?
我们将系统讲解以下主题:
-
与机器学习无关的通用软件测试:这类测试用于验证软件功能是否符合预期,包括单元测试、集成测试、模拟(mocking)和冒烟测试等。它们不专属于机器学习系统,适用于所有类型的软件。
-
机器学习专用测试:专门用于验证机器学习模型准确性和性能的测试方法,包括行为测试、回归测试和数据验证。
-
测试最佳实践:我们将探讨何时添加测试、应优先添加哪些测试,以及如何判断测试覆盖是否充分。同时会讲解如何处理不稳定的测试(flaky tests)——即结果不一致的测试用例,并介绍如何通过 CI/CD 实现测试自动化。
-
运行时检查:在程序运行期间进行的正确性验证,包括断言、边界检查、类型检查和性能检查。这些检查有助于开发者在问题影响生产环境之前发现并修复缺陷。
-
机器学习流水线的调试:调试是指识别和修复机器学习系统中的错误,包括定位问题根源、实施修复措施,并验证问题是否真正解决。
-
机器学习流水线的监控:持续跟踪数据、服务和模型的健康状况。监控内容包括模型漂移(模型性能随时间下降的现象)和数据质量控制(确保输入流水线的数据高质量且无错误)。
本课程不会涉及纯粹的建模相关内容,例如模型评估(在特定数据集上评估机器学习模型性能的过程)、指标(metrics)(解决具体问题时衡量模型表现的具体度量方式),或数据/模型版本控制(记录实验过程中数据和模型变更的过程)。尽管这些主题非常重要,但并非本课程的重点。