当前位置: 首页 > article >正文

SPTD:从训练动态中挖掘置信度信号,提升AI模型选择性预测能力

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为利用训练过程信息这一富矿打开了一扇门其在不同任务上的拓展和应用是一个充满潜力的方向。

相关文章:

SPTD:从训练动态中挖掘置信度信号,提升AI模型选择性预测能力

1. 项目概述:当模型学会说“我不知道”在医疗影像诊断、自动驾驶决策或者金融风控这些领域,一个AI模型的预测错误,代价可能是巨大的。我们通常希望模型不仅给出答案,还能告诉我们它对这个答案有多“确信”。这就是不确定性量化的核…...

深度强化学习在自动驾驶赛车中的迁移优化实践

1. 项目概述:深度强化学习在自动驾驶赛车中的迁移优化在自动驾驶赛车领域,如何将仿真环境中训练的控制策略无缝迁移到真实车辆上一直是个棘手问题。传统方法通常面临两大挑战:仿真环境与真实物理世界之间的动力学差异(即所谓的&qu…...

量子机器学习实战:遥感图像分割的混合模型构建与硬件噪声影响分析

1. 项目概述与核心挑战量子机器学习(QML)这个领域,听起来像是科幻小说里的概念,但过去几年,它已经从理论物理的殿堂,逐渐走进了我们这些做工程和算法应用的人的视野。简单来说,它试图用量子计算…...

NGUI性能优化实战:DrawCall控制与内存泄漏治理

1. 为什么今天还要谈NGUI?——一个被低估的“老派”UI系统的现实生命力很多人看到标题里的“NGUI”,第一反应是:“这玩意儿不是早该进博物馆了吗?”Unity官方从4.6版本起力推UGUI,2018年之后新项目几乎清一色UGUI&…...

Exchange渗透实战:从外部侦察到域控接管全链路

1. 这不是“黑进邮箱”的速成课,而是真实红队作业的切片回放Exchange Server 渗透测试,这个词在很多刚入行的朋友眼里,可能等同于“爆破邮箱密码”“下载邮件”“发钓鱼邮件”。但我在过去七年参与的23次企业红队评估中,真正能从外…...

图神经网络与神经算子:革新颗粒系统仿真的AI降阶建模

1. 项目概述:当图神经网络遇上颗粒世界在计算物理和工程仿真领域,颗粒系统(如沙土、粉末、谷物)的模拟一直是个“硬骨头”。传统的离散元法(DEM)虽然能精确刻画每个颗粒的牛顿运动方程和接触力学&#xff0…...

Trae+Playwright MCP:企业级浏览器自动化测试底座构建指南

1. 这不是又一个“安装教程”,而是一套能跑通、能维护、能交付的浏览器自动化测试底座你有没有遇到过这样的情况:项目刚立项,测试同学信心满满说“用Playwright写自动化脚本”,结果三天过去,环境还卡在npm install pla…...

AI赋能引力波数据分析:WCD深度学习框架从噪声中探测暗物质信号

1. 项目概述:当引力波遇见AI,如何从噪声中“看见”暗物质?在引力波天文学这个前沿领域,我们正面临一个激动人心又充满挑战的时代。自从LIGO首次直接探测到引力波以来,我们不仅“听”到了黑洞并合的宇宙巨响&#xff0c…...

量子集成方法破解医疗AI小样本困境

1. 量子集成方法在医疗与生命科学中的突破价值在医疗健康与生命科学(HCLS)领域,数据稀缺性一直是制约AI技术落地的核心瓶颈。以癌症免疫治疗为例,获取足够数量的患者样本往往需要数年时间,而每个样本可能包含数万个基因…...

Frida精准Hook Android HttpURLConnection实现HTTP流量分析

1. 这不是“Hook任意函数”的泛泛而谈,而是专治HttpURLConnection的精准手术刀 你有没有遇到过这种情况:想快速看清楚某个Android App到底往哪个URL发了什么HTTP请求、带了哪些Header、Body里塞了什么敏感参数,结果一上Frida就卡在“该Hook哪…...

信创环境运维实录:在离线ARM麒麟V10服务器上,我是这样搞定telnet客户端的

信创环境下的离线运维实战:ARM架构麒麟V10服务器telnet客户端部署全解析在信创产业快速推进的背景下,越来越多的企业和机构开始采用国产化服务器操作系统。麒麟V10作为国产操作系统的代表之一,凭借其安全可靠的特性,在政府、金融、…...

别光看教程!用mdadm管理软RAID时,这5个运维坑我帮你踩过了

别光看教程!用mdadm管理软RAID时,这5个运维坑我帮你踩过了在虚拟化环境和物理服务器中,软RAID因其成本效益和灵活性成为许多企业的首选方案。然而,从创建到长期运维,mdadm管理的软RAID阵列隐藏着诸多教科书上不会提及的…...

JMeter精准1QPS压测:从CTT原理到Groovy高精度定时器实现

1. 这不是“设个线程数”就能搞定的事:为什么1秒1次请求在JMeter里反而最难稳很多人第一次做压测,看到需求“每秒发送1次请求”,第一反应是:“简单,开1个线程,Ramp-up时间设为0,循环次数设成100…...

机器学习破解等离子体模拟维度灾难:储层计算实现Vlasov方程高效闭合

1. 项目概述与核心挑战在等离子体物理和计算流体动力学领域,有一个长期困扰研究者和工程师的“幽灵”问题:闭合问题。简单来说,我们试图用计算机里有限的、离散的网格点,去描述一个本质上连续、甚至无限维度的物理世界。比如&…...

物理信息神经网络建模自诱导随机共振:噪声驱动相干振荡的PINN实现

1. 项目概述:当噪声成为秩序的“推手”在神经科学和复杂系统的研究中,我们常常将噪声视为需要被滤除的“杂质”。然而,一个反直觉的现象是,在特定的非线性动力学系统中,随机噪声不仅不会破坏秩序,反而能诱导…...

用OpenCV+Unity做个摄像头互动小游戏:实时轮廓检测控制粒子特效(附完整C#代码)

用OpenCVUnity打造摄像头互动艺术:轮廓驱动粒子特效实战指南当计算机视觉遇上游戏引擎,会碰撞出怎样的创意火花?本文将带你用Unity和OpenCV构建一个能识别手势轮廓并实时生成粒子特效的互动系统。无需复杂设备,只需普通摄像头&…...

避坑指南:UE Niagara中设置粒子碰撞事件时,为什么勾选了‘需要固定ID’编译才通过?

UE Niagara粒子碰撞事件深度解析:为什么需要固定ID?在虚幻引擎的Niagara粒子系统中,碰撞事件是实现复杂交互效果的关键机制。许多开发者在初次使用"Generate Collision Event"模块时都会遇到一个令人困惑的现象:明明按照…...

C51开发中枚举类型安全与防御性编程实践

1. C51开发中的枚举类型陷阱与防御性编程实践在嵌入式C开发领域,Keil C51编译器因其对8051架构的深度优化而广受欢迎。但就像我十年前第一次使用typedef enum时踩过的坑一样,许多开发者会惊讶地发现:编译器竟然允许将任意整数值赋给枚举变量&…...

Unity Addressable资源管理系统实战指南

1. 这不是“换个加载方式”,而是重构资源交付链路的起点Unity Addressable系统刚发布那会儿,我正带一个横跨三端(iOS/Android/PC)的AR互动项目。美术团队每天提交200张高清贴图、50个FBX模型,打包后APK体积飙到1.8GB—…...

2026微信小程序抓包实战:三层网络架构与可验证分析方法论

1. 为什么2026年还在谈微信小程序抓包?这不是过时的技术吗?很多人看到“抓包”两个字,第一反应是:这不就是十年前干的事?HTTPS都普及这么多年了,TLS 1.3都成标配了,小程序还用WebView混排&#…...

随机森林与保形预测:构建可解释、可信赖的通胀预测模型

1. 项目概述:当机器学习遇见通胀预测通胀预测一直是宏观经济分析和货币政策制定的核心挑战。传统的计量经济学模型,如基于菲利普斯曲线的线性回归,在处理复杂、非线性的经济关系时常常力不从心,尤其是在经济结构发生转变或面临外部…...

基于AIS数据与随机森林的船舶类型智能识别:从特征工程到不平衡数据处理

1. 项目概述与核心价值在海上交通管理、港口调度、渔业监管乃至海上安全监测等领域,快速、准确地识别船舶类型是一项基础且关键的任务。想象一下,一个繁忙的港口调度员面对雷达屏幕上密密麻麻的光点,如果能瞬间知道哪些是庞大的油轮、哪些是灵…...

Frida Hook Java层还原App签名算法实战

1. 这不是“破解”,而是理解通信逻辑的必要手段你打开某物App,点击下单,网络请求瞬间发出——但抓包一看,body里全是密文,header里带着一串32位字符串,看着像MD5,但每次请求都变;用B…...

ATLO-ML:自适应时序预测窗口与采样率优化框架详解

1. 项目概述:为什么时序预测的“窗口”和“节奏”如此重要?在机器学习的时间序列预测任务中,我们常常会陷入一个看似简单、实则充满陷阱的环节:如何设置模型的“输入窗口”?具体来说,就是应该用过去多长时间…...

机器学习中类别不平衡问题的实战解决方案:加权分类与SMOTE对比

1. 项目概述与核心挑战在机器学习的世界里,我们常常会遇到一个看似简单却异常棘手的问题:数据不平衡。想象一下,你正在训练一个模型来识别一种罕见的疾病,比如在10万头牛中,只有250头感染了牛病毒性腹泻(BV…...

虚拟化PCIe直通故障排查:BIOS设置、IOMMU组与QEMU参数全链路解析

1. 这不是驱动问题,是PCIe拓扑在“装睡” “虚拟化服务器PCI报错”——这六个字,我去年在三个不同客户的机房里反复听到过,每次都是凌晨两点被电话叫醒。运维同事第一反应永远是重装驱动、更新固件、换网卡,折腾两天后发现报错照旧…...

从游戏引擎到仿真平台:手把手教你用AirSim+UE4搭建第一个无人机仿真场景(Python控制入门)

从游戏引擎到仿真平台:手把手教你用AirSimUE4搭建第一个无人机仿真场景(Python控制入门)当你第一次看到虚幻引擎4(UE4)那令人惊叹的渲染效果时,可能很难想象这个游戏开发工具正在成为机器人仿真领域的新宠。…...

自动驾驶多摄像头三平面令牌化技术解析

1. 多摄像头令牌化技术背景与挑战在自动驾驶系统中,实时处理多摄像头数据是实现环境感知的基础。传统基于ViT(Vision Transformer)的令牌化方案存在明显的计算瓶颈——每个摄像头输入的图像被分割为1616像素块进行编码,导致令牌数…...

HTTPS抓包失败的七层根因与实战定位法

1. 为什么HTTPS抓包总在“看不见”的地方翻车?你刚配好Fiddler或Charles,证书也装了、代理也开了、手机Wi-Fi也指向了电脑IP,可一打开App——抓包窗口空空如也,连个DNS请求都不见;或者只看到一堆CONNECT隧道建立记录&a…...

SLED框架:边缘计算中的LLM推理加速方案

1. SLED框架:边缘计算场景下的LLM推理加速方案在边缘计算环境中部署大语言模型(LLM)面临的核心矛盾在于:模型规模的持续增长与边缘设备有限的计算资源之间的不匹配。传统解决方案如模型量化(Quantization)和…...