ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

分布外泛化(OOD)全解析:从ERM到因果不变性的技术路线与避坑指南

分布外泛化(OOD)全解析:从ERM到因果不变性的技术路线与避坑指南

简介:这份资源是清华大学崔鹏等学者撰写的《分布外泛化(Out-Of-Distribution Generalization)》综述论文,面向深度学习研究者、算法工程师及关注模型鲁棒性的高年级学生,系统回应了训练与测试数据分布不一致时模型性能骤降这一核心难题。压缩包内仅含1个PDF文件,约5.34MB,即论文全文,便于精读与归档。论文从OOD泛化问题的形式化定义切入,将现有方法按学习流程划分为无监督表示学习、监督模型学习与优化策略三类,并讨论因果推理、不变性学习、稳定学习及分布鲁棒优化之间的理论联系,同时梳理常用数据集与评估指标,最后给出未来研究方向。目前已有2740人学习下载,适合希望快速建立OOD泛化知识框架、把握领域脉络并寻找研究切入点的读者参考。

1. 分布外泛化:为什么模型在测试集上“翻车”不是玄学

一个在 ImageNet 上刷到 SOTA 的模型,部署到真实场景后准确率可能直接掉到随机猜测水平——这不是段子,是分布外泛化(Out-of-Distribution Generalization,简称 OOD)领域反复验证过的现象。经典机器学习建立在 i.i.d. 假设之上:训练数据和测试数据独立同分布。但现实里,数据采集的时间、地点、设备、人群偏好都在变,测试分布 Pte(X,Y) 几乎不可能等于训练分布 Ptr(X,Y)。一旦这个假设被打破,ERM(经验风险最小化)会贪婪地吸收训练集中所有相关性——包括那些在测试分布中根本不成立的伪相关。模型越“拟合”训练集,在分布偏移下崩得越彻底。这篇综述的价值在于,它第一次把 OOD 泛化从定义、方法分类、理论联系到评估基准串成了一条完整链路,而不是散落在各个子领域的零散技巧。搞懂这条链路,才能理解为什么有些方法在特定 benchmark 上有效、换个场景就失效。

2. 问题定义:i.i.d. 假设到底在哪里断裂

2.1 从 ERM 到 OOD 的数学表述

经典监督学习的目标是找一个模型 fθ: X → Y,使得在测试分布上的期望损失最小:

f*θ = arg min_{fθ} E_{X,Y ~ Pte}[ℓ(fθ(X), Y)]

ERM 的做法是用训练集上的平均损失去近似这个期望:

L_ERM = (1/n) * Σ_{i=1}^{n} ℓ(fθ(xi), yi)

当 Ptr(X,Y) = Pte(X,Y) 时,大数定律保证 ERM 的解收敛到最优解。但 OOD 场景下 Ptr ≠ Pte,ERM 的近似就失去了理论保证。更麻烦的是,测试分布 Pte 在训练阶段是未知的——你没法用测试数据调参,也没法做交叉验证。这就把问题从“优化”变成了“在未知分布偏移下做决策”。

2.2 协变量偏移:最常见也最可分析的偏移形式

综述把协变量偏移(Covariate Shift)作为主要讨论对象,定义为:

Ptr(Y|X) = Pte(Y|X) 且 Ptr(X) ≠ Pte(X)

意思是:标签生成机制不变,但输入特征的边缘分布变了。比如训练集里“草地上的牛”占 90%,“沙滩上的牛”占 10%,测试集里反过来。P(Y|X) 没变——牛还是牛——但 P(X) 变了,模型如果学到“绿色背景→牛”这种伪相关,就会在沙滩场景下翻车。协变量偏移之所以重要,是因为它允许我们在不假设测试分布具体形式的前提下,通过多环境数据来约束模型。综述里提到的领域泛化、因果学习、稳定学习,本质上都在用不同方式处理协变量偏移。

2.3 与领域适应的边界

领域适应(Domain Adaptation)假设测试分布的部分信息已知——要么有标注的 Pte(X,Y),要么有无标注的 Pte(X)。有了这个先验,就能用对抗训练、分布对齐等手段做理论保证的迁移。OOD 泛化更苛刻:测试分布完全未知,训练阶段连无标注测试数据都拿不到。这个区别决定了 OOD 方法必须依赖更强的假设——比如因果不变性、环境不变性——而不是简单的分布匹配。

3. 方法分类:三条技术路线的底层逻辑

3.1 无监督表示学习:把先验知识嵌入表征空间

这条路线认为,如果学到的表示本身就编码了数据生成过程中的不变因子,那么下游分类器在分布偏移下会更鲁棒。具体分两支:

