Overview
1.What is Active Learning? 什么是主动学习?
2.Active Learning: 应用场景分类
3.Active Learning: 实现策略
What is Active Learning? 什么是主动学习?
AL is just such a method dedicated to studying how to obtain as many performance gains as possible by labeling as few samples as possible
AL aims to select the most useful samples from the unlabeled dataset and hand it over to the oracle (e.g., human annotator) for labeling, to reduce the cost of labeling as much as possible while still maintaining performance
intuitively,
1.主动学习的提出背景其实 ML/DL 老生常谈的高质量标注数据获取的问题, 高质量标注数据获取总是有较高的代价的; 因此把主动学习理解为获取 “高质量的标注样本筛选过程” 也没有太大问题, 感觉应该叫 “active unlabeled sample selection strategy (ausss)”; 那么什么是宽泛意义上的 “高质量” 样本?”高质量” 本身是一个场景有关的概念,cv 任务有 cv 任务的高质量的经验定义,nlp 任务有 nlp 的高质量定义;nlp 里面文本摘要任务和创作生成任务能对 “高质量样本” 定义一样吗?显然不能, 因为 “总结” 和 “创作” 目标就是相反的; 这里的 “高质量” 的概念其实更接近于某种一般意义上的概念,基于的假设可能是:
“模型把握不准” 要比 “模型样本把握很准” 更有价值 => “通过各种方法去衡量出来模型把我不准样本” => 这样的样本就是高质量样本要送给人工去标注
有两对样本, “难以区分的样本对” 要比 “显然更容易区分的样本” 更有价值 => “通过各种方法去衡量出来模型相互区分性弱的样本” => 这样的样本就是高质量的样本要送给人工去标注
2.主动学习的实现流程: 应该理解为是一种 Sampling (采样),根据我的策略进行采样; 因此主动学习的实现策略更应该叫做 xx策略采样, 例如 Uncertainty-based Sampling, 基于不确定性的采样
3.主动学习方向的研究意义已经超越了数据标注本身, 因为获取更高质量的样本相关的思考本身就更接近 ML 最关键的思考本质, 至少包括两个方面
(i). AL 更关注一般意义上的数据构建的 pipeline, 如何更有效构建样本,尤其是是在业务早期数据量不足的情况下, 更接近一个初创公司或者初创业务的本质思考
(ii). AL 将会和 LLM 中 Data Synthesis 趋近于同一个概念, 而 Data Synthesis 目前来看是 LLM 实操层面最关键的有效动作之一
3.采用 AL 的相关语境下, 筛选出来送到人工标注的人一般称之为 “Orcale”, 更接近 groud truth 的概念
Active Learning: 应用场景分类
根据应用 AL 场景的不同,active learning 被分为了以下几种类型,带有显著的概念创造感; AL 只需要记住一个原则: “我只是想获得更高质量的标注数据提供给我的模型学习”
1.Pool-based AL (池式主动学习)
首先我们有一个未标注的数据大池子(unlabeled pool),每次从中选择最有价值的样本请求标注。典型的例子是有了 LLM 之后,我们想合成一些偏好数据在 RLHF 里给 reward model 选择最有价值的 response pairs
2.Stream-based AL (流式主动学习)
在很多业务场景中,例如客服对话系统或者流式文本生成系统 (例如 twitter),数据是在时间序列上实时一条一条到来的,挑选难区分的样本自然而然也是需要流式的挑选, 面向这种场景的主动学习称之为 Stream-based AL
intuitively,
(i). 第一次听到 Stream-based AL 这个概念感觉很人造,任何数据都是随着时间积累越来越多的,所以 Stream-based 挑样本和 v.s. 合并最新的流式数据构造了更大 pool 有什么本质区别?ChatGPT 认为 Stream-based 视角 “更关注的时序变化下的数据分布的变化, 且决策是局部、在线的,不依赖完整未标注池”
(ii). 在 Stream-based 视角下,更倾向于某种周期更新/流式更新标注样本;分布变化如果是真实发生的需要适应的变化,那就是更大范围内的 Pool-based AL;分布变化如果是产生大量噪音的,不利于生产落地的/会引起负向的,那就显然需要更多的 offline evaluation 去配合相应的 AL 策略,这种引入大量的情况下没法关注所谓的 “实时性” 了, 反而更多应该关注风控问题
3.Query Synthesis (查询合成)
Query Synthesis 查询合成指的是不依赖任何已经拥有的数据,要自主生成一些值得标注的新的数据,然后请求 Oracle 进行标注; 什么情况下需要一些不在原有数据集中的数据?其实在业务场景很常见的,比如对话助手我们想要测试一种我们想要的回复, 有时候是一种安全攻击提问,有时候可能是一种表达模糊抽象的提问,看下模型会发生什么
(i). 样本可以突破原有数据集的界限,原有的样本集要完全没出现过
(ii). 既然是完全没出现过的样本,生成过程必然依赖一些规则,LLM 或者是比较启发性的策略
Active Learning: 实现策略
为了统一描述,如下策略均以文本多分类问题为例子, 给定 $P(y|x)$, $x$ 作为输入, $y$ 表示文本类别
Uncertainty-based Sampling 基于不确定性的采样
Uncertainty-based 这种方法选择模型最不确定的样本送给 Oracle,那怎么定义这个不确定性呢? 本质上是用给定输入下输出的分布 $P(y|x)$ 来衡量不确定性, 有以下几种方法:
1.Least Confidence (最小置信度采样)
这种方法是最简单的基于不确定性的采样, 实现方法是采样 Top1 预测类别中的概率最低的样本
背后的直觉是: 如果样本对最有信心的样本类别 (Top1类目) 里面,对里面信心最低的样本,就是最不确定的样本
假设我率领 3支军队现在要带着去打仗,现在要检查里面有没有卧底,搞一个是否是卧底预测模型;第一只军队是嫡系王牌师,第二支是强力作战师,第三支是弱鸡陪跑师,LC 算法就只关注那个嫡系王牌师里面最说不好是不是卧底的那个人送去检查; 基于的思路是,嫡系王牌师本身是最有把握的,但是最有把握里面里面有个相对最难把握的,所以查这个人
这想法显然不够全面, 只关注了最关键的类别,如果类别很多分布很复杂,那肯定作用有限
2.Margin Sampling (边际采样)
比 LC 稍微强点,选择预测类目 Top1 和 Top2 下概率差距最小的样本
3.Entropy Sampling (熵采样)
思路:直接计算预测分布的不确定性熵,熵越大,那么不确定性越高, 选择的是概率分布 “更平均/更均匀” 的样本; 这种做法显然更全面,照顾到所有的类别了, 当然计算开销也随之增大
Peresentation-based Sampling 基于表示的采样
LLM 时代,我们想做 AL 还需要用分布的不确定性吗?LLM 本身就是一种很好的标识学习,我们可以直接在 embedding 空间直接操作,结合 constrastive learning 来找重要样本标注; 例如我们有大量的未标注的对话数据想找一些没有被分类的意图,直接用 LLM 生成 sentence embedding,然后利用这些 embedding 的聚类结果,发现一些没有被覆盖的簇,直接对这些没有覆盖的簇的中心样本送去 Oracle
Reference
[1]. A Survey of Deep Active Learning.
转载请注明来源 goldandrabbit.github.io