在构建机器学习系统时,标注数据往往是成本最高的环节之一。尤其当数据以多视角形式存在,比如一张图片可以从多个摄像头角度拍摄,一条文本可以由多个模型分别打分——如何挑选最有价值的视角来获取标注或计算,直接决定了训练效率和资源消耗。随机挑选视角看似公平,实际上会把大量算力浪费在信息量很小的样本上。信息增益与不确定性量化正是解决这一问题的两把利器:前者从信息论角度评估候选视角能带来多少期望收益,后者刻画模型当前对样本的判断有多模糊。本文围绕这两个概念展开,分析原理、对比策略并给出可运行的代码示例。

为什么传统视角选择方法效率低下
最朴素的视角选择方式是随机采样:从所有可用视角中等概率挑一个。这种方法实现简单,但在样本分布不均衡的场景下表现很差。假设一个分类任务中90%的样本已经能被模型正确识别,随机采样仍然会把大量资源花在这些简单样本上,而真正位于决策边界附近的困难样本反而得不到足够关注。结果就是标注预算迅速耗尽,模型精度却提升缓慢。
另一种常见做法是基于规则的启发式选择,例如永远选择分辨率最高的视角,或者优先选择历史上表现最好的传感器。这类方法的问题在于假设过强:不同样本的信息分布差异很大,固定的规则无法自适应地匹配每个样本的实际需求。例如在多摄像头目标跟踪中,某个视角可能被遮挡,某个视角光照过曝,静态规则完全感知不到这些动态变化。
这些方法的共同缺陷是缺乏对信息价值的量化。它们没有回答一个核心问题:选择这个视角之后,模型的状态能改善多少?信息增益正是为回答这个问题而生的度量工具。
信息增益的原理与计算方法
信息增益源自香农信息论,直观含义是:在获得某个观测之后,系统不确定性的减少量。用数学语言表达,设当前模型对样本x的预测分布为p(y|x),其熵为H(y)。如果我们选择视角v并获得观测结果,模型的后验分布变为p(y|x,v),此时熵降低为H(y|v)。信息增益就是两者的差值。下面的代码演示了如何对候选视角逐一计算期望信息增益:
import numpy as np
def entropy(p):
"""计算离散分布的熵"""
p = np.clip(p, 1e-12, 1.0)
return -np.sum(p * np.log2(p))
def expected_information_gain(prior, likelihoods, view_probs):
"""
prior: 当前预测分布,形状为 (num_classes,)
likelihoods: 条件分布,形状为 (num_views, num_outcomes, num_classes)
view_probs: 每个视角各观测结果出现的概率,形状为 (num_views, num_outcomes)
"""
gains = []
base_entropy = entropy(prior)
for v in range(len(likelihoods)):
# 对所有可能的观测结果求期望熵
cond_entropy = 0.0
for o in range(likelihoods.shape[1]):
posterior = prior * likelihoods[v][o]
posterior = posterior / np.sum(posterior)
cond_entropy += view_probs[v][o] * entropy(posterior)
gains.append(base_entropy - cond_entropy)
return np.array(gains)
# 示例:三个类别,两个候选视角
prior = np.array([0.4, 0.35, 0.25])
likelihoods = np.array([
[[[0.7, 0.2, 0.1], [0.1, 0.8, 0.1], [0.2, 0.2, 0.6]]], # 视角0:区分度高
[[[0.45, 0.4, 0.35], [0.34, 0.33, 0.33], [0.4, 0.35, 0.38]]] # 视角1:区分度低
])
view_probs = np.array([[0.35, 0.30, 0.35], [0.33, 0.33, 0.34]])
print(expected_information_gain(prior, likelihoods, view_probs))上面的代码展示了信息增益的精确计算流程。可以看到,视角0的条件分布对各类别有较强的区分能力,其信息增益显著高于视角1。视角1无论观测到什么结果,后验分布都和先验几乎一样,说明它几乎没有提供新信息,选择它就是浪费预算。
然而精确计算信息增益在深度学习场景下往往不可行,因为需要对所有可能的观测结果求期望,而观测空间通常极其庞大。工程上常用两类近似方法:一是蒙特卡洛采样,随机抽取若干个可能的观测结果来估计期望熵;二是互信息近似,用模型参数的贝叶斯不确定性(例如通过MC Dropout或深度集成得到)作为信息增益的代理指标。这些近似方法在精度和计算开销之间取得了良好平衡。
不确定性度量的三种视角与对比
不确定性度量是信息增益的重要补充,它不需要模拟观测过程,直接评估模型对某个样本有多拿不准。主流的不确定性可以分为三类:数据不确定性(aleatoric,由数据本身的噪声引起)、模型不确定性(epistemic,由参数未充分学习引起)以及分布不确定性(由样本偏离训练分布引起)。视角选择主要关注后两者,因为它们恰恰是通过补充观测可以消除的部分。
熵采样是最简单的策略:计算模型输出分布的熵,优先选择熵最高的视角。它实现成本极低,但有明显盲区,当模型对预测完全错误但非常自信时,熵很低,这类样本会被漏掉。期望模型改变策略则评估某个视角的观测会多大程度上改变模型参数,对困难样本更敏感,但计算需要额外训练轮次,开销大。
贝叶斯方法通过多次前向传播估计预测方差,能更可靠地区分模型不确定性和数据噪声。下面给出一个结合MC Dropout的视角选择实现:
import torch
import torch.nn.functional as F
def predictive_uncertainty(model, x, n_passes=20):
"""
使用MC Dropout估计预测分布的不确定性
返回每个样本的总预测熵和模型不确定性(互信息)
"""
model.train() # 保持Dropout激活
probs = []
with torch.no_grad():
for _ in range(n_passes):
logits = model(x)
probs.append(F.softmax(logits, dim=1))
probs = torch.stack(probs) # (n_passes, batch, classes)
mean_probs = probs.mean(dim=0)
# 总预测熵
total_entropy = -(mean_probs * torch.log(mean_probs + 1e-12)).sum(dim=1)
# 每次前向传播的平均熵,近似数据不确定性
aleatoric = -(probs * torch.log(probs + 1e-12)).sum(dim=2).mean(dim=0)
# 互信息 = 总熵 - 数据熵,即模型不确定性
epistemic = total_entropy - aleatoric
return total_entropy, epistemic
# 视角选择:对每个候选视角计算不确定性,选互信息最大的
# total_e, epistemic = predictive_uncertainty(model, views)
# selected_view = epistemic.argmax(dim=0)三种策略的适用场景可以从下表对比来看:
| 策略 | 计算开销 | 对自信错误样本的敏感度 | 适用场景 |
|---|---|---|---|
| 熵采样 | 低 | 不敏感 | 预算紧张、快速迭代 |
| 期望模型改变 | 高 | 较敏感 | 离线训练、小规模数据 |
| 贝叶斯互信息 | 中 | 敏感 | 在线学习、多视角系统 |
工程落地:构建高效的视角选择流水线
把上述方法组合成可用的系统,推荐采用分层架构。第一层是候选生成,为每个样本产出候选视角集合;第二层是价值评估,用轻量级代理模型快速估算每个视角的信息增益或不确定性;第三层是预算分配,综合价值分数与获取成本,选出性价比最高的视角。这种分层设计避免了直接在重量级模型上做全量评估,整体延迟可以控制在可接受范围内。
实践中还有几个容易被忽视的细节。第一,不确定性分数存在批间波动,建议对分数做滑动平均归一化,避免模型更新后分数尺度漂移。第二,纯粹的贪心选择会导致样本多样性下降,引入多样性正则项(例如对已选样本做特征去重)能显著缓解。第三,冷启动阶段模型置信度不可靠,可以先用随机探索积累一定数据量,再切换到信息增益驱动的模式。
性能评估方面,不要只看单次精度提升,而应绘制精度随标注量增长的曲线。一个有效的视角选择策略,其曲线应该在早期就快速上升,并在相同标注预算下持续领先随机基线。如果发现信息增益策略与随机基线差距很小,通常说明代理模型的质量不足,或者候选视角之间的信息重叠度过高,此时应优先检查这两点,而不是盲目增加采样次数。
总结来说,视角选择的低效本质上是缺乏对信息价值的量化。信息增益提供了理论最优的选择依据,不确定性度量提供了低成本的近似手段,两者结合使用,再辅以合理的工程架构,就能在相同的资源预算下获得明显更好的模型表现。对于正在构建多视角数据系统的团队,建议从熵采样起步快速验证,再逐步过渡到贝叶斯互信息方案,以最小的改造成本换取最大的效率收益。