File size: 3,503 Bytes
5c6c847
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 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 追加,不改上表)

1. **长度外推**:上表只用了 8 条验证序列 × 3 个种子,抽样噪声大(同一模型 0~63 段:8 条序列 1.5550,32 条序列 1.4372)。
   32 条序列的复测:0~63 **1.4372 ± 0.0187**、64~255 **1.4742 ± 0.0341**、256~1023 **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,即随机水平。
2. **有效槽数**:`slot_usage()` 的写列用的是未归一化的门控分布(每层质量只有 0.47 / 0.59),所以 3.2 / 5.0 偏低。
   归一化后读列不变(10.1 / 9.9),写列约 6.0 / 10.4(每层);按段池化 8.6~8.9 / 16。不能据此说"16 个槽只用 3~5 个"。