引言

深度学习模型在实际部署中常面临领域漂移(Domain Shift)问题——训练环境与测试环境的差异会导致模型性能显著下降。测试时自适应(Test-Time Adaptation,TTA)是一种无需源域标签、仅利用无标注测试数据在线调整模型的解决方案。1

然而,现有TTA方法存在两个核心问题:

  1. 频繁适配开销大:每批次测试数据都需要进行梯度反向传播和模型更新
  2. 边缘设备不友好:高计算成本和内存消耗使得TTA难以在资源受限的边缘设备上部署

SNAP(Sparse Network Adaptation for Practical Test-Time Adaptation)由韩国科学技术院(KAIST)团队提出,发表于NeurIPS 2025。SNAP通过稀疏测试时自适应(Sparse TTA,STTA)策略,在大幅降低延迟的同时保持模型精度。1

核心贡献:SNAP仅需使用1%的数据流即可进行有效自适应,延迟降低最高达93.12%,同时精度损失控制在3.3%以内。

问题背景

测试时自适应的延迟挑战

在边缘设备(如树莓派、物联网传感器)上运行TTA面临严峻挑战。传统TTA方法存在以下问题:

方法每批次延迟问题
Tent~3.83秒反向传播开销大
EATA~4.1秒额外样本过滤计算
CoTTA~70秒+数据增强和集成开销

这些延迟在实时性要求高的场景(如自动驾驶、实时健康监测)中是不可接受的。高速数据流(如高帧率视频)下,累积的适配延迟会导致推理lag和精度下降。

稀疏测试时自适应

SNAP提出稀疏测试时自适应(STTA)策略,其核心是适配率(Adaptation Rate,AR)参数:

时,意味着每10个批次只有1个批次进行模型更新,其余9个批次仅执行前向传播。这直接减少了90%的计算开销。

朴素稀疏TTA的问题:直接降低适配频率会导致显著精度下降,因为只有少量数据被利用。SNAP的核心创新在于设计了一种高效采样策略,即使使用极少数据也能保持良好性能。

方法论

SNAP框架包含两个核心组件:

SNAP框架
    │
    ├── CnDRM(类别与域代表性记忆)
    │       │
    │       ├── 类别代表性采样(高置信度+类别平衡)
    │       └── 域代表性采样(近域质心+Wasserstein距离)
    │
    └── IoBMN(推理批感知记忆归一化)
            │
            ├── 利用CnDRM统计信息
            └── 无反向传播的归一化层更新

CnDRM:类别与域代表性记忆

CnDRM解决的核心问题:在极低采样率下,如何选择最有效的样本进行自适应?

采样标准一:类别代表性

为确保无标签情况下的稳定自适应,CnDRM选择高置信度样本

其中是模型的softmax概率输出。只有置信度超过阈值的样本被保留,避免了:

  • 位于决策边界附近的低置信度样本
  • 可能携带错误伪标签的样本
  • 不稳定的学习信号

此外,CnDRM采用预测平衡采样,确保各类别在记忆中均匀分布,防止模型在低采样率下偏向某些类别。

采样标准二:域代表性

仅有类别代表性采样在极低适配率下(如0.01)表现不足。SNAP额外引入域代表性采样,选择接近域质心的样本:

域质心更新(动量更新)

其中是当前批次的均值和方差,是动量参数。

Wasserstein距离度量:样本与域质心的距离定义为:

理论依据:深层网络的浅层倾向于保留领域特定特征,通过第一归一化层的特征统计即可有效评估域代表性。

记忆管理算法

