温度校准的实验隐喻

复现价值:从手动降温到隔离拟合

前面的实验已经说明,同一组分类答案可以保持完全不变,同时具有不同的概率质量。但把几个温度都试一遍,再挑出最好看的结果,并没有回答真正的研究问题:如果只允许使用一份事先隔离的校准数据,学到的温度能否改善另一份数据上的概率?本篇只改变这一个环节。模型权重、分词器、标签映射和推理配置全部冻结,新增的可审查产物是校准池预测、温度优化轨迹和审计池上的配对指标。

先说本次实际验证:固定的 DistilBERT 情感分类器,在二百五十六条校准样本上得到温度约二点四八。随后对三百六十条协议审计样本应用这个数,负对数似然和校准误差均下降,分类正确数保持三百三十。这个结果支持“一次隔离拟合能够改善本划分上的概率质量”,不支持“已经获得普遍可靠的置信度”,更不意味着模型学会了识别所有错误。

核心思想:只改变概率的尖锐程度

分类器先输出两个未经归一化的分数,称为 logits,再用 softmax 转成概率。温度缩放在归一化前把所有分数除以同一个正数:

pik(T)=exp⁡(zik/T)∑j=1Kexp⁡(zij/T).p_{ik}(T)=\frac{\exp(z_{ik}/T)}{\sum_{j=1}^{K}\exp(z_{ij}/T)}.

这里样本编号为 ii,类别编号为 kk,类别数 K=2K=2;一批输入的分数张量形状是 [B,2][B,2],温度 TT 是一个正标量。温度大于一时,两类概率向均匀分布靠近;小于一时,概率更加尖锐。它改变的是模型说话的力度,不改变类别分数的大小关系。

因此,只要保持正温度和一致的并列处理规则,最大概率对应的标签不会改变。原先判错的句子仍然判错。我们期待修复的是“错误答案却报出接近一的概率”,而不是情感理解本身。这里的概率针对固定的正负二分类任务,与上一文讨论的生成模型有限候选归一化分数不同,也不能直接解释为开放生成内容正确的概率。

拟合目标采用负对数似然,简称 NLL:

T^=arg⁡min⁡T∈[0.05,20]1nc∑i=1nc−log⁡pi,yi(T).\hat T=\arg\min_{T\in[0.05,20]}\frac{1}{n_c}\sum_{i=1}^{n_c}-\log p_{i,y_i}(T).

其中 ncn_c 是校准样本数,yiy_i 是公开数据的原标签。对真实标签分配越小的概率,惩罚越大。选择规则在新池推理前写入协议;没有用审计误差挑温度,没有尝试多个范围后保留最优范围,也没有优化分箱误差。

论文报告与官方代码阅读路线

Guo、Pleiss、Sun 与 Weinberger 的 ICML 二〇一七年论文讨论现代神经网络的置信度校准,并在其研究的数据与模型中报告温度缩放的有效性。那是论文报告的证据范围。本篇使用的是另一个固定文本分类检查点与较小的探索划分,因此不复述原论文数值,也不把自己的结果称作完整论文基准复现。论文与出版信息

阅读作者代码时,可以先找 temperature_scale,确认除的是 logits,再看 set_temperature:先收集验证分数和标签,再以交叉熵优化单一温度。作者实现使用 GPU 与 LBFGS;本篇没有照搬整个训练栈,而是为二分类目标编写独立教学求解器。具体固定提交和函数定位均记录在源码地图中。作者实现

本地改写的理由是可审查性:令逆温度为 β=1/T\beta=1/T,并记两类原始分数差为 di=zi1−zi0d_i=z_{i1}-z_{i0},则目标的一阶导数为:

g(β)=1nc∑idi[σ(βdi)−yi].g(\beta)=\frac{1}{n_c}\sum_i d_i\left[\sigma(\beta d_i)-y_i\right].

