
复现目标:先问概率在什么范围内归一化
同样显示“八成把握”,两个模型可能在回答完全不同的问题。情感分类器输出正面、负面的概率;语言模型先给词表中的续写分配概率,我们再只保留两个标签,把它们重新归一化。界面上的数值都在零到一之间,并不意味着它们已经成为同一种可靠性证据。本篇固定同一组公开短评,建立可以逐项追踪的对照,重点是检查分数的含义,而非争夺模型排名。
较上一篇高置信错误分组,本篇新增的变量是预测接口:一边沿用已经保存的二分类头结果,一边加入真实生成式模型的有限候选计分。样本身份、原始标签和比较分母保持一致,不拟合温度,不挑提示模板,也不调整拒答阈值。新增产物包括每条候选的 token、对数概率、归一化概率、候选总质量,以及独立复算记录。初学者可以沿着“分母”理解差别;工程读者可以执行入口;研究读者则应关注结论在哪些条件下成立。
核心思想:两个数字可以同表评测,不能自动同义
分类头给每个标签一个 logit,即尚未归一化的实数分数。对两个分数执行 softmax 后得到类别概率:
这里 是影评, 是标签编号, 是分类头输出;单条输出形状为两个数。预测取最大概率对应的标签,置信度取最大值。这种概率仍可能失准,不能因为分类头专门训练过就把它当成真实正确率。Guo、Pleiss、Sun 与 Weinberger 的校准论文讨论的正是预测置信度与实际正确性的关系;它没有保证本篇某个小模型一定校准良好。
语言模型的输出则覆盖整个词表。给定冻结提示 ,候选字符串 的计分为:
其中 是候选的 token 数, 表示固定模型参数。先按因果顺序求每个 token 的对数概率,再求和;没有长度平均,也没有附加结束符。本次两个候选恰好各占一个 token,因此排除了候选长度差异这一具体混杂因素,但不意味着其他标签词也如此。 只表示在这两个字符串之间重新分配后的相对权重。
如果两个候选都是不同的单 token,可以进一步计算:
是下一 token 落在这两个候选中的概率总质量。它与 回答不同的问题:即使两候选之间一边占绝对优势,它们之外仍可能保留大量词表概率。多 token 候选、前缀重叠或长度归一化情形不能不加检查地沿用这个简单解释;本次的单 token 检查是结论的一部分。

