主动学习查询策略:从不确定性到多样性采样
主动学习查询策略:从不确定性到多样性采样
主动学习是一种机器学习范式,其核心思想是让模型主动挑选最具价值的数据进行标注,从而在有限的标注预算下实现最大性能提升。本教程聚焦于查询策略——即模型如何决定该向标注者请求哪些样本的标签。我们将系统介绍主流策略,从经典的不确定性度量到多样性与代表性子集选择,并讨论它们的适用场景。
为什么查询策略是主动学习的心脏
在主动学习循环中,查询策略承担着“挑选”的职责。一个好的策略能够:
- 降低标注成本:用更少样本达到目标准确率。
- 缓解类别不平衡:优先补充模型最需要的类别信息。
- 探索决策边界:加速边界的精细化。
- 覆盖数据分布:确保模型见过的样本具有足够代表性。
策略大致可分为三类:基于不确定性的采样、基于委员会的分歧采样以及基于数据分布多样性的采样。三者并不是非此即彼的关系,现代实践中常将它们结合使用。
基于不确定性的采样:让模型说出自己最没把握的样本
不确定性采样是最直观的策略。对于分类任务,模型输出概率分布后,选取那些预测结果最“模糊”的样本请求标注。
最小置信度
选择模型预测概率最高的类别置信度最低的样本,即选择 $1 - \max_y P(y|x)$ 最大的样本。
公式:
$$x^* = \arg\max_x \left( 1 - P(\hat{y}|x) \right)$$
其中 $\hat{y} = \arg\max_y P(y|x)$。该策略只关心最可能类别的确定性,忽略了其他类别分布的信息,计算量极低,但在多分类问题中可能忽略那些有两个类别得分相近但第三类得分很低的样本。
边缘采样
边缘采样考虑最高概率和次高概率之间的差值。差值越小,说明模型在两个最可能的类别间犹豫。
公式:
$$x^* = \arg\min_x \big( P(y_1|x) - P(y_2|x) \big)$$
$y_1$ 和 $y_2$ 是概率最高和第二高的类别。这一策略比最小置信度更细粒度,尤其适用于类别多、但只需抓出边界的二分类投影场景。实践中常用于支持向量机、逻辑回归和早期深度学习的主动学习。
熵采样
熵衡量整个预测分布的混乱程度。熵越高,模型对样本属于任何类别都不确定。
公式:
$$H(x) = - \sum_{y} P(y|x) \log P(y|x)$$
$$x^* = \arg\max_x H(x)$$
熵将所有类别的概率纳入考虑,能综合反映不确定性。但熵也容易偏向那些预测分布均匀但不一定处在决策边界的噪声样本。对于类别极多的任务(如语言模型分词),熵是首选。
编程提示:在PyTorch中,可对softmax后的概率使用 Categorical(probs).entropy() 直接计算熵,无需手动循环。
基于委员会的查询策略:用模型的“争吵”发现歧义
委员会查询(Query-by-Committee, QBC)维护多个同质或异质模型,让它们对同一样本投票,通过计算分歧量化样本的信息量。
投票熵
将委员会各成员对样本的类别预测看作“投票”,计算投票分布的熵。
计算步骤:
- 设有 $K$ 个委员会成员,每个成员对 $x$ 预测一个类别标签。
- 统计投票计数 $V(y)$,即以类别 $y$ 作为预测的成员数除以 $K$ 作为概率。
- 计算投票熵:$H_{vote}(x) = -\sum_y V(y) \log V(y)$。
高投票熵表示委员会成员意见严重分裂,这类样本很可能位于分类边界或存在标注歧义,标注价值高。
平均KL散度
平均KL散度衡量每个成员的预测与“整体共识”之间的平均差异。首先计算所有成员的预测概率平均值作为共识分布:
$$P_{cons}(y|x) = \frac{1}{K} \sum_{k=1}^K P_k(y|x)$$
然后计算每个成员与共识的相对熵,取平均:
$$x^* = \arg\max_x \frac{1}{K} \sum_{k=1}^K D_{KL}(P_k \parallel P_{cons})$$
这比投票熵更充分地利用了概率信息,即使在成员预测标签一致但置信度不同时也能捕捉到分歧。适用于委员会皆为概率模型(如神经网络、贝叶斯模型)的场景。
委员会构建建议
- 同质委员会:同一模型架构,不同初始化或不同数据子集训练。在深度学习中,使用Dropout作为贝叶斯近似(MC Dropout)也能构建隐式委员会。
- 异质委员会:逻辑回归、随机森林、SVM等多种不同类型的模型,提升多样性。
- 增量委员会:在主动学习循环的不同轮次产生的模型,可反映学习路径上的分歧。
基于多样性和代表性的采样:不止看不确定性
如果只选择不确定性最高的样本,很容易采样一堆相似甚至重复的样本,造成标注预算浪费。多样性采样和代表性采样旨在挑选出能够覆盖数据分布的一批样本。
聚类预过滤
在特征空间中进行聚类(如K-Means),然后从每个簇中选不确定性最高的样本。这保证了按簇分配标注配额,避免从同一个密集区域重复采样。
伪代码:
1. 对所有未标注样本提取特征向量(可使用当前模型倒数第二层)
2. 使用K-Means聚类成C个簇
3. for each 簇:
选择簇内熵(或其他不确定性)最高的 m 个样本请求标注
这种策略简单有效,尤其适合特征空间有明显聚类结构的数据。
核心集方法(Core-set Approach)
核心集选择的目标是找到一个子集,使其能够近似完整数据集的分布。常用k-Center Greedy算法:每次选择距离已选子集最远的样本加入待标注集合。
步骤:
- 初始化已标注样本集合为 $\mathcal{L}$,未标注集合为 $\mathcal{U}$。
- 计算 $\mathcal{U}$ 中每个样本到 $\mathcal{L}$ 的最短距离(在特征空间)。
- 选择距离最大的样本 $x^* = \arg\max_{x \in \mathcal{U}} \min_{x_l \in \mathcal{L}} d(x, x_l)$。
- 将该样本加入查询队列,并在下一轮将其视为“已选”(暂不复选)。
- 重复直到预算用完。
k-Center能够保证子集的覆盖半径,适合处理分布极不均衡的数据。但在高维空间中距离计算开销较大,可借助近似最近邻索引加速。
基于模型预测一致性的BADGE
BADGE(Batch Active learning by Diverse Gradient Embeddings)结合了不确定性与多样性。它为每个样本计算梯度嵌入(即模型预测对该样本的损失梯度),然后在这些嵌入上运行k-Means++初始化来选择一批具有多样性的高不确定性样本。这种方法在深度主动学习中被证明非常有效,可同时考虑样本的信息量和彼此之间的差异。
混合策略:集大成者
现实世界的主动学习系统常常将不确定性与多样性结合为混合策略。
典型混合方案:
- 两阶段过滤:首先利用不确定性采样保留top-N候选池(如不确定性最高的10,000个样本),然后对候选池应用核心集或聚类方法选出查询批次。这样既大幅减少多样性计算量,又保留高信息量区域。
- 加权评分:对每个样本计算综合得分:$Score(x) = \lambda \cdot U(x) + (1-\lambda) \cdot D(x, \mathcal{L})$,其中 $U(x)$ 为归一化后的不确定性度量,$D(x, \mathcal{L})$ 为与已标注集的最小距离(越大表示越具多样性),$\lambda$ 为平衡系数。
- 批量贝叶斯主动学习:使用贝叶斯模型获取每个样本的后验分布,并利用互信息来评估一个批次样本联合带来的信息增益,自然兼顾不确定性和冗余规避。计算成本高,但理论上最优。
如何选择适合你的查询策略
| 场景 | 推荐策略 | 理由 |
|---|---|---|
| 标注成本极高、小批次查询 | 熵采样或边缘采样 | 单样本信息量明确,实施简单 |
| 类别数多(>50) | 熵采样或投票熵 | 全面捕捉分布不确定性 |
| 数据存在大量冗余 | 聚类预过滤 + 不确定性 | 避免重复标注类似样本 |
| 特征空间连续、语义清晰 | 核心集方法或BADGE | 代表性与多样性效果好 |
| 模型集成计算资源充足 | 平均KL散度QBC | 分歧度量比单模型不确定性更稳健 |
| 终极追求性能极限 | BADGE或贝叶斯批量主动学习 | 信息与多样性全局最优 |
实践经验:对于图像分类任务,使用轻量CNN时,从边缘采样起步,待初步稳定后切换到核心集采样,可在相对少量标注下获得接近全标注的性能。而在NLP文本分类中,由于高维稀疏特征,熵采样配合分层聚类效果稳定。
结语
查询策略是主动学习的引擎,直接决定标注投入产出比。从简单的不确定性采样到复杂的多样性嵌入方法,每一种策略都有其假设和适用边界。初学者应从实现最小置信度和熵采样开始,逐步引入委员会和聚类,在实践中体会数据分布对策略选择的影响。当你面对真实项目时,不妨将多种策略作为对比基线,用实验数据找到定制化的查询方案。
主动学习的精髓不在于刻板遵循某一公式,而在于理解模型如何表达“无知”,并以此引导标签获取过程。