### 一项小型温度校准研究:方法复现与样本量探索 资料与实验日期:2026-10-20。研究类型:教学方法复现与探索性扩展。 #### 摘要 我们在真实手写数字数据上训练三个小型分类器,独立实现训练后的温度缩放。完整校准集下,三个模型的测试 NLL 均下降,准确率不变;条件性配对区间均跨零,不能据此宣称总体改善已得到确认。减少校准样本后,多次零错误子集把温度推到搜索下界,反而使测试损失大幅上升。本项目没有复制原论文的大规模基准,也没有提出已验证的新校准算法。 #### 研究问题与方法来源 问题一:在固定小型分类器上,能否正确实现并重复运行温度缩放?问题二:在固定模型和测试池下,减少校准样本后,拟合温度与测试 NLL 怎样变化? 方法来自 Guo 等人的 ICML 2017 论文。核心计算是在冻结 logits 后除以共同正温度,只按独立校准标签最小化平均 NLL。第 44 章另用手工例子核对解析温度与反例;手工例子不参与下面的真实数据成绩。 #### 实验设置 数据为 E. Alpaydin 与 C. Kaynak(1998)的 [Optical Recognition of Handwritten Digits](https://doi.org/10.24432/C50P49),使用 scikit-learn 1.9.1 随包 1797 条子集,UCI 数据页许可为 CC BY 4.0。像素除以 16;重新划分用于教学,不沿用原始 UCI 基准划分。 样本数:训练 899、选模 269、校准 269、测试 360。先后分出测试、校准、选模的分层种子为 [45, 46, 47]。 MLP 为 64→128→64→10,ReLU,共 17,226 个参数。Adam 学习率 0.003,权重衰减 0,批量 64,训练 80 轮,种子 [11, 22, 33]。按选模 NLL 最低的轮次保存模型,并列时保留较早轮次。 校准采用正温度对数参数化和 SciPy 有界一维搜索,范围 [0.05, 20.0],并比较端点与 T=1。训练为 CPU FP32、单线程、确定性算法;离线指标为 float64。环境:Python 3.12.12、PyTorch 2.14.1、NumPy 2.5.4、SciPy 1.18.1、scikit-learn 1.9.1;macOS-26.6.2-arm64-arm-64bit。完整构建信息在原始报告中。 #### 核心实验结果 | 种子 | 选中轮次 | 温度 | | --- | ---: | ---: | | 11 | 45 | 1.4727 | | 22 | 51 | 1.6092 | | 33 | 42 | 1.5368 | 测试平均 NLL: | 种子 | 原始概率 | 校准后 | | --- | ---: | ---: | | 11 | 0.1597 | 0.1441 | | 22 | 0.1081 | 0.1077 | | 33 | 0.1411 | 0.1296 | 准确率与 ECE(15 个等宽区间,均为比例): - 种子 11:准确率 0.9583 → 0.9583;ECE 0.0212 → 0.0182。 - 种子 22:准确率 0.9667 → 0.9667;ECE 0.0130 → 0.0239。 - 种子 33:准确率 0.9611 → 0.9611;ECE 0.0284 → 0.0224。 两个独立训练进程的数值记录与权重内容一致;第 45 章还在另一进程加载自己的权重,重新计算了逐条分数和指标。这是固定环境中的执行证据,不是跨硬件一致性或总体有效性的证明。 固定模型与完整校准温度,逐张配对重采样 2000 次。测试 NLL 的“校准后减校准前”差值及名义 95% 百分位区间: - 种子 11:-0.01558,[-0.04305, 0.00701]。 - 种子 22:-0.00035,[-0.02784, 0.02039]。 - 种子 33:-0.01151,[-0.03965, 0.01129]。 区间均跨零;这不证明两个方案等价。逐张独立仅为近似,没有按书写者分组,也未严格复现原始分层抽样设计;区间不包含重新训练、校准选择或任务分布变化。 #### 样本量扩展与负面结果 从同一 269 条校准池抽取 20/50/100 条,各 20 份。每次排列取前缀,三个模型共用相同 ID;完整 269 条每模型只拟合一次。共 183 次拟合,所有结果保留。这项方案是在看过核心实验测试结果之后制定的探索,不是新独立确认。 测试 NLL 比原始概率更高的次数: | 种子 | 20 条 | 50 条 | 100 条 | | --- | ---: | ---: | ---: | | 11 | 12/20 | 8/20 | 3/20 | | 22 | 20/20 | 16/20 | 9/20 | | 33 | 18/20 | 8/20 | 0/20 | 20 条子集中的边界结果: - 种子 11:零错误子集 7/20,边界解 7/20;该组最大测试 NLL 为 2.6033。 - 种子 22:零错误子集 10/20,边界解 10/20;该组最大测试 NLL 为 1.5386。 - 种子 33:零错误子集 9/20,边界解 9/20;该组最大测试 NLL 为 2.1782。 小集合没有错误时,降低温度会继续改善该集合的 NLL;测试集中的错误却可能因此变得更自信。这个解释与记录相符,但本项目没有把它当作所有失败的唯一机制。固定温度后的 5/10/15/30 箱 ECE 敏感性结果也全部保留;种子 22 在四种设置中均恶化。 #### 限制、开放问题与结论 仅一个重新划分的数据子集、三个 MLP、共享测试池;校准子集嵌套且重叠。没有比较其他校准方法,没有检查未见书写者或真实照片,也没有将同一个池里的重复抽样当作独立任务。小样本失败不能推翻原论文在其他设置下的实测结果。 本项目完成了可重复的方法实现,并找到了值得后续验证的小校准集失败条件。对数温度正则化、不同数据划分与按书写者评价,均可作为下一项研究,但尚未在本项目得到独立验证,也不宣称这些想法新颖。 #### 资料与复现入口 资料包的 examples/data 保存原始报告、配置、扩展方案和文献记录;examples 保存完整脚本与固定依赖。manifest.json 记录各文件的 SHA-256。报告生成器复核已有记录和数值,不会重新训练。 ~~~sh python3 examples/research_project.py uv run --python 3.12 --with-requirements examples/requirements.txt \ python examples/reproduce_calibration.py --out runs/retrained uv run --python 3.12 --with-requirements examples/requirements.txt \ python examples/reproduce_calibration.py --verify runs/retrained ~~~ 第二、三条命令用于另行训练与加载;默认研究报告仍引用随附的冻结记录,不会把新训练输出自动冒充同一份历史数据。 参考文献: - Chuan Guo; Geoff Pleiss; Yu Sun; Kilian Q. Weinberger(2017),[On Calibration of Modern Neural Networks](https://proceedings.mlr.press/v70/guo17a.html)。ICML / PMLR 70:1321–1330,会议版正文与补充材料。 - Juozas Vaicenavicius; David Widmann; Carl Andersson; Fredrik Lindsten; Jacob Roll; Thomas Schön(2019),[Evaluating model calibration in classification](https://proceedings.mlr.press/v89/vaicenavicius19a.html)。AISTATS / PMLR 89:3459–3467,会议版。 - Adrien Le Coz; Stéphane Herbin; Faouzi Adjed(2024),[Confidence Calibration of Classifiers with Many Classes](https://proceedings.neurips.cc/paper_files/paper/2024/hash/8df80d7115a55eb81010c967a247b1ae-Abstract-Conference.html)。NeurIPS 37,会议版。