资讯动态

分布外泛化(OOD)综述:从表示学习到优化方法的三大技术路线

发布时间:2026/10/25 13:20:22 来源:尧图企业网站定制
简介这份资源是清华大学崔鹏团队等撰写的《Towards Out-Of-Distribution Generalization: A Survey》综述论文PDF面向深度学习研究者、算法工程师及高年级学生系统梳理非独立同分布场景下模型泛化能力下降这一核心难题。论文从OOD泛化的形式化定义出发按学习流程将现有方法归为无监督表示学习、监督模型学习与优化策略三类并讨论因果推理、不变性学习、稳定学习与分布鲁棒优化之间的理论联系同时介绍常用数据集与评估指标最后总结未来研究方向。资源包共1个PDF文件约5.34MB内容完整、结构清晰便于按章节精读与检索。目前已有2740人学习适合希望快速建立OOD泛化知识框架、把握方法分类与前沿脉络的读者作为入门与综述参考。1. 分布外泛化为什么模型在训练集上越准换一个分布就崩得越狠一个在 ImageNet 上刷到 90% 以上准确率的模型换到另一家医院拍的 X 光片上准确率可能掉到随机猜的水平。这不是模型没训好而是它训得太“好”了——好到把训练集里所有能蹭的相关性都蹭上了包括那些换个分布就不成立的伪相关。经典监督学习建立在 i.i.d. 假设上训练和测试数据独立同分布。ERM经验风险最小化在这个假设下是最优的因为它最小化训练误差就等于最小化测试误差。但现实里Ptr(X,Y) ≠ Pte(X,Y)几乎是常态时间漂移、空间差异、采样偏差都会打破这个等式。这篇由清华大学崔鹏等学者撰写的综述第一次把 OOD 泛化从定义、方法、评估到理论连接串成一条完整链路按学习流水线的位置把方法切成三大类。搞懂它你才能明白为什么“加数据”救不了分布偏移以及为什么因果推断会出现在一个纯工程问题的解法里。2. 问题定义OOD 泛化到底在数学上难在哪2.1 从 ERM 到 OOD一个等号被划掉之后经典监督学习的形式化很干净给定从Ptr(X,Y)采样的 n 个样本找一个参数化模型fθ: X → Y使得在测试分布上的期望损失最小f*θ arg min_{fθ} E_{X,Y~Pte}[ℓ(fθ(X), Y)]i.i.d. 假设下Ptr Pte于是可以用训练集上的经验损失L_ERM (1/n)Σℓ(fθ(xi), yi)去估计测试损失ERM 的一致性有学习理论兜底。OOD 泛化把Pte换成未知且不等于Ptr的分布这个等号一断ERM 的理论保证就整体失效了。更麻烦的是Pte在训练阶段根本不可见——在线流式场景里测试数据是未来才产生的你连它的形状都猜不到。这就引出一个关键认识OOD 泛化问题在无假设条件下是不可解的。如果Pte可以任意偏移那训练集提供的信息对测试集毫无约束力。所以所有 OOD 方法本质上都在做同一件事——对“测试分布会怎么变”加一个假设把不可解问题变成可解问题。综述里重点讨论的是协变量偏移covariate shiftPtr(Y|X) Pte(Y|X)但Ptr(X) ≠ Pte(X)即标签生成机制不变、输入边缘分布变了。这个假设之所以成为主战场是因为它足够弱比要求Pte已知的域适应弱得多又足够强保留了Y|X这个可迁移的锚点。提示协变量偏移假设“标签机制不变”是很多 OOD 方法能 work 的隐含前提。如果你的场景里P(Y|X)本身会变比如疾病诊断标准随年份修订那协变量偏移框架就不适用得转向标签偏移或概念偏移的文献。2.2 域适应是 OOD 的特例不是同一件事很多人把域适应和 OOD 泛化混着用综述里明确划了界域适应假设测试分布的部分信息可得——要么有标注的Pte(X,Y)要么至少有无标注的Pte(X)。有了这个先验域适应能拿到理论保证模型在测试分布上的最优性可以守住。OOD 泛化则要求Pte完全未知训练时连无标注测试数据都看不到。这个区别决定了方法设计的方向域适应可以做分布对齐因为你知道目标分布长什么样OOD 泛化不能对齐到一个看不见的分布只能去学“在分布变化下保持不变的东西”。理解这条分界线后面三大类方法的设计动机就顺了——它们全都在回答“看不见测试分布时凭什么相信模型能泛化”。2.3 按流水线位置切三刀表示、模型、优化综述的分类方式很工程化把式 1 的监督学习拆成三个相对独立的部件——特征表示g(X)、映射函数fθ模型/归纳偏置、优化目标。方法落在哪个部件上就归哪一类类别作用位置代表方法核心思路无监督表示学习特征表示 g(X)解耦表示学习、因果表示学习用先验约束表示让不变因子显式分离监督模型学习映射函数 fθ因果学习、稳定学习、域泛化改模型结构或学习策略注入不变性优化方法优化目标分布鲁棒优化、不变性优化直接改写目标函数带理论保证这个切法不是随便分的它对应三种不同的“赌注”赌表示里能分离出不变因子、赌模型结构能编码因果、赌优化目标能覆盖最坏分布。三类方法在理论上通过因果视角互相连通综述第 6 节专门做了这个连接这也是它比一般综述更深的地方。3. 无监督表示学习把不变因子从数据里“拧”出来3.1 解耦表示学习假设数据由独立因子生成解耦表示学习的出发点是一个生成假设观测数据X由若干潜在因子生成这些因子彼此独立其中一部分因子在不同分布下保持不变。如果能学到把每个因子对应到表示的一个维度或一组维度那不变因子就能被单独拎出来用于预测伪相关因子被隔离。VAE 类方法是这条线的典型实现通过在潜空间上加独立性约束比如 β-VAE 对 KL 项加权来逼近解耦。常见的实现思路是在 ELBO 上做改造用一个加权项逼迫潜变量各维之间统计独立# 解耦表示学习的损失骨架示意非某框架源码 def disentangled_loss(x, encoder, decoder, beta4.0): mu, logvar encoder(x) z reparameterize(mu, logvar) # 重参数化采样 recon mse_loss(decoder(z), x) # 重构项保信息 kl -0.5 * torch.sum(1 logvar - mu**2 - logvar.exp(), dim1) # beta 1 放大 KL 约束逼迫潜空间各维趋向独立 return recon beta * kl.mean()beta是关键参数取 1 就是标准 VAE取大于 1 会牺牲部分重构精度换取更强的解耦。代码后的机制说明重构项保证表示不丢信息KL 项在标准 VAE 里是正则在这里被当成解耦的驱动力——它把聚合后验往各维独立的标准正态上推。但这条路的软肋在假设本身真实数据的生成因子未必独立解耦在无监督下也缺乏可识别性保证学出来的“因子”可能只是统计上正交、语义上并不对应因果机制。所以综述把它归为“用先验换泛化”的一类先验越强假设不成立时翻车越狠。3.2 因果表示学习从解耦走向可识别因果表示学习是对解耦的升级不再满足于统计独立而是要求表示对应数据生成过程中的因果变量。它的动机很直接——分布偏移改变的是变量间的统计关系但因果机制本身在干预下保持稳定所以抓住因果变量就等于抓住了跨分布不变的部分。实现上通常引入结构因果模型SCM作为先验用干预或环境标签来约束表示学习让潜变量之间的因果图可识别。这条线的理论门槛比解耦高得多需要可识别性条件比如因果变量之间非线性、噪声非高斯等但换来的是更强的泛化论证。我一般会这么理解解耦是“希望”表示有用因果表示是“证明”表示在分布偏移下有用。综述在这里埋了一个重要伏笔——因果视角会在第 6 节被用来统一三大类方法表示学习只是这个统一框架的入口。3.3 表示学习的边界在哪无监督表示学习最大的吸引力是不需要测试分布的任何信息纯靠训练数据加先验。但代价也很清楚先验假设无法从数据中验证一旦真实生成过程违背假设因子不独立、因果图不对学到的表示在分布偏移下可能比原始特征还糟。综述对这条线的定位是“潜力大、可识别性弱”适合作为其他方法的预处理或辅助而不是单独扛 OOD 泛化的大旗。实际选型时如果你的领域有明确的物理或因果先验比如传感器数据、医学指标这条线值得投入如果先验全靠猜不如直接看下一章的模型层方法。4. 监督模型学习在模型结构里编码不变性4.1 域泛化多环境训练赌不变性跨环境稳定域泛化Domain Generalization是 OOD 里最贴近工程实践的一支训练时能拿到多个不同分布域的数据测试域未知。它的核心赌注是——在多个训练域上都成立的特征-标签关系更可能在未知测试域上成立。典型做法包括域对齐把各域表示拉到一起、元学习模拟域偏移做训练、以及不变风险最小化IRM这类显式约束。IRM 的思路值得单独说因为它把“不变性”写成了可优化的目标要求存在一个表示Φ使得在每个训练域上最优的分类器是同一个。用代码表达这个约束的直觉# IRM 惩罚项的直觉实现示意 def irm_penalty(env_losses, dummy_w1.0): # env_losses: 各训练域上的损失列表 scale torch.ones_like(env_losses[0], requires_gradTrue) total sum((w * l).sum() for w, l in zip(scale, env_losses)) grad torch.autograd.grad(total, scale, create_graphTrue)[0] return (grad ** 2).sum() # 惩罚“各域最优分类器不一致”的程度env_losses是每个域上的经验损失scale是虚拟的分类器权重。对scale求梯度再取平方和衡量的是“各域损失对分类器权重的敏感度是否一致”——如果一致说明存在一个跨域通用的最优分类器。这个惩罚项加到 ERM 损失上就得到 IRM 目标。参数上要注意域的数量至少两个且域之间的偏移要“足够多样”否则不变性约束会退化成在单一分布上过拟合。4.2 稳定学习从相关性里筛出稳定特征稳定学习走的是另一条路不要求多域标签而是从单域数据里通过样本重加权去打破特征间的虚假相关。它的动机是观测数据里特征之间高度相关模型会利用这种相关做预测但相关在分布偏移下不成立。稳定学习的做法是给样本加权使得加权后特征之间近似独立从而让模型只能依赖真正有预测力的特征。这条线的工程价值在于它不要求多环境数据适合只有单源数据的场景。但代价是重加权本身是个优化问题权重估计不准时稳定性保证会打折扣。综述把它和域泛化并列在监督模型学习下是因为两者都在改“模型怎么学”而不是改表示或改目标函数。4.3 因果学习把不变性落到因果机制上因果学习在模型层的体现是显式建模X到Y的因果路径把非因果路径混杂、选择偏差作为需要消除的部分。常见做法包括前门/后门调整、工具变量、以及基于干预的表示约束。它和 3.2 的因果表示学习是一体两面那边在表示层抓因果变量这边在模型层约束因果路径。综述强调因果学习是三大类方法理论统一的语言——域泛化的“跨域不变”、稳定学习的“稳定特征”、优化方法的“不变性约束”在因果图下都能找到对应位置。这也是这篇综述比方法罗列型综述更有价值的地方它给了一个能互相翻译的坐标系。5. 优化方法把 OOD 目标直接写进损失函数5.1 分布鲁棒优化对最坏分布做最小化分布鲁棒优化DRO的思路是把 OOD 目标显式写成“在最坏测试分布上的损失最小”min_{fθ} sup_{P ∈ Ω} E_P[ℓ(fθ(X), Y)]Ω是一个不确定集定义了“测试分布可能偏移的范围”。DRO 不赌某个具体的不变性而是赌测试分布落在Ω内然后对这个集合里最坏的分布做优化。它的理论保证很漂亮只要Pte ∈ Ω泛化界就成立。但工程上的难点全在Ω怎么定——定小了覆盖不住真实偏移定大了模型过度保守、在正常分布上性能下降。常见的实现思路是用 f-divergence 或 Wasserstein 距离来参数化Ω半径成为一个需要调的超参。这个半径就是 DRO 的“后悔药”和“紧箍咒”一体两面它给你理论保证也让你必须为最坏情况付出平均性能的代价。5.2 不变性优化IRM 的优化视角第 4.1 节的 IRM 从优化角度看是在 ERM 目标上加一个不变性惩罚形成带约束的优化问题。综述把它归到优化类是因为它的核心贡献在于把“不变性”变成了可微、可优化的项而不是靠模型结构硬编码。这类方法的实现细节里有个容易翻车的点惩罚项的梯度需要create_graphTrue做二阶求导计算开销明显高于普通训练且惩罚权重需要仔细调——权重太小不变性约束形同虚设太大则模型在训练域上都学不好。综述在理论连接部分指出不变性优化和 DRO 在特定条件下等价这给了一个很有用的选型依据如果你能定义不确定集用 DRO如果你能定义环境划分用不变性优化。5.3 三类方法的理论连接因果是共同语言综述第 6 节做了一件一般综述不做的事用因果视角把表示学习、模型学习、优化方法串起来。粗略地说解耦表示学习在找因果变量域泛化在找跨干预稳定的机制DRO 在覆盖干预可能产生的分布集合。三者从不同入口逼近同一个目标——识别并利用不变性。这个连接的实际价值在于当你面对一个新场景可以先问“不变性在哪”再决定从表示、模型还是优化入手而不是盲目套方法。这也是我读这篇综述最大的收获它给的不是方法清单而是一张能定位问题的地图。6. 避坑与排查OOD 实验里最容易翻车的几件事6.1 现象多域训练后测试性能反而下降原因域划分本身有泄漏或者域之间的偏移太小不变性约束退化成在单一分布上过拟合。解决先检查域划分是否按真实采集条件切分时间、地点、设备再做域间分布距离的定量检查偏移太小时IRM 类方法的惩罚项几乎不起作用不如退回 ERM 加数据增强。6.2 现象DRO 训练不稳定损失震荡原因不确定集半径过大最坏分布优化把模型推向极端保守的解或者内层 sup 优化没有收敛就更新外层。解决先把半径调小做 warm-up确认内层优化收敛后再放开监控最坏域损失和平均损失的差距差距持续扩大说明半径超出数据支撑范围。6.3 现象解耦表示学出来但下游 OOD 没提升原因解耦的独立性约束是统计意义上的学到的维度未必对应语义因子不变因子可能被拆散在多个维度里。解决不要只看解耦指标要在下游任务上做消融——固定部分维度看性能变化确认不变信息确实被隔离必要时引入弱监督或环境标签辅助可识别性。6.4 现象OOD 评估结果和线上表现对不上原因评估用的测试分布和真实部署分布偏移类型不一致或者评估指标只看了平均性能没看最坏域。解决评估集要按偏移类型分层协变量偏移、标签偏移分开报指标同时报平均和最坏域综述第 7 节列的基准数据集和评估协议值得逐条对照别自己拍脑袋定测试集。7. 设计取舍为什么没有“通用”的 OOD 方法读完整篇综述最该带走的一个判断是OOD 泛化不存在通用解因为问题本身在无假设下不可解。三大类方法本质上是三种不同的假设下注——表示学习赌先验能分离不变因子模型学习赌多环境或重加权能暴露稳定关系优化方法赌不确定集能覆盖真实偏移。每种赌注都有明确的适用边界和翻车条件选型的核心不是比哪个方法新而是问“我的场景里哪个假设最可能成立”。方法类别核心假设适用场景主要风险表示学习数据由可分离的不变因子生成有强领域先验假设不成立时性能反降域泛化/稳定学习多域或重加权能暴露不变性有多环境数据或单源高相关特征域偏移不足时约束失效DRO/不变性优化测试分布落在可定义的不确定集内能界定偏移范围半径难调平均性能受损验证方法上我一般会强制走一遍“假设检查”流程先定量刻画训练和测试分布的偏移类型再确认所选方法的核心假设在这个偏移类型下是否成立最后用分层评估集验证——平均性能、最坏域性能、以及偏移强度递增时的性能曲线三条一起看。只看平均指标是 OOD 实验里最常见的自欺方式因为平均会把最坏域的崩溃稀释掉。这篇综述的价值不在于给你一个能直接调包的方案而在于它把“为什么这么设计”讲透了每个方法背后都是一个关于分布如何偏移的假设假设成立则方法有效假设破裂则方法失效。从那以后我每次碰 OOD 项目都会先把场景的偏移类型和方法的假设逐条对齐再动手而不是先跑 benchmark 看谁分高。希望帮到你。本文还有配套的精品资源点击获取

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

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

免费获取报价 →
↑