分布外泛化(OOD)综述:从表示、模型到优化的方法体系与评估避坑
发布时间:2026/10/25 16:01:45 锦皓数字建站
综述:从表示、模型到优化的方法体系与评估避坑`)
简介这份资源是清华大学崔鹏团队等撰写的《Towards Out-Of-Distribution Generalization: A Survey》综述论文PDF面向深度学习研究者、算法工程师及关注模型鲁棒性的高年级学生系统回应现实场景中训练与测试分布不一致、i.i.d.假设难以成立时模型性能骤降的问题。论文从OOD泛化的形式化定义出发按学习流程将现有方法归为无监督表示学习、监督模型学习与优化策略三类并串联因果推理、不变性学习、稳定学习与分布鲁棒优化之间的理论联系同时介绍常用数据集与评估指标最后总结文献并展望未来方向。资源包仅含1个PDF文件大小约5.34MB轻量便于离线阅读与检索。该论文已有2740人学习适合作为进入OOD泛化方向的系统性入门读物也可供撰写综述、梳理方法脉络与设计评估方案时参考。1. 分布外泛化为什么模型在训练集上越准换一个分布就越容易翻车一个在 ImageNet 上刷到 90% 以上准确率的分类器换到手机拍摄、加了雾天、换了城市街景的数据上准确率可能直接掉到随机猜的水平。这不是模型没训好而是它训得太“好”了——好到把训练集里所有能蹭的相关性都蹭上了。经典监督学习建立在 i.i.d. 假设上训练和测试数据独立同分布。可现实里时间在推移、采集设备在换、人群在变测试分布几乎不可能和训练分布一模一样。分布外泛化Out-of-Distribution GeneralizationOOD要回答的就是当测试分布未知且与训练分布不同时模型还能不能泛化。这篇综述把定义、方法分类、理论联系和评估体系串成一条线值得逐层拆开看它到底怎么把“分布偏移”这件事讲清楚。2. 问题定义OOD 泛化到底在数学上难在哪2.1 从 ERM 到 OOD一个等号被拿掉之后经典监督学习的形式化很干净给定特征空间 X 和标签空间 Y参数化模型 fθ: X → Y损失函数 ℓ: Y × Y → R。学习目标是找一个在测试分布上期望损失最小的模型f*θ arg min_{fθ} E_{X,Y ~ Pte}[ℓ(fθ(X), Y)]i.i.d. 假设下 Ptr(X,Y) Pte(X,Y)于是可以用经验风险最小化ERM直接逼近L_ERM (1/n) Σ_i ℓ(fθ(x_i), y_i)ERM 之所以 work是因为训练分布和测试分布是同一个训练误差是测试误差的无偏估计。OOD 泛化把 Ptr(X,Y) Pte(X,Y) 这个等号拿掉变成 Ptr(X,Y) ≠ Pte(X,Y)而且 Pte 在训练阶段完全未知。这一改ERM 的理论保证就断了训练误差再低也不能推出测试误差低。这里有个容易被忽略的点OOD 问题在无假设条件下是不可解的。如果测试分布可以任意偏移那训练集提供的信息不足以约束测试行为。所以所有 OOD 方法本质上都在做同一件事——对“测试分布会怎么变”加一个假设把不可解问题变成可解问题。综述里不同方法分支的区别很大程度上就是它们加的假设不同。2.2 协变量偏移最常被研究的那一类综述主要聚焦协变量偏移covariate shift定义为Ptr(Y|X) Pte(Y|X) 且 Ptr(X) ≠ Pte(X)意思是输入 X 的边缘分布在变但标签生成机制 P(Y|X) 不变。比如同一套疾病诊断规则病人群体构成变了同一个物体识别任务拍摄光照和角度变了。这个假设的价值在于它保留了 X→Y 的稳定关系让“学不变性”这件事有了落脚点。如果连 P(Y|X) 都变概念偏移那问题性质就完全不同了。综述还区分了 OOD 泛化和领域自适应domain adaptation领域自适应假设测试分布的部分信息可知有标签或无标签的测试数据因此有理论保证OOD 泛化则假设测试分布完全未知难度更高。这个区分很关键很多工程场景里大家嘴上说 OOD实际做的是领域自适应——有目标域的无标签数据可用那方法选择和评估方式都不一样。2.3 按学习流水线切三刀表示、模型、优化综述的分类方式不是按技术名词堆而是按方法在整个学习流水线中的位置切三块位置类别代表方向特征表示无监督表示学习解耦表示学习、因果表示学习模型与学习策略监督模型学习因果学习、稳定学习、领域泛化优化目标优化方法分布鲁棒优化、不变性优化这个切法的好处是同一个 OOD 目标可以从三个入口去逼近。改表示是让学到的特征本身携带不变性改模型是换归纳偏置或学习策略改优化是直接把 OOD 目标写进损失函数并给出理论保证。后面几章就按这条流水线往下拆。3. 表示层解耦与因果表示学习怎么把先验塞进特征3.1 解耦表示学习把变化的因子拆开解耦表示学习disentangled representation learning的目标是让学到的表示中不同且有意义的变化因子被分离开。直观理解一张人脸图片里身份、姿态、光照是三个独立因子如果表示能把它们拆到不同维度上那么当光照分布变化时身份相关的维度不受影响模型就自然对光照偏移更稳。常见的实现思路是以变分自编码器VAE为骨架通过设计先验和正则项来鼓励解耦。综述里提到的代表性做法核心是在 ELBO 之外加约束让潜变量的后验分布逼近某个分解形式。用伪代码表达这个结构# 解耦表示学习的典型训练骨架示意 # encoder 输出潜变量 z 的后验参数decoder 重建输入 def train_step(x): mu, logvar encoder(x) z reparameterize(mu, logvar) # 重参数化采样 x_rec decoder(z) rec_loss mse(x_rec, x) # 重建损失 kl_loss kl_divergence(mu, logvar) # 逼近分解先验 # 关键额外的解耦正则鼓励不同潜维度独立 disentangle_reg independence_penalty(z) loss rec_loss beta * kl_loss gamma * disentangle_reg return lossbeta控制 KL 项的权重gamma控制解耦正则的强度independence_penalty的具体形式因方法而异如对潜变量的协方差矩阵做惩罚。这里的机制逻辑是重建损失保证信息不丢KL 项把潜空间压向先验解耦正则把不同因子推向独立。三者拉扯的结果是表示中“可分离的变化方向”被显式建模。但这条路有个硬伤解耦的监督信号很弱。无监督条件下什么算“有意义的因子”本身没有唯一答案不同随机种子训出来的解耦维度可能对不上。所以解耦表示对 OOD 的帮助更多是“有潜力”而不是“有保证”。综述把它放在表示学习分支里定位是提供一种带先验的特征构造方式而不是端到端的 OOD 解法。3.2 因果表示学习从相关到因果的那一步因果表示学习更进一步它不满足于把因子拆开而是希望学到的表示对应数据生成过程中的因果变量。动机很直接——相关性在分布偏移下会断因果关系不会。如果模型抓住的是 X 中真正导致 Y 的那部分结构那么当 X 的边缘分布变化时这部分结构仍然成立。常见的实现思路是把结构因果模型SCM的假设嵌入表示学习假设观测数据由一组潜因果变量经过未知的混合函数生成学习目标是从观测中反解出这些潜变量及其因果结构。综述里讨论的做法通常需要额外的假设比如因果变量之间满足某种稀疏性或独立性条件否则反解不唯一。这里的机制要点是因果表示学习把 OOD 泛化问题转化成了“识别不变机制”的问题。协变量偏移下 P(Y|X) 不变但 X 内部哪些维度是原因、哪些是伴随现象需要靠因果结构来区分。一旦区分开模型就可以只依赖因果部分做预测对非因果部分分布的变化免疫。代价是假设强、可识别性条件苛刻实际落地时往往需要领域知识介入。提示表示学习分支的共同特点是“把先验写进特征”优点是和下游模型解耦缺点是先验对不对很难验证。评估这类方法时光看 OOD 准确率不够还要看学到的表示在换分布后是否稳定。4. 模型层因果学习、稳定学习与领域泛化的三种归纳偏置4.1 因果学习用干预和混杂来解释分布偏移因果学习处理 OOD 的方式是把训练分布和测试分布都用因果结构来刻画分布偏移的来源被归为两类干预intervention和混杂confounder。干预改变某个变量的生成机制混杂则让两个变量产生虚假相关。一个典型的例子模型在训练集里学到“草地”和“牛”强相关因为训练图片里牛大多在草地上。这里草地是混杂或伴随变量不是牛的原因。当测试集出现“沙滩上的牛”模型就翻车。因果学习的做法是识别出真正导致标签的因果特征把伴随特征剥离。综述里讨论的因果学习方法核心操作通常包括构建因果图、识别不变机制、在干预分布上做训练。机制上可以理解为——不追求在单个分布上误差最小而是追求在多个干预分布下误差都稳定。这和后面要讲的不变性优化是同一件事的两种语言。4.2 稳定学习从样本重加权到消除虚假相关稳定学习stable learning引入分布偏移的方式是选择偏差selection bias训练样本不是总体的随机样本某些子群体被过度代表。模型会利用这种偏差学到虚假相关。稳定学习的代表性思路是样本重加权给每个样本一个权重使得加权后的特征之间近似独立从而切断虚假相关。用伪代码表达这个流程# 稳定学习的样本重加权骨架示意 # 目标找一组样本权重 w使加权后特征间协方差接近对角 def stable_weighting(X, y, max_iter100): w np.ones(len(X)) / len(X) # 初始均匀权重 for _ in range(max_iter): Xw X * np.sqrt(w)[:, None] # 加权特征 cov Xw.T Xw # 加权协方差 # 惩罚非对角元素推动特征独立 off_diag cov - np.diag(np.diag(cov)) grad X.T (X off_diag) # 对权重的梯度示意 w project_to_simplex(w - lr * grad) # 投影回概率单纯形 return wproject_to_simplex保证权重非负且和为 1off_diag惩罚的是特征间的残余相关。机制逻辑是如果加权后特征之间独立那么模型学到的每个特征的系数就只反映该特征对标签的独立贡献而不是通过其他特征传导的虚假相关。这样在测试分布中虚假相关断裂时模型不会崩。稳定学习的优点是实现相对轻量不需要显式的因果图缺点是重加权只能处理观测到的混杂未观测混杂仍然无解而且权重估计本身有方差样本少时不稳定。4.3 领域泛化多源分布下的不变性提取领域泛化domain generalization假设训练阶段有多个源域测试域未知。它的核心假设是不同源域之间共享某种不变表示学到这个不变表示就能泛化到新域。常见做法包括对齐不同域的特征分布如最小化域间分布距离、做元学习式的域间划分训练、或者用对抗训练让特征对域标签不可区分。机制上这些方法都在逼模型回答一个问题——哪些特征是所有域都有的、哪些是某个域特有的。前者被保留后者被抑制。领域泛化和因果学习、稳定学习在目标上高度重合区别主要在假设的表述方式领域泛化用“域”来刻画分布变化因果学习用“干预/混杂”稳定学习用“选择偏差”。综述在第 6 部分专门讨论这些分支的理论联系核心观点是它们在不同语言下描述同一类不变性。注意领域泛化要求多源域且默认源域之间的差异能代表测试域的偏移方向。如果源域覆盖不足学到的“不变性”可能只是几个源域的共同偏差换到真正的新域照样失效。5. 优化层DRO 与不变性优化怎么把 OOD 写进目标函数5.1 分布鲁棒优化在最坏分布上最小化风险分布鲁棒优化Distributionally Robust OptimizationDRO的思路很直接既然测试分布未知那就不要只优化训练分布上的期望损失而是优化一个分布集合中最坏情况下的损失min_θ sup_{Q ∈ Ω} E_Q[ℓ(fθ(X), Y)]Ω 是以训练分布为中心的一个分布集合如基于 Wasserstein 距离或 f-散度的球。机制上DRO 把 OOD 泛化变成了一个 min-max 问题内层找最坏的分布外层让模型在这个最坏分布上表现最好。这样训练出来的模型对 Ω 内的任何分布偏移都有鲁棒性。关键参数是 Ω 的大小球太小覆盖不到真实测试分布球太大最坏分布过于极端模型会过度保守、在正常分布上性能下降。这个权衡是 DRO 落地的核心难点综述里也提到半径选择缺乏通用准则。5.2 不变性优化跨环境的风险一致性不变性优化invariance-based optimization的代表是 IRM 类方法。它假设训练数据来自多个环境要求模型学到的表示使得最优分类器在每个环境上都相同。形式化上除了最小化各环境风险之和还加一个惩罚项衡量各环境最优分类器的差异# 不变性风险最小化的训练骨架示意 # 输入多个环境的数据 (x_e, y_e)e 1..E def irm_loss(model, environments, penalty_weight): total_risk 0.0 penalty 0.0 for x_e, y_e in environments: # 每个环境单独算风险并对表示做一次“虚拟分类器”更新 repr_e model.featurize(x_e) risk_e model.classify_loss(repr_e, y_e) total_risk risk_e # 惩罚各环境梯度方向的一致性 grad_e compute_grad(risk_e, model.classifier) penalty (grad_e - mean_grad) ** 2 return total_risk penalty_weight * penaltypenalty_weight控制不变性约束的强度grad_e是各环境对分类器的梯度。机制逻辑是如果表示是“不变的”那么基于它学出的分类器在每个环境上都应该是最优的梯度方向应该一致。惩罚项就是在逼这件事发生。IRM 的理论动机很漂亮但实践中对超参敏感且需要环境划分。环境怎么划、划得对不对直接决定方法是否有效。综述在理论联系部分指出不变性优化和因果学习中的不变机制识别在数学结构上是相通的这给跨分支借鉴提供了依据。6. 避坑与排查OOD 实验里最容易翻车的几件事6.1 把领域自适应当成 OOD 泛化来评估现象方法在测试域上表现很好但测试域的无标签数据在训练时已经用上了。原因这是领域自适应不是 OOD 泛化测试分布信息泄露了。解决严格隔离测试域训练阶段完全不接触测试域任何数据包括无标签数据。6.2 源域划分不合理导致不变性学错现象领域泛化方法在留一域评估中表现不稳定换个划分方式结果差异巨大。原因源域之间的差异不能代表测试域的偏移方向学到的“不变性”只是源域共同偏差。解决增加源域多样性检查源域覆盖的偏移类型必要时用多个划分做交叉验证。6.3 只报平均准确率掩盖了子群体崩溃现象整体指标看起来还行但某些子群体上性能断崖式下跌。原因OOD 评估需要看分布偏移下的最差表现平均值会被多数群体拉高。解决按子群体、按偏移类型分别报告指标关注最差组表现和方差。6.4 DRO 半径设得过大导致模型过度保守现象DRO 训练后训练分布上的性能明显下降测试分布上也没提升。原因分布集合半径过大最坏分布过于极端模型为了鲁棒牺牲了太多正常性能。解决从较小半径开始做敏感性分析结合验证集上的偏移程度调整。6.5 用训练集上的验证划分来调 OOD 超参现象调参时指标很好换到真正的新分布就失效。原因验证集和训练集同分布调出来的超参是在拟合训练分布不是在对齐 OOD 目标。解决验证集必须来自与训练分布不同的域且调参过程不能接触最终测试域。7. 设计取舍OOD 泛化的假设强度与可验证性把这篇综述的方法谱系摊开看会发现一个贯穿始终的取舍假设越强理论保证越漂亮但可验证性越差假设越弱方法越通用但越难说清它为什么 work。因果学习和不变性优化假设存在稳定的因果机制或不变表示理论上能给出 OOD 最优性的保证但前提是因果图或环境划分正确——而这个前提本身在真实数据上很难验证。稳定学习和 DRO 的假设相对温和实现也更轻但它们只能处理假设范围内的偏移类型超出范围就退化成普通 ERM。表示学习分支把先验写进特征和下游解耦灵活但缺乏端到端的保证。我的判断是选 OOD 方法时先问清楚自己的分布偏移属于哪一类、有没有多域数据、测试域信息到底可不可得再去看方法假设是否匹配。匹配不上再漂亮的理论也只是纸面功夫。评估上别只看平均值按偏移类型和子群体拆开看才能暴露真实短板。从那以后我每次碰 OOD 相关的实验都强制先把测试域隔离干净、把源域划分和偏移类型写清楚再动手调方法——这一步省掉后面所有指标都不可信。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。