资讯动态

分布外泛化(OOD)系统综述:从i.i.d.假设失效到因果不变性学习

发布时间:2026/10/16 15:26:47 来源:尧图企业网站定制
简介这份资源是清华大学崔鹏等学者撰写的《分布外泛化(Out-Of-Distribution Generalization)》综述论文PDF面向深度学习研究者、算法工程师及关注模型鲁棒性的高年级学生系统回应了训练与测试分布不一致时模型性能骤降这一核心难题。论文从OOD泛化的形式化定义切入将现有方法按学习流程归为无监督表示学习、监督模型学习与优化策略三类并串联因果推理、不变性学习、稳定学习与分布鲁棒优化之间的理论联系同时梳理常用数据集与评估指标最后给出未来研究方向。资源包共1个PDF文件约5.34MB内容完整、结构清晰便于按章节精读与检索。目前已有2740人学习下载适合希望快速建立OOD泛化知识框架、把握领域脉络并寻找研究切入点的读者参考。1. 分布外泛化为什么模型在测试集上翻车在真实世界里更翻车如果你做过机器学习项目大概率经历过这种场景模型在验证集上准确率 95%上线后面对真实数据直接掉到 60%甚至不如随机猜。这不是调参没调好也不是数据量不够——根源在于一个被默认了几十年的假设训练数据和测试数据独立同分布i.i.d.。真实世界不跟你讲这个道理。时间在变、采集设备在变、用户群体在变测试分布和训练分布之间的偏移是常态而非例外。分布外泛化Out-of-Distribution GeneralizationOOD要解决的核心问题就是当测试分布未知且与训练分布不同时模型还能不能打这篇综述把 OOD 问题从定义、方法分类、理论联系到评估体系做了一次系统梳理值得每一个被分布偏移坑过的开发者认真读一遍。2. 从 i.i.d. 到 OOD问题定义里藏着哪些关键假设2.1 ERM 为什么在分布偏移下必然失效经典监督学习的数学形式很简洁。给定特征空间 X 和标签空间 Y模型 fθ: X → Y 是一个带参数 θ 的映射函数损失函数 ℓ: Y × Y → R 衡量预测与真值的距离。监督学习的目标是f*θ arg min_{fθ} E_{X,Y ~ Pte}[ℓ(fθ(X), Y)]注意这里优化的是测试分布 Pte 上的期望损失。但训练时你手里只有训练分布 Ptr 的样本。i.i.d. 假设告诉你 Ptr Pte于是可以用经验风险最小化ERM来近似L_ERM (1/n) * Σ_{i1}^{n} ℓ(fθ(xi), yi)ERM 的合法性完全建立在 Ptr Pte 之上。一旦这个等式不成立ERM 优化的目标和真正想要优化的目标就产生了系统性偏差。更致命的是ERM 会贪婪地吸收训练数据中所有可用的相关性——包括那些在测试分布中根本不成立的虚假相关。比如训练集里“草地”和“牛”总是同时出现模型可能学会“有草地就是牛”到了测试集里草地上站着一只羊模型就翻车了。这不是模型不够大、数据不够多的问题是优化目标本身在分布偏移下就是错的。2.2 协变量偏移最常见也最值得深挖的偏移形式OOD 问题在一般情况下是不可解的——如果对测试分布怎么变没有任何假设那任何模型都无法保证泛化。所以必须对分布偏移的形式做约束。综述重点讨论了协变量偏移Covariate Shift定义为Ptr(Y|X) Pte(Y|X) 且 Ptr(X) ≠ Pte(X)意思是标签生成机制不变但输入特征的边缘分布变了。这个假设在很多实际场景中是合理的——比如医学影像中不同医院用的设备不同导致图像风格变化X 的分布变了但“肺炎的影像学表现”这个因果机制没变Y|X 不变。协变量偏移之所以重要是因为它保留了因果方向上的稳定性使得不变性学习成为可能。这里有一个容易混淆的点OOD 泛化和域适应Domain Adaptation不是一回事。域适应假设你能拿到测试分布的样本——不管是有标签的还是无标签的——所以它可以在训练阶段就“看到”测试分布的信息。OOD 泛化更狠测试分布在训练阶段完全未知你只能靠训练分布的结构去赌一个对未知分布也成立的解。这个区别决定了两者的理论工具和算法设计走的是完全不同的路线。2.3 三类方法的分工逻辑综述按方法在学习流水线中的位置把 OOD 泛化方法分成三大类。这个分类不是随便切的它对应了监督学习问题的三个可分离组件类别介入位置核心思路代表方法无监督表示学习特征表示 g(X)让表示本身具备不变性解耦表示学习、因果表示学习监督模型学习映射函数 fθ设计模型结构或训练策略因果学习、稳定学习、域泛化优化方法优化目标直接构造对分布偏移鲁棒的目标函数分布鲁棒优化、不变性优化这三类的分工逻辑是表示学习负责“提取什么特征”模型学习负责“怎么建立特征到标签的映射”优化负责“用什么目标来驱动整个学习过程”。理解这个分层后面看具体方法时就不会迷失在公式里。3. 无监督表示学习如何让特征本身具备不变性3.1 解耦表示学习把变化的因子拆开解耦表示学习的核心思想很直观数据中的变化因素是多维的如果能把它们拆成相互独立的因子那么与标签因果相关的因子就能在不同分布下保持稳定。比如一张人脸图片变化因子包括身份、姿态、光照、表情。如果表示能把“身份”单独编码出来那么不管光照怎么变身份特征不变分类器就能稳定工作。常见的实现思路是基于变分自编码器VAE的框架通过设计损失函数来鼓励表示的各维度之间统计独立。典型做法是在 VAE 的 ELBO 目标上增加一个总相关项Total Correlation来惩罚维度间的依赖# 解耦表示学习的损失函数核心结构伪代码 # z 是编码器输出的表示向量维度为 d # 目标让 z 的各维度之间尽可能独立 def disentanglement_loss(recon_loss, kl_loss, z, beta1.0, gamma1.0): recon_loss: 重构误差保证表示包含足够信息 kl_loss: KL 散度约束表示的先验分布 z: 编码器输出的表示shape [batch_size, d] beta: KL 项的权重beta-VAE 的核心超参 gamma: 总相关项的权重控制解耦强度 # 计算总相关衡量 z 各维度之间的统计依赖性 # 常用做法是计算 z 的维度间互信息之和 tc_loss total_correlation(z) # 维度间互信息之和 # 总损失 重构 beta * KL gamma * 总相关 total recon_loss beta * kl_loss gamma * tc_loss return total这里的关键参数是 beta 和 gamma。beta 越大表示越接近先验分布通常是各维度独立的标准正态但重构质量会下降gamma 越大解耦越强但可能丢失对预测有用的信息。实际调参时这两个值需要根据任务做权衡没有万能配置。解耦表示学习在 OOD 场景下的理论依据是如果表示的各维度对应数据中真实的独立变化因子那么当某些因子如光照、背景的分布发生变化时与标签相关的因子如身份的表示不受影响。但这个方法的局限也很明显——它需要较强的先验假设比如变化因子确实独立而且解耦质量本身很难量化评估。3.2 因果表示学习从相关性到因果性因果表示学习走得更远一步。它不满足于把因子拆开而是试图从观测数据中恢复出变量之间的因果结构。核心假设是因果机制在不同分布下保持不变而虚假相关会随分布变化。所以如果能学到因果结构就自然获得了 OOD 泛化能力。常见的实现思路是利用干预Intervention的概念。在因果图中对某个变量施加干预会改变它与其他变量的关系但不会改变因果机制本身。算法通过模拟不同干预下的数据分布迫使模型学到对干预不变的因果表示。具体实现通常涉及结构因果模型SCM的框架用神经网络参数化因果机制然后通过多环境数据来约束学习过程。这里有一个常见的误解很多人以为因果方法就是“找到因果方向”然后“沿着因果方向预测”。实际上因果表示学习的难点在于——你只有观测数据没有真正的干预实验。算法能做的是利用多个环境不同分布的数据之间的差异来间接推断因果结构。如果只有一个环境的数据因果方向是不可识别的。这也是为什么 OOD 方法通常需要多个训练域的数据。3.3 表示学习的边界在哪里表示学习类方法有一个共同的隐含假设存在一个“好的”表示空间在这个空间里分布偏移被消除了。但这个假设并不总是成立。如果分布偏移发生在标签生成机制层面即 P(Y|X) 本身变了不只是 P(X) 变了那么无论怎么学表示都救不了。这就是为什么综述在讨论表示学习之后还要继续讨论模型学习和优化方法——单靠表示学习覆盖不了所有 OOD 场景。另外表示学习方法的评估也是一个大问题。解耦质量、因果结构的正确性这些都没有像分类准确率那样直接的指标。综述在评估部分专门讨论了这个问题后面会展开。4. 监督模型学习从模型结构到训练策略的 OOD 设计4.1 因果学习与不变性IRM 的核心逻辑不变风险最小化Invariant Risk MinimizationIRM是监督模型学习中影响最大的框架之一。它的核心思想可以用一句话概括好的模型应该在所有训练环境中都达到最优而不只是在平均意义上最优。传统 ERM 在所有训练数据上最小化平均损失这允许模型在某些环境上表现好、在另一些环境上表现差只要平均下来够好就行。IRM 则要求模型在每个环境上都是最优分类器。数学上IRM 的优化目标是min_{f} Σ_{e} R_e(f) subject to f ∈ arg min_{f} R_e(f) for all e其中 R_e 是环境 e 上的风险。这个约束条件的含义是f 必须同时是所有环境上的最优解。满足这个条件的 f 学到的是环境间不变的预测机制因此更可能泛化到未见过的测试分布。实际实现时这个约束太强通常用松弛版本。IRMv1 的做法是引入一个标量乘子 w把约束转化为惩罚项# IRMv1 的损失函数伪代码 def irm_loss(environments, model, scaler1.0): environments: 列表每个元素是一个环境的数据加载器 model: 特征提取器 分类器 scaler: 惩罚项的权重 irm_penalty 0.0 total_loss 0.0 for env in environments: x, y env.batch() # 特征提取 features model.extract_features(x) # 分类器输出 logits model.classifier(features) # 该环境上的损失 env_loss cross_entropy(logits, y) total_loss env_loss # IRM 惩罚项分类器梯度范数的平方 # 如果分类器在所有环境上都是最优的这个梯度应该为零 grad compute_grad(env_loss, model.classifier.parameters()) irm_penalty grad.norm() ** 2 return total_loss scaler * irm_penalty这里 scaler 的选取很关键。太小了约束不起作用退化成 ERM太大了优化困难模型可能学不到任何有用特征。实践中通常需要根据具体任务调参没有理论上的最优值。IRM 的理论保证依赖于一个强假设训练环境足够多样能够覆盖测试分布中的变化方向。如果训练环境只有两个而且变化方向恰好和测试分布的变化方向正交IRM 也救不了。这是所有基于多环境的方法的共同局限。4.2 稳定学习用样本权重消除虚假相关稳定学习Stable Learning走的是另一条路。它不要求多个环境而是通过样本重加权来消除特征之间的虚假相关。核心观察是在观测数据中特征之间往往存在相关性其中一些是因果的一些是虚假的。如果模型利用了虚假相关的特征在分布偏移下就会失效。稳定学习的做法是给每个样本分配一个权重使得加权后的特征之间尽可能独立。这样基于独立特征训练的模型就不会依赖虚假相关。具体实现通常是一个迭代过程先初始化权重训练一个模型然后根据模型的残差调整权重使得残差与特征不相关反复迭代直到收敛。这个方法的优势是不需要多环境数据单环境也能用。但它的计算成本较高而且权重优化本身可能不稳定。综述中提到稳定学习与因果推断中的“后门调整”有理论联系——样本重加权本质上是在模拟一个消除了混淆变量影响的数据分布。4.3 域泛化数据增强与元学习的实战路线域泛化Domain Generalization是 OOD 中更偏工程的一支。它假设有多个训练域目标是在未见过的测试域上表现好。与 IRM 不同域泛化方法更关注实际效果而非理论保证。常见的实现路线有两条。第一条是数据增强通过模拟域偏移来扩充训练数据比如对图像做风格迁移、颜色抖动、频域变换等让模型见过足够多的“假想域”从而对真实域偏移更鲁棒。第二条是元学习把训练域分成“训练域”和“模拟测试域”用模拟测试域的损失来更新模型使得模型学会“如何快速适应新域”。这两条路线各有优劣。数据增强实现简单、计算成本低但增强策略的设计高度依赖领域知识——图像领域的增强策略搬到时序数据上可能完全无效。元学习理论上更优雅但训练不稳定对域划分方式敏感。综述在讨论这些方法时特别强调了评估协议的重要性——不同的域划分方式会导致完全不同的结论。5. 优化方法DRO 与不变性优化的数学骨架5.1 分布鲁棒优化在最坏情况下求最优分布鲁棒优化Distributionally Robust OptimizationDRO的思路非常直接既然测试分布未知那我就考虑一个分布集合不确定性集优化在这个集合中最坏分布上的性能。数学形式是min_{f} sup_{Q ∈ P} E_Q[ℓ(f(X), Y)]其中 P 是候选测试分布的集合。如果 P 包含所有可能的分布那这个优化问题就退化为常数——没有模型能对所有分布都最优。所以 DRO 的关键在于如何定义不确定性集 P。常见的做法是用 f-散度或 Wasserstein 距离来约束 P 中的分布与训练分布的距离。DRO 的优势是有理论保证如果测试分布落在不确定性集内那么 DRO 的解在测试分布上的性能有下界。但劣势也很明显——不确定性集的定义需要领域知识。太小的集合覆盖不了真实的测试分布太大的集合导致模型过于保守。5.2 不变性优化从 IRM 到更一般的框架不变性优化可以看作 IRM 的推广。它不要求模型在每个环境上都最优而是要求模型学到的表示满足某种不变性条件。最常见的不变性条件是表示的条件分布 P(h(X)|Y) 在所有环境中相同。这个条件比 IRM 的约束弱更容易优化。实现上不变性优化通常用对抗训练的方式一个网络学习表示另一个网络试图区分表示来自哪个环境。如果判别器无法区分说明表示已经对环境不变。这个思路和域适应中的对抗方法很像但目标不同——域适应是让表示在训练域和测试域之间不变不变性优化是让表示在所有训练域之间不变从而泛化到未见过的测试域。5.3 优化方法的统一视角综述的一个重要贡献是从因果视角统一了这些优化方法。IRM、DRO、不变性优化看起来数学形式不同但本质上都在做同一件事约束模型只利用环境间不变的特征-标签关系。IRM 通过梯度约束实现DRO 通过最坏情况优化实现不变性优化通过对抗训练实现。理解了这个统一视角就能看清不同方法之间的取舍——IRM 理论清晰但优化困难DRO 灵活但需要定义不确定性集不变性优化容易实现但缺乏理论保证。6. 避坑与排查OOD 实践中最容易翻车的几个地方6.1 把域适应当成 OOD 泛化来做现象在训练时使用了测试域的无标签数据做适配然后报告的结果远好于真正的 OOD 方法。原因域适应假设测试分布可用OOD 泛化假设测试分布完全未知。如果你的场景真的是 OOD用域适应的方法会导致上线后性能崩溃。解决明确你的场景中测试数据是否在训练阶段可见。如果不可见必须用严格的 OOD 评估协议——留出一个完整的域作为测试训练阶段完全不接触。6.2 环境划分不合理导致 IRM 失效现象IRM 在某些数据集上表现还不如 ERM。原因IRM 的理论保证依赖于训练环境覆盖测试分布的变化方向。如果环境划分是随机的每个环境的数据分布几乎一样IRM 的约束就退化为 ERM。解决环境划分必须基于有意义的分布偏移——比如按时间、地点、采集设备划分而不是随机切分。如果数据中没有自然的环境标签需要先做分布偏移分析。6.3 用 i.i.d. 评估指标衡量 OOD 性能现象模型在验证集上表现很好但 OOD 测试集上很差。原因随机划分的验证集和训练集同分布无法反映分布偏移下的性能。解决OOD 评估必须用分布偏移的数据划分。常见做法是留一域交叉验证Leave-One-Domain-Out每次留一个域作为测试其余域作为训练。综述中详细讨论了各种评估协议和常用数据集建议在设计实验前先对照检查。6.4 忽视虚假相关导致模型学错特征现象模型在测试集上对某些类别表现极差但对另一些类别很好。原因模型学到了训练分布中的虚假相关。比如在某个数据集中所有“水鸟”图片都有水背景模型学会了“有水就是水鸟”测试时遇到站在岩石上的水鸟就分类错误。解决用因果图分析特征和标签之间的关系识别可能的混淆变量。稳定学习和因果表示学习的方法可以帮助缓解这个问题但前提是你能正确定义因果结构。6.5 过度追求理论保证而忽视实际效果现象选了一个理论保证很强的 OOD 方法但实际效果不如简单的数据增强。原因理论保证通常依赖于强假设如环境多样性、因果结构已知这些假设在实际中往往不满足。解决先建立可靠的 OOD 评估基准然后从简单方法开始尝试——数据增强、集成学习、正则化——再逐步引入更复杂的方法。综述中提到的评估基准和数据集可以作为起点。7. 评估体系与设计取舍OOD 泛化没有免费午餐OOD 泛化的评估比 i.i.d. 场景复杂得多因为你需要同时控制两个变量模型方法和分布偏移的类型与强度。综述中系统梳理了常用的评估数据集和指标这里不展开列举而是讨论评估设计中的核心取舍。第一个取舍是域划分的粒度。域划得太粗分布偏移不够强方法之间的差异被噪声淹没域划得太细每个域的数据量太少模型训练不充分。常见的做法是先用分布距离度量如 MMD、Wasserstein 距离量化域之间的差异然后选择差异适中的划分方式。第二个取舍是评估指标的选取。准确率是最直观的但它掩盖了模型在不同域上的性能方差。一个模型可能在平均准确率上很高但在某些域上崩溃。所以 OOD 评估通常需要报告多个指标平均准确率、最差域准确率、准确率的方差等。综述中提到的评估协议建议同时报告这些指标以便全面评估模型的鲁棒性。第三个取舍是方法复杂度和收益的平衡。IRM、DRO 这些方法有理论保证但实现复杂、调参困难。数据增强、集成学习这些方法简单但缺乏理论支撑。在实际项目中我一般会先从简单方法开始建立基线然后逐步引入复杂方法每次只改变一个变量观察 OOD 性能的变化。如果复杂方法带来的提升不足以抵消其实现和维护成本那就没必要上。从设计取舍的角度看OOD 泛化的核心矛盾是你对测试分布的了解越少需要的假设就越强方法的适用范围就越窄。IRM 假设环境多样性稳定学习假设特征独立性DRO 假设不确定性集可定义——每个方法都在用不同的方式“赌”测试分布的性质。没有哪个方法能在所有场景下胜出选择方法的过程本质上是对你的场景做假设并验证假设的过程。从那以后我每次做 OOD 项目都会先画一张因果图标出哪些特征是因果的、哪些可能是虚假的然后再选方法。这个习惯帮我避免了很多次“模型在测试集上翻车”的事故。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