# 077:冻结网络上的线性探针 实测 Python 3.12.14、NumPy 2.3.5、CPU float64。唯一运行依赖是 NumPy,不下载任何模型或数据。 在文章目录运行: ```bash python3 -m pip install -r code/requirements.txt python3 code/probe_numpy.py > code/smoke_test.txt python3 code/audit_results.py > code/audit_test.txt python3 -m py_compile code/probe_numpy.py code/audit_results.py ``` 实测解释器:Python 3.12.14。 ## 文件与复现范围 - `probe_numpy.py`:生成数据,冻结三个模型,训练108个候选逻辑回归探针,验证集选择27个探针,执行输入翻转和输出零空间投影。 - `audit_results.py`:不导入实验程序,以标量前向和标量点积重建预测,复核训练归一化、开发集选择与统计。 - `checkpoints/model_76.npz`、77、78:从本系列076的`code/results/`原样复制的小网络最终检查点。来源为本地原创实验,不是论文作者发布权重;SHA256见`results/summary.json`。网络5→16→16→2,tanh,402参数,seed76/77/78;原训练数据seed760、512条、Adam .01、1000步。文件中的rotation是前篇实验附加矩阵,本篇不使用。 - 如需从头重建主模型,使用同目录系列076的`code/patching_numpy.py`(本篇不需要运行该文件);本篇已携带完整冻结参数,没有运行时跨目录依赖。 - `results/data.npz`:seed770,512/256/512条新样本;三个分区各覆盖八种相同核心模式,新高斯噪声,不声称组合泛化。 - `results/s*_l*_*.npz`:全部候选权重、所选权重、训练均值与尺度、三分区逐例logit。 - `results/behavior_*.npz`:原始、反事实和投影后数据及输出。 ## 预注册式固定选择规则 所有层/目标均使用同一数据和四个L2系数:0/.001/.01/.1;从零初始化,固定全批次梯度下降2000步,以开发集**无惩罚NLL**最小选择,平局取网格首项。学习率为逻辑回归梯度Lipschitz上界的倒数;不声称所有解完全收敛,记录最终梯度范数。标准化只用训练分区;偏置不惩罚。测试集不参与选择;报告所有层,不择优挑层。输入层重复结果不是三个独立实验。 shuffle在各分区独立打乱unused标签,保留平衡;它是样本级负控制,不是Hewitt–Liang词类型控制任务,不据此计算论文selectivity。只有一个shuffle数据种子,不能估计随机控制分布。 ## 解释边界 未选变量翻转不改变当前测试答案,但logit可以变化。输出零空间投影由主模型W3列空间确定,不使用探针标签;投影后仅评估原探针,未重新训练,不能声称已经完全擦除属性信息。其输出不变性依赖末层是线性读出,不能直接外推到中间Transformer层。没有运行ELMo、语言模型、官方NLP数据、GPU实验或原论文成绩复现;动态官方仓库版本和真实文本迁移待人工核验。