解耦表示学习(Disentangled Representation Learning)试图把数据中的变化因子分开,比如把“物体形状”和“背景纹理”解耦。典型方法是 VAE 的变体,通过 β-VAE 或 FactorVAE 对隐空间施加独立性约束。但解耦本身不保证 OOD 泛化——如果解耦后的因子仍然与标签有伪相关,模型照样会走捷径。

因果表示学习(Causal Representation Learning)更进一步,要求学到的隐变量对应真实的因果变量。比如用结构因果模型(SCM)描述 X 和 Y 之间的生成过程,然后通过干预或反事实推理来识别因果方向。这条路线理论优雅,但实现上依赖较强的假设——比如因果变量之间无环、干预可观测——在真实高维数据上很难满足。

3.2 监督模型学习:改架构、改训练策略

这条路线不碰表示学习,直接在模型层面做文章。综述里列了三类:

因果学习(Causal Learning)的核心思想是:找到跨环境不变的因果机制。比如用不变风险最小化(IRM)的思想,要求模型在所有训练环境上的最优分类器一致。IRM 的损失函数可以写成:

# IRM 损失:环境风险 + 梯度惩罚 def irm_loss(envs, model, lambda_penalty): risk = sum(env_loss(env, model) for env in envs) / len(envs) grad_norm = sum(torch.norm(torch.autograd.grad( env_loss(env, model), model.parameters(), create_graph=True )[0]) ** 2 for env in envs) return risk + lambda_penalty * grad_norm

这里的lambda_penalty控制不变性约束的强度。env_loss是每个环境上的经验风险。梯度惩罚项迫使模型在各环境上的最优参数一致——如果某个特征只在特定环境有效,梯度方向会冲突,惩罚项就会变大。但 IRM 有个已知问题:当环境数量少或环境间差异小时,惩罚项可能退化为零,模型又回到 ERM。

稳定学习(Stable Learning)从选择偏差出发,通过样本重加权来消除伪相关。核心是学一组样本权重 w(x),使得加权后的特征之间相互独立。这样即使测试分布变了,特征间的伪相关也不会被模型利用。实现上通常用对抗训练或矩匹配来优化权重。

领域泛化(Domain Generalization)直接用多领域数据训练,要求模型在未见领域上表现好。常见策略包括领域对齐(如 CORAL、MMD)、元学习(如 MLDG)、数据增强(如 MixStyle)。但领域泛化的效果高度依赖领域划分的质量——如果训练领域覆盖不了测试领域的偏移方向,再好的对齐也没用。

3.3 优化策略:直接构造鲁棒目标

这条路线不关心模型结构或表示,直接改优化目标。分布鲁棒优化(DRO)把 OOD 问题转化为一个 min-max 问题:

min_{fθ} max_{P ∈ Q} E_{P}[ℓ(fθ(X), Y)]

其中 Q 是围绕训练分布的一个不确定性集合。如果 Q 定义为所有与训练分布 Wasserstein 距离小于 ρ 的分布,就得到 Wasserstein DRO。ρ 越大,鲁棒性越强,但模型也可能过于保守。不变性优化则把不变性约束直接写进目标函数,比如用方差惩罚项要求模型在不同环境上的风险方差最小。

4. 理论连接:因果视角下的统一框架

4.1 不变性与因果机制的等价关系

综述用因果推断的语言把不同方法串了起来。核心观察是:如果 Y 由 X 中的因果特征决定,且因果机制跨环境不变,那么任何满足不变性约束的模型都必然依赖因果特征。IRM、稳定学习、因果表示学习,本质上都在用不同方式逼近这个不变性。区别在于:IRM 在模型输出层面约束,稳定学习在样本权重层面约束,因果表示学习在隐空间层面约束。

4.2 环境划分的隐含假设

所有 OOD 方法都依赖某种“环境”概念——训练数据被划分为多个环境,模型要求跨环境不变。但环境怎么划分?综述里没有给出标准答案。常见做法是按时间、地点、采集设备划分,或者用聚类算法自动分组。环境划分的质量直接决定不变性约束的有效性:如果环境划分本身就有偏,学到的“不变性”可能只是另一种伪相关。

4.3 评估基准与指标

综述整理了 OOD 泛化的常用数据集和评估指标。数据集方面,DomainBed、WILDS、OOD-Bench 是几个主要基准,覆盖图像、文本、图数据等模态。评估指标上,除了标准的准确率,还强调最差环境准确率(Worst-Group Accuracy)和平均环境准确率。最差环境准确率更能反映模型在极端偏移下的鲁棒性——一个模型可能在平均准确率上很高,但在某个困难环境上直接崩掉。

5. 避坑与常见问题:OOD 实践中的翻车记录

5.1 环境数量太少导致不变性约束失效

