ELAI S.r.l.

90% 的置信度,意味着十次有九次正确吗?

以可复现的文档分类示例理解温度校准,区分概率与准确率,并揭示总体指标的局限。

90% 的置信度,意味着十次有九次正确吗?

决定文件是否自动放行的数字

一家企业用分类器区分两类文件。每个输入都得到类别和一个数字:“置信度 90%”。似乎可以只把低于 80% 的情况交给人工复核。但模型如果过度自信,就会像放行正确文件一样,满有把握地放行错误文件。这不只是显示方式的问题:这个数字会影响工作量、错误和预期。

问题很明确:不重新训练分类器,能否让置信度更可信?我们构造一个报告 90%、却只正确分类 100 份文件中 60 份的例子,计算修正差距的温度。随后说明它为何不会增加一个正确分类、为何换个环境可能变差,以及完美的平均值如何掩盖两个校准很差的群体。数据专为解释机制而构造,并非来自客户。

三个容易混淆的量

预测类别是离散决策:文件 A 或 B。准确率是已知标签集合中决策正确的比例。置信度则是在不知道结果之前,模型赋予所选类别的数值。某次分类置信度为 90%,不等于已证明它正确;这是一项关于正确性的预测,需要在可比案例上检验。

90% 的理想含义是:在大量获得该数值的案例中,大约十次有九次正确。这叫置信度校准。它不保证每连续十次恰好成功九次,也不指出哪次错误。频率对应某个人群和环境,有限样本只能估计它。这里衡量获胜类别是否正确,不是在衡量生成式回答口头宣称“我很确定”是否真实。

从内部评分到概率

理解计算需要概率、平均数和自然对数。不熟悉微分的读者,可以把推导视为最终规则的理由。假设模型输出两个实数评分,称为 logit:z₀ 和 z₁。它们不是概率,也可以为负。softmax 将它们转为两个正数,且总和为一。评分差越大,偏好越明显。

pₖ(T) = exp(zₖ/T) / [exp(z₀/T) + exp(z₁/T)]; k ∈ {0,1}, T > 0

T 是称为温度的无量纲参数,并非物理热度。T = 1 保持模型原样;增大 T 会使两个概率接近 0.5。置信度 q 是较大的概率。本例获胜评分与落败评分的差始终为 m = ln 9,约 2.197225。不同文件的获胜类别会变化,但差值保持不变,以单独研究报告置信度的问题。

q(T) = 1 / [1 + exp(−m/T)]; m = ln 9; q(1) = 0.9

将 softmax 的分子和分母都除以获胜评分的指数,就得到此式。T = 1 时,exp(−ln 9) = 1/9,所以 q = 9/10。只需评分差,无须绝对评分;给两者加相同常数不会改变结果。除以正数还保持顺序,因此概率降低时,获胜类别仍然获胜。

用可验证的目标选择温度

构造一百条校准记录,其中六十条分类正确、四十条错误。合成标签由脚本确定,并未对一百份真实文件运行推理。应该降低多少置信度?我们使用平均负对数似然,简称 NLL。它根据分配给真实标签的概率施加惩罚:自信的错误比犹豫的错误代价更大。二分类中,正确记录给真值的概率为 q,错误记录为 1 − q。

L(q) = −a ln(q) − (1 − a) ln(1 − q); a = 60/100 = 0.6

a 是正确比例,q 是共同置信度。使用自然对数,损失单位为纳特,是无量纲的信息单位。q = 0.9 时,每条记录 L = 0.984250 纳特。这不是 98% 的错误率;准确率仍为 60%。问题已经从统计正确决策,变为评估概率是否合理。对 q 求导并寻找零斜率,就能确定最小值。

dL/dq = −a/q + (1 − a)/(1 − q) = (q − a)/[q(1 − q)] d²L/dq² = a/q² + (1 − a)/(1 − q)² > 0

在零到一之间,一阶导数的分母为正。q 大于 a 时,降低 q 会减少损失;q 小于 a 时,提高它会有帮助。二阶导数为正,所以 q = a 是唯一最小值。因此,对这个同质集合,最优置信度等于观察频率。但这并不证明样本频率就是现实世界的精确概率。

T* = m / ln[a/(1 − a)] = ln 9 / ln(0.6/0.4) ≈ 5.419023 q(T*) = 0.6; L(0.6) ≈ 0.673012 nat

解 q(T) = a 即得公式。大于一的温度降低置信度,将损失从约 0.984 降为 0.673。六十个正确分类仍然只有六十个。修正的是解读模型的方式,而非输出类别。闭式公式成立是因为所有差值相同;差值不同时,必须优化损失总和,不能直接把平均准确率代入本式。

还存在结构性限制:正差值和正温度会让获胜置信度始终高于 0.5。如果本例正确率不到一半,就没有有限温度能使 q 达到该频率。a = 0.5 需要 T 趋于无穷。系统性颠倒类别的分类器,应重新检查模型或类别映射;一个置信度参数无法解决所有错误。

检验数据不能参与选择 T

在同一百条记录上估计 T 并赞扬结果,只能说明对校准集的拟合。因此构造第二个集合,标识符不同,七十条回答正确。保持 T = 5.419023,不重新估计。其损失从 0.764528 降至 0.632465 纳特,置信度为 60%,准确率为 70%。更接近正确频率,但并未与之相等。

这种分离是逻辑上的,不是泛化的统计证据,因为第二个集合的计数也是人为选择的。脚本不模拟随机抽样,也不能支持经验置信区间。实际项目需要有代表性的数据、与训练和校准分离、可靠标签,以及查看测试结果前确定的协议。若看过检验结果后反复选择 T,测试集就成了另一个开发集。

