Dataset Bias
数据集偏差是训练数据与模型实际服务环境不匹配的现象,会导致准确率不均。介绍主要类型、示例,以及发现和修正偏差的方法。
数据集偏差是指用于训练机器学习模型的数据,与模型将要服务的人群、地点或条件之间存在系统性差异。模型会学习其训练数据中的所有规律,包括数据收集方式造成的偶然特征,因此有偏的数据集会造就这样一种模型:在经常见到的情形中表现良好,在其他情形中表现不佳。由于测试数据通常来自同一批数据,这个问题往往会一直隐藏到部署阶段。Antonio Torralba 和 Alexei Efros 在 2011 年通过一个名为“猜猜这是哪个数据集”的游戏阐明了这一点:一个简单分类器就能以远高于随机猜测的准确度判断图片来自 12 个热门图像数据集中的哪一个,因为每个数据集都有自己的鲜明风格。
数据集偏差的类型#
- 选择偏差: 数据来自容易获取的来源,而不是目标人群。网络照片偏向富裕的西方环境;在商业物体识别服务中,对月收入低于 50 美元的家庭用品进行识别时,准确率比对月收入超过 3,500 美元的家庭用品低约 10%;在美国拍摄的物品与在索马里或布基纳法索拍摄的物品之间,准确率相差 15 到 20 个百分点。
- 代表性偏差: 某些群体或类别出现得太少,模型无法学会识别它们。Gender Shades审计发现,商业性别分类器对深肤色女性的误分类率最高达 34.7%,而对浅肤色男性的误分类率最高为 0.8%。在目标检测中,稀有类别组成的长尾是类别层面的同一问题。
- 测量与采集偏差: 数据与部署环境中的摄像头、传感器、采集地点和光照各不相同。用于胸部 X 光肺炎检测的深度学习模型还可以识别图像来自哪家医院;由于各医院的肺炎发生率不同,这种信号虚增了准确率,并且无法很好地泛化到新地点。这是一种捷径学习。
- 标签偏差: 数据标注会受到标注人员判断、不一致的准则或历史决策的影响,而模型会将这些模式视为真实依据。
- 时间偏差: 随着时尚、产品和车辆发生变化,某一时期收集的数据会逐渐与现实脱节。
数据集偏差的表现形式#
主要在晴朗干燥气候下训练的自动驾驶感知模型,在雪天、雨天和黑暗环境中检测行人的可靠性较低;为汽车领域 AI构建自动驾驶汽车的团队会收集夜间和恶劣天气数据来弥补这一差距。在医学图像分析中,主要使用浅肤色人群数据训练的皮肤病学模型在深肤色人群上的表现较差,而人脸识别系统也呈现出 Gender Shades 测得的人口群体差距。在每种情况下,由于多数群体主导平均值,整体准确率看起来都很高。
下面的代码片段使用 scikit-learn 具体展示了这一机制。B 组的规律与 A 组不同;同一个随机森林会在 1,000 个样本上训练两次,第一次 B 组占数据的 2%,第二次则对两组进行平衡:
import numpy as np
from sklearn.ensemble import RandomForestClassifier
rng = np.random.default_rng(0)
def sample(n, group):
"""Draw n points from group A (label set by feature 0) or group B (label set by feature 1)."""
center = 0.0 if group == "A" else 3.0
X = rng.normal(center, 1.0, size=(n, 2))
return X, X[:, 0 if group == "A" else 1] > center
for n_a, n_b in [(980, 20), (500, 500)]: # skewed, then balanced training sets of the same size
Xa, ya = sample(n_a, "A")
Xb, yb = sample(n_b, "B")
model = RandomForestClassifier(random_state=0).fit(np.vstack([Xa, Xb]), np.concatenate([ya, yb]))
acc = {g: model.score(*sample(2000, g)) for g in "AB"} # held-out accuracy per group
print(f"train A:B = {n_a}:{n_b} -> accuracy on A {acc['A']:.3f}, on B {acc['B']:.3f}")在有偏的数据集上训练时,模型对 A 组的预测完美无误(1.000),对 B 组的预测正确率仅为 76.8%。对相同的 1,000 个样本进行平衡后,B 组的正确率提升至 98.3%,A 组则略降至 97.2%。如果测试集像有偏的训练数据那样按 98:2 混合,第一个模型的总体得分约为 99.5%,完全掩盖了组间差距。
数据集偏差与相关概念的比较#
- 算法偏差: 由模型设计、目标函数或部署方式引入的偏斜,例如偏向多数类别的损失函数。数据集偏差是算法偏差的一个主要成因,而且两者往往会相互加剧。
- AI 中的偏差: AI 系统中系统性不公平现象的统称,与AI 公平性相对。NIST 的识别和管理 AI 偏差标准将偏差来源分为系统性、人的因素以及统计或计算因素;缺乏代表性的数据集属于最后一类。
- 数据漂移: 部署后输入分布发生变化。数据集偏差从数据收集之初就已存在,而漂移则会在之后逐渐拉开差距,即使原始数据具有代表性也不例外。
发现并减少数据集偏差#
检测视觉数据集中的偏差要从数据文档和分组评估入手。数据集说明书建议记录数据由谁、如何以及为何收集,以便用户判断数据代表了哪些人群。评估应按群体、地点、摄像头或条件报告指标,并为每个切片提供混淆矩阵,而不是只报告一个平均值。查看数据本身也有帮助:在 Ultralytics Platform中,每个数据集的类别选项卡会绘制各类别的标注数量,并提供对数刻度开关以处理类别不平衡;聚类面板会按类别或数据划分为图像嵌入着色,因此训练前就能发现覆盖不足。
针对原因采取相应措施即可修正偏差。针对薄弱切片收集目标数据可以直接解决问题,主动学习则有助于选择要标注的新图像。数据增强可以改变光照、方向和尺度,合成数据则可以补充夜景或罕见缺陷等稀有情况。对代表性不足的样本重新加权或过采样,或使用分布鲁棒优化针对表现最差的群体进行优化,都能改变训练过程所奖励的内容。部署后,按切片细分的模型监控可以发现条件变化时出现的差距。










