AI知识分享AI知识分享
✿导航
  • 人工智能
  • 神经网络
  • 机器学习
  • 深度学习
  • 强化学习
  • 自然语言处理
  • 计算机视觉
  • 大模型基础
  • 动手学深度学习
  • 理论理解
  • 工程实践
  • 应用开发
  • AI For Everyone
  • AIGC_2024大会
  • AIGC_2025大会
  • Transformer
  • Pytorch
  • HuggingFace
  • 蒸馏
  • RAG
  • 目标检测
  • MCP
  • 概念
  • 意图识别
  • 工具
✿导航
  • 人工智能
  • 神经网络
  • 机器学习
  • 深度学习
  • 强化学习
  • 自然语言处理
  • 计算机视觉
  • 大模型基础
  • 动手学深度学习
  • 理论理解
  • 工程实践
  • 应用开发
  • AI For Everyone
  • AIGC_2024大会
  • AIGC_2025大会
  • Transformer
  • Pytorch
  • HuggingFace
  • 蒸馏
  • RAG
  • 目标检测
  • MCP
  • 概念
  • 意图识别
  • 工具
  • 大模型基础

    • 语言模型基础

      • 概述
      • 基于统计方法的语言模型
      • 基于神经网络的语言模型
      • 语言模型的采样方法
      • 语言模型的评测
    • 大语言模型架构

      • 概述
      • 主流模型架构
      • Encoder-only
      • Encoder-Decoder
      • Decoder-only
      • 非Transformer 架构
    • Prompt工程

      • 工程简介
      • 上下文学习
      • 思维链
      • 技巧
    • 参数高效微调

      • 概述
      • 参数附加方法
      • 参数选择方法
      • 低秩适配方法
      • 实践与应用
    • 模型编辑

      • 简介
      • 方法
      • 附加参数法
      • 定位编辑法
    • RAG

      • 基础
      • 架构
      • 知识检索
      • 生成增强
  • 动手学深度学习

    • 深度学习基础

      • 引言
      • 数据操作
      • 数据预处理
      • 数学知识(线代、矩阵计算、求导)
      • 线性回归
      • 基础优化方法
      • Softmax回归
      • 感知机
      • 模型选择
      • 过拟合和欠拟合
      • 环境和分布偏移
      • 权重衰减
      • Dropout
      • 数值稳定性
    • 卷积神经网络

      • 模型基本操作
      • 从全连接层到卷积
      • 填充和步长
      • 多个输入和输出通道
      • 池化层
      • LeNet
      • AlexNet
      • VGG
      • NiN网络
      • GoogleNet
      • 批量归一化
      • ResNet
    • 计算机视觉

      • 图像增广
      • 微调
      • 目标检测
      • 锚框
      • 区域卷积神经网络
      • 单发多框检测
      • 一次看完
      • 语义分割
      • 转置卷积
      • 全连接卷积神经网络
      • 样式迁移
    • 循环神经网络

      • 序列模型
      • 语言模型
      • 循环神经网络
      • 序列到序列学习
      • 搜索策略
    • 注意力机制

      • 优化算法

环境和分布偏移

学习了许多机器学习的实际应用,将模型拟合各种数据集。 然而,我们从来没有想过数据最初从哪里来?以及我们计划最终如何处理模型的输出? 通常情况下,开发人员会拥有一些数据且急于开发模型,而不关注这些基本问题。

许多失败的机器学习部署(即实际应用)都可以追究到这种方式。 有时,根据测试集的精度衡量,模型表现得非常出色。 但是当数据分布突然改变时,模型在部署中会出现灾难性的失败。

更隐蔽的是,有时模型的部署本身就是扰乱数据分布的催化剂。 举一个有点荒谬却可能真实存在的例子。 假设我们训练了一个贷款申请人违约风险模型,用来预测谁将偿还贷款或违约。 这个模型发现申请人的鞋子与违约风险相关(穿牛津鞋申请人会偿还,穿运动鞋申请人会违约)。 此后,这个模型可能倾向于向所有穿着牛津鞋的申请人发放贷款,并拒绝所有穿着运动鞋的申请人。

分布偏移的类型

一、协变量偏移

在不同分布偏移中,协变量偏移可能是最为广泛研究的。 这里我们假设:虽然输入的分布P(x)可能随时间而改变, 但标签函数(即条件分布P(y|x))没有改变。 统计学家称之为协变量偏移(covariate shift), 因为这个问题是由于协变量(特征)分布的变化而产生的。 虽然有时我们可以在不引用因果关系的情况下对分布偏移进行推断, 但在我们认为x导致y的情况下,协变量偏移是一种自然假设。

即输入特征X的分布发生了变化,但特征与标签之间的映射关系 P(Y|X) 保持不变。

考虑一下区分猫和狗的问题:训练数据包括图中的图像。

image-20260329101713082

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

image-20260329101754616

训练集由真实照片组成,而测试集只包含卡通图片。 假设在一个与测试集的特征有着本质不同的数据集上进行训练, 如果没有方法来适应新的领域,可能会有麻烦。

协变量偏移 (Covariate Shift) 的纠正

核心假设:Ptrain(X)≠Ptest(X)P_{train}(X) \neq P_{test}(X)Ptrain​(X)=Ptest​(X),但 P(Y∣X)P(Y|X)P(Y∣X) 不变。

① 重要性加权 (Importance Weighting)