集合正确比例NLL T=1NLL T*
Calibration60%0.9842500.673012
Holdout70%0.7645280.632465
Shift95%0.2152220.531099

环境变化可能逆转收益

第三行是构造的反例:评分差相同,却有一百次中九十五次正确。它可代表更容易的输入流,但不模拟任何特定原因。原先 90% 置信度与观察频率差五个百分点,校准后的 60% 却差三十五个百分点。NLL 从 0.215222 恶化为 0.531099 纳特。降低置信度不总是谨慎,也可能变成系统性低估。

由合成计数计算的损失随 T 的变化。虚线只对应校准曲线的最小值,其他集合的最小值位于别处。纵轴上限为 1.3 纳特以便阅读,因此部分极低温度值超出显示范围。
由合成计数计算的损失随 T 的变化。虚线只对应校准曲线的最小值,其他集合的最小值位于别处。纵轴上限为 1.3 纳特以便阅读,因此部分极低温度值超出显示范围。

读图时先看 60% 曲线:损失下降到虚线,然后向近乎均匀预测的损失上升。在 95% 曲线上,该点已处于置信度过低区域。图中并没有比较三个训练后的网络,而是围绕相同评分构造了三种标签分布。这说明当文件、供应商、语言或分类规则变化时,必须重新检验昨天的校准参数。

完美平均值可能掩盖两个问题

到目前为止,每个集合都用一个数字概括。常见指标 ECE,即预期校准误差,将置信度分箱,并比较每箱准确率与平均置信度,再按记录数量加权汇总绝对差距。有限数据计算值是一种估计,也取决于分箱方法,并不是普遍可靠性的认证。

ECE = Σ_b (n_b/N) |accuracy_b − confidence_b|

N 为总数,n_b 为第 b 箱记录数,空箱不贡献误差。所有校准置信度都为 0.6,落在同一箱,因此第一个集合 ECE 为 |0.6 − 0.6| = 0,仅有浮点舍入差异。现在将这一百例分为两个等大群体:A 中 50 例有 45 例正确,B 中只有 15 例正确。总正确数仍为六十,每例仍报告 60%。

A 群体被低估三十个百分点,B 被高估三十个百分点。总体 ECE 为零,是因为按置信度分箱先混合了两类误差,再取绝对值。分别计算群体 ECE 后加权平均,则为 0.30。当输入评分差相同时,共同 T 不可能给第一组 90%、第二组 30%;所选变换既缺少灵活性,也缺少有用信息。

群体可以对应扫描类型或文件家族,但这里只是合成标签。反例并不证明某个产品或语言存在问题,而是提出验证问题:概率在实际使用处是否仍有信息价值?把数据全部拆成微小群体也不会自动解决问题,因为频率会不稳定。需要业务过程支持的分组、足够样本量,以及在未用于选择修正的数据上评估。

分类器没有变好,操作结果仍会改变

回到最初规则:q ≥ 0.8 时自动处理。校准前一百份全部通过,之后一份也不通过。覆盖率,即自动处理比例,从 100% 降为 0%。不能宣称接受案例准确率为 100%;接受集合为空,正确比例没有定义。我们揭示了置信度问题,却尚未建立可持续的生产流程。

真实决策必须联系概率、错误代价、复核能力和延后处理选项。本实验不估计这些成本,也不推荐可直接部署的阈值。它说明只比较前后置信度百分比并不充分。必须区分分类器准确率、概率质量、覆盖率以及整个流程的表现,包括送去复核的文件之后发生什么。

替代方法、已发表证据与可复现性

温度只有一个参数,并保持每个输入内的类别顺序。logit 的仿射变换可以加入偏移,按类别分别映射或更灵活的变换可以改变决策。表达能力增加,但需要从数据估计;自由度更多并不等于样本外更可靠。概率分箱同样需要在细节与每次估计可用观测量之间权衡。

Guo、Pleiss、Sun 和 Weinberger 在 ICML 2017 论文中,使用分离的数据集研究图像与文档校准。比较表显示温度校准经常有益,但并非普遍有效。本文将其作为方法依据,并未复现其网络或基准。

附件中,make_data 构造标签和 logit,confidence 执行变换,nll 评估概率,run 在评估另外两个集合之前固定 T。断言检查标识符不同、类别不变以及损失变化方向。没有随机过程,因此不需要种子。浮点运算会让理论上为零的 ECE 在 JSON 中约为 10⁻¹⁶;这是数值舍入,不是科学发现。

那么,90% 到底意味着什么?

只有在可比案例与使用环境中经过检验,90% 才能获得“十次有九次正确”的概率解释。温度可以不改变分类器而修正过度自信;本例精确展示了方法及覆盖率代价。但良好的平均结果不保证每个子群体,在一种输入流有用的修正,也可能使另一种更差。面对垂直模型,不应只问“它有多确定”,还应问“我们在哪些场景检验过,这些数字确实具有表面上的含义?”。

参考文献

Chuan Guo, Geoff Pleiss, Yu Sun, Kilian Q. Weinberger — On Calibration of Modern Neural Networks, ICML 2017, PMLR 70:1321–1330.

from experiment import run
r = run()
print(round(r['temperature'], 6))
for m in r['metrics']:
    print(m['dataset'], round(m['confidence'], 2),
          round(m['accuracy'], 2), round(m['nll_nats'], 6))

代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 4 日。