[Day 12] Error analysis — 错误中学会成长 (咩噗)

To me, error analysis is the sweet spot for improvement. — Donald A. Norman

前言

实务上,我们常常会发现模型的准确率并不会在所有资料的子集都相同,它可能在某个输入条件之下更常犯错,而这样的情况会导致模型不可靠,让我们无法信任其决策结果。
虽然现存的模型评估方法存在许多漏洞,但其中最显而易见的就是使用单个指标来评估模型,毕竟用一个数字就概括整个模型的行为是很偏颇的,而错误分析可以让我们逃离单个准确率指标的窠臼,揭开隐藏在底下的错误分布情形,进而提升纠错、改善模型的效率。
error analysis
*图片来源:Besmira Nushi — Responsible Machine Learning with Error Analysis

错误分析 (Error analysis)

错误分析是模型研发的核心流程,如果做的好,它可以告诉你如何最有效率的改善模型表现。
出乎意料的是,目前大部分的错误分析都是简单粗暴的利用试算表手动作业,以语音辨识为例:
error spreadsheet
其分析步骤如下:

  1. 列出数个在验证集中被预测错误的样本 (包含标签与预测值)。
  2. 对这些样本可能拥有的属性进行假设 (称为 tag),例如背景有车声、人声。
  3. 将预测错误的样本依照上一步的 tag 进行分类 (样本可同时拥有多种属性)。
  4. 在过程中可随时加入新的 tag,例如低频宽,但要记得回头检视先前的样本是否属於此类别。

错误分析也是迭代的过程,可以不断增加新的假设并重新分析:
error analysis iteration
这个过程可以帮助我们了解这些假设是否为错误的来源,以及是否需要进一步处理。
而不断想出新的假设并分析更多资料,就是为了找出能最有效提昇模型表现的 tag,例如前面以 HLP 判断改善背景有车声的资料最能提昇模型表现。

有些 MLOps 工具有提供错误分析功能,让我们不需要手动分析,例如微软的 Error Analysis

做完分析之後

为了尽可能把时间花在刀口上,在错误分析之後需要评估该改善哪些 tag 以及改善的优先顺序,此时可以参考以下指标:

  • 该 tag 在所有错误中占的比例为何?
  • 在所有拥有该 tag 的资料中,错误的比例为何?
  • 该 tag 在所有资料中占的比例为何?
  • 拥有该 tag 的资料的改善空间有多大? (可以用 HLP 衡量)

将上述第 3、4 点指标加入决策的范例如下 (整体准确率改善空间为该类别的改善空间乘上该类别所占的比例):
consider data portion

进行更深度的分析之後,会发现相较於只考虑 HLP,改善背景有车声的资料对整体准确率提昇的帮助变小了!

另外还可以考虑下面几点来找出可以最优先改善的 tag:

  • 可以改善的空间多大。
  • 改善该 tag 准确率的难易度。
  • 改善该 tag 表现的重要程度。

对於该优先改善哪个类别的资料并没有一定的标准,但考量以上指标是一个不错的方向。
当决定好要优先改善哪些资料後,可以使用以下方法进行改善:

  • 收集更多资料。
  • 使用资料增强 (Data Augmentation) 得到更多资料。
  • 改善标注的正确性/资料品质。

明天就让我们来看看对於不同资料的型态可以进行什麽样的增强以增加资料量吧。
/images/emoticon/emoticon30.gif

参考资料


<<:  Day 27 - [实战练习] Pricing Sections

>>:  SCSS

16 - EditorConfig - 配置输入方式

不同的编辑器预设的输入方式都不尽相同,因此同个专案的同个档案使用不同的编辑器修改,可能会因为输入的格...

Day 13 - 基本语法8(函式2)

昨天我们学完了函式的基础用法以及讲解,今天要写的是进阶用法。 会这样分两天是因为我觉得有一点难,可以...

Day17-sklearn(2)LabelEncoder、train_test_split

今天要介绍这两个sklearn的方法 也是资料前处理常用到的 LabelEncoder: 就如同字面...

Ruby基本介绍(四)

基本上大叔宅男不是很想放男团K-pop, XD 本篇会提到的 定义方法 回圈(loop) 定义方法 ...

预编译

预编译发生在何时? 执行全域前一刻,做全域的预编译;执行function前一刻,做function的...