其中 σ\sigma 是 sigmoid 函数,标签编码为零或一。导数随逆温度单调不减,因此可以在预注册区间用二分法找零点;如果区间内没有零点,就报告边界解。本次固定执行一百次二分并保存每一步,不把迭代次数当作模型训练轮数。温度未碰到边界,最终梯度约为浮点精度下的零。

最小实验:先冻结身份,再打开分数

数据沿用官方 SST-2 validation 的八百七十二条记录。既有登记按样本编号与固定前缀计算哈希,再排序划为探索二百五十六条、校准二百五十六条、协议审计三百六十条。本次没有重新洗牌,没有从探索池挑选“更典型”的校准样本。三个池的身份清单在基线实验时就已保存,本次逐项验证不重叠。

必须披露:SST-2 在历史研究中已经使用过。新划分只能隔离本轮拟合的信息流,不能擦除历史观察,也不能叫作从未见过的测试集。协议审计池今后同样属于已观察开发证据,不能再被包装成独立最终确认。IMDb 三池本次未下载、未预测,最终确认池仍须遵守后续登记与使用规则。

模型是官方固定 revision 的 DistilBERT SST-2 检查点,权重、配置和词表都通过文件哈希核对;数据也核对固定 parquet 文件哈希。标签零为负面、一为正面。推理用 CPU、单精度、四线程、eager attention,批量十六、最多五百一十二个 token,并关闭训练模式。不更新任何网络权重,只优化后处理的一个数。

隔离拟合与审计流程

图中的两个 Pool 表示相应数据经过冻结模型后的分数集合。上路拟合温度并冻结,下路仅应用这个数后计算指标;审计结果没有回到拟合节点。先执行校准池前八条试跑,再运行完整校准池,落盘温度文件后才执行审计池。每个样本保存编号、文本哈希、原标签、两维 logits 和概率,不再分发原始语句。

评测协议与本次实际验证

主指标是审计池 NLL,辅助指标包括双类别求和形式的 Brier 分数、十个等宽箱的预期校准误差 ECE、平均置信度和准确率。Brier 是两类平方误差之和,量纲范围为零到二;不能与只对正类计算的单项版本混用。ECE 使用左闭右开箱,最后一个箱包含右端点,并保存每箱分母。

审计池指标,样本数360 原始概率 校准概率
正确数 330 330
准确率 0.916667 0.916667
平均置信度 0.982405 0.918592
NLL 0.384113 0.237136
双类 Brier 0.154001 0.135151
ECE10 0.073274 0.019900

拟合所得温度为 T^=2.4819242151\hat T=2.4819242151。校准池本身的 NLL 从零点四〇三七降至零点二四二六,但这不是独立的效果验证;真正需要关注的是冻结温度之后的审计结果。审计平均置信度与准确率之间的差缩小到约零点〇〇一九,仍不能仅凭这个总体均值声称所有概率区间都校准好了。

事先固定的九成阈值也揭示了边界:原始概率中三百四十三条达到阈值,其中二十三条错误;校准后只剩二百七十九条达到阈值,其中十条错误。接受集合变小、错误比例降低,但被保留的错误没有消失。这只是固定阈值的描述性统计,尚未构成拒答阈值选择实验,也没有校正反复观察产生的选择偏差。

本次完整推理的校准阶段约一点一五秒,审计阶段约一点三七秒;导入之后整个过程约二点八〇秒,进程峰值常驻内存约九点六八亿字节。依赖下载、初次导入和环境修复不包含在该耗时中;没有测量能耗、服务吞吐或硬件峰值显存。所有结果来自真实检查点前向计算,图示中的光束不是测量曲线。

独立复算与失败排查

独立审计脚本不导入主实验模块,用 sigmoid、稳定 softplus 和二分类 Brier 恒等式从 logits 重新计算全部指标;又用直接针对温度的黄金分割搜索复核优化结果。两种求解方法的温度差约二乘十的负八次方,指标最大差约八乘十的负十七次方。它验证确定性算术一致性,不称为真人审核,也不能代替语义标注质量判断。

