收益:
- 能够通过四大支柱(种子固定、数据版本控制、介质冷冻、实验监控)确保重现性,并在重复相同的运行时产生相同的结果
- 能够将模块的所有部分(指标、数据、模型、LLM 组件、评估、公平性、安全性、分发、监控)组合到端到端链中
- 能够在每一站验证关键决策是否由人员做出,并以可审核的方式记录项目
机器学习项目最潜在的失败不是崩溃,而是崩溃。 “没有再次得到相同的结果。”如果您无法重现三个月前投入生产的模型今天的分数,那么您就无法真正控制该模型。在这个结束单元中,我们深化了可重复性:能够使用相同的输入可靠地获得相同的结果,并将整个模块结合到端到端的项目规则中。
为什么重现性很困难
在普通软件中,相同的代码给出相同的输出。在机器学习中,还有更多变量决定结果:
- 随机性:数据洗牌、权重初始化、数据分割——都依赖于随机性。
- 数据:相同的代码产生具有不同数据版本的不同模型。
- 环境:库版本、硬件(CPU/GPU)、甚至操作系统都可以改变结果。
- 隐藏案例:未保存的超参数、手动预处理步骤、未注明的选择。
可重复性并不是“可有可无”,而是科学和工程的必要条件。无法重现的结果就是无法证明的主张。
可重复性的四大支柱
1.修复随机性。将所有随机种子设置在一处:数据分割、模型初始化、数据洗牌。固定种子是“重复相同运行相同结果”保证的基础。
2. 对数据进行版本控制。记录每个实验执行的数据版本(单元 2 中的数据版本控制)。 “最新数据”含糊不清; “数据版本 v3,哈希 abc123” 是准确的。
3. 冷冻培养基。将所有依赖项固定到其确切版本(例如,requirements.txt 中的 numpy==1.26.4 等确切版本或容器映像)。 “最新版本”有一天会打破一切。
4. 跟踪一切(实验跟踪)。自动保存每个实验:代码版本(git commit)、数据版本、所有超参数、指标和输出结构。 MLflow、权重和偏差等实验跟踪工具系统地执行此操作。如果不注册,“哪种设置最好”的问题仍然没有答案。
注意:“我稍后会记得”是最昂贵的谬论。两周后,您将不记得您使用了哪个种子、哪个数据、哪个超参数。自动跟踪消除了对内存的依赖。
弱方法/强方法
弱:“我找到了最好的模型,它在笔记本上,我认为它的分数是89%。”
Strong:“在实验跟踪工具中运行 #147:git commit a3f9c,数据版本 v3(哈希 abc123),种子 42,注册所有超参数,测试 PR-AUC 0.887。当我再次运行相同的命令时,我一点点得到相同的结果。该模型取决于注册表中的这次运行。”
区别在于:在强方法中,结果不是基于内存,而是基于固定且受监控的链。每个人每次都可以产生相同的结果。
端到端项目:模块组合
现在让我们将整个模块合并到一个项目流程中。真正的机器学习系统会经历这些停止点,每个停止点都建立在前一个停止点的基础上:
- 问题定义:我们正在解决什么,如何衡量成功(单元 3:正确的指标、业务背景)。指标和阈值从一开始就很明确。
- 数据管道:收集、验证、清理、无泄漏分区、版本控制(单元 2)。
- 模型开发:训练、基线比较、交叉验证、硬种子(单元 3 + 本单元)。
- LLM 组成部分(如果适用):RAG(第 4 单元)和/或代理(第 5 单元);如有必要,进行微调(第 6 单元)。
- 评估:具有边缘和安全案例的评估集群、LLM 系统中的多层评估(单元 8)。
- 正义和道德审计:分组分析、模型卡、可解释性(单元 10)。
- 安全审计:及时注入、隐私、供应链(第 9 单元)。
- 分发:打包、逐步分发、回滚、模型注册(第7单元)。
- 监控:三层监控,漂移报警(8个单元)。
- 再现性:整个链(本单元)的种子、数据版本、媒体和实验跟踪。
在这个流程中,人工智能在每一站都是加速器和蓝图生成器;但指标选择、数据决策、公平优先级、部署阈值和发布批准——关键决策仍然由人类决定。这就是该模块的本质。
文档:未来会感谢你
一个好的 ML 项目会自我记录。至少应编写以下内容:问题和成功标准、数据源和版本、模型选择和理由、评估结果(包括子组)、已知限制和风险、部署和检索程序、监控计划。这份文档是六个月后返回该项目的人(也许是你)最好的朋友。
三个迷你箱子
情况 1 - 结果丢失。一位工程师训练了一个很棒的模型,但他没有修复种子,也没有保存数据版本。当他离职时,没有人能够重现这一结果;该模型成为“黑匣子传奇”,并最终从头开始构建。几周的时间都被浪费了。教训:不可重现的结果就是不存在的结果。
案例 2 - 环境崩溃。一个团队尚未修复依赖关系。当库自动更新时,模型输出会悄然发生变化,生产也会中断。花了好几天才发现问题。当依赖关系被冻结并用最终版本容器化时,问题不再出现。教训:冻结环境。
案例 3 - 监控的力量。一个团队自动监控每个实验。三个月后,在监管审计中,他们回答了“使用什么数据、使用什么设置、在哪些组中获得了什么性能?”的问题。几分钟内即可完成完整录音。检查很顺利。教训:监控是一种合规工具,而不仅仅是一种工程工具。
可复制模板
对此 ML 项目进行可重复性检查。- 所有随机种子是否都是固定的(拆分、初始化、洗牌)?- 数据版本是否已确定?- 依赖项是否冻结为精确版本?- 每个实验(代码提交、数据、超参数、指标)是否都被跟踪?写下如何修复每个缺失列的具体步骤。项目结构:[描述]
为这个端到端机器学习项目制定计划框架。问题:[描述]涵盖以下站点并标记每个站点的人类决策位置:问题/指标、管道、模型、(RAG/代理/微调?)、评估、公平性、安全性、分布、监控、再现性。写下每个站点的主要风险和验证步骤。
为此项目制作技术文档模板。部分:问题+成功标准、数据(源+版本)、模型选择+理由、评估(包括子组)、已知限制+风险、部署+回滚、监控计划。将每个部分的需要填写的字段作为问题给出。
检查我的实验监控设置:是否在每次运行时自动保存:git 提交、数据版本/哈希、所有超参数、所有指标、环境(库版本)?当我再次运行相同的运行时,会得到相同的结果吗?设置:[描述]。列出缺陷并纠正。
重现性列表
专栏
什么是固定的
车辆示例
随机性
所有种子
结种
数据
数据版本/哈希值
数字化VC
环境
库版本
需求引脚,Docker
监控
代码+数据+设置+指标
MLflow、W&B
常见错误
- 不固定种子。结果无法重复。
- 不保存数据版本。 “用什么数据?”仍然没有答案。
- 不冻结成瘾。更新会悄悄地破坏一切。
- 将实验留在记忆中。两周后,一切都不记得了。
- 将关键决策留给人工智能。指标、正义和分配决策应该由人来决定。
- 推迟文档。未来的团队(和你)付出代价。
综上所述
可重复性是严肃的机器学习工程的标志:不可重复的结果是无法证明的主张。它有四列——修复随机性、版本数据、冻结环境、跟踪每个实验。端到端项目将该模块的所有环节(指标、数据、模型、LLM 组件、评估、公平性、安全性、分发、监控)结合在一个互连的链中;人工智能是每一站的加速器,但关键决策仍由人类做出。记录一切 - 供未来的团队和审核使用。该规则是维持您在整个模块中学到的所有内容的框架。
应用任务
根据四个可重复性支柱检查 ML 项目:种子是否不可变、数据是否版本化、环境是否冻结、实验是否被跟踪?修复任何缺失的列并证明您可以运行相同的运行两次并获得相同的结果。然后在一页上输出项目的端到端流程(10站),并在每一站标记“人类决策在哪里”。最后,写一份简短的技术文档草案。
清单
- [ ] 所有随机种子均已修复。
- [ ] 每次实验都会记录数据版本/哈希值。
- [ ] 依赖关系被冻结为固定版本(pin/container)。
- [ ] 自动监控每个实验(代码+数据+设置+指标)。
- [ ] 当我重复相同的运行时,我得到相同的结果。
- [ ] 我验证并记录了端到端流程中的关键决策是由人类做出的。
模块考试
1. 作为机器学习工程师,在工作流程中定位人工智能的最佳方法是什么?
- A)人工智能是低风险业务的加速器;指标、数据和生产等关键决策保持验证并留给人类 ✔
- B)只要AI输出看起来不错,就不需要验证
- C) 将模型投入生产的决定留给人工智能可以节省时间。
- D)人工智能仅对编写文本有用,与数据和模型工作无关
描述:人工智能是低风险、易于验证的任务(例如代码、数据摘要和文档)的强大加速器;然而,影响金钱、保密性和法律责任的决策的责任(例如指标选择、哪些数据进入训练以及将模型投入生产)由合格的工程师和团队负责。每个输出不应在未经验证的情况下使用。
2. 为什么模式验证要放在数据管道的开头?
- A)因为它直接提高了模型的准确性
- B)因为它使得数据版本控制变得不必要
- C) 因为它能够在最早、最便宜的时间点捕获损坏的数据,并防止其泄漏到后续步骤中 ✔
- D)因为它消除了标签的需要
解释:越早发现损坏的数据,修复它的成本就越低。模式验证通过拒绝行开头的预期类型和范围之外的数据(例如,随着单位变化,价格移动 100 倍),从而防止损坏的数据悄悄泄漏到训练或生产中;在生产中发现同样的错误,其代价要高出许多倍。
3. 在涉及时间(时间序列)的问题中,将数据划分为训练和测试的正确方法是什么?
- A)使用随机分割,因为它始终是最公平的方法
- B) 使用时间分割:通过过去的训练和未来的测试来防止泄漏✔
- C)使用所有数据作为训练和测试
- D)在训练之前将测试数据合并到缩放参数中
说明:时间序列上的随机分割为模型提供了“预见未来”的优势,而这种优势在生产中永远不会发生,并人为地夸大了指标(时间泄漏)。正确的是时间划分:用过去训练,用未来测试。这衡量了使其保持在生产状态的实际性能。
4. 为什么正类率为 1.5% 的欺诈检测模型的准确性会产生误导?
- A)因为不平衡数据的准确性总是很低
- B) 因为准确度只能用于回归问题
- C) 因为精度计算需要大量的处理能力
- D) 即使是预测多数类别的微不足道的模型也可能非常准确,从而隐藏了真正的成功✔
解释:在不平衡的数据上,即使是“将一切都视为负面”的基本模型也能获得约 98.5% 的准确率,但不会发现任何欺诈行为。因此,在不平衡分类中,使用精度、召回率、F1或PR-AUC来代替精度,并且每个度量根据基本模型来解释。
5. 为什么在讨论模型指标时基线比较至关重要?
- A)因为基础模型总是比真实模型更好
- B) 因为只有与简单的基线模型相比才能清楚衡量指标是否有意义 ✔
- C)因为基础模型使得交叉验证变得不必要
- D) 因为基本模型在每份报告中都是法律要求的
说明:指标本身并没有好坏之分;根据基本模型,它是好还是坏。 “85%正确”这句话意味着,如果基本模型已经达到 84%,则几乎毫无价值;如果达到 50%,则完美。如果没有比较锚点,该指标就毫无意义。
6. RAG(检索增强生成)系统的生产提示中应包含的最关键的安全要素是什么?
- A) 指示仅依赖给出的来源,如果来源不存在则说“我不知道”,并引用来源 ✔
- B)告诉模型产生尽可能长且有创意的答案
- C)该模型优先考虑其自身的教育知识而不是资源
- D) 执行作为命令带来的文件中的所有指令
解释:RAG 最重要的一条指令是告诉模型仅依赖给定的来源,如果该信息不在来源中,请说“我不知道”并引用来源而不是弥补。如果没有这个三元组,模型可能会忽略上下文并产生幻觉,并且答案变得无法验证。
7. RAG 系统给出错误的答案。从哪里开始诊断最好?
- A)首先测量获取(Recall@K):正确的部分是否到达? ✔
- B) 立即更换更大的型号
- C) 随机更改提示并继续尝试
- D)通过微调将所有文档嵌入到模型中
说明:RAG 最薄弱的环节通常是获取,而不是生产。如果从未提供正确的部分,则无论提示改进了多少,模型都无法生成该信息。因此,首先测量Recall@K,看看正确的部分是否到达;如果获取良好,则检查生成和提示。
8. 向代理提供工具时,哪些操作应经过人工批准?
- A)没有;代理必须能够自主执行每一个动作
- B) 仅限可逆操作,例如读取和搜索数据
- C) 不可逆转或影响较大的行为,例如转账、删除、发送 ✔
- D)仅涉及计算的操作
描述:操作按风险级别分开。可自主完成阅读、检索、计算、生成草稿等检索任务;然而,不可逆转或影响较大的行为,如转账、发送电子邮件、删除数据、下订单等,需要人工批准。每项不可撤销的行动都必须经过同意。
9. 针对间接提示注入风险的最佳设计方法是什么?
- A) 在系统提示中添加一句“忽略不良指令”即可
- B) 通过依赖外部内容中的指令赋予模型更多的权限
- C) 没有采取任何预防措施,因为注射是无法预防的
- D) 将外部内容隔离为不可靠数据,并以最少的授权、批准和输出控制建立分层防御 ✔
描述:代理或 RAG 处理的外部内容,例如网页、文档、电子邮件等,是不可信数据,可能包含秘密指令。正确的方法是分层防御:将外部内容隔离为具有明确分隔符的“数据,而不是命令”,应用最低限度的授权,将不可逆转的操作与人工批准绑定在一起,并审核输出。一行指令是不够的。
10. 在决定应该使用微调还是 RAG 来解决问题时,主要区别是什么?
- A) 信息问题用 RAG 更好解决,行为/格式问题用微调更好解决 ✔
- B) 每个问题都应该通过微调来解决
- C) RAG仅用于代码生成,微调仅用于翻译
- D) 微调总是可以比 RAG 更新更便宜、更快
说明:微调在教授模型新信息方面较弱且存在风险;但在教学行为、形式、语气和风格上却很强大。 “模特公司不知道我们的数据”是一个信息问题,属于RAG。 “让模型始终以我们严格的格式输出”是一个行为问题,也是微调的候选者。此外,在微调之前应先进行快速和少量的射击。
11. 将新模型投入生产时,为了安全部署,哪些是必需的?
- A) 如果模型测试良好,直接开启至100%流量
- B) 部署后根本不设置监控
- C) 分阶段部署(影子/金丝雀)和预先测试的回滚计划 ✔
- D)即使未达到评估阈值也发布模型
说明:直接向所有流量开放新模型有风险;如果错了,每个人都会受到影响。正确的是,它是一个渐进的发行版(影子、金丝雀),并且每个发行版都有经过测试的回滚计划。没有回拨计划的分配是不完整的;当模型在生产中出现意外行为时,能够在几分钟内恢复到以前的版本可以保护用户。
12. 机器学习模型如何在生产中“默默地”失败?如何解决这个问题?
- A)模型崩溃;服务器日志显示了这一点
- B)通过在不犯错误的情况下做出错误的预测; ✔ 捕获操作、输入和输出分层监控
- C)模型永远不会默默地失败,总是发出警报
- D)仅监控延迟就足以捕获任何降级
解释:模型可能会因为产生不正确的预测而失败,而不会崩溃或给出错误;造成这种情况的主要原因是数据漂移和概念漂移。仅仅监控操作指标(延迟、错误率)是不够的;还应该监视输入分布和输出/预测分布。如果实际结果延迟,输入漂移会发出早期警告。
13. 使用LLM作为评委来评估LLM体系时必须遵循什么原则?
- A) LLM-裁判总是正确的,无需人工验证
- B) 裁判员必须仅根据答案长度做出决定。
- C) 当使用裁判时,应完全放弃基于规则的控制和人工评估
- D) 裁判分数应使用人工标记的样本进行校准,并测量其偏差,然后才可以信任 ✔
说明:LLM-裁判也是模特;它可能是幻觉的、有偏见的(倾向于长而自信的答案)并且不一致。因此,裁判分数必须使用人类标记样本进行校准,并且在做出生产决定之前必须测量其系统偏差。未经验证的裁判会给出虚假的信心。
14. 为什么在评估模型偏差时仅考虑整体准确性是不够的?
- A)总体准确度就足够了,因为它总是反映最差群体的表现
- B) 仅总体准确性是不够的,因为它可能掩盖子组之间的系统差异(隐藏歧视)✔
- C)因为准确性是一个与偏差无关的指标
- D)偏差仅来自模型,与数据无关。
解释:总体准确性可能会掩盖子组之间的系统差异。例如,虽然总体准确率为 88%,但召回率在一组中可能为 91%,在另一组中为 67%;该模型系统地错过了该群体。因此,应根据子群体(人口统计/细分)对模型进行评估,并应与利益相关者共同决定应优先考虑哪种正义定义。
15. 为了使 ML 结果可重现,必须同时解决哪四件事?
- A) 仅型号名称、尺寸、价格和发布日期
- B) 仅 GPU 品牌和网速
- C) 仅模型的最终准确率得分;其余的可以保留在记忆中
- D) 随机种子、数据版本、环境(依赖版本)和实验跟踪 ✔
描述:可重复性是通过四个支柱实现的:修复随机种子、版本控制数据(版本/哈希)、冻结环境(精确的库版本/容器)以及跟踪每个实验(代码提交、数据、超参数、指标)。如果没有这条链,就不可能重现相同的结果;不可重复的结果是无法得到证实的主张。