1. TTT 的出发点与 Sun 2020 的 Y 形网络
问题: 训练分布之外的一张图. 一个在 CIFAR-10 上训到 91% 精度的分类器, 拿到一张加了高斯噪声的飞机图. 噪声没有改变「这是一架飞机」, 但改变了第一层卷积看到的像素统计, 浅层特征偏离了训练时见过的范围, 后面的分类头接收到的是一个它没见过的输入. 对这种情况, 常规做法有两条: 训练阶段把可能的 corruption 都加进数据增强; 或者收集目标域数据做域自适应. 前者要预先猜中偏移类型, 后者要在部署前拿到一批目标域数据. TTT 的出发点是第三条路: 偏移已经体现在这张测试图本身, 那就让模型在给出预测之前, 先在这张图上学一下. 问题在于测试图没有标签, 能用来学习的只有图像自身能产生的监督信号. 本文围绕下面五个问题展开:
- 没有标签, 推理阶段用什么损失, 更新哪些参数?
- 无标签损失下降, 为什么主任务的误差也会下降, 什么时候不会?
- 一次只看一张图和一次看一个批, 方法上差在哪里?
- 训练阶段要不要为推理阶段的更新做准备?
- 这些更新的代价和失效方式是什么?
为了后文对照, 先约定记号. 测试输入为 , 主任务标签为 (推理阶段不可见). 网络参数分成三块: 共享特征提取器 , 主任务头 , 自监督头 . 主任务损失记 , 自监督损失记 .
结构. Sun, Wang, Liu, Miller, Efros & Hardt (2020) 把网络切成 Y 形. 底部是共享的前 层 , 在第 层之后分叉: 一支是分类头 , 一支是旋转预测头 . CIFAR 实验用 ResNet-26, 分叉点放在第 2 组残差块之后; ImageNet 实验用 ResNet-18, 分叉点在第 3 组之后. 旋转预测是 Gidaris 等 (2018) 提出的自监督任务: 把图像旋转 0, 90, 180, 270 度之一, 让网络判断转了多少, 是一个 4 分类问题. 它的标签由图像自己生成, 推理阶段也能算.
训练阶段. 训练阶段同时优化两个损失, 共享层吃两份梯度:
式 (1) 里 是训练样本数. 论文把这一步叫联合训练 (joint training). 它本身就是一种多任务学习, 所以论文的对照组除了普通基线, 还有一个「只联合训练, 推理阶段不更新」的版本, 用来分离「多任务训练带来的鲁棒性」和「推理阶段更新带来的收益」.
推理阶段. 拿到测试图 后, 只用自监督损失更新共享层:
更新后的 记为 , 再用 和 对 做分类. 和 在推理阶段都不动. 一次适应所涉及的参数、样本和状态如下:
| 问题 | Sun 2020 TTT |
|---|---|
| 更新参数 | 共享层 接收旋转损失的梯度, 自监督头 只提供损失 |
| 损失样本 | 同一张测试图的 4 个旋转版本 (再加随机裁剪等增强) 组成一个批 |
| 状态生命周期 | 标准版: 每张图从训练好的 出发, 走 10 步 SGD, 预测完丢弃; 在线版: 每张图走 1 步, 从上一张图更新后的 出发 |
| 历史信息 | 标准版不积累样本间更新; 在线版延续参数, 但不回看旧样本 |
标准版的超参数是学习率 0.001, 10 步 SGD, 不用动量和权重衰减. 论文把 BN 换成了 Group Normalization: 单张图的增强批太小, BN 统计量不可靠, 在线版在 BN 下会失败; 用 BN 的结果放在附录, 需要配合难例挖掘.
CIFAR-10-C 上的误差. CIFAR-10-C 是 Hendrycks & Dietterich (2019) 给 CIFAR-10 测试集加的 15 类 corruption, 每类 5 个严重等级. 下表的数字是论文 Table A2 第 5 级 15 类误差的平均值 (由原表逐类求平均得到):
| 方法 | CIFAR-10-C 第 5 级平均误差 (%) | 原始测试集误差 (%) |
|---|---|---|
| 基线 (只训主任务) | 34.6 | 8.9 |
| 联合训练 | 33.3 | 8.1 |
| TTT (标准版) | 31.0 | 7.9 |
| TTT-Online | 20.4 | 8.2 |
基线到联合训练的 1.3 个点来自训练阶段增加的自监督任务, 与推理阶段更新无关; 联合训练到标准 TTT 的 2.3 个点才对应单张图上的 10 步更新. 在线版把收益放大到 12.9 个点, 因为测试流来自同一种 corruption, 前面样本积累的更新也能服务后续样本, 相当于逐步完成无监督域自适应. 论文还把 TTT-Online 和需要提前拿到整个目标域的 UDA-SS 比较, 15 类里有 13 类 TTT-Online 更好. 原始测试集一列说明另一件事: 在没有偏移的数据上, TTT 不会把精度拉低 (7.9 和 8.2 都在联合训练 8.1 附近). ImageNet-C 上 (ResNet-18, 论文 Table A3, 精度), 以高斯噪声第 5 级为例: 基线 1.3%, 联合训练 2.1%, 标准 TTT 3.1%, TTT-Online 26.3%. 原始验证集上四者为 68.9, 69.1, 69.0, 68.8. 第 5 级高斯噪声几乎把基线打到随机水平, 单张图走 10 步只能挽回 1 个点, 积累了整条流的在线版挽回了 24 个点.
论文还测了两种自然偏移. 视频帧数据集 VID-Robust 上精度依次为 62.7, 63.5, 63.8, 64.3 (基线, 联合训练, TTT, TTT-Online); CIFAR-10.1 上误差为基线 17.4, 联合训练 16.7, TTT 15.9. 自然偏移上的收益比合成 corruption 小一个数量级.
1.1. 自监督梯度为什么能帮主任务
推理阶段只降了 , 主任务 凭什么也下降? Sun 等的定理 1 给出一个充分条件. 设 和 对参数 都是凸的, -光滑, 梯度范数处处不超过 . 取步长 , 若
则沿 走一步后 . 式 (3) 的含义很直接: 一阶近似下, 的变化量约为 , 内积为正, 主任务损失就降. 光滑性和步长条件保证二阶项不会把一阶收益吃掉.
两层线性网络手算. 论文给了一个两层线性的例子, 这里把它算到数. 设输入 , 共享层是矩阵 , 主任务输出 , 自监督输出 , 两个损失都用平方误差:
对 求梯度. 记主任务残差 , 自监督残差 , 得到
两个梯度矩阵的 Frobenius 内积是
恒成立, 所以内积的符号由 决定: 两个残差同号, 并且两个头的方向夹角小于 90 度 (), 自监督更新就会帮主任务. 这和论文给出的条件一致. 代入数字. 取 , , , 主任务真值 . 此时 , , . 第一种情况, , 自监督目标 . 则 , , , 式 (6) 为 . 取步长 , 沿 更新:
主任务输出变成 , , 从 0.5 降到 0.32. 第二种情况, , . 则 , , 但 , 式 (6) 为 . 同样走一步:
主任务输出变成 0.8, , 从 0.5 升到 0.72. 自监督损失一样在下降 ( 从 2 变成 1.6), 主任务却变差了. 这个例子说明 TTT 的收益取决于自监督任务和主任务在共享层上的梯度是否对齐, 而对齐与否由数据和任务共同决定, 推理阶段无法直接检验 (检验要用 ).
经验上的对齐. 论文在 75 个测试集 (15 类 corruption × 5 个等级) 上, 把每个测试集的平均梯度内积和 TTT 带来的改进画在一起, 相关系数为 0.93 (标准版) 和 0.89 (在线版). 这个相关性是统计意义上的, 对单张图仍然可能出现第二种情况. 一个具体的失效例子来自论文对类别的分析: airplane 类几乎没有收益. 论文给的原因是这类图常带黑边, 旋转方向从黑边的位置就能读出来, 旋转任务不需要看懂物体本身, 它在这类图上提供的梯度和分类无关.
不动主干的熵方法: BN 适配, TENT 与 MEMO. 只换统计量: BN 适配. 在讨论需要反向传播的方法之前, 先看一条更便宜的基线. BN 层在训练时用滑动平均累积均值 和方差 , 推理阶段用这两个固定值归一化. 偏移改变了激活的分布, 训练域的统计量就不再匹配. Schneider, Rusak, Eck, Bringmann, Brendel & Bethge (2020) 直接用目标批的统计量 去替换或混合:
是目标批大小, 是给训练域统计量的「伪样本数」, 控制先验的分量. 时完全用目标批统计量. 这一步不更新任何权重, 只改归一化时用的两个数. ResNet-50 在 ImageNet-C 上 mCE 从 76.7 降到 62.2; 在用 DeepAugment + AugMix 训练过的更鲁棒的 ResNet-50 上, 从 53.6 降到 45.4. 它说明合成 corruption 带来的偏移, 很大一部分体现在激活的一阶, 二阶统计量上. BN 适配要求推理阶段有批. 批越小, 的估计方差越大; 批里如果只有一两个类别, 估出来的统计量反映的是类别构成, 不是域偏移. 后面 4.2 会讲到这一点在非独立同分布的流上变成主要失效来源.
TENT: 用预测熵更新 BN 仿射参数. ### 1.2. 损失和参数
TENT (Wang, Shelhamer, Liu, Olshausen & Darrell, 2021) 不需要训练阶段的辅助任务, 直接拿一个普通训练好的模型. 推理阶段的损失是模型预测分布的 Shannon 熵:
遍历类别, 是 softmax 输出. 熵低意味着预测更确定. TENT 的论证是: 在 corruption 基准上, 预测熵和误差高度相关, 降熵可以作为降误差的代理. 更新的参数只有 BN 层. 统计量 用目标批重新估计 (相当于式 (7) 取 ), 仿射参数 用式 (8) 的梯度更新. 这两类参数加起来不到模型参数的 1%. 只更新这一小部分, 一方面降低了每步的计算, 一方面限制了模型能被熵损失改动的范围. 熵最小化有一个平凡解: 把所有输入都预测成同一类, 熵为 0. TENT 依赖批来避开它, 批内样本的类别不同, 统计量和梯度在批上平均, 单个样本推不动全体. 这也是 TENT 和 Sun 2020 的一个区别: TENT 是批级别的方法, 不能直接用在单张图上.
TENT 的更新范围与状态. | 问题 | TENT | | --- | --- | | 更新参数 | BN 统计量 (重估) 和 BN 仿射参数 (梯度更新) | | 损失样本 | 当前测试批内的所有样本, 损失在批上平均 | | 状态生命周期 | online 设定: 每个批走 1 步, 参数延续到下一个批; offline 设定: 先在全部目标数据上适应, 再统一预测 | | 历史信息 | 不保留训练数据和旧批, 统计量由当前批重新估计 |
ImageNet 实验用批大小 64, SGD 加动量, 学习率 0.00025; 其他数据集用批大小 128, Adam, 学习率 0.001.
和 TTT, BN 适配, 伪标签的对比. 论文 Table 2 给出 CIFAR-10-C 和 CIFAR-100-C 第 5 级的平均误差 (%):
| 方法 | 训练阶段要改造吗 | CIFAR-10-C | CIFAR-100-C |
|---|---|---|---|
| Source (不适应) | 否 | 40.8 | 67.2 |
| RG (对抗/增强训练的鲁棒模型) | 是 | 18.3 | 38.9 |
| UDA-SS (域自适应, 要提前拿到目标域) | 是 | 16.7 | 47.0 |
| TTT | 是 | 17.5 | 45.0 |
| BN (只换统计量) | 否 | 17.3 | 42.6 |
| PL (伪标签) | 否 | 15.7 | 41.2 |
| Tent | 否 | 14.3 | 37.3 |
这张表里 TTT 一行的 17.5 和上一节 Sun 2020 Table A2 的数字 (标准版 31.0, 在线版 20.4) 对不上, 两篇论文的训练设置不同, 跨论文的数字不能直接比. 能比的是同一张表里的差: 从「只换统计量」的 17.3 到 Tent 的 14.3, 3 个点来自熵梯度对 的更新. ImageNet-C 上 Tent 的 mCE 为 44.0 (online) 和 42.3 (offline), 对照方法 ANT 50.2, BN 49.9, AugMix 51.7, ANT+SIN 47.4. TENT 也有明确的失败例子. 在 MNIST → SVHN 这类数字域迁移上, 源模型误差 71.3, Tent 之后反而升到 79.8. 源域和目标域差得太远时, 源模型在目标域上的高置信预测本身大多是错的, 降熵只是让错误更确定.
MEMO: 单个测试点上的边缘熵. TENT 要批, Sun 2020 要在训练阶段加辅助头. MEMO (Zhang, Levine & Finn, 2022) 针对的是两者都不满足的情况: 测试点一个一个来, 模型是现成的. 做法分两步. 对测试点 采样 个随机增强 , 计算增强平均后的边缘分布:
然后最小化它的熵:
式 (10) 要压低的是平均分布的熵. 想让它低, 要同时满足两件事: 每个增强版本的预测都要确定, 不同增强版本之间的预测要一致. 只满足前者 (每个增强都很确定但各不相同), 平均分布仍然是分散的, 熵仍然高. 所以式 (10) 自带了对「把单张图推向任意一类」的约束, 不需要批. 论文的消融比较了三种损失: 边缘熵, 增强对之间的交叉熵, 每个增强的条件熵平均, 边缘熵最好. MEMO 更新全部参数, 预测完复位到原始参数, 每个测试点相互独立 (episodic).
单点设置下的误差. CIFAR-10-C 上 (ResNet-26, 各 corruption 平均误差), 基线 22.5, 只做增强平均预测 (TTA) 19.9, MEMO 19.6; 同一设置下 TTT 从自身联合训练的 22.8 降到 21.5. ImageNet-C 上 ResNet-50 的 mCE 从 76.7 降到 69.9, 单点 BN 适配为 71.4; Tent online 为 54.4, 但 Tent 用的是批. 在更鲁棒的 RVT*-small 上 mCE 从 49.4 降到 40.6, ImageNet-R 误差从 63.9 降到 58.8, ImageNet-A 从 100 降到 99.1. ImageNet-A 一行说明 MEMO 对自然对抗样本几乎无效: 这些图本身是挑出来让 ResNet-50 出错的, 增强一致性帮不上忙.
换自监督任务: TTT++ 与 TTT-MAE. ## 2. TTT++: 给自监督更新加特征约束
TTT++ (Liu 等, 2021) 先做了一件反向的事: 构造了一个 toy 例子, 说明强分布偏移下 TTT 会降低精度. 原因是自监督更新没有约束, 它会在共享特征空间里任意移动, 只要能降 . 偏移小的时候, 降 的方向恰好也降 ; 偏移大的时候, 两个方向可以完全不同, 和上一节手算的第二种情况一致. TTT++ 的修正是三段式. 训练结束后, 在训练集上计算共享编码器输出 的均值 和协方差 , 存下来 (离线特征摘要, 不存训练样本本身). 推理阶段, 从一个测试 mini-batch 估计 , 加一个对齐损失:
ResNet-50 编码器输出 2048 维, 二阶矩估计不稳, 所以 TTT++ 在编码器输出和自监督头输出 (128 维) 两处各做一次对齐, 总损失为
是权重. 小批估计协方差方差大, TTT++ 维护一个装最近若干批特征的队列 (batch-queue decoupling), 用队列里的全部特征估计矩. 自监督任务也从旋转预测换成了对比学习. 论文 Table 1 (ResNet-50, 测试批大小 256) 的平均误差 (%):
| 方法 | CIFAR-10-C | CIFAR-100-C | CIFAR-10.1 |
|---|---|---|---|
| 不适应 | 29.1 | 61.2 | 12.1 |
| TTT (旋转) | 14.3 | 40.4 | 11.0 |
| TENT | 12.6 | 36.3 | 13.4 |
| TTT++ | 9.8 | 34.1 | 9.5 |
CIFAR-10.1 一列里 TENT 的 13.4 比不适应的 12.1 还差. 论文的解释是 BN 类方法默认不同样本, 不同空间位置以相似方式偏移, 合成 corruption 满足这一点, CIFAR-10.1 这种自然偏移不满足. TTT++ 的特征对齐约束的是编码器输出的分布, 不依赖这个假设.
TTT-MAE: 换一个更强的自监督任务. TTT-MAE (Gandelsman, Sun, Chen & Efros, 2022) 回答的是另一个问题: 如果自监督任务和主任务对齐得更好, 收益会不会更大? 它把旋转预测换成了 He 等 (2022) 的掩码自编码 (MAE): 遮掉 75% 的 patch, 让编码器加解码器重建被遮掉的像素. 模型是 MAE 预训练 800 epoch 的 ViT-L 编码器. 训练分类头时编码器冻结, 头用一个 ViT-Base, 论文叫 ViT probing. 推理阶段对每张测试图, 用不同随机掩码组成批 (批大小 128), 更新编码器和解码器, 走 20 步 SGD, 动量 0.9, 权重衰减 0.2, 学习率 5e-3, 每张图结束后复位. 两个设计选择有实验支撑. 第一, 训练分类头时若连编码器一起微调, 推理阶段再做 TTT 的效果差, 所以论文选了冻结编码器的 ViT probing. 第二, 优化器用 AdamW 时需要早停, 步数多了精度会掉; 用 SGD 时 20 步内精度持续上升.
ImageNet-C 第 5 级 15 类平均精度 (按论文 Table 2 逐类求平均): ViT probing 基线 32.1, TTT-MAE 43.3. 论文 Table 1 还对比了旋转任务: 对旋转不变的类别 (从任何角度看都差不多的物体), TTT-Rot 会伤精度, TTT-MAE 不会. 这正是上一节 airplane 现象的反面: 重建任务对每一类图都有非平凡的梯度.
熵适应的梯度到底在推什么. TENT 和 MEMO 都写成熵最小化,但梯度作用对象不同。先把最简单的二分类算清楚。设模型对一条测试样本输出两个 logits ,softmax 概率为 ,预测熵为
softmax 对 logit 的导数为 。将式 (13) …10762 tokens truncated…代理目标. 含 fast weights 不代表正在做分布适应;TENT 用普通参数执行一步梯度,也已经属于 TTA. 第 5 章关注序列内可写记忆的表达能力与长上下文,第 4 章关注无标签目标域上的风险变化. 阅读时把「适应对象」与「状态生命周期」固定下来,就不会因 Test-Time Training 这个共同名称混淆两条路线.
四个判断问题. 判断一篇工作属于哪条线,可以问:更新状态服务分布适应还是序列记忆;信号来自增强、熵、重建还是 next-token;状态在样本、batch、会话或序列哪个边界复位;一个用户能否影响另一个用户状态. 前三问确定学习问题,第四问确定安全边界. 混合系统需要分别报告两层更新的消融. 关闭外层 TTA 检查序列记忆收益,关闭内层 TTT layer 检查分布适应收益,再观察交互. 只报全部开启的终点分数,无法知道两层是互补还是相互干扰.
5.2. 从实验结果到可部署结论
代理目标的接受域. 一个代理目标的有效性应写成条件命题. 熵最小化依赖初始边界大致正确、目标样本聚类结构存在;增强边缘化依赖变换保持标签;旋转、对比和重建依赖辅助梯度与主任务相关. 实验需要估计这些条件在哪些分布范围内成立,普适代理并不符合现有证据.
可以为每个目标域记录四个量:适应前错误率 、代理损失变化 、主任务变化 与梯度内积估计 . 把样本或 batch 按 、初始熵、增强一致性分桶,观察收益率. 若低熵高一致桶稳定改善、高熵低一致桶经常恶化,就能形成输入选择规则. 规则在开发域学习,密封域验证;直接在测试标签上寻找阈值会高估泛化.
选择样本更新会改变目标分布. 只更新低熵样本,模型主要适应容易区域,困难少数类可能长期没有梯度;只选增强一致样本,又可能偏爱纹理稳定类别. 报告各真实类别、难度和域的入选率,检查过滤器是否把某群体系统排除. 无标签部署看不到真实类别,可以在研究评测中揭示偏差,再设计更稳健的选择信号.
拒绝更新本身是一种决策. 若代理信号不可靠,保持源模型可能优于冒险适应. 可以把更新规则写成门控:,实际梯度为 . 门控质量由四格结果评估:该更新且更新、该更新却跳过、不该更新却更新、正确跳过. 「该不该」由独立标签分析定义,只用于评估门控,部署仍依赖可观察特征. 门控阈值的代价不对称. 错误更新可能破坏当前及后续请求,漏掉一次有益更新通常只损失局部收益. episodic 单样本中影响范围小,可以更积极;continual 状态中影响范围大,阈值应更保守. 同一可靠性分数不能脱离生命周期直接复用.
预算对齐与收益分解. TTT、TENT、MEMO 和 TTT-MAE 每个样本消耗的前向、反向与增强数量差异很大. 公平比较至少给三种视角:按方法论文的推荐配方比较可达效果;固定反向次数比较优化效率;固定墙钟或能量比较部署效率. 某方法在推荐配方最好,却在等延迟下落后,两个结论都可以成立. 设源推理成本为 ,一次反向约为 ,增强数为 ,适应步数为 . 粗略成本可写成
实际成本还含数据增强、参数复制、优化器和编译开销,公式用于暴露倍率来源. TENT 以自然 batch 摊销一次更新,MEMO 为每个样本生成大量增强,标准 TTT 每样本多步且复位. 只报每 batch 时间而 batch 大小不同,会掩盖单请求成本. 收益也要拆成源模型改进、训练期联合任务和测试期更新. 设普通源模型成绩为 ,加入辅助训练但不适应为 ,测试更新后为 . 联合训练贡献 ,测试更新增量 . 若论文只比较 与 ,会把更好源表示一并算给 TTA. BN 方法还要拆统计重估与梯度. 设源统计成绩 、目标 batch 统计为 、再优化仿射为 . 是统计适配, 才接近熵梯度增量. 二者存在交互,顺序消融无法给严格因果分解,还需四格实验:源/目标统计与冻结/更新仿射的全部组合.
内存开销包括临时激活、优化器状态、源参数副本与增强 batch. episodic 方法为复位保存一份源权重,函数式实现可能减少复制却增加图管理. 资源表记录峰值显存和常驻状态,避免把源副本排除在外. 手机或边缘设备上,能否反向传播往往比准确率差一点更决定可用性.
统计协议与独立单位. corruption 类型、严重度、模型种子、测试顺序和增强种子是不同随机层级. 对固定 checkpoint 重复增强,只估计适应随机性;换训练 seed 才覆盖源模型变化;换 corruption 才覆盖偏移类型. 将所有图片当独立重复会夸大证据,因为它们共享模型和域. 主结果可在每个「训练种子—corruption—严重度」单元计算适应前后配对差,再按预先权重聚合. corruption 数量不多时直接列出每项差值与最差项. 平均 mCE 提升可能来自少数噪声类型,天气、模糊或数字化偏移仍退化. episodic 方法对测试顺序理论上不敏感,换序测试是实现不变量;continual 方法必须在多种顺序上重复,顺序本身是实验因素. 将 continual 方法在最有利顺序的结果与 episodic 方法任意顺序比较,无法说明生命周期优势.
置信区间要配对. 同一源模型、同一图片的适应前后预测天然相关,对逐样本差或运行级差做配对 bootstrap 比两个独立比例更有效. 训练级主张仍以独立 checkpoint 为单位,图片 bootstrap 不能替代多训练种子. 超参数搜索也进入统计边界. 为每个 corruption 选择最佳学习率、步数和增强,相当于使用域标签与验证反馈. 部署若拿不到域身份,主结果应使用统一配置或只依赖可观察信号的在线规则. oracle per-domain 配方可以报告,但名称要明确.
故障与安全验收. TTA 把推理从纯函数变成状态转移,故障面随之扩大. 反向出现 NaN、显存不足、增强解码失败、batch 太小或输入为空时,系统需要定义输出:回退源模型、沿用适应前预测、跳过更新或拒绝请求. 错误处理路径也应测试,不能让半完成更新留在共享状态. episodic 实现可使用事务式语义:保存源状态,计算候选更新,通过数值与行为检查后用于当前预测,随后完整撤销. 若候选含非有限值、参数位移越界或输出塌缩,直接使用源预测. continual 实现则需版本化状态与可回滚 checkpoint,4.2 会进一步讨论.
安全哨兵可以监控预测边缘分布、平均熵、参数位移、BN 方差、梯度范数和源锚点输出. 单一信号容易误判:真实单类流也会让边缘熵下降,强 corruption 会让梯度变大. 多信号与持续时间结合,才较适合触发降步长、停止或恢复. 攻击评测应覆盖三条路径. 输入本身造成误分类是普通对抗攻击;输入诱导代理梯度朝攻击目标移动是适应攻击;恶意样本通过共享 batch 或持续状态影响其他输入是传播攻击. 三者的攻击预算、受害范围和防御不同. 只在适应前 adversarial examples 上测试,无法覆盖更新机制新增的攻击面.
隐私风险也来自状态. 某用户输入通过梯度写进共享参数,后续查询可能探测其影响. episodic 完整复位能缩小跨请求泄漏,batch 内仍有交互;continual TTA 需要租户隔离、状态过期和删除机制. 方法评测若把所有测试图片视为同一可信数据流,结论不能直接外推到多用户服务.
可证伪的最终验收. 一套完整验收从冻结源模型与开发规则开始. 对密封偏移运行无适应、训练期联合基线、统计适配、代理更新与等成本负对照. 保存逐步代理 loss、参数状态、逐样本预测、资源和失败. 标签只在运行结束后计算主任务指标. 「代理目标有效」要求正确代理显著超过打乱或随机方向;「梯度对齐解释收益」要求对齐量能预测一步风险变化,并在干预方向后同步变化;「增强边缘化有效」要求它超过逐增强条件熵且破坏分组会削弱收益;「可更新子空间更安全」要求在匹配目标收益时源域退化更小.
「episodic 隔离成立」要求换序、重复样本和不同前序输入不改变当前结果;「TENT 的梯度有额外价值」要求统计加仿射超过只换统计;「方法可部署」还要求延迟、显存、故障回退和安全门槛通过. 任一机制条件失败,相关主张收缩到观察到的范围. 可以预先设置接受表:未见偏移平均改善的区间下界高于零;任何关键偏移退化不超过阈值;干净源域保持;错误置信度与安全风险不越界;等延迟比较仍有收益;失败率与回退延迟可接受. 平均提升无法抵消硬门槛失败.
代理失败样本也要保留. 对每个「熵下降但分类变错」「重建改善但分类退化」「增强之间达成错误共识」的样本,记录原图、增强、概率轨迹与梯度诊断. 这些反例能检验下一种筛选或锚定方法,避免研究只围绕平均表格循环. 这套证据同时说明经典 TTA 与第 5 章的分界. 此处验收围绕目标分布、源任务风险与跨输入状态;第 5 章围绕单序列的记忆、预测与容量. 两边都使用内循环时,仍要分别通过各自的反例和状态生命周期检查.
还可以用一个二维玩具问题检验整条推理链. 令两类源数据分别围绕 与 分布,源分类边界为纵轴;目标偏移将两类共同沿纵方向平移,这种协变量偏移不改变最优分类方向. 若代理任务推动编码器消除纵向平移,主任务会改善. 若目标域把两类沿横轴互换,源预测高置信错误,熵最小化只会扩大错误间隔. 两个数据集规模、类别先验和初始熵可以匹配,唯一差异是代理梯度与真正边界的关系. 方法在前者成功、后者失败,正好验证适用条件.
对旋转 TTT,可再构造「方向与类别相关」和「方向与类别无关」两版数据. 第一版中,物体朝向携带类别结构,旋转更新容易改善共享表示;第二版给每类随机方向,旋转头仍能从局部纹理完成任务,却不帮助分类. 同样的辅助准确率配上不同的主任务变化,能反驳「自监督任务越容易学,TTA 越有效」这种过强结论. 真正重要的是梯度耦合.
TENT 的一步更新也能做样本级归因. 对 batch 中每个样本计算熵梯度 ,总体梯度为均值. 删除样本 后,更新变化约为 . 逐个删除代价高时可用该一阶近似估计影响,找到少数主导样本. 再检查它们是高置信正确、高置信错误、异常值还是某个集中类别. 这比只看 batch 平均熵更容易解释一次更新为何成功或失败.
样本影响还会经过 BN 统计产生间接路径. 一个极端值同时改变均值、方差和熵梯度,影响可能远大于其 权重. 可在固定统计与重估统计两种模式下做 leave-one-out,对比直接梯度影响与统计影响. 如果攻击样本主要通过统计路径起作用,限制仿射梯度没有解决根因;稳健统计或样本隔离更有针对性. MEMO 的共识可以分解为「单视图确定性」和「视图间一致性」. Jensen 差
等于各视图分布相对平均分布的平均 KL,也就是 Jensen–Shannon 散度. 高表示视图分歧大,平均条件熵高表示各视图自身也不确定. 两种情况需要的处理不同:前者检查增强是否保持语义,后者说明源模型在每个视图上都缺乏把握. 只用边缘熵把二者合在一起,会丢掉诊断信息.
手算两个情形. 三个视图分别为 时,平均预测恰好均匀,边缘熵达到最大,分歧与单视图不确定同时存在. 若三个视图全为 ,边缘熵同样最大, 却为零. 第一种需要处理增强不一致,第二种需要获得更有辨识力的表示. 相同 MEMO loss 对应两种机制,报告 能区分它们. 自监督更新的训练模式也影响结果. 推理时将网络置于 train mode,dropout 开启、BN 更新;置于 eval mode,又可能阻止所需统计变化. 实现应逐模块设置状态,明确 dropout、BN 和随机深度各自行为. 仅写 model.train() 或 model.eval() 无法表达 TENT 这类混合需求. 同一 checkpoint 在不同模式下的差异要在无梯度基线中先测清楚.
优化器状态是另一个隐含超参数. episodic 单步 SGD 没有跨样本矩;使用 Adam 时,即使参数每次复位,若矩不复位,历史输入仍影响当前步. 完整复位 Adam 会让每个 episode 都处于偏置校正初期,更新幅度又与持续 Adam 不同. 论文应写明优化器、矩生命周期与偏置校正,不能只写学习率.
梯度裁剪会改变等范数对照. 若真实代理梯度经常超过阈值、随机梯度很少超过,裁剪后两者实际步长不同. 记录裁剪前后范数和触发率,对照使用相同的裁剪规则. 混合精度的 loss scaling 发生溢出时,某一步可能被跳过;把跳步当成零更新并记录,否则运行间更新次数并不相等.
多步 episodic 适应还面临「同一数据重复优化」. 十步都看相同增强集合,容易过拟合这组随机视图;每步重采样增强,目标更接近期望,却增加随机方差. 两种做法需要区分. 可固定总增强数,比较重复使用与分步新采样,判断收益来自更多优化步还是更多独立视图. 对 TTT-MAE,同一 mask 重复多步也可能只记住被遮位置. 每步新采 mask 能覆盖更多 patch,计算量相同而监督多样性更高. 记录 mask seed 与覆盖率,才能复现实际目标. 若测试图很小、若干步已经覆盖全部位置,再增加步数主要是在同一像素上重复拟合.
源模型选择会改变 TTA 难度. 更强预训练通常提高初始准确率,也可能让预测更校准、表示更稳健,留给适应的空间变小. 比较不同方法应共享底座;研究方法随底座规模的趋势时,报告绝对成绩、相对源增益与源退化. 在弱底座上提升十点,不代表在强底座上仍有相同价值.
预训练数据还可能覆盖 corruption 风格或测试图. 此时「测试时适应」收益建立在已经熟悉的表示上. 使用合成新扰动、时间上更晚的数据和近重复审计,能降低污染风险. 无法审计的大模型只应声称在该底座上的适应表现,不把结果解释成从未见分布上的普遍学习能力. 类别数也影响熵尺度. 均匀分布最大熵为 ,在十类和千类任务上直接用相同绝对阈值没有可比性. 可归一化为 ,但相同归一化熵仍可能对应不同 top-1 margin. 选择样本时同时观察最大概率、第一二名间隔与校准,阈值在不同类别数上重新验证.
开放集输入是经典闭集 TTA 的另一条边界. 一个不属于任何源类别的样本也会被熵最小化推向某个已知类,置信度上升后更难拒绝. 测试流混入未知类时,应报告未知检测、已知类准确率与错误吸收率. 只在闭集 corruption 上验证的 TENT 配方不能自动用于开放世界.
标签空间发生变化时,旋转或重建仍可优化,共享表示却未必支持新类. TTA 通常假设主任务标签空间和决策语义不变,改变的是输入分布. 新类别持续到来属于类别增量学习,需要扩展输出与监督或聚类机制. 把开放集失败归为「适应不够」会混淆问题定义.
回到部署决策,报告应给出代理目标的工作区间:源模型初始质量、偏移类型、batch 条件、更新子空间、状态生命周期、计算预算和安全隔离. 这些条件都能由前面的反例与消融检验. 条件越明确,方法越容易被正确使用,也越容易在新分布上知道何时停手.
部署前还应进行一次「零收益演练」:选择源模型已经接近饱和的干净集,按正式配置执行完整适应. 理想结果是门控跳过多数更新,或更新后性能、校准和资源都保持在容差内. 若方法必须在所有输入上更新,即使目标域没有可修正偏移也会消耗计算并承担退化风险. 这项测试检验系统是否具有保持原状的能力.
再进行「错误代理演练」:人为使用破坏标签的增强、错配 MAE 目标或被翻转的高置信伪标签. 监控与回退应在主任务大幅崩溃前触发. 若系统在代理 loss 顺利下降时毫无警报,说明监控只追随优化目标,无法识别目标与任务脱钩. 可部署 TTA 需要对成功更新敏感,也要对看似优化成功的错误方向敏感. 版本升级后,这两项演练与密封偏移集一起重跑. 编译器、归一化实现、增强库或 tokenizer 的变化都可能改变梯度路径. 旧版本通过的学习率和阈值不能自动继承. 将适应配置、底座 revision 和推理栈绑定,才有可能复现同一工作区间.
运行日志还要保存每个样本实际采用的更新步数、入选原因、回退原因和状态版本. 聚合准确率只能说明结果,无法判断门控是否按设计工作. 逐样本决策记录使错误预测能追到具体代理信号,也能检查某类输入是否长期被跳过. 若隐私限制禁止保存原始输入,可保存受控标识、统计摘要与访问审计,在授权环境完成复核.
参考文献
- Sun, Y., Wang, X., Liu, Z., Miller, J., Efros, A. A., & Hardt, M. (2020). Test-Time Training with Self-Supervision for Generalization under Distribution Shifts. ICML 2020.
- Wang, D., Shelhamer, E., Liu, S., Olshausen, B., & Darrell, T. (2021). Tent: Fully Test-time Adaptation by Entropy Minimization. ICLR 2021.
- Schneider, S., Rusak, E., Eck, L., Bringmann, O., Brendel, W., & Bethge, M. (2020). Improving robustness against common corruptions by covariate shift adaptation. NeurIPS 2020.
- Zhang, M., Levine, S., & Finn, C. (2022). MEMO: Test Time Robustness via Adaptation and Augmentation. NeurIPS 2022.
- Liu, Y., Kothari, P., van Delft, B., Bellot-Gurlet, B., Mordan, T., & Alahi, A. (2021). TTT++: When Does Self-Supervised Test-Time Training Fail or Thrive? NeurIPS 2021.
- Gandelsman, Y., Sun, Y., Chen, X., & Efros, A. A. (2022). Test-Time Training with Masked Autoencoders. NeurIPS 2022.
- Gidaris, S., Singh, P., & Komodakis, N. (2018). Unsupervised Representation Learning by Predicting Image Rotations. ICLR 2018.
- Hendrycks, D., & Dietterich, T. (2019). Benchmarking Neural Network Robustness to Common Corruptions and Perturbations. ICLR 2019.
- He, K., Chen, X., Xie, S., Li, Y., Dollár, P., & Girshick, R. (2022). Masked Autoencoders Are Scalable Vision Learners. CVPR 2022.