训练好的模型在部署中遇到训练分布之外的输入, 又拿不到标签, 能不能在给出预测之前先用这批输入调整自己? 这一章讨论这个问题. 它和前三章的区别在于监督信号: 第 1–3 章的每个新任务都有标签, 这里只有输入本身. 学习信号来自两处, 训练阶段安排好的自监督任务 (旋转预测, 对比学习, 掩码重建), 或者模型自己的预测熵与批统计量. 本章两篇文章, 单批适应 讲单个样本或单批上的适应, 持续适应 讲更新状态在样本之间一直延续时出现的问题.
1 从单次适应到持续适应
1.1 4.1 的起点和演进
Sun 等 (2020) 的 TTT 用一个 Y 形网络: 共享特征提取器 上同时接主任务头和旋转预测头, 训练阶段两个任务联合训练; 推理阶段对一张测试图做 4 个旋转, 用旋转损失更新 , 再用更新后的特征做分类. CIFAR-10-C 第 5 级上, 只训主任务的基线平均误差 34.6%, 联合训练 33.3%, 标准版 TTT (每张图从原参数出发走 10 步, 预测完丢弃) 31.0%, 在线版 (每张图走 1 步, 参数延续) 20.4%. 在线版的收益最大, 因为同一种偏移在整条流上持续存在, 前面样本带来的更新对后面也成立.
之后的方法沿两个方向改. 一个方向是不改造训练阶段: BN 适配只用目标批重估归一化统计量, ResNet-50 在 ImageNet-C 上的 mCE 从 76.7 降到 62.2; TENT 在此基础上用预测熵更新 BN 的仿射参数 , CIFAR-10-C 误差 14.3%; MEMO 回到单张图, 在多个增强上最小化边缘熵, 更新全部参数. 另一个方向是换一个更强的自监督任务: TTT++ 用对比损失, 并让测试特征的矩与训练阶段存下的矩对齐, TTT-MAE 改用掩码重建. 4.1 还从一个两层线性网络手算出自监督梯度与主任务梯度对齐的条件, 并引用 Sun 2020 的统计: 75 个测试集上梯度内积与 TTT 带来的改进的相关系数为 0.93.
1.2 4.2 处理的是延续带来的问题
在线版 TTT 和 TENT online 都让参数延续, 这在单一偏移上是收益来源, 在偏移不断变化的长流上就成了风险. CoTTA 论文依次喂入 CIFAR-10-C 的 15 种 corruption, 域之间不重置也不告诉模型边界: TENT 不重置时平均误差 20.7%, 按真实域边界重置的参考设定是 18.6%, 只换 BN 统计量的做法是 20.4%. 不重置的 TENT 比单纯换统计量还差, 这就是误差积累. 时间更长时情况更糟, TENT 在 CIFAR-100-C 上的误差升到 90.4%, 三种 corruption 之后回到干净数据上的精度接近 0.
4.2 把失败分成四类: 误差积累和遗忘, 小批与类别失衡带来的崩溃, 时间相关的流对批统计量的污染, 以及恶意输入. CoTTA 用教师模型的加权平均伪标签, 增强平均和随机逐权重恢复, 误差降到 16.2%; EATA 只用熵低于 的样本更新, 再用 Fisher 把参数锚在源模型附近; SAR 加 sharpness-aware 熵和崩溃检测后的整体恢复; RoTTA 和 NOTE 改了统计量的估计方式; DIA 则说明, 批里 5% 的恶意样本就能让定向攻击的成功率超过 92%.
2 共用记号与概念
2.1 参数, 信号与状态
本章记源模型参数为 (4.1 的 TTT 部分写作 加两个头), 测试流为 , 可更新参数的子集记作 . 熵方法的损失是预测分布的熵 , 类别数为 时最大值是 ; EATA 和 SAR 的阈值 就以它为尺度, ImageNet 上约为 2.763. BN 适配更新的是统计量 而不是梯度可达的参数, 所以它没有损失, 只有「用哪个批估计」的问题.
两篇都按同一组问题描述方法: 谁更新 (哪部分参数), 和谁一起算 (单张图的增强, 当前批, 还是一个队列), 状态怎样延续 (每样本复位, 按边界复位, 还是一直延续), 丢掉了什么. 这组问题对应第 1 章的「保留哪些状态」. 4.1 的每种方法都列了这样一张小表, 4.2 的重置策略表把「状态怎样延续」单独拿出来比较.
2.2 与持续学习的对应
状态延续之后, 第 1 章的两种失败都会出现, 只是对象变了. 遗忘的对象是源域: 参数在一串目标域上单向漂移, 离 越来越远, 回到源域时精度下降. 顽固性也有对应: 锚定或恢复过强时, 模型学不进当前的偏移. EATA 的 Fisher 锚定直接借用了 EWC 的二次惩罚, CoTTA 的随机恢复则是另一种限制参数离源值距离的办法.
区别在于没有标签, 也没有任务边界. 第 2 章的方法大多在边界处更新锚点, 这里拿不到边界; 准确率矩阵也无从构造, 评测改为整条流上的在线误差. 第 3 章的补充指标里提到 TestingTime 适应很少报告回到源域时的表现, EATA 的干净精度曲线补的就是这一项. 读 4.2 时, 可以把每种方法看成在「积累多少适应」和「允许多少漂移」之间选一个位置.
2.3 从监督风险到无标签目标
源模型原本希望降低目标域上的监督风险
部署时只能观察 , 标签 被拿走, 也就无法直接求梯度. TTA 的核心做法是构造一个只依赖输入、预测或训练阶段辅助结构的代理目标 . 对当前测试批 做一步更新可写成
其中 表示允许更新的参数与状态边界. TENT 的 通常只含归一化层仿射参数, TTT 会更新共享特征提取器, MEMO 可以更新全部参数. 同一个代理损失放进不同的 , 适应能力和破坏范围都不同.
熵最小化采用
它把预测推向低熵分布. 若决策边界已经大致正确, 目标域样本聚成簇并落在边界两侧, 推远边界附近的样本可能提高准确率; 若模型在偏移后自信地分错, 熵仍然很低, 更新会强化错误. 因而低熵只代表「确定」, 不等于「正确」. EATA 和 SAR 筛掉高熵样本, 缓解噪声梯度, 却无法自动纠正低熵错误.
硬伪标签把 当作标签, 最小化 . 在分类模型上, 它与熵最小化都强化当前预测, 梯度权重不同: 硬伪标签只拉高最大概率类别, 熵目标同时重新分配整个概率向量. 软伪标签或教师分布保留类间相似性, 慢教师还能减少单步噪声. 三者共同面对确认偏差: 当前模型犯错, 代理监督便把错误写回参数.
自监督目标绕开模型自己的类别预测. 旋转预测、对比学习和掩码重建从输入构造可验证目标, 更新共享表示后再服务主任务. 它能否帮助分类取决于两项梯度的关系. 在理想分析里, 若
沿自监督负梯度走一小步会降低主任务损失的一阶近似; 内积为负时, 适应反而伤害主任务. 训练阶段联合优化辅助头的目的, 就是让测试时可见的代理目标与真正任务形成可利用的耦合. 4.1 从这条桥接出发, 讨论为什么某些偏移上有效、另一些偏移上失效.
2.4 episodic、continual 与序列内状态
episodic TTA 为每个样本或 batch 从源参数 重新出发, 得到临时状态 , 输出后丢弃. 不同请求相互隔离, 前一个请求无法污染后一个请求; 同一种偏移持续到来时, 每次又要重复学习. continual TTA 令 成为下一批的起点, 把测试流变成无标签在线学习. 它能积累对稳定偏移的适应, 也会积累确认偏差、类别偏置和对源域的遗忘.
两种设定之间还有有限生命周期状态. 可以按会话、设备、用户群或检测到的域复位, 也可以保留慢教师与统计量、重置快速参数. 生命周期是算法定义的一部分, 不能等跑完后再按效果选择. 若评测利用真实 corruption 边界复位, 部署又没有这个边界, 得到的是带额外信息的参考上限.
状态不只包括梯度更新后的权重. BatchNorm 均值和方差、教师 EMA、样本队列、伪标签缓存、优化器矩与崩溃检测器的滑动统计都会跨请求传递. 一个方法声称「只更新 BN」时, 仍需说明更新仿射参数、运行统计量还是两者; 恢复模型权重却留下被污染的统计量, 源域表现不会真正回来. 4.2 将这组隐状态纳入安全边界.
分布漂移也有时间尺度. 突然从雨天切到雪天适合边界检测与重置; 缓慢光照变化适合连续跟踪; 类别比例短时集中可能只是采样波动, 贸然适应会把模型推向多数类. 更新速度 、教师衰减、记忆窗口和恢复频率共同构成时间滤波器. 滤波太快会追逐噪声, 太慢又跟不上真实变化. 4.2 因此把重点放在代理信号的可信时间范围, 熵值只是其中一个观测量.
无标签更新还缺少即时纠错通道. 监督训练中, 错误标签损失会在下一步推动模型修正; 熵目标只知道预测是否集中, 不知道集中到哪个类别才对. 可利用的数据一致性、增强一致性、教师共识和源模型锚点都只是额外假设. 真实偏移若破坏这些假设, 适应目标与主任务就会脱钩. 评测必须包含代理损失下降而准确率下降的反例, 检查方法能否检测并停止更新.
停止条件与更新规则同样重要. 当有效样本太少、预测分布突然塌到单类、参数离源点过远或源域哨兵集明显退化时, 系统可以跳过更新、降低步长或恢复状态. 每种动作都有代价: 跳过会错失真实适应, 恢复会丢掉已经积累的有益变化. 这些阈值应在独立开发流上确定, 测试流只执行规则, 否则测试时适应会变成利用答案调参.
这里还要与另一类 Test-Time Training 分清. TTT layers、fast weights 或把序列当作训练数据的长上下文方法, 通常在单条序列内部更新一个隐藏状态或小模型, 用当前 token 预测后续 token; 序列结束便复位. 本章的经典 TTA 主要针对部署分布偏移, 状态可能在不同样本与请求之间延续, 目标是恢复源任务在目标分布上的表现. 两者都在推理期间发生更新, 数学上也都可写成内循环, 但「一个 episode 在哪里结束」「状态是否跨用户保留」「代理目标服务什么任务」并不相同.
fast weights 也不必等同于梯度更新. 它可以由网络前向直接写入、由注意力形成, 或由显式优化器更新; TTA 则关心任何可变状态如何利用无标签目标域输入. 一个 TTT layer 若每条序列复位, 更接近可学习的序列内记忆. 若它跨请求保留并持续根据预测误差更新, 才会进入本章讨论的漂移、遗忘与攻击面. 第 5 章 接过前一种问题, 4.1 和 4.2 聚焦后一种部署适应链条.
安全边界由三个问题确定: 谁能影响状态、状态影响谁、多久能恢复. 当前 batch 共享统计量时, 同批恶意样本能影响其他人的预测; 状态跨请求延续时, 攻击影响会扩散到未来用户; 没有可信源锚点或回滚快照时, 污染可能长期存在. 因此评测除了目标流准确率, 还要测回到源域后的性能、恶意样本移除后的恢复时间、最差类别与过度自信. 适应收益只有在这些约束内才有部署意义.
3 方法对照
3.1 状态的生命周期
| 状态延续方式 | 代表方法 | 适应能否积累 | 误差积累 | 需要的额外信息 |
|---|---|---|---|---|
| 每样本复位 | TTT 标准版, MEMO, TTT-MAE | 不能 | 无 | 无, 但每样本多步更新 |
| 按已知域边界复位 | TENT-online* | 域内积累 | 域内有 | 真实域边界 |
| 随机逐权重恢复 | CoTTA | 部分保留 | 被限制 | 无 |
| 参数锚定或检测后恢复 | EATA, SAR | 保留 | 被限制 | 源域样本或崩溃阈值 |
| 不复位 | TENT-continual | 保留 | 无约束 | 无 |
从上到下, 积累的适应越来越多, 风险也越来越大. 每样本复位最安全, 代价是计算: MEMO 在 ImageNet-C 上的反向次数是 TENT 的 64 倍. 按域边界复位效果好, 但部署中拿不到边界, 所以 TENT-online* 只能当参考上限. 中间两行是 4.2 的主体, 它们用不同的方式限制漂移: CoTTA 每步以 的概率把每个权重拉回源值, 一个权重 300 步都没被恢复的概率只有 0.049; EATA 用锚定项持续施加拉力; SAR 平时不拉, 检测到熵的滑动平均过低时整体恢复.
CoTTA 和 SAR 的恢复针对同一个问题, 取舍相反. CoTTA 开销固定, 会持续抹掉有用的适应; SAR 保留适应, 但依赖崩溃检测的阈值, 检测晚了, 崩溃期间的预测已经输出. EATA 的锚定额外只占 9.8 MB 内存, 实测墙钟时间 102 秒, 精度 35.1%, 而 TENT 是 113 秒, 28.6%: 过滤掉高熵样本少做了反向传播, 时间反而更短.
3.2 批统计量与共享状态
很多失败都出在批上. RoTTA 的设定里测试流的类别随时间高度相关, 同一时间段集中出现少数类别, 批统计量被这几类主导. CIFAR-10-C 上不适应的源模型误差 43.5%, 换 BN 统计量后升到 75.2%, TENT 86.0%, CoTTA 83.2%, 而改了统计量估计方式的 NOTE 为 31.1%, RoTTA 为 25.2%. 同一批方法, 在独立同分布的流上和时间相关的流上排序完全倒过来.
共享状态还带来了攻击面. DIA 的设定是批大小 200, 其中 10 个是攻击者构造的样本; 这些样本通过共享的批统计量影响同批其他样本的预测, ImageNet-C 上定向攻击成功率超过 92%, 对只换统计量, TENT, 硬伪标签三类方法都有效. 4.2 末尾把这些失败汇成一张表, 每类给出触发条件, 现象和对应的修补方法, 并讨论评测中的泄漏和部署时要监控的量.
4 内容依赖
4.1 用损失、可更新参数和 batch 依赖拆解经典 TTT 与自监督适应, 两层线性网络的手算给出自监督梯度与主任务梯度同向或冲突的条件. 4.2 在这些更新规则上增加慢教师、参数锚定、可靠样本筛选、状态恢复与记忆库, 处理误差沿测试流累积的问题.
问题设定 的遗忘量和顽固性描述跨域状态变化, 参数与函数约束 的 EWC 与 EATA 共用 Fisher 加权二次惩罚, 区别在于 EATA 用源模型伪标签估计 Fisher. 小批或单样本部署对应 SAR、MEMO 与 TTT-MAE; 时间相关输入流对应 RoTTA 与 NOTE; 跨请求风险则落到 4.2 的重置、隔离和监控机制.
第 5 章把推理阶段的梯度更新用到长序列上. 那里的状态每条序列结束就复位, 落在上面对照表的第一行, 不存在本章的跨样本积累问题, 见 05 · TestingTime 训练与长上下文. 评测指标和协议的一般讨论见 03 · 评测与实践.