ZeroPoint v0 research prototype: new from-scratch NumPy framework, memory-slot architecture, audited Transformer comparison
5c6c847 verified |
Download experiments/compare.md from Holmes2011/ZeroPoint: direct link, hf CLI and curl.
- Browser
- Download file 3.5 kB
-
https://huggingface.co/Holmes2011/ZeroPoint/resolve/main/experiments/compare.md
- Command line
-
hf download hf://Holmes2011/ZeroPoint/experiments/compare.md
-
curl -L -o compare.md https://huggingface.co/Holmes2011/ZeroPoint/resolve/main/experiments/compare.md
3.5 kB
ZeroPoint vs Transformer 对照实验
历史说明(2026-11-08 统一):本报告生成于 2026-10-11,当时架构名为 ZeroMem;除名称统一为 ZeroPoint 外,正文保留原样。两处已过时的内容在文末加了更正注:① 长度外推只用了 8 条验证序列(已被 32 条序列的复测取代);② "有效槽数"的写列用了未归一化的门控分布,数值偏低。
- 语料:Python 标准库源码,1,558,395 字符,词表 96;90% 训练 / 10% 验证
- 三个模型:宽 64、2 层、4 头、Pre-LN、GELU MLP 4 倍;ZeroPoint 每头 16 个槽、可学习初始状态、分块并行(块长 32)、无位置编码
- 训练:上下文 64、batch 32、2000 步、AdamW(权重衰减 0.01)、预热 100 步 + 余弦、梯度裁剪 1.0
- 学习率:每个模型在 [0.001, 0.003, 0.006] 里各试一次(种子 0),取最好的再跑种子 [1, 2]
- 验证 loss = 40 个固定验证 batch 的平均交叉熵(nats/字符,越低越好),均值 ± 标准差(3 个种子)
- 计算量 = 前向时每个字的矩阵乘浮点运算次数(不受机器负载影响;训练一步约 3 倍)
| 模型 | 参数量 | 最佳学习率 | 验证 loss | 前向计算量(每字) | 推理状态(第 64 字 / 第 4096 字,浮点数) |
|---|---|---|---|---|---|
| Transformer | 116,576 | 0.006 | 1.5452 ± 0.0100 | 242 K | 16,384 / 1,048,576(KV 缓存) |
| Transformer (sin) | 112,480 | 0.006 | 1.5271 ± 0.0083 | 242 K | 16,384 / 1,048,576(KV 缓存) |
| ZeroPoint | 115,240 | 0.006 | 1.5214 ± 0.0134 | 232 K | 2,048 / 2,048(固定) |
学习率搜索(种子 0 的验证 loss)
| 模型 | lr=0.001 | lr=0.003 | lr=0.006 |
|---|---|---|---|
| Transformer | 1.6908 | 1.5530 | 1.5520 |
| Transformer (sin) | 1.8006 | 1.5939 | 1.5374 |
| ZeroPoint | 1.6682 | 1.5433 | 1.5311 |
长度外推(训练上下文 64;8 条验证序列 × 3 个种子平均)
| 位置 | ZeroPoint | Transformer (sin) | Transformer(可学习位置编码) |
|---|---|---|---|
| 0 ~ 63(训练见过的长度) | 1.5550 | 1.4512 | 能跑 |
| 64 ~ 255 | 1.6164 | 4.6359 | 跑不了(只有 64 个位置) |
| 256 ~ 1023 | 1.6410 | 4.6057 | 跑不了(只有 64 个位置) |
| 1024 ~ 4095 | 1.7040 | —(注意力矩阵太大,没测) | 跑不了(只有 64 个位置) |
ZeroPoint 槽的使用情况(有效槽数,满分 16)
有效槽数 = 平均读/写地址分布的 exp(熵):16 个槽用得一样多 = 16,全挤在一个槽 = 1。
| 层 | 读 | 写 |
|---|---|---|
| 0 | 10.1 | 3.2 |
| 1 | 9.9 | 5.0 |
更正(2026-11-08 追加,不改上表)
- 长度外推:上表只用了 8 条验证序列 × 3 个种子,抽样噪声大(同一模型 0
63 段:8 条序列 1.5550,32 条序列 1.4372)。 32 条序列的复测:063 1.4372 ± 0.0187、64255 1.4742 ± 0.0341、2561023 1.6617 ± 0.0234、 1024~4095 1.6932 ± 0.0305(远端 − 近端 = +0.2190 ± 0.0630)。详见diagnose.md/ema_longrun.md。 Transformer(sin) 的 4.6359 / 4.6057 仍是 8 条序列的测量(基线权重未保留),≈ ln 96 = 4.56,即随机水平。 - 有效槽数:
slot_usage()的写列用的是未归一化的门控分布(每层质量只有 0.47 / 0.59),所以 3.2 / 5.0 偏低。 归一化后读列不变(10.1 / 9.9),写列约 6.0 / 10.4(每层);按段池化 8.68.9 / 16。不能据此说"16 个槽只用 35 个"。