55. 误差归因的一般情况

以下是误差归因的一般步骤。假设管道有三个步骤 A,B 和 C,其中 A 直接输入到 B,B 直接输入到 C。

55. 误差归因的一般情况 - 图1

对于系统在开发集上存在的每个错误样本:

  1. 尝试手动修改 A 的输出为 「完美」 输出(例如,猫的 「完美」 边界框),并在此输出上运行管道其余的 B,C 部分。 如果算法现在给出了正确的输出,那么这表明,只要 A 给出了更好的输出,那么整个算法的输出就是正确的;因此,你可以将此误差归因于组件 A。 否则,请继续执行步骤 2。
  2. 尝试手动修改 B 的输出为 「完美」 输出。如果算法现在给出正确的输出,则将误差归因于组件 B。否则,继续执行步骤 3。
  3. 将误差归因于组件 B。

让我们来看一个复杂一点的例子:

55. 误差归因的一般情况 - 图2

如上图所示,你的自动驾驶汽车算法使用上述管道。 如何根据组件的错误分析来决定要关注哪个(些)组件呢?

你可以将三个组件映射到 A, B, C,如下所示:

  • A:检测汽车
  • B:检测行人
  • C:规划汽车路径

按照上述程序,假设你在封闭的轨道上对你的汽车进行测试的时候出现这种情况:汽车选择了一个比熟练司机更激进的转向方向。在自动驾驶领域,这种情况通常被称为场景(scenario)。接着你需要:

  1. 尝试手动修改 A (检测汽车)的输出,使之成为 「完美」 输出(例如,手动干预并告诉它其他汽车在哪里)。然后像之前一样运行管道其余的 B 和 C 部分,同时允许 C (规划路径)使用 A 现在的完美输出。如果发现算法为汽车规划出一条更好的路径,那么表明,如果 A 给出更好的输出,整个算法的输出会更好;因此,你可以将此误差归因于组件 A。否则,继续执行步骤 2。
  2. 尝试手动修改 B(检测行人)的输出,使之成为 「完美」 输出。如果算法最终给出正确的输出,则将错误归因于组件 B.否则,继续执行步骤3。
  3. 将误差归因于组件 C。

机器学习管道的组件应该根据有向无环图(DAG)排序,这意味着你应该能够以一些固定的从左到右的顺序计算它们,后面的组件应仅依赖于早期组件的输出。只要组件 A -> B -> C顺序的映射遵循 DAG 排序,那么误差分析就没问题。但是假设你交换了 A 和 B,那么结果可能略有不同:

  • A:检测行人(以前是检测汽车)
  • B:检测汽车(以前是检测行人)
  • C:规划汽车路径

但是这种分析的结果仍然是有效的,并能为你的注意力集中在哪里提供了良好的指导。