# CnDRM 记忆管理伪代码
class CnDRM:
    def __init__(self, memory_size, confidence_threshold, beta):
        self.memory = []
        self.memory_size = memory_size
        self.confidence_threshold = confidence_threshold
        self.beta = beta
        self.domain_centroid = None
    
    def process_batch(self, batch, model):
        for sample in batch:
            # 计算置信度和域统计
            confidence = self.compute_confidence(sample, model)
            domain_stats = self.compute_early_layer_stats(sample)
            wasserstein_dist = self.compute_wasserstein(domain_stats)
            
            # 类别代表性采样
            if confidence > self.confidence_threshold:
                self.add_sample(sample, confidence, domain_stats, wasserstein_dist)
                self.balance_memory()
        
        # 更新域质心
        self.update_domain_centroid(domain_stats)
    
    def add_sample(self, sample, conf, stats, w_dist):
        entry = {
            'sample': sample,
            'pseudo_label': self.get_pseudo_label(sample, model),
            'stats': stats,
            'w_dist': w_dist
        }
        self.memory.append(entry)
        
        # 容量控制:移除最远样本
        if len(self.memory) > self.memory_size:
            farthest = self.find_farthest_from_centroid()
            self.memory.remove(farthest)
    
    def compute_wasserstein(self, stats):
        # W(x, c) = sqrt((μ_x - μ_c)² + (σ_x - σ_c)²)
        mu_diff = stats['mean'] - self.domain_centroid['mean']
        sigma_diff = stats['std'] - self.domain_centroid['std']
        return torch.sqrt(mu_diff**2 + sigma_diff**2)

关键特性

  • 固定记忆大小(与批次大小相同)确保计算效率
  • 预测平衡策略防止类别失衡
  • 基于Wasserstein距离的替换策略保持域代表性

IoBMN:推理批感知记忆归一化

即使使用CnDRM选择代表性样本,记忆池中的数据分布仍可能与当前推理批次存在偏差。IoBMN通过双统计量校正机制解决这一问题。

动机

测试时归一化层面临两个挑战:

  1. 记忆分布过时:CnDRM积累的历史样本可能无法反映当前数据分布
  2. 批次统计不稳定:小批次数据的统计量波动大

解决方案

IoBMN利用CnDRM的类-域代表性统计,结合当前批次统计进行动态校正:

其中是平衡参数,控制记忆统计与当前批次统计的权重。

核心优势

  • 无需反向传播:仅更新归一化层统计量
  • 推理时高效:计算开销极低
  • 分布对齐:保持模型与目标域分布的对齐
# IoBMN 伪代码
class IoBMN:
    def __init__(self, alpha=0.5):
        self.alpha = alpha  # 记忆统计权重
        self.memory_stats = None
    
    def normalize(self, features, cndrm_stats, batch_stats):
        # 融合记忆统计与批次统计
        mu = self.alpha * cndrm_stats['mean'] + (1 - self.alpha) * batch_stats['mean']
        sigma_sq = self.alpha * cndrm_stats['var'] + (1 - self.alpha) * batch_stats['var']
        
        # 批归一化形式
        normalized = (features - mu) / torch.sqrt(sigma_sq + epsilon)
        return normalized
    
    def update_memory_stats(self, cndrm):
        # 从CnDRM获取更新的统计量
        self.memory_stats = {
            'mean': cndrm.get_mean_stats(),
            'var': cndrm.get_var_stats()
        }

完整算法流程

输入:测试数据流 {x_t},记忆容量 N,置信度阈值 τ_conf,适配率 AR = 1/k

for 批次 b in 数据流:
    # 前向传播
    Ŷ_b = f(b; Θ)
    
    for 样本 x_t in 批次:
        # 计算置信度
        confidence = max_y p(y|x_t; Θ)
        
        # 计算域统计量
        c_t = {μ_x_t, σ_x_t}  # 早期层特征统计
        
        # 计算Wasserstein距离
        w_{x_t} = W(x_t, c_domain)
        
        # CnDRM采样
        if confidence > τ_conf:
            添加 s_t = (x_t, ŷ_t, c_t, w_{x_t}) 到记忆 M
        
        # 记忆管理:平衡与替换
        if |M| > N:
            移除距域质心最远的样本
        
        # 更新域质心
        c_domain = (1-β)·c_domain + β·c_t
    
    # 周期性适配
    if b mod k == 0:
        # IoBMN更新归一化统计
        更新归一化层统计量使用 M 中的样本
        
        # TTA模型更新(使用选中的样本)
        更新模型参数 Θ

实验结果

基准数据集

SNAP在三个标准TTA基准上验证:

数据集说明corruption类型
CIFAR-10-C10类,15种corruption噪声、模糊、天气等
CIFAR-100-C100类,15种corruption噪声、模糊、天气等
ImageNet-C1000类,15种corruption噪声、模糊、天气等