这是最经典的统计学方法。既然训练数据和测试数据的分布不一样,我们就通过给训练数据“加权”来强行让它们看起来一样。

  • 原理:给训练集中的每个样本赋予一个权重 βi\beta_iβi​。对于那些在测试集中很常见、但在训练集中很少见的样本,赋予更高的权重。
  • 计算公式:权重 βi=Ptest(xi)Ptrain(xi)\beta_i = \frac{P_{test}(x_i)}{P_{train}(x_i)}βi​=Ptrain​(xi​)Ptest​(xi​)​。
  • 具体操作(密度比估计):
    1. 我们通常不知道具体的概率分布,所以可以用一个技巧:训练一个二分类器(如逻辑回归),试图区分“这个样本是来自训练集还是测试集”。
    2. 如果分类器很难区分(觉得它既像训练数据又像测试数据),说明这个样本在两个分布中都很重要,权重适中。
    3. 如果分类器很容易判断它是训练数据,说明它在测试集中很少见,权重降低。

② 领域自适应 (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) 的纠正

核心假设:Ptrain(Y)≠Ptest(Y)P_{train}(Y) \neq P_{test}(Y)Ptrain​(Y)=Ptest​(Y),但 P(X∣Y)P(X|Y)P(X∣Y) 不变。

① 基于混淆矩阵的校正

这是最实用的工程方法。既然模型学到的“特征-类别”关系是对的,只是“类别出现的频率”错了,那我们就修正输出的概率。

  • 步骤:
    1. 计算混淆矩阵:在训练集的验证集上,计算模型的混淆矩阵 CCC。这个矩阵反映了模型把真实类别 jjj 预测为类别 iii 的概率。
    2. 估计目标分布:在测试集上,统计模型预测结果的平均值(即模型认为各类别的预测比例)。
    3. 求解方程:利用混淆矩阵和预测结果,反推测试集真实的标签分布,然后对模型的输出进行校准。

② 重要性加权(针对标签)

与协变量偏移类似,我们也可以使用权重,但这里的权重是基于标签的。

  • 权重:βi=Ptest(yi)Ptrain(yi)\beta_i = \frac{P_{test}(y_i)}{P_{train}(y_i)}βi​=Ptrain​(yi​)Ptest​(yi​)​。
  • 如果在测试集中“猫”的图片变多了,我们在训练时就要把“猫”的样本权重调大,强迫模型多关注“猫”的特征。

③ 联邦学习中的特殊处理

在联邦学习场景下,不同客户端的数据标签分布往往极度不均衡(Non-IID)。

  • FedVLS:一种专门针对标签偏移的方法,通过“空类蒸馏”技术,让本地模型从全局模型中学习那些在本地缺失的类别的知识,防止模型对本地多数类过拟合。

概念偏移 (Concept Shift)

这是最棘手的一种偏移。当标签的定义发生变化时,就会出现这种问题。

  • 概念:输入与输出之间的映射关系 P(Y|X) 发生了改变。
  • 通俗理解:世界的规则变了。同样的输入,在过去和现在可能对应完全不同的输出。
  • 案例体现:
    • 房地产:在新冠疫情前后,旧金山一套三居室公寓(特征X不变)的价格(标签Y)可能从200万美元降至150万美元。房屋特征与价格之间的关系发生了根本性变化。
    • 垃圾邮件分类:过去“免费”这个词可能高度关联“垃圾邮件”,但随着商业邮件的规范化,这种关联性可能减弱。关键词与“垃圾”标签的关系随时间演变。
    • 文化差异:在美国不同地区,人们对“软饮”的叫法(如 soda, pop, coke)不同,同一个词(X)指向的概念(Y)发生了变化。

概念偏移 (Concept Shift) 的纠正

核心假设:P(Y∣X)P(Y|X)P(Y∣X) 变了。这是最棘手的,因为旧的映射关系失效了。

① 持续学习 / 在线学习 (Continual / Online Learning)

既然规则变了,模型必须不断更新。

  • 在线更新:模型部署后,一旦获得新的标注数据(例如用户纠正了推荐结果,或者医生更新了诊断),立即用这些新数据对模型进行微调。
  • 滑动窗口:只保留最近一段时间的数据进行训练,丢弃过时的旧数据,确保模型只学习“当前世界”的规则。

② 集成学习与动态权重

不要只依赖一个模型,而是维护一组模型。

  • 自适应集成:训练多个基学习器。当检测到某个模型在近期数据上表现下降(说明概念可能变了),就降低它的投票权重,或者用新数据训练一个新的模型加入集成。

③ 监控与重训练 (Monitor & Retrain)

概念偏移通常无法通过简单的数学变换修复,往往需要“推倒重来”或“大修”。

  • 触发机制:建立严格的监控指标(如准确率突然下降、KS统计量报警)。
  • 全量重训:一旦确认发生了概念偏移(例如疫情导致房价逻辑改变),必须收集包含新规则的数据集,重新训练模型。

总结

类型对比:

偏移类型一句话定义核心问题
协变量偏移输入数据的样子变了,但判断规律没变P(X)变了,P(Y|X)不变
标签偏移各类别的比例变了,但类别特征没变P(Y)变了,P(X|Y)不变
概念偏移世界的规则变了P(Y|X)变了

纠正思路对比:

偏移类型核心纠正思路关键技术手段
协变量偏移加权/对齐让训练数据“看起来像”测试数据重要性加权、对抗训练、特征对齐
标签偏移校准/重采样修正类别的先验概率混淆矩阵校正、标签重要性加权
概念偏移更新/重训学习新的映射规则在线学习、滑动窗口、模型重训、集成学习
最近更新: 2026/3/30 21:56
Contributors: klc407073648
Prev
过拟合和欠拟合
Next
权重衰减