引言
深度学习模型在实际部署中常面临领域漂移(Domain Shift)问题——训练环境与测试环境的差异会导致模型性能显著下降。测试时自适应(Test-Time Adaptation,TTA)是一种无需源域标签、仅利用无标注测试数据在线调整模型的解决方案。1
然而,现有TTA方法存在两个核心问题:
- 频繁适配开销大:每批次测试数据都需要进行梯度反向传播和模型更新
- 边缘设备不友好:高计算成本和内存消耗使得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通过双统计量校正机制解决这一问题。
动机
测试时归一化层面临两个挑战:
- 记忆分布过时:CnDRM积累的历史样本可能无法反映当前数据分布
- 批次统计不稳定:小批次数据的统计量波动大
解决方案
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-C | 10类,15种corruption | 噪声、模糊、天气等 |
| CIFAR-100-C | 100类,15种corruption | 噪声、模糊、天气等 |
| ImageNet-C | 1000类,15种corruption | 噪声、模糊、天气等 |
集成方法
SNAP可与五种SOTA TTA方法无缝集成:
- Tent:熵最小化
- EATA:抗遗忘正则化
- SAR:梯度过滤
- CoTTA:权重平均增强
- 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.5 | AR=0.1 | AR=0.01 |
|---|---|---|---|---|
| Tent | 80.43% | 80.21% | 78.95% | 72.3% |
| EATA | 81.12% | 80.89% | 79.42% | 73.1% |
| SAR | 81.56% | 81.34% | 79.87% | 74.2% |
关键发现:在全适配率至1%范围内,SNAP精度损失始终控制在3.3%以内。
边缘设备验证
在真实边缘设备上测试:
| 设备 | 配置 | 吞吐量提升 |
|---|---|---|
| Raspberry Pi 4 | CoTTA+SNAP | 18.4倍 |
| Raspberry Pi Zero 2W | Tent+SNAP | 12.7倍 |
| NVIDIA Jetson Nano | EATA+SNAP | 8.3倍 |
组件消融分析
| 组件 | AR=0.1精度 | 贡献 |
|---|---|---|
| 基线(朴素稀疏) | 68.2% | - |
| +类别代表性 | 74.8% | +6.6% |
| +域代表性 | 77.3% | +2.5% |
| +IoBMN | 78.9% | +1.6% |
| 完整SNAP | 79.4% | +11.2% |
实际部署考量
适用场景
SNAP特别适合以下场景:
- 延迟敏感应用:自动驾驶、实时视频分析
- 资源受限设备:移动端、嵌入式系统、物联网
- 高速数据流:高帧率视频、传感器数据流
- 动态环境:持续变化的天气、光照条件
超参数调优建议
| 参数 | 建议值 | 说明 |
|---|---|---|
| 适配率 (AR) | 0.05-0.2 | 延迟-精度权衡 |
| 置信度阈值 | 0.7-0.9 | 根据领域调整 |
| 记忆容量 | =批次大小 | 计算效率最优 |
| 动量 | 0.1-0.3 | 域质心更新速度 |
| IoBMN权重 | 0.3-0.7 | 记忆/批次平衡 |
局限性
- 极低适配率:当AR<0.01时,精度下降明显
- 类别平衡假设:当测试数据类别极度不平衡时效果可能受限
- 新型领域:未在训练中见过的corruption类型效果待验证
与相关工作的关系
与TTT/TTA的关系
SNAP属于持续测试时自适应(Continual TTA)范畴,与TTT相比:
| 维度 | TTT | SNAP |
|---|---|---|
| 自适应目标 | 自监督任务 | 域分布对齐 |
| 计算开销 | 中等 | 极低 |
| 数据需求 | 样本内循环 | 稀疏采样 |
| 适用场景 | 序列建模 | 图像分类 |
与测试时计算扩展的关系
SNAP与测试时计算扩展具有互补性:
- 测试时计算扩展:增加推理时的计算深度(如链式推理、隐空间推理)
- SNAP:减少推理时的适配开销,实现高效自适应
两者可以结合:在支持测试时计算的模型上部署SNAP,进一步提升边缘部署效率。
与其他边缘TTA方法对比
| 方法 | 内存优化 | 延迟优化 | 无反向传播 |
|---|---|---|---|
| MECTA | ✓ | ✗ | ✗ |
| EcoTTA | ✓ | ✗ | ✓ |
| LeanTTA | ✓ | ✓ | ✓ |
| SNAP | ✓ | ✓✓ | ✓ |
总结
SNAP提出了一个优雅的稀疏测试时自适应框架,通过两大核心创新解决边缘部署难题:
- CnDRM:类别与域双代表性采样策略,即使在1%采样率下也能选择最有效的样本
- IoBMN:无需反向传播的归一化层动态校正,保持模型与目标分布对齐
SNAP的关键优势:
- 延迟降低最高93.12%:使TTA在边缘设备上真正可用
- 精度损失<3.3%:在1%-50%适配率范围内保持稳定
- 即插即用:可与现有TTA方法无缝集成
- 开源可用:代码已公开于GitHub2
这项工作为TTA在自动驾驶、医疗诊断等延迟敏感型应用的落地提供了关键技术支撑。
参考文献
Footnotes
-
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
-
SNAP Official Repository: https://github.com/chahh9808/SNAP ↩