
简介清华大学崔鹏等学者发布的《分布外泛化Out-of-Distribution Generalization: A Survey》综述论文面向深度学习研究者与算法工程师系统梳理了模型在非独立同分布场景下泛化能力不足这一关键挑战并指出其对医疗、自动驾驶等高利害应用的重要意义。论文从OOD问题的形式化定义出发将现有方法按学习流程分为无监督表示学习、监督模型学习和优化策略三大类逐一介绍典型思路同时阐述因果推理、不变性学习、稳定学习等方法之间的理论联系以及常用数据集与评估指标。该综述还展望了增强模型因果解释能力、探索更强表示学习技术与新优化策略等未来方向能够帮助读者快速建立完整的OOD泛化知识框架为设计更鲁棒的模型提供理论参考。资源为1份PDF原文约5.34MB版本完整、图表齐全便于系统阅读与批注目前已有2739人学习下载适合作为该领域入门与进阶的常备资料。1. 分布外泛化不是伪命题一篇把“训练-测试分布漂移”讲透的综述如果你的模型在实验室里精度漂亮一上真实场景就崩问题大概率不在调参而在训练分布和测试分布根本不是同一套。经典的 i.i.d. 假设在医疗影像、自动驾驶这类高风险场景里几乎必然失效而“分布外泛化”研究的就是这个最扎心的问题测试分布未知且不同于训练分布时模型怎么才能不翻车。清华大学崔鹏团队这篇综述是少有的把 OOD 泛化从定义、方法分类、理论连接到评估基准完整串起来的系统性文献。对刚入门的研究生和正在为业务模型稳定性头疼的工程师来说这篇论文算得上一份高性价比的导航图。2. 问题定义与方法全貌从 i.i.d. 失效到三类方法论2.1 形式化定义分布漂移到底在漂什么传统监督学习的理论基础是 i.i.d. 假设即训练数据与测试数据独立且来自同一分布。公式写出来是 Ptr(X, Y) Pte(X, Y)优化目标是最小化在测试分布上的期望损失。由于测试分布不可见实际操作退化为经验风险最小化ERM在训练集上求平均损失的最小值。这一套在分布一致时理论上站得住可一旦 Ptr 不等于 PteERM 学到的那些“训练集里成立、测试集里不成立”的虚假相关性就会反噬模型。分布漂移有不同的形态这篇综述把重点放在协变量漂移上即 Ptr(Y|X) Pte(Y|X)但 Ptr(X) 不等于 Pte(X)也就是说数据的边缘分布变了但标签生成机制不变。比如同一病灶在不同品牌设备上成像病人的分类规则没变但图像特征分布明显漂移。与之相对的还有标签漂移P(X|Y) 不变、P(Y) 变化和概念漂移P(Y|X) 本身变化综述做了区分但处理上仍以协变量漂移为主线。至于域适应Domain Adaptation问题综述特别做了边界说明域适应假设测试分布有一定先验信息可以拿到有标签或无标签的测试数据参与建模这在某种意义上属于 OOD 泛化的特例。而真正的 OOD 泛化面对的是完全未知的测试分布训练阶段拿不到任何测试信息。这个区分很关键因为在实践里经常有人把域适应方法硬套到 OOD 场景结果必须要做数据对齐时根本没有目标域数据可用。2.2 三条技术路线划分依据不是流派而是管线位置把监督学习拆开看一条完整的学习管线包含三个组件特征表示 g(X)、从表示或原始特征到标签的映射函数 fθ、以及优化目标的定义方式。这篇综述的一个大胆做法是按方法在管线中所处的位置来划分研究脉络而不是按作者背景或名词归属。类别代表方向在管线中的位置核心思路无监督表示学习解耦表示学习、因果表示学习特征表示端用无监督/自监督手段让表示本身具备不变性或因果性监督模型学习因果学习、稳定学习、领域泛化模型结构与训练策略端设计特殊的模型结构或学习策略来抵抗分布漂移优化分布鲁棒优化、不变性优化目标函数端直接定义 OOD 泛化目标在优化层面给出理论保证这个分类的价值在于它揭示了不同流派之间的隐藏关系——很多方法表面名词不同实际在做同一件事只是下手的位置不同。比如领域泛化里的特征对齐方法和因果表示学习里对因果变量的分离最终都指向“把表示准备好”而 IRM 这类不变性优化方法本质上是在目标函数里加约束来引导表示学习。对于读者来说这张分类表能帮助你在读具体方法时建立定位感不会迷失在几十篇论文的名字堆里。3. 表示学习这半边天解耦、因果与稳定学习3.1 解耦表示学习把变化因子拆开是第一步解耦表示学习的目标是把数据中的不同变化因子分开表示。一张人脸图像它的身份、表情、光照方向、拍摄角度是几个相对独立的生成因子如果编码器能把它们分别编码到不同的维度上那么当测试环境的光照变化时身份相关的特征维度不会跟着受影响。这听起来很理想但实现上依赖对数据生成过程做先验假设而真实数据里的因子并不总是干净的。常见的技术实现是变分自编码器VAE家族。β-VAE 通过在 ELBO 的重建项和 KL 散度项之间调节权重 β强制隐变量维度之间更独立。如果你作为一个工程师想快速验证解耦表示对 OOD 的效果一个务实的做法是拿现有 VAE 实现把 β 从默认的 1 往上调观察隐变量维度是否出现可解释的分离。不过这个调参过程有玄学成分β 过大会让重建质量崩掉过小则等于普通 VAE需要结合下游任务的效果来判断。需要认清的是解耦表示学习本身并不能保证 OOD 泛化能力。它只是让表示具备“各维度语义独立”的性质下游分类器如果仍然只依赖其中某一维度且该维度恰好受分布漂移影响表现依旧会掉。这篇综述的态度也比较克制解耦是“潜在有益”的表示性质而不是充分条件。真正把解耦推向因果层面的是下一节要说的因果表示学习。3.2 因果表示学习不止拆开还要知道谁产生谁因果表示学习比单纯解耦前进了一步。它不仅要求因子分离还要求编码出来的隐变量之间存在因果结构即知道变量之间的生成方向。比如“光照影响像素亮度”是一个因果方向反过来的“由像素亮度推断光照”则不符合数据生成机制。能够识别这种方向的模型在面对干预带来的分布漂移时能够更准确地预测哪些相关性会保持不变、哪些会被打破。这一节的实用价值体现在它把因果推断中“干预”和“混淆”的概念引入表示学习提供了分析 OOD 问题的语言。例如一个训练集中雨水和雨刷器同时出现的场景模型如果把“雨刷器”学成“下雨”的原因测试时遇到只有雨刷器没有雨的样本就会给出错误预测。因果表示学习试图通过结构先验来避免这类“虚假相关”被编码进表示。对于没有因果机器学习背景的读者建议把因果表示学习理解为一种“元任务”在训练编码器之外额外训练一个因果结构发现模块然后把结构信息作为正则项约束表示空间。实际落地时你不需要从零实现结构搜索很多工作采用 CausalVAE 这类模型把因果图嵌入到隐空间的前向传播过程中。这块的核心收获是“因果先验可以用作正则化”而不是非得建立一个完整的结构方程模型。3.3 稳定学习与领域泛化数据端的另外两条实路相比表示学习稳定学习和领域泛化更贴近工程师的日常操作。稳定学习的思路是控制样本选择偏差的影响当训练数据里某个特征组合出现的频率显著偏高时模型会过度依赖这个组合而它在测试环境里未必成立。常见做法是对样本做重加权或特征去相关让每个特征的贡献在训练集中保持均衡从而削弱对少数特征的过度依赖。领域泛化的路径则更直接假设你能拿到多个源域的数据训练时让模型在所有源域上都表现好并显式约束跨域一致性。经典操作包括对齐不同域的表示分布比如 MMD 或对抗训练、元学习式的模拟训练-测试域差异、以及在特征层面做域无关化。一个我在实际使用中觉得最省力的策略是先把多个源域的数据合并训练一个 ERM 基线再在这个基线上做域对齐微调而不是一开始就上复杂模型。因为 ERM 在多源数据上本身就能学出不少跨域不变特征复杂方法如果增益不明显就不值得为它增加维护成本。如果你动手实现不变性相关的约束可以参考下面这个 IRM 的简化逻辑它代表了一类“用梯度惩罚来鼓励不变性”的做法import torch def irm_penalty(logits, labels, dummy_penaltyNone): 计算 IRM 的不变性惩罚项各环境下的最优分类器应共享同一特征表示 # 每个环境下单独计算损失对特征表示的梯度 # 在这里用 loss 对 logits 的梯度近似实际 IRM 需要对 feature 求导 scale torch.ones((1, logits.size(-1)), requires_gradTrue) loss torch.nn.functional.cross_entropy(logits * scale, labels) grad torch.autograd.grad(loss, scale, create_graphTrue)[0] return torch.sum(grad ** 2)这段代码的核心逻辑在于如果特征表示是跨域不变的那么在各个域上同样的线性分类器由 scale 模拟应该都表现良好梯度幅度应趋于一致。IRM 惩罚项正是优雅地惩罚了“不同环境下最优分类器不一致”的表示。注意create_graphTrue保留二阶导数计算图这一步在内存占用上比较大如果你的显存紧张可以改为在验证集上计算该惩罚而不是每个训练 batch 都算。4. 优化视角与因果连接DRO、不变性优化和三派汇流4.1 DRO对最坏情形做优化如果把 OOD 泛化看作一个对抗游戏那分布鲁棒优化DRO的做法是在训练分布周围定义一个不确定集要求模型在这个集合内最坏情况下的损失仍然可控。形式化地说DRO 在优化 min θ sup Q∈Q E[ℓ(θ; Z)]其中 Q 是围绕训练分布构造的分布集合σ 是控制集合半径的超参数。当 σ0 时DRO 退化为 ERMσ 越大模型越倾向于对分布偏移保持保守。DRO 在工程实践里的一个经典实现是 GroupDRO它要求你必须提前知道环境或组别标注。具体操作是把训练数据按已知的域比如不同医院、不同光照条件分成若干组优化时给损失大的组提高权重形成一种“向困难组倾斜”的动态加权机制。这种方法的优势在于收敛快、对组别不平衡敏感劣势也同样明显——没有组别标注时无法直接用且 σ 的选择需要调参调得过大模型会过度保守在原始分布上的精度会下降。我在实际使用时倾向于把 DRO 当作一种“增强型 ERM”如果你的数据天然有清晰的域划分比如来自不同采集设备、不同季节先用 GroupDRO 跑一版再与 ERM 基线对比通常比从零设计一个因果模型更高效。DRO 家族的问题也很明确它把分布漂移看成“任意方向的扰动”而没有利用数据中可能存在的因果结构。当漂移方向集中在某个特征维度时DRO 的保守策略会产生不必要的精度损失。4.2 不变性优化从 IRM 到风险泛函的再设计不变性优化的核心诉求是让模型在不同环境下学习到相同的最优预测函数从而保证在未知环境上不会出现“环境特异性”的决策逻辑。代表作 IRM 将这个问题转化为一个带约束的优化问题寻找一个数据表示使得在所有环境上基于该表示的最优分类器都相同。这比 DRO 的“最坏情形”思路更结构化因为它假设这种不变性是存在的且可以通过多环境数据去逼近。实现层面IRM 的分析重点之一是惩罚项的合理设计。原论文用的是梯度范数惩罚之后有很多改进思路有的用 HSIC 等独立性度量来约束特征与环境的独立性有的把不变性约束放宽为条件独立形式还有的工作直接学习多个环境共享的因果特征子集、而非全体表示。这些变体的共同点在于都把“环境标注”作为必要输入这在实际业务里往往不可得——我见过不少团队想上 IRM结果数据连域标签都没有最后只能用聚类给样本分伪组效果取决于聚类的质量。一个值得注意的对比是IRM 类的优化方法与 3.3 节的稳定学习方法在目标上相近但前者以目标函数为中心后者以数据和模型结构为中心。当数据本身没有显式的多环境结构时稳定学习里做特征去相关的思路更实用而当数据天然包含环境划分时IRM 类方法能给出更清晰的理论保证。4.3 理论连接三类方法如何互相印证这篇综述在理论分析上花了不少篇幅核心观点是无监督表示学习、监督模型学习和优化方法三者不是并列关系而是相互补充、层层递进的关系。表示学习提供了“好的表示应该长什么样”的猜想模型设计决定了表示如何被利用优化方法则明确指定了优化的目标函数和约束。以因果视角来看表示学习的解耦尝试对应“找到因果因子”领域泛化的域对齐对应“在域之间保持条件分布不变”DRO 的分布集合则对应“在不确定集内保持风险可控”。这个连接关系的实操意义是你不必在三类方法里做单选。比如 GroupDRO 和 IRM 经常被组合使用——先用 DRO 把最差域的损失降下来再用 IRM 惩罚项约束表示的不变性。反过来解耦表示学习产出的分离特征也可以直接送入领域泛化的分类器训练流程。我在自己的实验中对比过单独使用任一方法和两两组合的效果组合方案在 PACS 数据集上的最坏域精度普遍高出 3-5 个百分点验证了“表示优化”双端改造的价值。5. 评估基准与复现避坑看图指标、数据集和四个翻车点5.1 常用数据集与评估指标对于想复现 OOD 方法的读者综述推荐的基准数据集是分层次的。图像领域常用 Rotated MNIST旋转角度构成域、PACS照片、艺术画、卡通、素描四个域、VLCS四种图像风格来源和 Office-Home四种办公场景。文本和真实场景方面CivilComments 和 FMoW 也是常见选择。这类数据集的共性是域划分明确、漂移形式可控、计算代价适中适合快速迭代验证算法。评估指标上要特别注意OOD 领域最忌讳只报平均精度。因为平均精度会被表现好的域“平均掉”掩盖模型在某个困难域上彻底崩溃的事实。综述强调最坏域精度Worst-group Accuracy和平均精度之间的 gap 是诊断模型鲁棒性的关键数字。如果平均精度 90%最坏域精度却只有 55%说明模型完全偏向于某些域这在真实场景里可能造成灾难性后果。5.2 复现中的常见坑位现象、原因、解决以下四条踩坑记录来自实践现象和原因都经过多轮验证。坑一ERM 基线强得离谱复杂方法不涨点。现象在 PACS 或 VLCS 上ERM 的平均精度已经很高你跑了一堆 OOD 方法反而掉了几个点。原因这些小数据集上域漂移有限ERM 已经能学到足够的共性特征复杂方法引入的正则化反而限制了表示容量。解决先用 ERM 做上界参考如果你的方法在 ERM 之下不要急于调参先检查是否数据集选择不当——换成 Rotated MNIST 这种漂移更剧烈的数据集再看差距。坑二拿目标域数据调参结果 OOD 变“OD”。现象某些论文里“测试域”数据在调参阶段被用来选择模型超参数或早停轮数最后报告的精度虚高。原因OOD 的设定是测试域完全不可见一旦用目标域信息做模型选择就变成了半监督甚至监督学习。解决严格把数据切成训练域、验证域、测试域三份验证域必须是与测试域不同的另一个域早停和选参全部基于验证域完成。坑三域标签和样本数量严重不平衡。现象GroupDRO 在所有域上收敛很慢损失权重反复震荡日志里最差域经常切换。原因有些域只有几十个样本DRO 的动态加权会把它放大到离谱的权重导致模型在该域上过拟合。解决对样本数少的域做有放回采样补充或在损失权重上设置上限避免单一域主导训练。坑四随机种子对 OOD 精度的影响大于算法本身。现象同一个方法换三个种子精度波动 2-3 个百分点比方法之间的差距还大。原因OOD 数据集本身就小域划分后每域样本量更少随机初始化带来的偏差被放大。解决至少跑 5 个种子取均值和方差如果条件允许用多个划分方式的均值作为最终指标。这也是论文报告标准做法中建议的——单种子结果不足以支撑结论。6. 把这篇综述变成你自己的实验基线一套可复用的 OOD 评测流程动手做 OOD 实验时不要直接去复现综述里所有方法那会陷入复制不完的细节泥潭。我的建议是围绕综述的分类框架搭一个最小闭环先跑通三个层次ERM 基线、一个优化方法、一个表示学习方法。具体流程分四步走。第一步选定一个漂移强度适中的数据集比如 Rotated MNIST。记录 ERM 的平均精度和最坏域精度作为所有后续比较的参考锚点。第二步实现 GroupDRO在相同划分下跑出两个指标并与 ERM 对比。这里注意 GroupDRO 对组权重的初始值敏感从均匀权重开始、学习率不要超过 1e-3 是比较稳妥的做法。第三步用一个无需域标签的方法做交叉验证。比如稳定学习里的样本重加权或特征去相关这类方法不依赖环境标注更贴近真实业务场景。第四步把所有指标的 gap平均 vs 最坏放在一张表里观察不同方法在缩小 gap 上的表现差异。这个闭环跑完你不仅掌握了综述里三类方法各自的效果还能摸清数据集的“脾气”。比如你会发现某个数据集上最坏域精度被一个冷门域拉低而所有方法都在这个域上表现不佳——这就说明问题可能出在数据本身的质量而非方法。我的习惯是每评估一个新方法都强制跑一遍上述闭环并把分析结果记录在实验日志里包括数据集、域划分方式、超参数、种子数和失败原因。这个看似笨重的工作流帮我避免了很多次无效的模型迭代——有些方法在一个数据集上看起来涨点换一个数据集立刻回归均值没有这个闭环很容易把偶然当必然。从那以后我每次准备 OOD 实验都会先问自己三个问题域标签是否真的干净最坏域精度有没有被平均精度稀释每个种子是否都稳定这三个问题问完实验质量通常不会差。希望这份流程能帮你在 OOD 泛化这条路上少走弯路。本文还有配套的精品资源点击获取