1. 项目概述当模型学会说“我不知道”在医疗影像诊断、自动驾驶决策或者金融风控这些领域一个AI模型的预测错误代价可能是巨大的。我们通常希望模型不仅给出答案还能告诉我们它对这个答案有多“确信”。这就是不确定性量化的核心任务。然而仅仅知道“不确定”还不够我们更需要模型在“不确定”时能够明智地选择“弃权”——这就是选择性预测。想象一下一位经验丰富的医生在面对一张难以判读的X光片时他不会强行给出一个诊断而是会建议进行更深入的检查如CT或MRI或者将病例提交给专家小组会诊。选择性预测就是在赋予AI模型这种“自知之明”和“审慎决策”的能力。传统的做法比如Softmax响应直接取模型输出概率的最大值作为置信度。但大量实践表明现代深度神经网络常常是“过度自信”的即使对完全陌生的、模棱两可的输入也会输出一个很高的概率值这非常危险。近年来涌现了多种提升选择性预测性能的方法例如训练多个模型并集成其预测的深度集成或者在训练过程中显式建模一个“弃权类”的自适应训练。这些方法从不同角度提升了模型对不确定性的感知能力。而我们这次要深入探讨的SPTD方法则另辟蹊径将目光投向了模型训练过程本身。SPTD的核心思想非常直观一个样本在模型整个训练历程中是早早被稳定分类还是直到训练后期仍在被“反复纠结”这本身就蕴含了丰富的、关于该样本“难度”的信息。最终模型的输出只是一个静态的快照而训练动态则记录了一部关于模型如何“学会”或“学不会”分类每个样本的“电影”。SPTD方法的核心就是通过分析这部“电影”提取出比最终单帧画面更可靠的置信度信号从而在覆盖率和准确率的权衡曲线上取得更优的表现。2. 选择性预测与不确定性量化的深度解析在深入SPTD之前我们必须夯实基础彻底理解选择性预测与不确定性量化这对孪生概念以及它们所面临的经典挑战。2.1 不确定性量化不只是个数字不确定性量化远非简单地输出一个0到1之间的“置信度”分数。它旨在系统性地识别、量化和传达模型预测中的不可靠性。在机器学习中这种不确定性主要来源于两方面认知不确定性源于模型自身知识的不足。例如模型参数的不确定性或者由于训练数据有限而无法学习到的模式。这可以通过使用贝叶斯神经网络或集成方法来估计。偶然不确定性源于数据固有的噪声或随机性。例如同一输入可能对应多个有效输出数据标注本身的模糊性。这种不确定性通常难以减少。UQ的方法论光谱很广。贝叶斯方法如MCMC、变分推断将模型参数视为随机变量通过后验分布来量化不确定性。频率派/无分布方法如保形预测不假设数据分布而是通过校准集为新的预测生成具有统计保证的预测集合。集成方法如深度集成通过训练多个独立模型并观察其预测的方差来近似认知不确定性。此外还有校准技术如温度缩放用于修正模型输出概率使其与真实正确率对齐。注意校准是选择性预测可靠性的基石。一个未经校准的模型其输出的“0.9置信度”可能只对应70%的实际正确率。在这种情况下基于此置信度设置阈值进行选择性预测其结果将是灾难性的。2.2 选择性预测的形式化定义与核心权衡选择性预测为标准的分类框架增加了一个“拒绝”选项。形式化地我们有一个分类器f: X - Y和一个选择函数g: X - R。对于输入x模型最终的输出为(f, g)(x) f(x), if g(x) τ ⊥, otherwise其中τ是一个预设的阈值⊥表示弃权。选择函数g(x)通常基于某种不确定性度量如1 - 最大softmax概率、预测熵、集成方差等计算得出。这就引出了选择性预测的核心权衡覆盖率 vs. 效用。覆盖率模型选择进行预测的样本占总样本的比例。效用通常指模型在那些它选择预测的样本上的准确率。理想情况下我们希望模型在100%覆盖率时达到最高准确率但这不现实。实际上我们追求的是在任一给定的覆盖率水平下获得尽可能高的准确率或者说为了达到某一目标准确率需要拒绝的样本尽可能少。描绘不同阈值τ下准确率随覆盖率变化的曲线即准确率-覆盖率曲线是评估选择性预测方法性能的关键工具。2.3 主流基线方法的工作原理与局限为了理解SPTD的贡献我们需要先看看它要超越的“对手们”。2.3.1 Softmax响应这是最朴素的基线。选择分数g_SR(x) max_c f(x)_c即模型预测的最大类概率。其优势是零额外计算成本。但致命缺点是深度神经网络普遍存在的过度自信问题导致其对分布外样本或困难样本的置信度估计严重偏高排序能力差。2.3.2 深度集成通过训练多个如M5或10个独立初始化的模型集成其预测。选择分数可以是集成平均预测的softmax响应也可以是集成成员间预测的方差。DE通过模型多样性有效地估计了认知不确定性通常能产生比单一模型更好的校准和选择性预测性能。但其代价是训练和推理的M倍计算开销。2.3.3 自适应训练这类方法如SAT修改了训练目标在输出层增加一个额外的“弃权类”第C1类。在训练中模型会学习将那些它持续预测不确定的样本分配到这个弃权类。其选择分数g_SAT(x) f(x)_{C1}。SAT的优势在于它是端到端优化的但引入了额外的模型参数和更复杂的训练动态其性能对超参数如开始优化弃权类的时机较为敏感。2.3.4 蒙特卡洛Dropout作为一种高效的贝叶斯近似它在测试时对同一个启用了Dropout的模型进行多次前向传播将每次因随机丢弃神经元而产生的不同输出视为来自不同模型的预测然后计算这些预测的方差或平均置信度。MC-DO以单模型的成本近似了集成的不确定性但其不确定性估计的质量和多样性通常弱于真正的深度集成。这些方法各有优劣但它们都有一个共同点主要依赖于最终训练好的模型或模型集合在测试时的单次或多次前向传播输出。SPTD的创新点在于它认为“如何达到最终状态”的过程本身包含着被这些方法忽略的宝贵信息。3. SPTD方法核心从训练动态中挖掘置信度信号SPTD的全称是基于训练动态的选择性预测。它的核心假设是一个样本在模型训练过程中被正确分类的“稳定性”或“一致性”是其分类难度的强指示器。3.1 核心直觉与信息源想象你在教一个学生辨认动物。你每天给他看同样的100张图片并测试。对于“猫”和“狗”这种清晰的图片他可能从第三天开始就再也没错过。但对于一些奇怪的“无毛猫”或者“某个角度的狐狸”他可能今天答对明天答错反复摇摆直到训练结束可能还是靠猜。最终测试时他对于“猫”和“无毛猫”可能都给出了“我得这是猫90%把握”的答案。但显然他对前者的把握是坚实可靠的对后者的把握是脆弱可疑的。SPTD就是将这个“教学观察”过程自动化、量化。在深度神经网络训练中我们通常每隔一定迭代次数或周期保存一个模型检查点。对于训练集或一个保留的验证集中的每个样本x_i我们记录下它在每一个保存的检查点t ∈ {1, 2, ..., T}上的预测结果f_t(x_i)。这个序列{f_1(x_i), f_2(x_i), ..., f_T(x_i)}就是样本x_i的“训练动态”。3.2 两种核心评分机制s_SUM 与 s_MAX如何从这一系列动态中提炼出一个标量的选择分数g_SPTD(x)论文提出了两种主要策略3.2.1 求和分数s_SUM(x) Σ_{t1}^{T} w_t * I[f_t(x) argmax_c f_T(x)_c]这里I[·]是指示函数当检查点t的预测与最终模型f_T的预测一致时取1否则取0。w_t是赋予每个检查点的权重。一种简单有效的加权策略是指数加权w_t exp(k * (t/T))其中k是一个超参数。这意味着越靠近训练结束的检查点其预测的一致性被赋予越高的权重。因为模型在训练后期通常更稳定、更准确其预测的一致性更有参考价值。s_SUM分数的直观解释是样本x在整个训练过程中有多长时间或多大程度上与最终结论保持一致。一个高分意味着该样本被模型迅速且稳定地学习并分类因此是“简单”的、高置信度的。一个低分则意味着模型对其预测反复无常即使最终给出了一个答案这个答案也是脆弱的因此应该被拒绝。3.2.2 最大分数s_MAX(x) max_{t ∈ [1, T]} (f_t(x)_{c*})其中c*是最终模型预测的类别。这个分数寻找的是在整个训练过程中模型对最终预测类别c*所给出的最高概率值。s_MAX的直觉是即使一个样本在训练过程中摇摆不定但只要在某个时刻模型对其最终类别表现出极高的置信度哪怕只是昙花一现我们或许也应该相信它。然而论文中的实验表明s_MAX通常比s_SUM更“嘈杂”性能也稍逊一筹。因为那个“高光时刻”可能只是训练过程中的一个随机波动或过拟合的瞬间并不代表模型真正掌握了该样本的特征。3.3 超参数选择与实操细节实现SPTD时有几个关键的超参数和设计选择需要仔细考虑检查点保存频率与总数T这决定了我们观测训练动态的“时间分辨率”。保存太频繁T很大会带来巨大的存储和计算开销保存太少则可能丢失重要动态。论文中在不同数据集上使用了不同的TCIFAR-10/100: 1600, Food101: 2200, StanfordCars: 800这很可能与数据集大小和训练总周期数有关。一个实用的启发式方法是在训练总epoch数N的情况下每隔K个epoch保存一次使得T ≈ N/K在几百到一千的量级。例如训练300个epoch每3个epoch保存一次得到100个检查点。权重参数k在s_SUM的指数加权中k控制着对后期检查点的偏好程度。k0意味着所有检查点平等加权k0则赋予后期检查点更高权重。论文中k取值在2到5之间。我的经验是k的选择与优化器的学习率调度有关。如果学习率在训练后期衰减得很小模型权重变化细微那么相邻检查点的预测会高度相关此时可以适当增大k更聚焦于最后一段稳定期。反之如果训练全程学习率较高模型持续变化则应减小k更平均地考虑整个历程。计算与存储优化记录所有样本在所有检查点上的预测听起来开销巨大。实际上我们不需要保存完整的概率向量通常只需要保存预测的类别标签对于s_SUM或最大类概率对于s_MAX。这可以将存储需求从O(N_samples * T * C)降低到O(N_samples * T)。在计算时可以边训练边在线更新分数避免最后一次性处理海量数据。实操心得在实际代码实现中我通常会维护两个张量一个agreement_count用于累加s_SUM的分子一致次数一个last_pred用于记录上一个检查点的预测用于计算指数加权。在每个检查点批量计算当前模型的预测与last_pred比较并更新agreement_count然后更新last_pred。训练结束后根据公式计算最终分数。这样内存占用极小且计算高效。4. 实验评估与结果深度解读论文在CIFAR-10、CIFAR-100、Food-101和Stanford Cars等多个标准图像分类数据集上对SPTD进行了全面评估并将其与SR、SAT、DE等基线方法进行了对比。评估的核心指标是不同覆盖率下的选择性准确率。4.1 核心实验结果与发现我们以CIFAR-100数据集上使用ResNet-50架构的详细结果为例对应论文表A.2进行解读。下表展示了在覆盖率从100%到10%递减时各方法达到的选择性准确率括号内为标准差覆盖率SRSATERSRDESPTDDESPTD100%77.0 (±0.0)77.0 (±0.0)77.0 (±0.0)77.0 (±0.0)77.0 (±0.0)90%79.2 (±0.1)79.9 (±0.1)81.2 (±0.0)81.4 (±0.1)82.1 (±0.1)80%83.1 (±0.0)83.9 (±0.0)85.7 (±0.1)85.6 (±0.1)86.0 (±0.2)70%87.4 (±0.1)88.2 (±0.1)89.6 (±0.1)89.7 (±0.0)89.8 (±0.1)60%90.5 (±0.0)90.8 (±0.2)90.7 (±0.2)90.6 (±0.0)90.9 (±0.1)50%93.4 (±0.1)93.8 (±0.0)95.3 (±0.0)95.1 (±0.0)95.4 (±0.0)40%95.4 (±0.0)95.5 (±0.1)97.1 (±0.1)97.2 (±0.1)97.2 (±0.0)30%97.4 (±0.2)97.7 (±0.0)98.6 (±0.1)98.6 (±0.1)98.7 (±0.0)20%97.9 (±0.1)98.4 (±0.1)99.0 (±0.0)99.2 (±0.1)99.2 (±0.1)10%98.1 (±0.0)98.8 (±0.1)99.2 (±0.1)99.4 (±0.1)99.6 (±0.1)关键观察与解读SPTD作为独立方法的有效性单独使用SPTD第4列在几乎所有覆盖率水平上都显著优于朴素的SR方法并且在多数情况下与强大的DE方法表现相当甚至在某些点如20%覆盖率略有优势。这证明了仅从单一模型的训练动态中提取的信息其质量足以媲美训练多个独立模型的集成方法这是一个非常有力的结论。SPTD的叠加增益最引人注目的是“DESPTD”这一列第5列。它在每一个覆盖率水平上都取得了最高的准确率。这意味着SPTD提供的训练动态信息与深度集成提供的模型间多样性信息是互补的。DE刻画了“在给定的最终参数配置下不同初始化带来的预测差异”而SPTD刻画了“在通向最终参数的路径上预测的稳定程度”。两者结合提供了更丰富、更鲁棒的不确定性估计。方法间的性能差距随覆盖率降低而扩大在覆盖率较高时如90%80%各方法差距较小。随着覆盖率降低我们只选择最自信的样本进行预测方法间的优劣被放大。DE和SPTD类方法能更精准地“淘”出那些真正简单的样本从而极低覆盖率下仍保持极高的准确率10%覆盖率时99.6%。4.2 重要辅助实验与洞见论文还进行了一系列深入的辅助实验进一步揭示了SPTD的特性和优势4.2.1 与基于Logit方差的方法对比有方法如LOGITVAR也利用中间检点但计算的是正确类别logit的方差。SPTD作者将其适配为计算最大预测logit的方差以进行公平对比。实验表明SPTD的加权求和策略s_SUM显著优于简单的方差计算。这说明了有选择地加权更信任后期检查点比无差别地统计波动更能提取出有效的信号。4.2.2 阈值τ在验证集与测试集上的估计这是一个非常重要的实操细节。理论上为了模拟真实部署我们应该在一个有标签的验证集上确定阈值τ然后应用到无标签的测试集上。但许多研究为了简便直接在测试集上确定阈值并评估性能。论文通过实验证明在数据满足独立同分布假设的前提下这两种方式得到的性能在统计上是无法区分的。这为论文的评估方式提供了依据但也提醒我们在实际应用中必须使用一个独立的、有标签的验证集来校准阈值。4.2.3 准确率对齐的重要性这是一个容易被忽视但至关重要的评估原则。不同的选择性预测方法可能会影响模型最终的基础准确率即100%覆盖率时的准确率。如果一个方法A仅仅是因为把模型的基础准确率从77%提升到了80%从而在所有覆盖率下都表现更好这并不能说明它的“选择性排序能力”更强——它只是带来了一个通用的性能提升。 因此公平的比较需要做准确率对齐确保所有被比较的方法其模型在100%覆盖率时的准确率是相同的。论文通过早停策略当最差模型的准确率达到时所有模型停止训练来实现这一点。在这样的对齐下SPTD仍然能提升性能才真正证明了其在样本排序能力上的优越性。5. 实战指南将SPTD集成到你的训练 pipeline理论很美好但如何落地下面我将提供一个将SPTD集成到现有PyTorch训练流程中的实用指南。5.1 基础实现框架假设我们有一个标准的图像分类训练循环。以下是集成SPTD记录功能的核心代码片段import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader import numpy as np class SPTDTracker: 用于在训练过程中跟踪样本预测一致性计算SPTD分数的工具类。 def __init__(self, num_samples, num_checkpoints, num_classes, devicecuda): self.num_samples num_samples self.T num_checkpoints self.device device # 记录每个样本在每个检查点是否与最终预测一致 (用于s_SUM) self.agreement torch.zeros((num_samples, num_checkpoints), dtypetorch.bool, devicedevice) # 记录每个样本在每个检查点对最终类别的最大概率 (用于s_MAX) self.max_probs torch.zeros((num_samples, num_checkpoints), dtypetorch.float32, devicedevice) # 记录当前检查点索引 self.current_checkpoint 0 # 存储最终模型的预测类别用于s_SUM计算一致性 self.final_predictions None def update_at_checkpoint(self, model, dataloader, dataset_indices): 在保存检查点时调用此函数。 model: 当前模型 dataloader: 用于生成预测的数据加载器通常是训练集或验证集 dataset_indices: dataloader中每个batch数据对应的原始数据集索引 model.eval() with torch.no_grad(): for batch_idx, (inputs, _) in enumerate(dataloader): inputs inputs.to(self.device) outputs model(inputs) probs torch.softmax(outputs, dim1) max_prob, preds torch.max(probs, dim1) # 获取当前batch样本的全局索引 idxs dataset_indices[batch_idx] # 记录最大概率用于s_MAX self.max_probs[idxs, self.current_checkpoint] max_prob.cpu() # 如果是最后一个检查点记录最终预测类别 if self.current_checkpoint self.T - 1: if self.final_predictions is None: self.final_predictions torch.zeros(self.num_samples, dtypetorch.long, deviceself.device) self.final_predictions[idxs] preds # 对于非最终检查点暂时只存预测结果最后再计算一致性 # 我们可以先存下预测标签最后与final_predictions比较 # 这里为了简化我们用一个临时张量存储实际可优化 self.agreement[idxs, self.current_checkpoint] preds # 先存储预测标签类型转换注意 self.current_checkpoint 1 def compute_s_sum_scores(self, k2): 计算s_SUM分数使用指数加权。 if self.final_predictions is None: raise ValueError(Final predictions not recorded. Please run through all checkpoints first.) # 将存储的预测标签转换为与最终预测是否一致的布尔值 # 注意self.agreement目前存的是标签需要转换 agreement_bool (self.agreement self.final_predictions.unsqueeze(1)) # 指数权重 weights torch.exp(k * torch.arange(self.T, deviceself.device) / self.T) # 加权求和 s_sum (agreement_bool.float() * weights).sum(dim1) return s_sum.cpu().numpy() def compute_s_max_scores(self): 计算s_MAX分数。 # 取每个样本在所有检查点中对最终类别的最大概率 # 注意这里需要根据最终类别索引来取对应概率简化版本取全局最大概率 # 更精确的实现需要记录每个检查点每个类别的概率这里用记录的max_prob近似 s_max, _ torch.max(self.max_probs, dim1) return s_max.cpu().numpy() # 在主要训练循环中的使用示例 def train_with_sptd(model, train_loader, val_loader, num_epochs, checkpoint_freq): optimizer optim.SGD(model.parameters(), lr0.1, momentum0.9) criterion nn.CrossEntropyLoss() # 假设我们使用训练集来计算SPTD论文中常用 # 需要获取训练集样本的索引 train_dataset train_loader.dataset num_samples len(train_dataset) # 估计检查点总数 num_checkpoints (num_epochs * len(train_loader)) // checkpoint_freq sptd_tracker SPTDTracker(num_samples, num_checkpoints, num_classes10) step 0 for epoch in range(num_epochs): model.train() for batch_idx, (inputs, targets) in enumerate(train_loader): # ... 正常的训练步骤 ... optimizer.step() step 1 # 每训练checkpoint_freq个step保存检查点并更新SPTD跟踪器 if step % checkpoint_freq 0: # 保存模型检查点... # 更新SPTD使用训练集所有数据或一个子集进行预测 # 注意这里需要传入数据加载器和对应的全局索引 # 为简化假设我们有一个能返回索引的dataloader sptd_tracker.update_at_checkpoint(model, train_loader, train_loader.dataset.indices) # 训练结束后计算分数 s_sum_scores sptd_tracker.compute_s_sum_scores(k3) s_max_scores sptd_tracker.compute_s_max_scores() return s_sum_scores, s_max_scores5.2 阈值选择与部署得到每个样本的SPTD分数如s_SUM后我们需要将其转化为实际的弃权决策。在验证集上校准阈值在一个有标签的验证集上运行上述流程得到每个验证样本的SPTD分数。然后我们设定一个目标覆盖率例如我们希望模型对90%的样本做出预测。我们对验证集的SPTD分数进行排序找到第90个百位数对应的分数值将其作为阈值τ。所有分数高于此阈值的样本将被预测低于的则被拒绝。部署推理在测试或生产环境中对于新的输入x我们需要用最终训练好的模型f_T进行一次前向传播得到预测同时如果我们想使用SPTD则需要重现或存储该样本的动态信息。这里有个关键点对于全新的、未见过的测试样本我们无法获得其“历史”训练动态。因此SPTD在部署时有两种模式仅用于训练集/已知分布样本的筛选这在主动学习或数据清洗场景中非常有用。我们可以用SPTD分数识别出训练集中哪些样本是模型一直学不好的“困难样本”这些样本可能需要重新标注或进行数据增强。与集成方法结合用于测试样本对于DESPTD我们可以记录集成中每个成员模型的训练动态然后对于测试样本我们不仅计算其在不同成员模型间的预测方差DE分数还可以计算每个成员模型对该测试样本的预测与自身训练动态的一致性一个广义的SPTD思想。但这需要更复杂的设计。5.3 性能、开销与适用场景分析优势信息互补SPTD挖掘了被其他方法忽略的训练过程信息与基于最终模型输出的方法SR或基于模型间差异的方法DE天然互补。实现相对简单无需修改模型架构或损失函数如SAT也无需训练多个模型如DE只需在现有训练循环中添加检查点和记录逻辑。零额外推理开销一旦训练完成并计算出分数针对训练集在部署时如果用于已知样本筛选是零开销的。开销与挑战存储开销需要保存大量检查点的预测信息。对于大型数据集如ImageNet这可能达到GB甚至TB级别。需要使用高效的存储格式如布尔数组存一致性、半精度浮点数存概率和可能的下采样策略。计算开销在每个检查点需要对整个数据集进行一次前向传播以记录预测。这大约相当于增加了T倍的验证成本。可以通过在训练集的一个有代表性的子集上计算SPTD分数来权衡。对训练过程的依赖SPTD的有效性假设训练过程是相对平滑、渐进的。如果训练非常不稳定如学习率设置不当导致损失剧烈震荡那么训练动态的噪声会很大SPTD信号的质量会下降。适用场景建议高风险决策系统如医疗辅助诊断、自动驾驶感知模块其中对模型不确定性的精确评估至关重要且可以承担额外的训练期计算和存储成本。数据质量评估与主动学习利用SPTD识别训练集中难以学习的样本这些样本可能是标注错误、模糊或属于罕见类别需要优先进行人工复审或数据增强。与现有强基线结合当你已经在使用深度集成时强烈建议尝试叠加SPTD往往能以较小的额外代价获得进一步的性能提升。6. 常见问题、陷阱与进阶思考在实际实现和应用SPTD的过程中我遇到并总结了一些典型问题和注意事项。6.1 实现中的常见陷阱检查点预测的确定性确保在记录检查点预测时模型处于评估模式model.eval()并关闭了Dropout、BatchNorm的随机性。如果使用了数据增强在记录SPTD动态时应使用确定性的评估增强如仅中心裁剪和归一化而非随机增强否则动态信息会包含数据噪声而非模型不确定性。最终预测的确定s_SUM分数依赖于与“最终模型预测”的一致性。这个“最终模型”必须是训练结束后、在测试集上做预测的同一个模型。通常使用最后一个检查点但有时早停选择的最佳验证集模型可能不是最后一个。必须确保一致性计算中使用的参考预测与最终部署的模型完全一致。大数据集的内存管理对于像ImageNet这样的大数据集直接为每个样本存储T个布尔值或浮点数可能内存不足。解决方案包括稀疏存储只存储发生变化的检查点索引对于大多数样本其预测在训练后期是稳定的。在线聚合不存储中间结果而是像之前“实操心得”中提到的在线更新加权和与最大值。子采样随机选取训练集的一个子集例如20%来计算SPTD分数并假设其统计特性可以代表全集。6.2 超参数调优指南T检查点数量并非越多越好。当检查点过于密集时相邻检查点的预测高度相关提供的是冗余信息。一个经验法则是让相邻检查点之间间隔足够多的迭代使得模型权重有实质性的更新例如损失有明显下降。可以从总训练迭代的1/50或1/100开始尝试。k指数加权系数这是SPTD最重要的超参数。建议从k0均匀加权开始绘制s_SUM分数随训练时间检查点索引的累积曲线。如果曲线在后期快速上升说明后期一致性更重要应增大k如2-5。如果曲线增长较为均匀则k可以小一些0-2。可以在一个小的验证集上通过网格搜索寻找能带来最佳选择性预测性能的k值。加权函数的其他选择除了指数加权也可以尝试线性加权w_t t/T或基于验证集准确率的加权给验证集性能更好的检查点更高权重。论文中指数加强的效果已经很好这通常是一个可靠的默认选择。6.3 对分布外数据的泛化思考一个自然的问题是SPTD依赖于模型在训练数据上的动态那么对于分布外的测试样本这种方法是否还有效这是一个开放的研究问题。直观上一个在训练分布内“难以学习”的样本低SPTD分数可能与一个分布外样本有相似的表征——模型对它们都表现出不确定和不稳定。因此SPTD分数有可能作为一个OOD检测的指标。但这需要进一步的实验验证。在严格的选择性预测设定下i.i.d. 假设SPTD已被证明有效。在存在分布偏移的场景中需要谨慎评估其表现可能需要对分数进行重新校准或与专门的OOD检测方法结合。6.4 超越图像分类在其他任务上的可能性SPTD的思想具有通用性。理论上它可以应用于任何能够产出离散或连续预测并且训练过程可以保存检查点的任务。自然语言处理在文本分类、序列标注任务中可以记录每个训练句子在每次检查点时的预测标签或概率。结构化预测如图像分割可以为每个像素或每个实例记录训练动态的一致性。回归任务可以将“一致性”的定义从“预测类别相同”改为“预测值在一定误差范围内”。s_SUM可以变为预测值在最终预测值邻域内的检查点加权计数。主要的挑战在于如何定义任务相关的“一致性”度量以及如何处理更高维的输出空间带来的存储和计算复杂度。SPTD为利用训练过程信息这一富矿打开了一扇门其在不同任务上的拓展和应用是一个充满潜力的方向。