ZeroPoint v0 research prototype: new from-scratch NumPy framework, memory-slot architecture, audited Transformer comparison
5c6c847 verified |
Download experiments/diagnose.md from Holmes2011/ZeroPoint: direct link, hf CLI and curl.
- Browser
- Download file 3.84 kB
-
https://huggingface.co/Holmes2011/ZeroPoint/resolve/main/experiments/diagnose.md
- Command line
-
hf download hf://Holmes2011/ZeroPoint/experiments/diagnose.md
-
curl -L -o diagnose.md https://huggingface.co/Holmes2011/ZeroPoint/resolve/main/experiments/diagnose.md
3.84 kB
| # 预注册实验:查三个问题 | |
| > 写于实验之前(2026-10-18)。跑完只在下面追加结果,不改这一节。 | |
| **背景**:ema_longrun.md 否定了"槽值无界累积"假设。无 ema 的模型在 1024~4095 字处 loss 比 64~255 字处高约 0.22; | |
| 有 ema 的高约 1.77。compare.md 里 16 个槽只有 3~5 个被写入(**更正**:3~5 是按未归一化的门控分布算的偏低值;归一化后读约 10/16,写约 6~10/层)。 | |
| ## 假设和预测 | |
| **H2(训练长度)**:长序列变差是因为训练只见过 64 字;模型在更长的位置上遇到的槽状态分布是训练时没见过的。 | |
| - 预测:训练长度改为 256(每步字数不变、其余相同)后,1024~4095 与 64~255 的 loss 差 **缩小到 T64 的一半以下**。 | |
| - 不成立时会看到:差距没有缩小(< 2 × 标准差的变化)。 | |
| **H3(ema 为什么更差)**:ema 把长期槽的写入乘上 (1-λ),训练时(64 字)长期槽几乎不起作用,模型学会只用短期槽; | |
| 到了长序列,读地址仍指向短期槽,但短期槽里的内容和训练时的统计不同。 | |
| - 预测 ③a:ema 模型的**写地址**集中在半衰期短的槽上:半衰期 > 16 字的槽,写入占比 < T64 模型的一半。 | |
| - 预测 ③b:ema 模型学到的长期槽 λ 更接近 1(半衰期更长),或者长期槽的读占比在远处位置上升。 | |
| - 不成立时会看到:两组的写入分布没有明显差别。 | |
| **H4(槽塌缩)**:塌缩不是训练失败,而是写地址的 softmax 竞争让少数槽赢者通吃;在不同序列位置上"赢的槽"不同, | |
| 所以整体统计(compare.md 的 3~5 个有效槽,见上面对该度量的更正)低估了实际用到的槽数。 | |
| - 预测 ④:按位置分段(0~63 / 64~255 / 256~1023 / 1024~4095)分别统计有效写槽数,各段的并集 > 整体有效槽数 × 1.5; | |
| 同时各段的读/写分布之间有明显差别(任意两段的 JS 散度 > 0.1)。 | |
| - 不成立时会看到:各段的分布几乎相同,用的始终是同几个槽。 | |
| **判定**:每条按上面的数值阈值判,3 个种子均值;差别和 2 × 种子间标准差比。 | |
| ## 结果(实验之后写) | |
| ### 验证 loss(64 字)和长度外推(32 条 × 4096 字;均值 ± 标准差,3 个种子) | |
| | 条件 | 64 字验证 | 0~63 | 64~255 | 256~1023 | 1024~4095 | 远−近 差 | | |
| |---|---|---|---|---|---|---| | |
| | T64 | 1.5214 ± 0.0134 | 1.4372 ± 0.0187 | 1.4742 ± 0.0341 | 1.6617 ± 0.0234 | 1.6932 ± 0.0305 | +0.2190 ± 0.0630 | | |
| | T64-ema | 1.5182 ± 0.0076 | 1.4308 ± 0.0039 | 1.6476 ± 0.0529 | 3.1084 ± 0.2157 | 3.4153 ± 0.2402 | +1.7677 ± 0.2188 | | |
| | T256 | 1.5572 ± 0.0060 | 1.4741 ± 0.0117 | 1.4486 ± 0.0098 | 1.5098 ± 0.0022 | 1.5155 ± 0.0048 | +0.0669 ± 0.0051 | | |
| ### H3:写入落在半衰期 > 16 字的槽上的占比(0~63 段),和学到的最长半衰期 | |
| | 条件 | 长期槽写入占比 | 最长半衰期(字) | 远处读长期槽占比的变化 | | |
| |---|---|---|---| | |
| | T64 | 0.061 ± 0.005 | 109 | +0.009 | | |
| | T64-ema | 0.014 ± 0.001 | 103 | +0.007 | | |
| ### H4:槽的使用(T64,写地址;各层各头平均) | |
| | 段 | 有效写槽数 | | |
| |---|---| | |
| | 0~63 | 8.6 | | |
| | 64~255 | 8.7 | | |
| | 256~1023 | 8.5 | | |
| | 1024~4095 | 8.9 | | |
| | 整体 | 8.7 | | |
| 各段用到的槽的并集 ÷ 整体有效槽数 = 0.68;各段分布之间最大的 JS 散度 = 0.010 | |
| ## 判定(按预注册的标准) | |
| - H2 训练长度:远−近差 T64 +0.2190 → T256 +0.0669 → **成立** | |
| - H3a ema 写入避开长期槽:占比 0.061 → 0.014 → **成立** | |
| - H3b ema 的长期槽更长或远处更依赖长期槽 → **不成立** | |
| - H4 槽塌缩是分段使用不同的槽:并集比 0.68,JS 0.010 → **不成立** | |
| 模型已保存在 experiments/out/diag_*.npz,可以事后再分析。 | |