环境和分布偏移
学习了许多机器学习的实际应用,将模型拟合各种数据集。 然而,我们从来没有想过数据最初从哪里来?以及我们计划最终如何处理模型的输出? 通常情况下,开发人员会拥有一些数据且急于开发模型,而不关注这些基本问题。
许多失败的机器学习部署(即实际应用)都可以追究到这种方式。 有时,根据测试集的精度衡量,模型表现得非常出色。 但是当数据分布突然改变时,模型在部署中会出现灾难性的失败。
更隐蔽的是,有时模型的部署本身就是扰乱数据分布的催化剂。 举一个有点荒谬却可能真实存在的例子。 假设我们训练了一个贷款申请人违约风险模型,用来预测谁将偿还贷款或违约。 这个模型发现申请人的鞋子与违约风险相关(穿牛津鞋申请人会偿还,穿运动鞋申请人会违约)。 此后,这个模型可能倾向于向所有穿着牛津鞋的申请人发放贷款,并拒绝所有穿着运动鞋的申请人。
分布偏移的类型
一、协变量偏移
在不同分布偏移中,协变量偏移可能是最为广泛研究的。 这里我们假设:虽然输入的分布P(x)可能随时间而改变, 但标签函数(即条件分布P(y|x))没有改变。 统计学家称之为协变量偏移(covariate shift), 因为这个问题是由于协变量(特征)分布的变化而产生的。 虽然有时我们可以在不引用因果关系的情况下对分布偏移进行推断, 但在我们认为x导致y的情况下,协变量偏移是一种自然假设。
即输入特征X的分布发生了变化,但特征与标签之间的映射关系 P(Y|X) 保持不变。
考虑一下区分猫和狗的问题:训练数据包括图中的图像。

在测试时,我们被要求对图中的图像进行分类。

