基础原则
机器学习系统呈现出一条看似简单的启发式规律:复杂性往往只是发生转移,而非消失,尽管良好的设计可以消除偶然复杂性。复杂性在数据—算法—机器分类体系的三个领域之间流动:数据体现为信息,算法体现为逻辑,机器体现为物理实现。简化一个领域可能会加重其他领域的负担。人工设计的特征流水线降低了算法复杂性,却需要投入更多数据工程工作。更大的模型能够吸收杂乱的数据,却将复杂性转移到必须训练该模型并提供模型服务的硬件上。这一复杂性守恒启发式规律构成了本书全部内容的出发点。贯穿本书引入的定量界限、模型和原则,描述了复杂性当前所处位置带来的约束。
架构、框架和优化只有遵守硬件、数学和信息论施加的约束,才能取得成功。正如土木工程师不能忽视重力,机器学习工程师也不能忽视支配数据、计算和系统吞吐量的物理定律。第一部分确立了这些基础:它们是机器学习工程中持久有效的物理约束和定量模型,而非随框架演进的最佳实践或因团队而异的观点。第一个约束始于数据本身,在这里,程序与输入之间那条熟悉的边界开始消失。
Principle 原则(英文原版): 数据即代码原则
推论:数据工程需要与软件工程同等的严谨性。数据集应进行版本管理(如使用 Git)、单元测试(数据质量检查)和调试。删除一行训练数据可能改变重新构建的模型,正如删除一行代码可能改变编译产物一样。
如果数据发挥着源代码的作用,那么它就不仅仅是逻辑产物;当数据与计算位于不同位置时,数据的物理属性也会约束系统架构。
Principle 原则(英文原版): 数据引力原则
推论:大型数据集可能成为架构的引力中心。系统可以通过将查询或代码发送到存储层,把计算移向数据,而不是通过反复下载大型数据集,把数据移向计算。
这两条原则共同表明,数据既可以是机器学习系统的逻辑程序,也可以是其物理锚点。第一部分沿着一条依赖链展开这些推论。部署约束决定系统能够在哪里执行;生命周期将这些约束贯穿于问题定义、数据、建模、验证和运行各阶段;数据工程则通过经过版本管理和测试的流水线产物,使这些约束得到落实。忽视任何一个环节,复杂性都会以集成成本的形式重新出现:模型准确却无法执行,工作流无法复现其输入,或流水线的输出不再符合部署条件。