环境恢复留下了真实失败记录:此前临时环境缺失 PyTorch;默认依赖缓存写入受限,首次联网安装也失败。工作区旧环境导入出现停滞,之后停止该任务进程,在隔离临时环境安装固定依赖并完成试跑。另一次启动把虚拟环境解释器软链接解析成基础解释器,导致依赖不可见;修正执行路径后继续,没有用合成数据顶替模型实验。

复现失败时,优先看资源哈希是否一致,再看标签映射、推理模式和 logits 形状。若温度变成负数、分类答案变化或优化结果落在边界,先排查实现和数据,不应直接解释成校准发现。若校准目标改善而审计目标变差,也应保留这份结果;重新调整范围后再报告同一审计池,会把审计数据逐步变成调参数据。

源码与复现入口

完整源码已公开:固定提交目录、README、SOURCE_MAP。匿名下载的二十六个文件与本地及压缩包逐一核对一致,公开副本的独立审计和真实八条试跑通过。配套包包含完整入口、依赖、资源锁、划分清单、协议、源码地图、两池逐样本结果和独立审计程序。读者取得公开源码后,在源码目录安装固定依赖,先执行资源获取,再运行真实模型:

python run.py prepare --cache .cache117
python run.py smoke --cache .cache117
python run.py run --cache .cache117
python audit.py

预期产物为两池预测文件、温度与优化轨迹、聚合指标、形状与环境记录、独立复算结果。已有固定资源可以复用校验后的缓存,无须反复下载模型。约二百七十兆字节模型权重通过官方入口获取,不打进源码包;数据许可信息不明确,包中只放身份哈希和派生数值,不含原始文本。

还有一个容易混淆的检查:独立求解器得到相近温度,不等于温度在重新抽样后也稳定。前者检查计算,后者检查数据变化带来的估计波动。本篇只完成前者,没有用反复抽样挑选更好结果。读者如果想比较不同机器,应先对齐输入身份、模型文件与概率计算精度,再比较逐样本分数;仅比较最终四舍五入后的指标,可能掩盖标签错位或文件混用。保存失败日志的意义也在这里:它让环境修复与科学选择可以分开追踪,避免把一次没跑通的命令写成已经验证的入口。

研究问题与总结

本篇最有价值的证据不是温度恰好等于多少,而是拟合和评测职责终于分开。一个标量在这个固定划分上明显改善了概率质量,且没有改变任何分类标签。这让“校准有用”成为可以独立复算的具体观察,同时也限定了它修复不了的部分:错误的语义决策、少量高置信错误,以及未观察分布上的可靠性。

下一步可以检验校准样本数变少时温度是否稳定,但必须先固定嵌套样本、随机种子与汇总规则,不能从审计集里挑出最顺眼的温度。另一个待检验假设是少数严重错误主导了 NLL 拟合;它需要预注册影响分析,不能仅从总体均值倒推出结论。本次没有做显著性检验,没有给出总体覆盖保证,也没有把单次效果推广为所有模型的规律。

参考资料

检索与实际访问日期:2026-11-02。

  1. Chuan Guo, Geoff Pleiss, Yu Sun, Kilian Q. Weinberger. 2017. On Calibration of Modern Neural Networks,ICML,PMLR 70,1321–1330。
  2. Geoff Pleiss 等作者代码:temperature_scaling.py 固定提交,MIT;本次阅读对照,求解器独立实现。
  3. Hugging Face:DistilBERT SST-2 固定模型卡。
  4. Stanford NLP:SST-2 固定数据卡。
  5. Hugging Face:Transformers 固定分类器实现,Apache-2.0。

作者作品推广

以下是作者自有产品推广。除了写科研博客,我也独立开发一些日常工具,欢迎按自己的需要了解:日常收支小记用于记录收支、安排预算和储蓄目标,前往 App Store;一事微光帮助你根据时间和精力选择小行动,并记录完成后的感受,前往 App Store。更多技术文章与个人作品见作者网站。这些介绍与本篇实验结论相互独立,不代表论文作者或机构的推荐。