3. 主动学习基础
主动学习(Active Learning)的核心思想是:让模型不再被动接受全部标注数据,而是主动挑选“最有价值”的样本交给标注者,从而用更少的标注成本获得更高的模型性能。理解主动学习,首先要区分四种基本范式:池式主动学习、流式主动学习、查询合成与成员查询。它们对数据访问方式、查询形式和标注预算的假设各不相同,直接决定了工程实现的架构与策略。
一、四种范式的基本定义与对比
池式主动学习假设全部未标注数据已经存在,算法从池中反复挑选样本;流式主动学习假设数据以流的形式到达,必须在线决定是否查询;查询合成不依赖已有样本,而是直接构造最优查询;成员查询则允许算法向标注者提出“是/否”问题,甚至生成任意样本进行询问。四者的关系可以用下面的结构图表示。
二、池式主动学习:最常用的工程范式
池式主动学习是工业界最成熟的范式。它假设我们拥有一个大规模未标注池 U = {x₁, x₂, ..., xₙ},以及一个已标注集 L。每一轮,模型在 L 上训练后,对 U 中所有样本计算“查询分数”,选出 top-k 交给标注者,然后更新 L 和 U,进入下一轮。
常见的查询策略包括:不确定性采样(如最小置信度、熵、边际采样)、代表性采样(如聚类中心、核心集)、多样性采样(如 BatchBALD、贪心多样性)以及期望模型变化。池式的优势在于可以全局比较所有未标注样本,适合图像分类、文本分类、目标检测等静态数据集场景。
# 池式主动学习伪代码
L = 初始标注集
U = 未标注池
for round in range(R):
model = train(L)
scores = uncertainty(model, U) # 计算查询分数
query_idx = top_k(scores, k) # 选 top-k
L += label(U[query_idx]) # 人工标注
U = U - U[query_idx] # 移出池
evaluate(model, test_set)
三、流式主动学习:在线决策与预算控制
流式主动学习面对的是数据流 x₁, x₂, x₃, ...,每个样本只到达一次,算法必须立即决定“查询”还是“跳过”。它不能回看历史样本,也不能全局比较。典型策略是设定一个不确定性阈值 θ:当模型对当前样本的预测熵大于 θ 时,才请求标注。
流式场景的关键挑战是预算分配和概念漂移。如果阈值固定,早期模型不准确会导致大量查询,后期预算不足;如果数据分布变化,旧阈值可能失效。因此工程上常采用自适应阈值、滑动窗口统计或强化学习策略。流式主动学习广泛用于推荐系统、风控、IoT 传感器等数据持续到达的场景。
四、查询合成与成员查询:从“选样本”到“造问题”
查询合成不依赖已有未标注池,而是直接构造新的查询样本。例如在仿真环境中生成接近决策边界的样本,或在文本任务中生成反事实样本。它的优势是能探索数据分布稀疏区域,但风险是生成的样本可能不自然、标注者难以理解。
成员查询则允许算法向标注者提出“这个样本是否属于目标概念”的是/否问题。理论上,成员查询可以用很少的查询学习到精确概念,但在实际中,标注者往往无法回答任意构造的样本,因此更多用于理论分析和特定封闭场景。
| 范式 | 数据访问 | 查询形式 | 标注交互 | 典型场景 | 工程难度 |
|---|---|---|---|---|---|
| 池式主动学习 | 静态未标注池 | 从池中选样本 | 批量标注 | 图像分类、NLP微调 | 低 |
| 流式主动学习 | 数据流逐个到达 | 在线判断查/不查 | 即时标注 | 推荐、风控、IoT | 中 |
| 查询合成 | 无池依赖 | 构造新样本 | 标注生成样本 | 仿真、对抗、控制 | 高 |
| 成员查询 | 可查询任意点 | 是/否问答 | 回答二分类问题 | 概念学习、理论分析 | 极高 |
五、常见误区与复盘
- 误区一:主动学习一定比随机采样好。在噪声极大或标注者不可靠时,主动学习可能放大偏差,甚至不如随机采样。
- 误区二:只关注不确定性,忽略代表性。纯不确定性采样容易选到离群点,导致标注浪费。工程上常将不确定性与多样性结合。
- 误区三:流式场景照搬池式策略。流式不能回看,必须在线决策,阈值和预算策略需要专门设计。
- 误区四:查询合成样本一定有效。合成样本可能不自然,标注者难以理解,反而引入噪声。
总结来说,池式主动学习适合静态数据集和批量标注;流式主动学习适合在线数据流和即时决策;查询合成适合需要探索边界或生成反事实的场景;成员查询则更多用于理论分析和封闭概念学习。理解这四种范式的假设与边界,是构建主动学习数据闭环的第一步。