Multi-Hypothesis Test-Time Adaptation to Mitigate Underspecification¶
会议: ECCV 2026
论文: ECCV 原文
领域: 其他(测试时自适应 / 分布偏移鲁棒性)
关键词: 测试时自适应、欠定问题、粒子群多样化、熵最小化、分布偏移
一句话总结¶
本文把熵最小化的测试时自适应(TTA)重解释为一个欠定条件下的后验推断问题——低熵解有很多个、决策边界却彼此迥异——于是不再赌单点解,而是维护 K 组只适应归一化层的"适应粒子"分别去探索不同的低熵盆地,并在输出、参数、优化器、输入四个层级施加多样化约束防止它们塌缩到同一个解,推理时聚合多假设预测;在 ImageNet-C 的批大小 1、标签偏移与混合偏移场景上稳定优于 Tent / SAR / DeYO,并且能当插件套到已有 TTA 方法上。
研究背景与动机¶
深度学习模型在同分布下表现优异,一旦部署到真实环境就常因分布偏移而显著退化,测试时自适应(TTA)因此成为主流对策:不碰标注,只用目标域的无标注测试数据在线更新模型。其中最常用的目标函数是预测熵最小化(Tent 开了这个头),SAR 在此基础上加锐度感知与可靠样本筛选,「DeYO」则把熵和增强一致性/多样性的样本过滤结合起来。这些方法都只更新一个模型实例,而 TTA 场景里没有任何监督信号能约束"往哪个方向更新"——这就埋下了问题的根。
熵最小化本身是一个高度欠约束的目标:同一批目标数据上,很多组参数都能把熵压到几乎相同的低位,但它们对应的决策边界可以完全不同,在偏移下的泛化能力也天差地别。论文用一组很直白的实验把这件事摆了出来(Table 1):在 ImageNet-C 的 Zoom Blur(severity 5)、批大小 1 的设定下跑五次 DeYO,只换随机种子、超参完全固定,最终熵值几乎一致(0.245 ± 0.003),但准确率在 32.9% 到 45.1% 之间剧烈摆动(均值 38.37 ± 4.80),收敛到的归一化参数终点也各不相同。也就是说,熵这个目标函数根本没有把"什么是好的适应结果"确定下来,最终的模型质量由优化轨迹的随机性决定。作者据此指出,现有 TTA 方法实质上是在一个熵诱导的伪似然下求单个最大后验(MAP)点估计;在欠定区域里,轨迹上的一点小扰动就会导致决策边界的质变,因此熵最小化不应该被当成一个适定优化问题,而应该被当成一个多假设推断问题。
一个自然的想法是直接用集成或数据增强来补,这两招在别处正是缓解欠定问题的常用手段,但在 TTA 里基本没人系统做过(DeYO 用了增强,可它的目的是筛样本、突出稳健特征,不是解决欠定)。更关键的是,简单地把几个独立适应的模型平均起来并不管用:在熵最小化下,独立粒子往往沿着高度相似的轨迹走,最后挤进同一个低熵盆地,平均之后收益有限。核心 idea:把 TTA 从"找一个低熵点估计"改成"维护一群互相排斥的适应粒子去逼近低熵解的后验"——用显式的多样化正则耦合粒子在适应过程中的动力学(而不是事后平均),让它们占据参数空间里不同的低熵区域,再聚合它们各自的预测。
方法详解¶
整体框架¶
方法建立在标准 TTA 的设定上:源模型 f_θ 先在源域训好,只取其归一化层的参数记为 θ0(其余层冻结),在目标域无标注样本流上在线适应。与传统 TTA 的区别在于,本文不是适应一个 θ,而是从 θ0 出发初始化一集 K 个粒子 Θ = {θ_i}_{i=1}^K,每个 θ_i 是独立的一份归一化层参数,非归一化层(卷积/注意力权重)始终冻结并在所有粒子间共享。每个粒子各自沿一条熵最小化轨迹在线更新,粒子之间通过一个多样化正则 Ω(Θ) 互相作用,防止它们挤到同一个解上;推理时把 K 个粒子的预测聚合起来(论文示意图中即为简单平均 ŷ = (y1 + y2)/2),相当于用多个适应假设的模型平均替代单点估计。
整体优化目标是把每个粒子的熵损失与多样化正则加在一起:
其中 ℓ(X; θ_i) 就是标准的熵最小化项,Ω(Θ) 是多样化正则,也是全文的设计空间所在——作者把它拆成输出级、参数级、优化器级、输入级四个互补层级,每一层针对单模型熵最小化在偏移下的一种具体失效模式(预测趋同、参数塌缩到同一盆地、优化几何雷同、过拟合单一输入配置)。需要强调的是,Ω 不是事后的聚合技巧,而是在优化过程中就起作用的耦合项。
另外,论文的框架图(原文 Fig. 2)提到一个正文没有展开的细节:来一批测试样本后,先按附录的方法挑出"无害样本(non-harmful ones)",只对这些样本做反向传播和多样化更新,以免被噪声/离群样本带偏;具体筛选准则在附录里,⚠️ 以原文为准。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["源模型 θ0<br/>只取归一化层参数"] --> B["粒子群适应框架<br/>K 组归一化参数 + 冻结共享主干"]
S["目标域无标注样本流"] --> B
B --> C["输出级与参数级排斥<br/>KL 散度 + SVGD 核排斥"]
B --> D["功能级梯度多样化<br/>惩罚粒子间梯度对齐"]
B --> E["异构优化器与输入级扰动<br/>SGD/Adam/AdamW + 翻转视图"]
S --> E
C --> U["逐粒子熵最小化更新"]
D --> U
E --> U
U -->|目标流未结束| B
U --> P["聚合 K 个粒子预测"]
P --> O["目标域输出"]
关键设计¶
1. 粒子群适应框架:用 K 组归一化参数共享同一个冻结主干
这是承载所有多样化机制的底座。之所以只复制归一化层参数而不复制整个网络,有两个直接理由:一是 TTA 领域已经验证过只调归一化层(Tent/SAR/DeYO 一脉)就足以吸收大部分偏移,且显存与计算代价极低;二是把粒子限制在归一化层这个低维子空间里,粒子间的距离才有可比性、排斥力才容易起作用(论文用 ‖θ_final − θ0‖₂ 和跨种子的平均成对距离 ‖Δθ‖₂ 来度量粒子漂移与分散度)。所有粒子共享冻结的非归一化层意味着它们看到的是同一套特征提取器,差异只来自各自适配后的归一化统计与仿射参数——这让"多个假设"的多样性是可控且可解释的,而不是各训一个网络那种不受控的差异。粒子数在全部实验里取 K = 3,这是消融后的选择(见实验部分)。
2. 输出级与参数级排斥:KL 散度与 SVGD 核排斥
最直接的多样化就是让粒子"互相看不顺眼"。输出级做法是在预测分布上做排斥:把每个粒子在输入 batch 上的预测分布记为 p_i(X),然后最小化它们两两之间的负 KL 散度——注意这里用的是 KL 散度(不是对称的 JS 或直接的 L2),配合前面的负号,就等于在总目标里最大化粒子预测之间的分歧:
这样粒子会被推向解空间中彼此不同的低熵区域,降低"全体塌缩到同一条虚假决策边界"的风险。参数级做法则借用 Stein Variational Gradient Descent(SVGD):把熵损失视为一个伪似然,再叠加一个以源参数 θ0 为中心的高斯先验(抑制适应过程中过度漂离源域),构成伪后验 p̃(θ) ∝ exp(−ℓ(X; θ)) · exp(−γ‖θ − θ₀‖²),其中 γ 控制"适应灵活度"与"保留源域归纳偏置"之间的权衡。SVGD 用核函数(如 RBF)把粒子之间的排斥写进更新方向:
第一项把粒子拉向低熵区域,第二项(核的梯度)则把它们互相推开,两项合起来就是"在低熵的同时尽量铺开"。⚠️ 全文公式在缓存文本中排版受损,SVGD 更新式与伪后验的精确形式此处按标准 SVGD 与正文描述重构,以原文为准。
3. 功能级梯度多样化:惩罚粒子间输入梯度对齐
消融显示这是所有机制里最有效的一个,而且它的作用点和其他多样化都不一样。前两者一个作用在预测、一个作用在权重空间,而这一条直接约束粒子的功能行为:对每个粒子 θ_i,取熵损失对输入 batch X 的梯度 g_i = ∇_X ℓ(X; θ_i),然后惩罚不同粒子输入梯度之间的正内积:
把它放进总目标里最小化,等价于压低粒子间的梯度对齐度。这件事针对的是"简单性偏置(simplicity bias)":如果所有粒子都沿着同一批输入方向下降,它们就是在依赖同一批(很可能是虚假的)特征,最终必然收敛到同一条轨迹上;压低梯度内积相当于逼每个粒子去关注不同的输入方向,从而在功能层面(而不只是参数数值层面)产生不同的决策边界。论文专门对比了三种梯度多样化写法——点积、梯度的 ℓ₂ 距离、余弦相似度——结论是点积最好,因为余弦会丢掉幅度信息、ℓ₂ 距离惩罚的是尺度而非方向一致性,只有点积直接惩罚"大家共享同一个下降方向"这件事。
4. 异构优化器与输入级扰动:让每个粒子面对不同的优化问题
前三个设计改的是目标函数,这两个改的是"每个粒子实际求解的优化问题"。优化器层面,给 K 个粒子分别指派不同的优化算法(SGD / Adam / AdamW),尽管大家最小化的是同一个熵目标,但由于动量累积、二阶统计量缩放、权重衰减解耦方式不同,参数更新的几何形状完全不同:SGD 沿均匀梯度方向走,Adam 按估计的二阶矩重新缩放步长,AdamW 把权重衰减从梯度更新里拆出来。于是即便梯度一模一样,粒子在参数空间里也会走出不同的轨迹——这是一种不需要额外正则项的隐式多样化。输入层面,用结构化数据增强把每个粒子看到的损失曲面轻微变形:对输入 x 构造视图集合 A(x) = {x, x^(h), x^(v)}(原图 + 水平翻转 + 垂直翻转),每个粒子的适应损失改为在所有视图上求和:
与 DeYO 把增强用于样本过滤不同,这里增强是纯粹的优化期扰动:它一方面避免粒子过拟合某一种输入配置,另一方面因为不同粒子在不同视图上算出的梯度不同,恰好会放大前面那些排斥正则的效果,让粒子分头去探索对应"不同增强视角"的局部极小点。
一个完整示例¶
拿批大小 1 的极端设定走一遍:目标流里来了一张被 Fog(severity 5)污染的图,ViTBase-LN 主干。因为 batch 只有一张图,归一化统计极不稳定(这也是 DeYO 在这个 corruption 上只有 38.37%、方差 ±4.8 的原因)。此时框架做的事是:从源模型的归一化层复制出三份参数(K = 3),分别配 SGD / Adam / AdamW;对这张图造出原图、水平翻转、垂直翻转三个视图,每个粒子在三个视图上各自算熵损失再求和;反向传播时只更新自己那份归一化参数,共享的 Transformer 权重保持冻结;同时每步把三份梯度对齐度(Ω_Grad)和预测分歧(Ω_KL)算出来,连同熵项一起回传,λ 取网格搜索出的 0.3;如果启用了 SVGD,还要按核排斥再修正一次更新方向。走完整个目标流后,把三个粒子对当前样本的预测做平均作为最终输出——注意不是选出最好的一个,而是让三个"不同的低熵假设"投票,单粒子跑偏时会被另外两个拉回来。
损失函数 / 训练策略¶
总损失 = K 个粒子的熵最小化项均值 + λ · 多样化正则(Ω_KL / Ω_Grad / SVGD 排斥中的一种或组合)。关键超参:粒子数 K = 3(消融显示 1→3 提升最大、3 之后收益饱和);多样化权重 λ 需要网格搜索,论文报告的最优值在 λ = 0.3 附近,λ 过大会明显掉点(排斥力盖过了适应本身);优化器组合为 SGD / Adam / AdamW;输入视图为原图 + 水平/垂直翻转。适应是纯在线、无标签的,主干权重全程冻结,因此额外开销主要来自 K 份归一化层的更新与小规模反向传播。
实验关键数据¶
主实验¶
评测在 ImageNet-C(15 种损坏 × 5 个 severity)上进行,主干取 ResNet-50-GN 与 ViTBase-LN,覆盖三种 wild 场景:批大小 1(单样本适应)、标签分布偏移(无限类别不平衡比)、15 种损坏的混合偏移;结果取五个随机种子的平均准确率。除 Tent / SAR / DeYO 三个基线外,还对比了只做粒子群不做多样化的 Naive、以及三种多样化变体。
| 场景 | 主干 | No Adapt | Tent | SAR | DeYO | Naive | SVGD | KL | Grad |
|---|---|---|---|---|---|---|---|---|---|
| 批大小 1 | ViTBase-LN | 29.91 | 51.58 | 55.31 | 60.57 | 62.17 | 62.94 | 63.36 | 63.14 |
| 标签偏移 | ViTBase-LN | — | 53.10 | 55.98 | 62.37 | 62.84 | 63.29 | 62.24 | 63.36 |
| 混合偏移 (top@1) | ViTBase-LN | 29.94 | 32.36 | 57.78 | 57.05 | 60.56 | 60.84 | 60.37 | 61.36 |
| 批大小 1 | ResNet-50-GN | 30.60 | 30.65 | 35.82 | 44.40 | 45.01 | 45.11 | 45.58 | 46.90 |
| 标签偏移 | ResNet-50-GN | 30.60 | 21.15 | 35.89 | 41.65 | 41.74 | 42.49 | 42.26 | 43.27 |
| 混合偏移 (top@1) | ResNet-50-GN | 30.61 | 29.80 | 38.12 | 31.36 | 33.06 | 32.71 | 32.66 | 34.36 |
在 CIFAR-100-C 上论文还把该框架套到 WaTT(只适应 CLIP 文本编码器的权重平均 TTA)上,直接在图像编码器上做多样化,均值从 45.57 提到 47.86。
| 方法 | CIFAR-100-C 平均准确率 |
|---|---|
| CLIP (zero-shot) | 29.43 |
| TENT | 35.19 |
| TPT | 30.46 |
| TDA | 22.08 |
| DiffTPT | 22.89 |
| SAR | 31.92 |
| CLIPArTT | 41.51 |
| WATT-P | 44.68 |
| WATT-S | 45.57 |
| WATT-S + Aug | 47.30 |
| WATT-S + Aug + Reg(本文) | 47.86 |
消融实验¶
| 配置 | 关键指标 | 说明 |
|---|---|---|
| 仅粒子群(Naive) | 62.17 | ViTBase-LN、批大小 1;已比 DeYO 的 60.57 高,说明"多份归一化参数"本身就有收益 |
| + KL 输出级排斥 | 63.36 | 预测层面的分歧带来稳定增益 |
| + SVGD 参数级排斥 | 62.94 | 与 KL 接近,略低于 KL |
| + Grad 功能级排斥 | 63.14 | 混合偏移上最强(ViT 61.36 / ResNet 34.36) |
| Grad + 翻转增强 | 64.72 | 全部消融中最强配置,比 DeYO 高约 4% |
| Grad + 异构优化器 | 63.08 | 与 Grad(63.14)基本持平,见表内讨论 |
| 梯度多样化形式:点积 / ℓ₂ 距离 / 余弦 | 点积最优 | 点积峰值在 λ ≈ 0.3,λ 过大明显掉点 |
| 粒子数 N = 1 → 3 → 更大 | 1→3 提升显著 | N > 3 后收益边际,故固定 N = 3 |
| Tent → Tent + Grad(插件验证) | 51.52 → 53.63 | 7 类损坏子集平均(DeYO 为 52.87),证明该正则不依赖本文的粒子初始化 |
关键发现¶
- 贡献最大的机制是功能级梯度多样化(Grad)。它在混合偏移上把 ViTBase-LN 从 DeYO 的 57.05 拉到 61.36、ResNet-50-GN 从 31.36 拉到 34.36,在批大小 1 下把 ResNet 从 44.40 拉到 46.90;而且它能被移植到 Tent 上(51.52 → 53.63),说明它是一类通用的稳定化机制,而不是依附于本文的集成初始化。
- 只维持多个粒子、不加任何多样化(Naive)就已经有稳定收益(ViT 60.57 → 62.17),这是全文重要的铺垫结论:多轨迹本身就缓解了单点解的不稳定性;但独立粒子会沿相似轨迹收敛,所以真正拉开差距的是显式的排斥项。
- 极端欠定场景下收益最明显。混合偏移与批大小 1 里 Grad 的优势最大,尤其 Fog 这类严重损坏;相反在个别 corruption 上(如 ResNet 的 Zoom blur,24.90 的基线),多样化的增益有限。
- 超参上,λ = 0.3 附近是熵最小化与功能排斥的平衡点,过强的排斥反而拖累适应;粒子数存在明显的饱和,3 个就够。
- ⚠️ 正文若干百分比与表格对不上:批大小 1 处正文称集成比 DeYO 提升 2.23%、Grad 比 DeYO 提升 3.21%(ViTBase-LN),但表中对应是 62.17 vs 60.57(+1.60)与 63.14 vs 60.57(+2.57);ResNet-50-GN 的 +2.50% 则与表格一致。混合偏移处正文称"比最好基线高 3%"(ResNet),实际是与 DeYO(31.36)比较,该列最强基线是 SAR 的 38.12,高于所有粒子的结果。以上均以表格为准。
- 计算开销随粒子数近似线性增长,K = 3 相当于约 3 倍推理开销;但由于只更新归一化层、主干冻结,额外的优化开销仍然很轻。这一点是该方法能否实用的关键前提。
亮点与洞察¶
- 把"欠定(underspecification)"这个原本在泛化理论/鲁棒性讨论里的概念,用一组五种子对照实验(熵几乎不变、准确率摆动 ±4.8%)直接钉在 TTA 上,比单纯说"熵最小化不稳定"有力得多。这个"用熵值几乎相同但结果差异巨大"来证明目标不适定的诊断范式,可以迁移到任何用无监督目标做在线更新的场景(如测试时 prompt 调优、在线 RLHF 奖励适配)。
- 多样化被拆成四个正交层级、且每一层都对应一种具体失效模式,这种"失效模式 → 对应多样化算子"的对应关系让整个设计不是堆模块:输出级治预测趋同、参数级治盆地塌缩、梯度级治特征依赖雷同、优化器/输入级治优化几何与输入过拟合。
- 梯度多样化用的是最朴素的"输入梯度内积",但消融证明它比 KL、SVGD 都有效。这是一个反直觉但有解释的结论——参数空间的分散并不等于功能上的分散,直接约束功能行为(对输入的响应)比约束权重数值更贴近"决策边界不同"这个真正想要的目标。
- 插件式设计(只改归一化层、加一个可加和的正则项)让它可以和任何熵基 TTA 组合,Tent + Grad 的验证就是证据;这类"wrapper"式贡献在 TTA 这种已经卷成军备竞赛的领域里,工程价值往往高于再提一个新 loss。
局限与展望¶
- 并非在所有设定上都超过最强基线:ResNet-50-GN 的混合偏移上 SAR(38.12)仍高于全部粒子变体(最高 Grad 34.36)。论文正文用"比最好基线高 3%"来描述这一行,实际比较对象是 DeYO,读的时候需要注意口径。
- 批次大小 1 场景下的正文百分比与表格不一致(见上文 ⚠️),且部分行之间差距落在标准差之内(如 KL 62.24–63.36 与 Grad 63.36–63.14 的交叉),个别 corruption 上的排序并不稳定。
- 优化器异构这一项的证据偏弱:加入异构优化器后(Table 4)ViTBase-LN 的各变体为 61.88 / 62.81 / 62.91 / 63.08,与同构配置的 62.17 / 62.94 / 63.36 / 63.14 相比并未提升,多数落在噪声区间;正文"进一步改善鲁棒性"的结论主要是相对 DeYO 而言。
- 粒子数固定为 K = 3、λ 需要离线网格搜索,框架本身并没有在线自适应地调节探索强度;对特别难的损坏(本可以多用几个粒子)和简单的损坏(可以退回单模型省算力)都用同一套配置。
- 只适应归一化层这一限制继承了以往 TTA 的一贯设定,但也意味着当偏移主要影响非归一化层的语义表征时,粒子可探索的空间很有限;输入级多样化也只用了水平/垂直翻转,探索面偏窄。
- 正文依赖一个附录里的"无害样本筛选"步骤(只对筛选后的样本反向传播),但没有在主文展开其准则与敏感性,这部分对复现来说是黑箱。
- 改进方向:把粒子间分歧当作不确定性/难度信号,用来自适应决定 K、λ 甚至是否适应当前样本(分歧大就多探索、分歧小就少算力);把均匀平均换成按粒子后验(熵 + 先验)加权或贝叶斯模型平均;把"多假设"从归一化层扩展到 prompt / LoRA 等参数高效子空间,迁移到测试时 prompt 调优与分割、检测等密集预测任务。
相关工作与启发¶
- vs Tent:Tent 用单模型的熵最小化在线调归一化层,本文保留了这个损失但把它变成群体目标,并用多样化项约束粒子间的轨迹分离;Tent + Grad 的插件实验(51.52 → 53.63)说明两者是叠加关系而非替代关系。
- vs SAR:SAR 针对 wild 场景的核心手段是锐度感知优化 + 可靠样本筛选,依然只维护一个模型;本文认为"单个模型的解本身就不唯一",问题出在解的多样性上,两者可以正交组合(不同批大小/偏移场景下 SAR 与本文各有胜负,ResNet 混合偏移上 SAR 反而更强)。
- vs DeYO:DeYO 也用了增强,但目的是过滤样本、挑出稳健特征,其"多样性"体现在样本层面(PLPD 打分);本文的多样性发生在参数/预测/梯度层面,且明确指出 DeYO 这类做法没有触及欠定问题的根源。
- vs 朴素集成(ensembling):朴素集成各自独立训练再事后平均,在熵最小化下独立粒子会沿相似轨迹收敛,多样性红利有限;本文的关键差别是在适应过程中就用 Ω(Θ) 耦合粒子动力学,让"分歧"成为优化的一部分而不是结果的副产品。
- vs SVGD(Liu & Wang, 2016):SVGD 是通用的贝叶斯推断算法,本文把它搬进 TTA 当作粒子交互机制,并额外引入了以源参数为中心的高斯先验(γ 项)来约束粒子不要漂离源域——这一步是针对测试时场景改造的关键。
评分¶
- 新颖性: ⭐⭐⭐⭐ 把欠定问题正式引入 TTA 并提出多粒子后验推断的视角很有说服力,但具体组件(KL 排斥、SVGD、梯度对齐、异构优化器)多为已有工具的组装。
- 实验充分度: ⭐⭐⭐⭐ 覆盖三种 wild 场景、两种主干、CIFAR-100-C 与 WaTT、插件验证和多组消融,但正文多处百分比与表格不符,个别场景未超过最强基线。
- 写作质量: ⭐⭐⭐ 概念与动机讲得清楚直白,但数字口径不统一(集成/Grad 的提升幅度)、优化器异构的结论与表格不符,公式在正文中排版受损。
- 价值: ⭐⭐⭐⭐ plug-and-play、只调归一化层、开销可控,容易被后续 TTA 工作直接叠加复用,且"多假设 + 多样化"的思路可迁移到 prompt 调优等测试时优化场景。