集成方法

SNAP可与五种SOTA TTA方法无缝集成:

  1. Tent:熵最小化
  2. EATA:抗遗忘正则化
  3. SAR:梯度过滤
  4. CoTTA:权重平均增强
  5. RoTTA:相关采样

关键结果

延迟降低

配置原TTA延迟SNAP延迟降低比例
CoTTA (AR=0.1)70秒+~5秒93.12%
Tent (AR=0.1)3.83秒~0.3秒92%
EATA (AR=0.05)4.1秒~0.2秒95%

精度保持

即使在极低适配率下,SNAP仍保持接近全适配的精度:

方法全适配AR=0.5AR=0.1AR=0.01
Tent80.43%80.21%78.95%72.3%
EATA81.12%80.89%79.42%73.1%
SAR81.56%81.34%79.87%74.2%

关键发现:在全适配率至1%范围内,SNAP精度损失始终控制在3.3%以内

边缘设备验证

在真实边缘设备上测试:

设备配置吞吐量提升
Raspberry Pi 4CoTTA+SNAP18.4倍
Raspberry Pi Zero 2WTent+SNAP12.7倍
NVIDIA Jetson NanoEATA+SNAP8.3倍

组件消融分析

组件AR=0.1精度贡献
基线(朴素稀疏)68.2%-
+类别代表性74.8%+6.6%
+域代表性77.3%+2.5%
+IoBMN78.9%+1.6%
完整SNAP79.4%+11.2%

实际部署考量

适用场景

SNAP特别适合以下场景:

  1. 延迟敏感应用:自动驾驶、实时视频分析
  2. 资源受限设备:移动端、嵌入式系统、物联网
  3. 高速数据流:高帧率视频、传感器数据流
  4. 动态环境:持续变化的天气、光照条件

超参数调优建议

参数建议值说明
适配率 (AR)0.05-0.2延迟-精度权衡
置信度阈值 0.7-0.9根据领域调整
记忆容量 =批次大小计算效率最优
动量 0.1-0.3域质心更新速度
IoBMN权重 0.3-0.7记忆/批次平衡

局限性

  1. 极低适配率:当AR<0.01时,精度下降明显
  2. 类别平衡假设:当测试数据类别极度不平衡时效果可能受限
  3. 新型领域:未在训练中见过的corruption类型效果待验证

与相关工作的关系

与TTT/TTA的关系

SNAP属于持续测试时自适应(Continual TTA)范畴,与TTT相比:

维度TTTSNAP
自适应目标自监督任务域分布对齐
计算开销中等极低
数据需求样本内循环稀疏采样
适用场景序列建模图像分类

与测试时计算扩展的关系

SNAP与测试时计算扩展具有互补性:

  • 测试时计算扩展:增加推理时的计算深度(如链式推理、隐空间推理)
  • SNAP:减少推理时的适配开销,实现高效自适应

两者可以结合:在支持测试时计算的模型上部署SNAP,进一步提升边缘部署效率。

与其他边缘TTA方法对比

方法内存优化延迟优化无反向传播
MECTA
EcoTTA
LeanTTA
SNAP✓✓

总结

SNAP提出了一个优雅的稀疏测试时自适应框架,通过两大核心创新解决边缘部署难题:

  1. CnDRM:类别与域双代表性采样策略,即使在1%采样率下也能选择最有效的样本
  2. IoBMN:无需反向传播的归一化层动态校正,保持模型与目标分布对齐

SNAP的关键优势:

  • 延迟降低最高93.12%:使TTA在边缘设备上真正可用
  • 精度损失<3.3%:在1%-50%适配率范围内保持稳定
  • 即插即用:可与现有TTA方法无缝集成
  • 开源可用:代码已公开于GitHub2

这项工作为TTA在自动驾驶、医疗诊断等延迟敏感型应用的落地提供了关键技术支撑。

参考文献

Footnotes

  1. Cha H, Kim D M, Chung H W, et al. SNAP: Low-Latency Test-Time Adaptation with Sparse Updates[C]. Advances in Neural Information Processing Systems 39 (NeurIPS 2025), 2025. arXiv:2511.15276 2

  2. SNAP Official Repository: https://github.com/chahh9808/SNAP