现象:用 IRM 训练时,训练损失正常下降,但测试环境准确率跟 ERM 差不多,甚至更差。

原因:IRM 的梯度惩罚项需要至少两个环境才能产生冲突信号。如果环境数量少或环境间差异小,各环境的最优梯度方向一致,惩罚项趋近于零,模型退化为 ERM。

解决:增加环境数量,或人为构造环境划分(如按数据增强类型分组)。如果无法增加环境,考虑改用 DRO 或稳定学习,它们对环境的依赖更弱。

5.2 测试分布偏移方向与训练环境不匹配

现象:在 DomainBed 上刷到 SOTA,换到真实业务数据后效果暴跌。

原因:DomainBed 的测试领域通常与训练领域共享某些底层特征(如都是自然图像),而真实业务的偏移可能来自完全不同的维度(如传感器噪声、用户行为变化)。训练环境覆盖不了测试偏移方向时,不变性约束就失去了意义。

解决:先做偏移诊断——用简单的分布距离度量(如 MMD、Wasserstein)比较训练和测试数据的特征分布,确认偏移主要来自哪个维度。如果偏移方向在训练环境中没有对应,考虑引入领域知识做数据增强或特征工程。

5.3 过度鲁棒导致欠拟合

现象:DRO 的 ρ 设得太大,模型在所有环境上的准确率都下降,包括训练环境。

原因:DRO 的 min-max 目标要求模型在最坏分布上也表现好。如果不确定性集合 Q 太大,最坏分布可能远离真实数据流形,模型为了“防御”这个不存在的分布而牺牲了正常性能。

解决:用验证集调 ρ,从较小的值开始逐步增大,观察最差环境准确率和平均准确率的权衡曲线。通常存在一个拐点,超过后平均准确率下降速度超过最差准确率提升速度。

5.4 伪相关特征在训练环境中占主导

现象:模型在训练环境上准确率 99%,测试环境上掉到 60%,但特征重要性分析显示模型主要依赖背景纹理而非物体形状。

原因:训练数据中背景与标签的伪相关太强,ERM 会优先利用这个捷径。不变性约束虽然理论上能抑制伪相关,但如果伪相关在多数训练环境中一致存在,约束信号会被淹没。

解决:先做数据层面的去偏——比如用风格迁移做数据增强,打破背景与标签的关联。或者在损失函数中显式加入对伪相关特征的惩罚项,比如用对抗训练让特征提取器无法预测环境标签。

5.5 评估指标选择不当掩盖真实问题

现象:模型在平均准确率上比 baseline 高 2%,但在最差环境上低 10%。

原因:平均准确率会被简单环境的高分拉高,掩盖模型在困难环境上的崩溃。OOD 场景下,最差环境的表现往往比平均表现更重要。

解决:同时报告平均准确率和最差环境准确率,并给出每个环境的详细结果。如果最差环境准确率低于随机猜测,说明模型在该环境下学到了负迁移的特征,需要回退到更保守的方法。

6. 设计取舍:OOD 泛化的边界与验证方法

OOD 泛化领域有一个根本性的张力:假设越强,理论保证越漂亮,但适用场景越窄。因果表示学习假设隐变量对应真实因果变量,理论上能保证跨任意干预的泛化,但真实高维数据上几乎无法验证这个假设。IRM 假设存在跨环境不变的最优分类器,在环境划分合理时有效,但环境划分本身没有理论指导。DRO 假设测试分布落在训练分布附近的一个球内,ρ 的选择直接决定鲁棒性和保守性的权衡。

我一般会这么理解:OOD 方法的选择本质上是在先验知识的多少和泛化保证的强度之间做取舍。如果你对数据生成过程有较强的领域知识——比如知道哪些特征是因果的、哪些是伪相关的——那就用因果学习或稳定学习,把知识编码进约束。如果领域知识弱,但能拿到多个环境的数据,IRM 或领域泛化是更务实的选择。如果连环境划分都不可靠,DRO 至少能提供一个可调的鲁棒性下界。

验证 OOD 方法是否真的有效,不能只看 benchmark 上的数字。一个实用的做法是:构造一个已知因果结构的合成数据集,在合成数据上验证方法能否恢复因果特征。如果方法在合成数据上都失败,在真实数据上的成功大概率是过拟合 benchmark。另一个做法是做偏移方向的外推测试:在训练时故意留出一个偏移方向(比如只训练白天数据,测试夜间数据),看模型能否泛化到未见偏移。如果方法只在见过的偏移方向上有效,说明它学到的还是伪相关。

从那以后我每次评估 OOD 方法,都强制走一遍合成数据验证和偏移外推测试,不再只看 DomainBed 的排行榜。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进