数据、预算与冻结协议
数据来自 Stanford NLP 的 SST-2 validation 固定版本,按 SHA256 对字符串“cycle7:”与样本编号的拼接结果排序,取前二百五十六条。本轮另外二百五十六条校准池及三百六十条协议审计池没有参与此次预测,IMDb 也未使用。SST-2 在旧轮已有历史接触,因此这是复用公开数据的探索实验,不能包装成未见测试。新模型也可能在预训练中接触公开文本,本文没有零污染证明。
分类器是固定 DistilBERT SST-2 检查点,生成模型是固定 SmolLM2-135M-Instruct;精确 revision、文件哈希与依赖列在配置和锁文件中。前者沿用首篇真实推理的二百五十六行记录,后者本次新执行,不把复用结果的时间写成新测量。两者的训练目标、规模、分词器和输入格式不同,因此本实验不是仅改变架构的因果消融。
生成侧使用固定英文问题,要求在 positive 与 negative 之间判断情感,答案前缀为 Answer:,候选含一个前导空格。没有聊天模板、少样本示例、额外起始符或开放生成;这是一种冻结的原始续写接口,不代表模型卡推荐聊天方式的最优效果。每条先验证完整字符串分词保留提示前缀,超过五百一十二 token 则报错,不静默截断。先跑八条试验,再按预定预算执行全部样本;未因试验准确率改变模板。
官方代码阅读路线
先看两个官方模型卡,辨认任务与许可证;再看 Transformers 固定提交中的 DistilBERT 分类头和 LlamaForCausalLM。前者把隐藏表示映射成两个标签分数;后者通过 lm_head 映射到整个词表。本次 SmolLM2 使用该语言模型实现,已将实际安装的源码与固定提交文件逐字节核对,不以类名相同代替版本一致。
阅读运行脚本时,最容易错的不是 softmax,而是预测位置:位置上的输出预测下一个 token,不能把候选 token 本身所在位置的输出当成它的条件概率。代码先去掉完整序列末尾 token,再截取提示末位开始的输出。日志保存了每次 logits 张量形状;复查脚本另用“仅提示输入、取最后位置、全词表 softmax”的路径核对八条真实分数。两条实现路径吻合才允许讨论模型表现。
本地概率公式和算术审计属于独立教学实现;神经网络前向实际调用官方库,没有复制或替换模型层。源码地图给出固定提交、具体函数、许可证和本地对应关系。数据卡许可标记 unknown,所以分发包只保存身份、哈希和派生结果,不包含原始影评;读者通过固定下载地址取得数据。
最小实验与实际结果
正式运行使用 CPU、float32、eager attention 和四个线程,不训练。新增生成侧执行五百一十二次候选前向,每条两个候选;单 token 情况本可共享同一提示前向,本篇保留直观实现,并明确其计算冗余。最终版本复跑的正式前向约十九点五五秒,导入依赖后的总时间约二十点七八秒,进程峰值内存约一点五九 GB。下载耗时没有重新测量,资源来自已校验缓存;这些数字不是跨硬件吞吐量基准。
| 指标,同一组256条 | DistilBERT分类头 | SmolLM2候选归一化 |
|---|---|---|
| 正确数 | 233 | 130 |
| 准确率 | 91.02% | 50.78% |
| 平均最大概率 | 98.17% | 87.16% |
| 平均负对数似然 | 0.385259 | 0.996743 |
| 两类别求和Brier | 0.169913 | 0.718332 |
负对数似然取原始标签对应概率的负对数,Brier 对两个标签的概率平方误差求和后按样本平均;两项都越低越好。可以将它们用于同一有限分类任务的比较,但生成侧必须明确使用 ,不是全词表概率。这里没有重现某篇论文的表格,也没有把两百多条探索样本当成完整 benchmark。
最明显的失败是:生成侧二百五十六条全部选择 negative,正确数恰好等于样本中负面标签的数量。两模型有一百三十三条预测不一致。两个候选的平均总质量仅约百分之四十六点八四,其余质量分配给别的下一 token。这足以展示“在两候选之间自信”与“自由生成答案可靠”之间缺少的环节,但剩余词表质量不等于错误率:别的 token 可能是换行、解释或其他合法表达,本篇没有对其语义做人工判定。
评测协议与失败排查
先查身份,再查位置,最后看指标。独立审计逐行核对原始编号、文本哈希和标签,重建候选求和、二项归一化、最大值、正确数和均值;分类侧与生成侧严格按身份配对。另一个真实前向复查确认候选解码分别是带空格的 negative 和 positive,排除了标签顺序颠倒及错一位取分这两种解释。自动复算只说明这些确定性步骤一致,不称为人工审核。
全负面现象依然不能直接归因于模型“只会猜负面”。原始续写接口、问题中的词序、标签词先验和未采用聊天模板,都可能影响这一检查点。以上属于作者推断中的竞争解释,当前实验没有逐个隔离。保留失败比事后替换一个更好模板更有价值:换模板会把本篇从定义清楚的测量实验,变成未经登记的搜索过程。后续若研究模板迁移,应先登记候选、预算和选择数据,再运行对照。
还要区分算术正确与科学有效。独立脚本能够发现概率没有归一化、样本错位或正确数算错,却不能替人判断影评真实情感是否有歧义。本篇沿用官方标签,不增加人工语义标签,因此无需伪造新的真人确认;未来若改写文本并声称标签保持,仍必须有真实审核。缓存键也需要包含模型、分词器文件、提示、候选、数据身份、精度、代码与协议哈希,不能只用样本编号。
源码与复现入口
本篇已公开至固定提交:31476a32d0a4 源码目录、README 运行说明、SOURCE_MAP 源码地图。远端文件清单及哈希已与本地归档核对,公开副本的算术审计和八条真实模型试跑均通过。
安装固定依赖后,先运行 python prepare.py --cache .cache 获取并核验资源,再运行下面的统一入口。将末尾的 --smoke 去掉即执行正式二百五十六条;预期输出是逐样本候选记录、比较汇总和开始时的配置哈希。
python run.py --model-dir .cache/model --data .cache/validation.parquet --smoke
python audit.py
算术审计默认检查包中保存的正式结果,不把八条 smoke 当作正式评测。真实前向复查使用 check_forward.py 的同名资源参数。配套 README 说明资源量、环境、归档复跑与实际执行范围;没有依赖作者机器的隐含模块,也不需要读者打开本地博客路径。正式结果保持冻结,复跑请在独立副本中进行。
复跑时建议先比较逐条结果,再比较聚合数字。均值接近可能掩盖样本配对错误;相同正确数也可能由完全不同的错误集合构成。本次保存文本哈希而不公开原文,是为了兼顾身份核验与数据分发边界。若读者更换依赖或硬件,应报告最大数值偏差和是否改变决策,不要仅凭程序没有报错就宣称逐字节复现。
读者还可以把候选总质量与最大归一化概率放在两列查看,但不要把前者乘以后者后命名为“真实正确率”。这个乘积在本次单词候选条件下只是被选 token 的原始续写概率,仍缺少答案语义、生成停止条件与正确性判定。指标命名应保留这些条件,避免在后续可视化和拒答实验中悄悄更换估计对象。
可检验问题与总结
这次证据支持一个有限结论:在相同短评与标签下,两类分数可以接受同一分类评测,但候选归一化改变了概率的条件范围,不能直接解释为开放生成的正确概率。生成模型的失败接口也提醒我们,较低平均置信度本身并不表示校准更好,更不能代替正确数与概率损失。
接下来可以检验三个不同问题:固定模型只改模板,是否仍全负面;固定模板替换等长标签词,候选质量是否改变;只在隔离校准集拟合温度,概率损失能否改善。它们需要分开登记,不能一次修改所有因素再挑最好结果。本系列下一步进入温度校准,先建立合法的数据使用协议;当前负结果与完整日志保留,作为后续解释必须面对的事实。
参考资料
检索与访问日期:2026-11-01。
- Chuan Guo、Geoff Pleiss、Yu Sun、Kilian Q. Weinberger,2017,ICML:On Calibration of Modern Neural Networks。用于校准概念,不声称复现原论文数值。
- HuggingFaceTB:SmolLM2-135M-Instruct固定模型卡。
- DistilBERT:SST-2分类检查点模型卡。
- Stanford NLP:SST-2数据卡。
- Hugging Face:Transformers固定提交语言模型前向。
作者作品推广
以下是作者自有产品推广。除了记录科研实验,我也独立开发了一些整理日常的小工具,欢迎了解:日常收支小记用于记录收支、安排预算和储蓄目标;一事微光帮助按当下时间和精力选择小行动,并记录完成后的感受。更多技术文章与个人作品可以访问作者网站。这些产品与本文研究结论没有背书关系,欢迎按自己的需要选择。