训练集由真实照片组成,而测试集只包含卡通图片。 假设在一个与测试集的特征有着本质不同的数据集上进行训练, 如果没有方法来适应新的领域,可能会有麻烦。
协变量偏移 (Covariate Shift) 的纠正
核心假设:,但 不变。
① 重要性加权 (Importance Weighting)
这是最经典的统计学方法。既然训练数据和测试数据的分布不一样,我们就通过给训练数据“加权”来强行让它们看起来一样。
- 原理:给训练集中的每个样本赋予一个权重 。对于那些在测试集中很常见、但在训练集中很少见的样本,赋予更高的权重。
- 计算公式:权重 。
- 具体操作(密度比估计):
- 我们通常不知道具体的概率分布,所以可以用一个技巧:训练一个二分类器(如逻辑回归),试图区分“这个样本是来自训练集还是测试集”。
- 如果分类器很难区分(觉得它既像训练数据又像测试数据),说明这个样本在两个分布中都很重要,权重适中。
- 如果分类器很容易判断它是训练数据,说明它在测试集中很少见,权重降低。
② 领域自适应 (Domain Adaptation)
这是深度学习中最常用的方法,特别是无监督领域自适应 (UDA)。
- 特征对齐:使用神经网络提取特征,然后通过算法(如最大均值差异 MMD)最小化源域(训练)和目标域(测试)特征分布之间的距离。
- 对抗训练 (Adversarial Training):
- 引入一个“判别器”,试图判断特征是来自训练集还是测试集。
- 主模型(特征提取器)的目标是“欺骗”判别器,让它分不出来。
- 这样提取出的特征就是“域不变”的,即无论在哪个域,特征的本质都是一样的。
③ 数据增强与合成
在训练阶段就模拟各种可能的偏移。例如,如果担心光照变化(协变量偏移),就在训练时对图片进行随机亮度调整、加噪声、旋转等。这能让模型学到更鲁棒的特征,不再依赖特定的背景或风格。
二、标签偏移 (Label Shift)
标签偏移(label shift)描述了与协变量偏移相反的问题。 这里我们假设标签边缘概率P(y)可以改变, 但是类别条件分布P(x|y)在不同的领域之间保持不变。 当我们认为导致时,标签偏移是一个合理的假设。
- 概念:标签Y的边缘分布发生了变化,但每个类别下样本的特征分布 P(X|Y) 保持不变。
- 通俗理解:不同类别出现的整体频率变了,但每个类别本身的特征没变。
- 案例体现:
- 医疗诊断:医院A是肿瘤专科医院,来就诊的病人中患病率很高(例如90%)。而模型部署到社区医院B,这里的整体患病率可能只有1%。虽然患病比例(P(Y))变了,但“患病”的X光片特征(P(X|Y))本身是恒定的。
- 其他例子:疾病诊断模型在训练时某病发病率低,但实际应用时因季节或流行病爆发导致发病率上升。
标签偏移 (Label Shift) 的纠正
核心假设:,但 不变。
① 基于混淆矩阵的校正
这是最实用的工程方法。既然模型学到的“特征-类别”关系是对的,只是“类别出现的频率”错了,那我们就修正输出的概率。
- 步骤:
- 计算混淆矩阵:在训练集的验证集上,计算模型的混淆矩阵 。这个矩阵反映了模型把真实类别 预测为类别 的概率。
- 估计目标分布:在测试集上,统计模型预测结果的平均值(即模型认为各类别的预测比例)。
- 求解方程:利用混淆矩阵和预测结果,反推测试集真实的标签分布,然后对模型的输出进行校准。
② 重要性加权(针对标签)
与协变量偏移类似,我们也可以使用权重,但这里的权重是基于标签的。
- 权重:。
- 如果在测试集中“猫”的图片变多了,我们在训练时就要把“猫”的样本权重调大,强迫模型多关注“猫”的特征。
③ 联邦学习中的特殊处理
在联邦学习场景下,不同客户端的数据标签分布往往极度不均衡(Non-IID)。
- FedVLS:一种专门针对标签偏移的方法,通过“空类蒸馏”技术,让本地模型从全局模型中学习那些在本地缺失的类别的知识,防止模型对本地多数类过拟合。
概念偏移 (Concept Shift)
这是最棘手的一种偏移。当标签的定义发生变化时,就会出现这种问题。
- 概念:输入与输出之间的映射关系 P(Y|X) 发生了改变。
- 通俗理解:世界的规则变了。同样的输入,在过去和现在可能对应完全不同的输出。
- 案例体现:
- 房地产:在新冠疫情前后,旧金山一套三居室公寓(特征X不变)的价格(标签Y)可能从200万美元降至150万美元。房屋特征与价格之间的关系发生了根本性变化。
- 垃圾邮件分类:过去“免费”这个词可能高度关联“垃圾邮件”,但随着商业邮件的规范化,这种关联性可能减弱。关键词与“垃圾”标签的关系随时间演变。
- 文化差异:在美国不同地区,人们对“软饮”的叫法(如 soda, pop, coke)不同,同一个词(X)指向的概念(Y)发生了变化。
概念偏移 (Concept Shift) 的纠正
核心假设: 变了。这是最棘手的,因为旧的映射关系失效了。
① 持续学习 / 在线学习 (Continual / Online Learning)
既然规则变了,模型必须不断更新。
- 在线更新:模型部署后,一旦获得新的标注数据(例如用户纠正了推荐结果,或者医生更新了诊断),立即用这些新数据对模型进行微调。
- 滑动窗口:只保留最近一段时间的数据进行训练,丢弃过时的旧数据,确保模型只学习“当前世界”的规则。
② 集成学习与动态权重
不要只依赖一个模型,而是维护一组模型。
- 自适应集成:训练多个基学习器。当检测到某个模型在近期数据上表现下降(说明概念可能变了),就降低它的投票权重,或者用新数据训练一个新的模型加入集成。
③ 监控与重训练 (Monitor & Retrain)
概念偏移通常无法通过简单的数学变换修复,往往需要“推倒重来”或“大修”。
- 触发机制:建立严格的监控指标(如准确率突然下降、KS统计量报警)。
- 全量重训:一旦确认发生了概念偏移(例如疫情导致房价逻辑改变),必须收集包含新规则的数据集,重新训练模型。
总结
类型对比:
| 偏移类型 | 一句话定义 | 核心问题 |
|---|---|---|
| 协变量偏移 | 输入数据的样子变了,但判断规律没变 | P(X)变了,P(Y|X)不变 |
| 标签偏移 | 各类别的比例变了,但类别特征没变 | P(Y)变了,P(X|Y)不变 |
| 概念偏移 | 世界的规则变了 | P(Y|X)变了 |
纠正思路对比:
| 偏移类型 | 核心纠正思路 | 关键技术手段 |
|---|---|---|
| 协变量偏移 | 加权/对齐让训练数据“看起来像”测试数据 | 重要性加权、对抗训练、特征对齐 |
| 标签偏移 | 校准/重采样修正类别的先验概率 | 混淆矩阵校正、标签重要性加权 |
| 概念偏移 | 更新/重训学习新的映射规则 | 在线学习、滑动窗口、模型重训、集成学习 |
