误差归因的一般情况
以下是误差归因的一般步骤。 假设在流水线中有三个步骤 A,B 和 C,其中 A 直接输出到 B,B直接输出到 C.
对于系统在开发集上存在的每个错误样本:
- 尝试人为修改 A 的输出为 “完美” 输出(例如,猫的 “完美” 边界框),并在此输出上运行流水线其余的 B,C 部分。 如果算法现在给出了正确的输出,那么这表明,只要 A 给出了更好的输出,那么整个算法的输出就是正确的;因此,你可以将此误差归因于组件 A. 否则,请继续执行步骤 2.
- 尝试人为修改 B 的输出为 “完美” 输出。如果算法现在给出正确的输出,则将误差归因于组件 B. 否则,继续执行步骤 3.
- 将误差归因于组件 C.让我们来看一个复杂一点的例子:
你的自动驾驶汽车将使用上面的流水线技术。如何根据组件进行误差分析来决定专注于哪个(些)组件呢?
你可以将三个组件映射到 A, B, C,如下所示:
A:检测汽车B:检测行人C:规划汽车路径
按照上述程序,假设你在封闭的轨道上对你的汽车进行测试,发现汽车选择了一个比熟练司机更刺耳的转向方向。在自动驾驶领域,这种情况通常被称为场景(scenario)。接着你需要:
- 尝试人为修改 A (检测汽车)的输出,使之成为 “完美” 输出(例如,手动进入并告诉它其他汽车在哪里)。像之前一样运行流水线其余的 B,C 部分,但是允许 C (规划路径)使用 A 现在的完美输出。如果算法现在为汽车规划出一条更好的路径,那么这表明,如果 A 给出更好的输出,整个算法的输出会更好;因此,你可以将此误差归因于组件 A. 否则,继续执行步骤 2.
- 尝试人为修改 B (检测行人)的输出,使之成为 “完美” 输出。如果算法现在给出了正确的输出,那么将误差归因为组件 B.
- 将误差归因于组件 C.ML 流水线的组件应该按照有向无环图(DAG)排序,这意味着你应该能够以某种固定的从左到右的顺序来计算它们,并且后面的组件应该只依赖于早期组件的输出。只要组件到 A->B->C 顺序的映射遵循 DAG 顺序,那么误差分析就没问题。但如果你交换 A 和 B,可能会得到略微不同的结果:
A:检测行人(以前是检测汽车)
B:检测汽车(以前是检测行人)
C:规划汽车路径
但是这个分析的结果仍然是有效的,并且可以很好地指导你把注意力集中在哪里。
当前内容版权归 吴恩达教授(Andrew Ng) 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 吴恩达教授(Andrew Ng) .