一句话定义
领域泛化(Domain Generalization,DG)指的是:训练时只用若干个已知来源的数据(源域,source domain),训练完的模型要能直接用在训练中完全没出现过的场景(目标域,target domain)上,而且不再重新训练、不再微调。
原理:学"本质",别学"环境"
打个比方。你要教一个新人做奶茶,手头只有 A 店和 B 店的录像:A 店封口机是按钮式,B 店是脚踏式;两家用的糖浆品牌也不一样。如果新人把"按第三颗按钮"背下来,换到 C 店就废了。真正该学的是配比、摇杯手法、封口温度这些在哪家店都成立的规律——这就是所谓的不变特征(invariant features)。
模型面对的数据里通常混着两类信息:一类和标签有因果关系(病灶就是病灶),另一类只是采集环境留下的痕迹(哪台机器拍的、什么光线、什么口音)。后者叫虚假相关,换个环境就失效。源域越多、彼此差异越大,模型越容易被逼着丢掉环境噪声、保住本质。
常见做法大致四类:数据层面,把图片变色、加噪、换背景,人为造出更多"域";特征层面,约束不同源域提取出的特征分布尽量一致;优化层面,训练时轮流"假装留出一个域不参与",让模型学会快速适应;再进一步是直接建模因果关系,只保留跨域稳定的那条预测规则。
和相邻概念的区别
| 概念 | 训练时能看到目标域数据吗 | 目标 |
|---|---|---|
| 领域泛化 | 完全不能 | 训练一次,任意新域直接可用 |
| 领域适应(Domain Adaptation) | 能,通常无标签 | 针对某个特定目标域调优 |
| 迁移学习(Transfer Learning) | 一般能 | 借用源域知识完成目标任务 |
一句话概括:领域适应是"知道要去哪儿,可以提前踩点";领域泛化是"不知道要去哪儿,但哪儿都得能去"。
对实际工作的意义
这个需求在工程里极其常见。医疗影像模型在 A 医院训练,B 医院换了设备、改了扫描参数,指标就掉;自动驾驶在晴天白天采的数据,到了雨夜就吃力;工业质检换个车间、换批灯管,缺陷检测立刻误报。如果每换一个客户都要重新收数据、重新标注、重新训练,成本根本兜不住。领域泛化的价值就是把"换个场景就要重训"变成"出厂就能用"。
代价也要说清楚:它通常比"拿到目标域数据再微调"效果差一些。所以判断标准很朴素——目标域的数据拿不拿得到、能拿到多少。拿得到就做领域适应,拿不到才只能靠泛化。另外,增加源域多样性往往是性价比最高的一招:多收几个场景的数据,常常比换更花哨的算法管用。具体选哪条路线,取决于你的数据条件和部署要求。
