# 078 Calibration: CPU protocol experiment 本实验使用冻结解析打分器,没有训练神经网络,不需要模型权重、GPU、网络数据或 API 密钥。运行环境 Python 3.12.14、NumPy 2.3.5,CPU float64;建议 Python 3.12 独立虚拟环境。仅安装依赖的命令需要包下载网络;本次使用预装依赖,未执行 pip 安装。 从文章目录运行: ```bash python3 -m venv .venv .venv/bin/python -m pip install -r code/requirements.txt .venv/bin/python code/calibration.py .venv/bin/python code/audit.py PYTHONPYCACHEPREFIX=/tmp/calibration-pycache .venv/bin/python -m py_compile code/calibration.py code/audit.py ``` 在任何工作目录运行脚本都将结果写入脚本旁的 `results/`。再次运行会重建同名实验结果,若需保存自己的实验修改,请先复制整个文章目录。 ## 数据与参数 - 种子 78/79/80;每个种子和 split ordinal 用 NumPy SeedSequence([seed, ordinal]) 生成独立随机流。split 顺序 cal/policy/id/shift。 - x 是 `[n,3]` 独立标准正态;s=1.5*x0-0.8*x1+0.5*x2。cal/policy/id 的 y~Bernoulli(sigmoid(s));shift 的 y~Bernoulli(sigmoid(.5*s-1))。 - 冻结分数 z=[0,3*s],形状 `[n,2]`,标签 `[n]`。样本数 1024/1024/4096/4096;保存全部数据和真实生成概率。拟合/阈值选择不读取生成概率。 - 本实验没有分类器训练集,打分器是预先指定的解析函数。温度拟合只读取 cal logits/labels;阈值选择只读取 policy scores/labels。 - 正逆温度 beta ∈ [.05,20],对 NLL 导数二分80步;温度 T=1/beta。导数根未被括住则断言失败,不提供隐藏边界回退。 - 阈值网格50个候选 .50… .99;policy 接受数≥100、经验风险≤.10,取覆盖率最大,覆盖率并列保留最小阈值。无解用1.01哨兵表示全部拒答。这是经验网格规则,不是论文 SGR。 - 风险分母是接受数;接受数0则风险 `null`。包含任何 `null` 时不计算跨三种子风险均值,不静默丢掉该种子。 - ECE bins=(lower,upper];空箱不贡献。Brier 为两类别平方误差之和的样本均值,**没有除以类别数**。NLL 为样本均值。标准差 ddof=1。 ## 输出及核验 `calibration.py` 打印形状、温度、导数与各测试指标。 - `results/seed_78.npz` 等:各 split 的 x/z/y/truth,raw/scaled 概率、选定规则接受掩码、排序和风险—覆盖率数组。 - `results/summary.json`:固定配置、逐次逆温度拟合轨迹、50候选阈值结果、选定阈值、四种箱数的每箱计数/置信度/准确率、原始逐种子指标及均值/标准差。 - `results/audit.json`:审计状态、比较计数、最大误差。 - `smoke_stdout.txt`、`audit_stdout.txt`:本次实际执行记录。 `audit.py` 不导入实验函数,使用 Python math 标量运算独立重建保存的分数/生成概率、61440行概率、NLL、Brier、每箱 ECE、所有阈值、接受掩码、排序、完整风险—覆盖率曲线与导数有限差分。NPZ 数组一次性载入,避免循环重复解压。审计重用保存的随机标签,并不声称进行独立真实数据验证。 内置边界检查包括空接受集、阈值等号、箱边界、极大分数稳定性、粗分箱抵消、多分类排名反转、正温度答案不变和二分类全排序不变。 ## 证据边界 没有运行官方温度缩放库或 SGR 网络/风险上界;官方源码只作静态阅读。真实模型、真实数据、GPU、自由文本答案概率、分组迁移与动态仓库兼容性均待人工核验。保存的结果属于人工制造失准与条件变化的协议实验。