说明:本文图片和内容来源 Human-in-the-Loop Machine Learning
Human-in-the-Loop Machine Learning Active learning and annotation for human-centered AI by Robert (Munro) Monarch, June 2021
介绍Human-in-the-Loop的目标,学习过程,适用场景,主动学习的策略,迁移学习,设计标注界面的基本原则以及参考案例(可运行的代码)和资料。
1 为什么需要人在回路的机器学习?
结合人类和机器智能的策略,可以帮助我们
- 利用机器学习辅助和改进人类工作,提高效率。
- 使用人类输入提高机器学习模型的准确性
- 更快达到机器学习模型的目标精度
2 人在回路的学习过程是怎样的?
人在回路的学习过程的基础是主动学习和标注策略,主动学习是决定标注哪些数据的过程,标注是指对原始数据标注使其成为机器学习训练数据的过程。确保标注质量的方法是确保有合适的人员完成标注任务。而迁移学习可以避免冷启动,使已有的机器学习模型适应新任务。
图1.1 人在环路中预测数据标签过程的心智模型
如图所示,采样正确的数据进行标注,使用该数据训练模型,并使用该模型采样更多数据进行标注。主动学习是迭代式的,在主动学习的每一次迭代中,都会识别所选数据,并加上人类生成的新标签,然后用新的数据训练模型,并重复这一过程。
搜索引擎是人在环路机器学习的一个典型案例。
3 何时使用主动学习?
在处理很多问题时,我们都会面临缺乏数据的情况。如果现实世界只有小部分被标注的数据,随机抽样无法覆盖数据多样性,那么主动学习是我们经常需要采用的方法。主动学习可以识别人工标注的潜在错误。如果基线模型已经足够准确,或者更多训练数据的成本超过了更准确模型可能提供的任何价值,可以停止主动学习迭代。
图1.5 机器学习知识象限
通过算法解决问题:如何建立更准确、可解释的模型,并利用现有模型?
通过主动学习和标注解决问题:如何采样最佳的未标注数据点供人类审查?
在现有模型之外解决问题:哪些外部模型和指标可以帮助增强训练数据?
在现有模式内解决问题:当前模式的自信或困惑在哪里?
4 主动学习的策略
主动学习的参考代码
pytorch_active_learning/active_learning.py at master · rmunro/pytorch_active_learning · GitHub
pytorch_active_learning/active_learning_basics.py at master · rmunro/pytorch_active_learning · GitHub
pytorch_active_learning/advanced_active_learning.py at master · rmunro/pytorch_active_learning · GitHub
4.1 不确定性采样
用于识别当前机器学习模型中接近决策边界的未标记项。
代码参考 pytorch_active_learning/uncertainty_sampling.py at master · rmunro/pytorch_active_learning · GitHub
4.2 多样性采样
用于识别机器学习模型在当前状态下代表性不足或未知的未标记项。代表性采样、分层抽样、离群点检测和异常检测都是多样性采样的具体应用。
参考代码:pytorch_active_learning/diversity_sampling.py at master · rmunro/pytorch_active_learning · GitHub
多样性抽样类型包括基于模型的离群值抽样、基于聚类的抽样、代表性抽样和真实世界多样性抽样。这四种策略可以确保数据的多样性和代表性,分别是:模型在当前状态下未知的数据集;在统计上能代表整个数据分布的数据集;能最大程度代表模型部署位置的数据集; 以及最能代表现实世界人口统计的数据集。
图1.2 不同主动学习策略的利与弊
由于不确定性采样可能只关注决策边界的一部分,而多样性抽样可能只关注离边界较远的异常值。不确定采样和多样性采用通常一起使用,以找到一种既能最大限度提高不确定性,又能最大限度提高多样性的不确定数据集选择。聚类和不确定性采样的组合是首选策略并且效率较高。
上图是将最小置信度抽样和基于聚类的抽样相结合的示例。首先,不确定性抽样会发现决策边界附近的数据项;然后,聚类会确保选择范围内的多样性。每个聚类的中心点都被抽样。或者,我们也可以从异常值中随机抽取成员。
方法get_clustered_uncertainty_samples 可查看 pytorch_active_learning/advanced_active_learning.py at master · rmunro/pytorch_active_learning · GitHub
使用get_clustered_uncertainty_samples 可查看
代码:pytorch_active_learning/active_learning.py at master · rmunro/pytorch_active_learning · GitHub
4.3 随机采样
随机采样并不是容易的工作,避免对数据做一些不必要的预过滤工作,定义一个有代表性的评估数据集。
图1.3显示了选择和标注新数据项的两次迭代,导致了边界的变化。
迭代循环就是一种多样性采样。迭代次数和每次迭代需要标注的条目数量取决于任务。如果实施得当,主动学习具有自我纠正功能,也即每次迭代都能找到最适合人工标注的数据项。
5 迁移学习
从一项任务中提取模型并将其调整到另一种任务的过程被称为迁移学习。计算机视觉领域的成果要归功于迁移学习。基于已有的公开的视觉模型,重新训练模型的最后一层,使用少量标注后的标签,就可以训练一个新的模型。也可以从新训练多个层,还可以添加更多层到已有的模型中。
迁移学习在标注方面有实质性的先发优势,可以使用主动学习采样策略采样更多的数据项来标注。
主动迁移学习的重点在于,可以利用迁移学习来询问模型在哪里被混淆了,方法是让模型预测自己的错误。
方法get_deep_active_transfer_learning_uncertainty_samples 可查看 pytorch_active_learning/advanced_active_learning.py at master · rmunro/pytorch_active_learning · GitHub
如图所示,验证数据集由模型预测,并根据分类是否正确将其分为 "正确 "或 "不正确 "两个集合 。然后对模型的最后一层进行重新训练,以预测数据项是 "正确 "还是 "不正确",从而有效地将这两个集合转化为新的标签。
6 设计标注界面的基本原则
- 尽可能将问题归结为二元选择
- 确保预期的反应多种多样,以避免误导
- 使用现有的交互约定
- 允许键盘输入回复
7 参考案例
7.1 分类新闻头条
代码仓库:
GitHub - rmunro/headlines: Practical example from Human-in-the-Loop Machine Learning book
此例的主动学习策略包括最小置信度采样,分层采样,基于关键词的采样。
7.2 从文本中抽取食品安全事件信息
代码仓库:
GitHub - rmunro/food_safety: Practical example from Human-in-the-Loop Machine Learning book
本例需要食品安全专家标注信息。
7.3 标记自行车
代码仓库:
GitHub - rmunro/bicycle_detection: Practical example from Human-in-the-Loop Machine Learning book
主动学习策略包括最小置信度、模型异常值、数据增强。
8 参考资料
- Human-in-the-Loop Machine Learning
- https://freecontent.manning.com/active-transfer-learning-with-pytorch/
- GitHub - rmunro/pytorch_active_learning: PyTorch Library for Active Learning to accompany Human-in-the-Loop Machine Learning book
- GitHub - rmunro/headlines: Practical example from Human-in-the-Loop Machine Learning book
- GitHub - rmunro/food_safety: Practical example from Human-in-the-Loop Machine Learning book
- GitHub - rmunro/bicycle_detection: Practical example from Human-in-the-Loop Machine Learning book
- 【2021新书】人在环路机器学习,426页pdf阐述主动学习与标注的以人为中心人工智能
- 华东师大最新《人在环路机器学习》综述论文,224篇文献30页pdf
- Human-in-the-Loop in Machine Learning: What is it and How Does it Work?
- Humans in the Loop | Human-in-the-Loop pipelines for AI