Qwen3.5 主干 + Qwen3.8-Flash-Next PLE 记忆表的嫁接实验仓库。本仓库是四仓库协作中的 编排者:实现存储与模型核心的是兄弟仓库,这里做的是消融设计、评测协议、数据与实验编排。
本仓库的首要产出不是"一个更好的模型",而是一组关于「哈希 n-gram 外部记忆到底能做什么」 的可复现结论 —— 其中一条是证明,不是经验。 详见下方「结论摘要」。
经过 round 130–158 的连续实验,「冻结表 + 冻结主干」这条嫁接路线得出了封闭结论: (注意范围 —— 原版三家用的是可训练的表 + 联合训练的主干,见第 7 条。)
1. 正确的界是条件形式 —— 它界定「信息」,不界定「有用性」。
PleSpec.rowids_for_seq(src/qwen35_ple/ple_hash.py)只把 shift = 0/1/2 折进哈希,
即 token[t]、token[t-1]、token[t-2]。所以 16 个头全部是 (t-2, t-1, t) 的确定性函数。
但注意通道的实际输出不是 e_t,而是 c_t = F(h_t, e_t) —— gate 用 h_t 作 query。
所以记忆的净增量必须写成条件形式:
e_t = f(token[t-2], token[t-1], token[t]) (确定性函数)
记忆的净增量 = I(future ; e_t | h_t) ≤ I(future ; trigram | h_t) ← 数据处理不等式
⟹ 记忆的价值 = 表的 trigram 统计 − 权重里隐含的 trigram 统计(在 h_t 未钉死的部分上)
这个界与 reader 的深度、宽度、线性与否、训练量全都无关,而且它一次解释三件事:
| 情形 | trigram 携带 | 理论预测 | 实测 |
|---|---|---|---|
| 段落条件化问答(BoolQ 300-token 段落) | 只有 "...\nAnswer:" 的位置/格式信息 |
只能加格式 | ✅ 格式先验(round 156) |
"The capital of France is" |
内容 | 可加精确统计 | ✅ 行里确有先验,但读出只回收 ~59%(round 161) |
| 需要窗口外上下文的事实 | 无 | 零 | ✅ 全部知识探针为零 |
且问题是双重的:round-161 的探针证明行里确实有可恢复的 trigram 先验
(高于下限 2.4–2.8×,乱序对照全部塌陷),但读出只回收 trigram top-1 的约 59%
(0.1502 vs 0.2535,且更多训练让它更差 → 是固有上限而非欠训练),
而且先验本身约为同语料朴素计数的一半。
所以「用显式计数、更长窗口」是对的,但理由是存储端有损 + 寻址端窗口过短,
不只是"reader 太平滑"。详见 docs/round-161-table-probe-verdict.md。
我们此前所有知识探针都只用了第一行那一格 —— 理论说必然为零的那一格。
详见 docs/round-157-why-the-graft-is-a-prior-not-a-knowledge-channel.md。
这个推论的实验确认(round 162;0.8B n=1500/臂 六臂 + 4B n=600/臂 四臂):预注册检验 「格式迁移是内容相关的先验,还是扰动伪影」。三个只在语料上不同的 reader (WIKI / CODE / STEM,同超参、同层、同提示)给出完全相同的格式分布 —— label TV = 0.0000、前导面 TV = 0.0000、联合 TV = 0.0000,方向性词法预测全部落空 (code 标记率恒为 0,零个不一致对);机械判决 PERTURBATION_ARTIFACT, 主口径与副口径一致,两个骨干上各自独立成立。
但这不是"没生效",而是"生效了但与内容无关":相对零注入,格式迁移巨大且真实 ——
4B(round-156 首次看到效应的那个骨干,bf16,层 2)零注入 95.8% 吐对话脚手架
(平均 31.2 token),注入任意语料的 reader 都压到 0.0%(2.6 token),
600 条里没有一条共享同一个首个 token(McNemar p = 1.6e−173);
0.8B fp32:chat_scaffold 0.195 → 0.000(p = 1.3e−88),
且 ple-off 与 no-reader 逐条位级相同,噪声地板恰好为 0。
且操纵确实送达:三个 reader 在答案位置注入的向量两两 cosine 仅 0.730–0.758,
且各自在自己的语料上交叉评测最优。→ 换语料改变的正是"权重里已经隐含的那部分",
所以它对输出不产生可分辨的影响。 详见 docs/round-162-format-prior.md。
⚠️ 一处限定,已实测(2026-09-12 补跑至六臂):上面的"内容无关"是饱和 regime 的结论 —— 两个骨干上臂 1/2/3 都压在 2.5–2.7 token 的短答案上。撤掉天花板后内容依赖确实出现: 无 SFT 六臂 × 600 条上生成长度回到 11–21 token(噪声地板恰好为 0:ple-off与no-reader再一次逐条位相同),四个格式描述子全部越出臂内 split-half 地板 (前导面 TV 0.1433 vs 地板 0.0237;首 token TV 0.4983 vs 0.2176), 且两条预注册的方向性预测都通过(code 臂代码标记 +0.0333,p = 3.9e−4; wiki 臂散文标记 +0.6933,p = 4.5e−34)—— 这两条在主实验里是全灭的。完整机械判决(无需事后调整):主判决(粗分类法)仍是
PERTURBATION_ARTIFACT, 副判决(细格式描述子)CONTENT_DEPENDENT。这正是预注册时把粗分类法与四个细描述子 分开规定的原因 —— 粗分类法对真实的格式移动不敏感,细描述子看见了。所以准确的分层是:脚手架压制与内容无关(三臂全部压制,彼此差 ≤ 0.01), 其余输出分布有关。而后者正是界预测的那一半:界说的是这条通道能承载
I(future ; trigram | h_t),语料的表面统计就是 trigram 先验。 始终没有出现的是段落后文条件化的召回(round-161 知识探针为零),那才是界禁止的部分。 详见docs/round-162-format-prior.md§3.7。
2. Round 159:限制属于分布而非方法,且值钱的区间在 k≥8(可用性口径)。
四语料跨分布实测(WIKI / CODE / FINEWEB / STEM,阈值先于数据固定):
| WIKI | CODE | STEM | FINEWEB | |
|---|---|---|---|---|
| k=4 逐字命中率 | 0.112 | 0.484 | — | — |
| k=16 逐字命中率 | 0.0017 | 0.208(122×) | — | — |
| 可寻址×可记忆 NLL 质量 k≥8 | 0.012 | 0.173(14×) | 0.034 | 0.006 |
一条必须记住的更正:round-159 原本说"代码比散文好 2 个 nat",那是污染造成的。 字符级去污染后差距是 0.43 nat / 26.7 点——方向与排序幸存,量级不幸存 (0.43 nat 是一个更好的散文模型足以追上的距离)。记录级污染率(32 字符判据) 反而给出一条更干净的单调轴:WIKI 31.7% / CODE 95.9% / STEM 100%, 即"这个分布有多模板化"。
结论:① 限制属于分布而非方法;② 代码仍是最好的那一档,但优势远小于原先所说。
⚠️ 但"换更长的键"已被 round-160 证伪 —— 见下条。 round-159 的 k≥8 质量是 可用性上界(只算命中,不算排序),不是可实现收益。
3. 这条通道是「短窗口先验」—— 三家原版设计也是如此。
| Engram-27B | Qwen3.8-Next | V4.1-Flash | 本仓库嫁接 | |
|---|---|---|---|---|
| n-gram 阶 | {2,3} | {2,3} | {2,3,4} | {2,3} |
| 记忆 / 激活算力 | 1.4× | 8.5× | 24.5× | 64× |
| 表如何训练 | Adam 5×LR | 与主干联合训练 | momentum+Sinkhorn | 冻结、无梯度 |
上界对三家同样成立(V4.1 是 4-gram 界)。它界定的是通道用途,不是"设计有毛病": Engram 论文的定位是 A New Axis of Sparsity —— 让激活参数不必承担记忆负载, 并在 iso-FLOPs(对 Dense-4B) 下评测。收益来自算力再分配,不是知识注入。
4. 我们量化的是"嫁接必须打败的数字",不是通道的终极价值。
| NLL | top-1 | 存储 | |
|---|---|---|---|
| 四阶计数 n-gram(MKN,与嫁接同源的 1M token 语料) | 5.5553 | 24.31% | 32 MB |
| 该语料上的 trigram 渐近估计(R²=0.96) | ≈4.94 | ≈27–28% | — |
| 冻结 PLE 表 | ? | ? | 47.684 GiB |
⚠️ 不要把 ≈4.94 当作通道天花板。 它是从 1M token 学习曲线外推的, 而原版记忆是从数万亿 token 构建的;真实的 trigram 后验远好于此。 因此"表格最多值 0.40 nat"只在我们这套语料+评测下成立,不是普适结论。 可以确定的只是:在这套评测上,一张 32 MB 的计数表就是 graft 必须打败的对手。 (数值为最保守口径。三档依次为 5.3368 / 25.25%(旧,≥16-token)→ 5.4658 / 24.80%(32 字符)→ 5.5553 / 24.31%(32 字符 + 剔除无法检测的短记录, 那些记录比平均更容易,保留会乐观约 0.09 nat)。训练流字节完全相同, 所以存储论证不受影响。) 计数格式每条 n-gram 密 9.4 倍(表的 320,001,536 行用精确计数表示约 5.44 GB)。 详见docs/round-158-ngram-reference-frame.md。
5. 它确实有一个真实、可复现的效应 —— 但是格式,不是知识。
零注入时 4B 不遵守 raw 续写协议,会退回对话先验吐出 <think> 脚手架;
注入 PLE(real 与乱序行皆然)才会把它压回 raw 格式。这是机制性的、与表内容无关的
格式/协议先验,可能是这条通道唯一可产品化的东西。
详见 docs/round-156-g0-nople-format-vs-content-and-metric-bugs.md。
6. 证伪(round 160):匹配字节下,更长的窗口不划算 —— 我此前的建议是错的。
我预注册的预测是"代码上长窗口显著胜出、且优势随语料规模增长"。两条都被证伪。 NLL gap(正 = 长窗口更好)在 CODE / WIKI 上、四档语料规模、三档字节预算下:
| 预算 20 MB | CODE 100k→800k | WIKI 100k→800k |
|---|---|---|
| k8 | +0.07 → −0.11 | +0.01 → −0.23 |
| k16 | −0.05 → −0.30 | −0.07 → −0.29 |
| longest17(最长后缀) | −0.70 → −1.03 | −0.52 → −0.97 |
几乎全负;窗口越长输得越多;随语料规模没有改善,甚至变差。 而且预测的 CODE-vs-WIKI 对比不存在——两者几乎一样。
修正:短窗口不是 Engram 设计需要"修"的缺陷。在等存储下,短上下文是高效的选择, 而且
{2,3}这个选择是站得住的。我此前"换寻址"的建议是错的。 唯一仍有保留的是规模外推:本轮只覆盖 100k→800k(8×),对 2T 语料仍有 6 个数量级未测—— 但交互测试正是为此设计,而它显示没有增长趋势。
7. 已否证清单 —— 注意前六条否证的都是「冻结表 + 未学过使用它 的主干」这一配置:
| 假设 | 判定 | 证据 |
|---|---|---|
| 冻结嫁接可注入知识 | ✗ | round 148/149 |
| reader 容量 / 源空间对齐是瓶颈 | ✗ | round 148-B |
| oracle routing 可线性学到 | ✗ | scripts/train_oracle_routing_probe.py |
| 靠数据规模可解锁 | ✗ | 1M→ 更大语料无改善 |
| full-FT 可解锁(反而崩塌) | ✗ | round 149 |
| LoRA 共适应可解锁 | ✗ | round 152:+2.8–3.5 点但 real−control = +0.0000 |
| 4B(hidden 精确对齐源空间)可解锁 | ✗ | round 155/156:那是 control 解码崩塌造成的假象 |
8. 那条界证明了什么、没证明什么 —— 这一条最容易误读。
证明了: e_t 关于 token[t+1] 的信息量 ≤ 最近 2–3 个 token 的信息量
⟹ 这条通道【不可能】做「按查询取回」—— 答案依赖全上下文的知识型任务
⟹ 我们对它做过的全部知识探针(QA / oracle routing / rare-entity)都在问错的问题
没有证明:这条例通道没用
界限制的是信息量,不是有用性。骨干权重是训练语料的有损压缩, 低频 n-gram 统计恰恰是被压掉的部分 —— 表能补上权重丢掉的。而 0.8B 的权重比 6B active 的权重丢掉更多,所以原则上小模型应该更受益,不是更少。
窗口有多大、里面有多少是"关于这道题的"(round 164,本地测量,无需 GPU):
生产几何下 c_t 依赖 t-11 .. t 共 12 个 token(pad_len=(4-1)*3=9,加
ngram_size=3 的回看)。但窗口取自答案位置,因此它包含模板的固定后缀:
| 任务 | 后缀 token | 窗口内逐条槽位 | 后缀占比 |
|---|---|---|---|
| boolq | 10 / 12 | 2 | 0.833 |
| nq | 3 / 12 | 9 | 0.250 |
| triviaqa | 3 / 12 | 9 | 0.250 |
对 BoolQ 这种长指令模板,83% 的窗口槽位是固定的。 但 Part B 实测的结果比这个 预测更彻底,也更不利于我们原来的读法 —— 见下。
同轮还有一个否定的设计结论:本轮最初打算按"窗口 n-gram 的语料稀有度"分层 (界的正面预测)。该设计在 1M–3M token 的参考语料上不可构造 —— 在表的寻址 阶数 k=3 上 93% 的条目计数为 0,分位数退化。更根本地:在窗口尺度(k=9..12)上, "这段上下文模型见没见过"根本无法用数语料估计,因为任何可负担的语料里几乎每个 12-gram 都是唯一的。 详见
docs/round-164-window-composition-preregistration.md§4。
8b.
预注册的预测(BoolQ 的注入向量应比 nq/triviaqa 更相似)失败了
(dS_c=+0.0002, p=0.27 → INCONCLUSIVE;对照 reader p=0.001 但 dS_h>0 → CONFOUNDED)。
失败的方式比预测本身重要:c 对所有任务的所有条目都几乎常量,不是"对 BoolQ 更常量"。
600 条互不相同的提示词,注入向量两两夹角约 2°。三个诊断:
| 量 | 结果 |
|---|---|
c 的有效维度 PR(主特征值占比) |
1.001(0.9993) |
h 的有效维度 PR(主特征值占比) |
1.480(0.8190) |
h 经随机线性映射后的 PR |
1.454 / 1.472 / 1.485 ← 通用映射不坍缩 |
cos(c_真行表, c_打乱行表),同检查点 |
0.9966 ← 取回的内容几乎不影响方向 |
所以 round-162 的"内容无关"有一个比界更平凡的解释,而且它可修:
| 内容 | 可修吗 | |
|---|---|---|
| (B) 界 | 窗口只有 12 token,本来就没东西可传 | 不可修(除非改寻址) |
| (C) 读出坍缩 | 窗口里有一点东西,读出没传 | 原则上可修 |
本轮无法区分 (B) 与 (C),但 round-161 的探针指向 (C):count trigram top-1 = 0.2535 (下限 0.0537,即窗口三阶统计里确有可用的下一 token 信息),而读出只回收 0.1502 ≈ 59%, 且更多训练更差。天花板比下限高 4.7×,我们只拿到 59%。
因果链应改写成
设计没起作用 = 界的限制(不可修) ∧ 读出坍缩(可修), 而不是"因为界,所以必然为零"。这把下一步变具体了:0.2535 与 0.1502 之间的 gap 就是靶子, 而且它不是训练量问题。详见docs/round-164-window-composition-results.md§4。
9. 原版验证过、而我们从未测过的配置(这是"为什么他们行"的核心):
| 配置 | 原版三家 | 本仓库 |
|---|---|---|
| 表是否训练 | ✅ Adam 5×LR / momentum+Sinkhorn | ❌ 冻结,无梯度 |
| 主干与记忆 | ✅ 联合训练(主干学会路由到记忆) | ❌ 主干预训练时从未见过记忆;只有冻结 / LoRA / full-FT |
| 记忆:激活算力 | 1.4× / 8.5× / 24.5× | ❌ 64×(论文的 U 型分配律说存在最优比) |
| 跨空间桥 | 不需要(同源) | ❌ 需把 Qwen 源空间(2560,4分支) 译到 Qwen3.5(1024,单流),且 4 分支求和是有损近似 |
| gate 选择性 | 论文案例显示选择性开启 | ❌ 我们的 SFT reader gate 饱和常开(0.77–0.98)= 恒开注入 = 噪声 |
所以:"Engram 设计不成立"没有被证明。我们证明的是"冻结的跨模型嫁接不成立"。 这两件事经常被混为一谈,包括我自己在 round-157 里也说得过重。
10. 仍然开放的问题:上述 4.94 的天花板是自然文本的。n-gram 记忆的价值强烈依赖分布 (代码、日志、结构化语料的天花板会不同)。跨分布扫描进行中,判据是 长尾 NLL 占比 + 逐字续写命中率,而不是天花板本身。
engram-peft (模型库: DeepSeek Engram 一致性实现, 记忆层/训练/TRL 基础设施)
EngramDB (存储: PLE/Engram n-gram 行表, badge 布局, Store-P 视图, C ABI)
▲ ▲
└──────┬───────┘
qwen35-ple (本仓库: 嫁接实验编排, 依赖以上两者)
▲
LLM-CompileForge (推理: MLIR 编译 .dylib + Rust runtime, CPU 推理目标)
依赖方向严格无环:LLM-CompileForge → EngramDB;qwen35-ple → {engram-peft, EngramDB}。
契约唯一权威是 docs/integration-contract.md(v1,冻结),纪律是只允许新增。
这一节是本项目最可迁移的产出。我们曾因为协议缺陷两次得出错误结论,以下每条都由真实事故换来。
| 指标 | 正确用法 | 已知陷阱 |
|---|---|---|
qa_<task>_em |
与历史轮次可比 | 子串匹配,会虚高脚手架输出最多 33 个点(Nouser 含子串 no) |
qa_em_token_mean |
跨臂比较用这个 | token 级窗口判等,拒绝"答案被融合进更大 token"的假命中 |
qa_fmt_* |
每个臂都必须带 | 脚手架率 / 空串率 / distinct 率 / BoolQ yes 率 |
qa_mean_nll |
历史可比口径 | 评的是不带前导空格的答案分词('yes'=9405),而模型实际吐 ' yes'=9542 |
qa_mean_nll_spaced |
诊断口径(--qa-gold-nll-spaced) |
与上面之差 = 格式敏感度 |
control(乱序行)不能替代no-PLE对照。 前者是主动扰动,只回答"内容是否匹配"; 后者才回答"有 PLE 是否比没有好"。缺--ple-off臂会让假阳性无法被内部证伪 —— round 152 的 G0 正是这么产生了一个后来被推翻的"正结果"。- 任一臂偏离分布时,生成 EM 不是有效的内容探针。 它测的是解码稳定性。 必须同时报 teacher-forced NLL,且两者矛盾时先排查分词/格式,而不是默认信 NLL。
- 没有格式指纹就不许跨臂比较任何指标。
- 训练与评测必须同协议。 复用 raw 训练的 adapter 去 chat 评测,同一 adapter 的 gold NLL 会从 2.40 变到 5.02 —— 这个差距量化的是协议不匹配,不是能力。
scripts/audit_reader_checkpoints.py 强制检查:冻结源张量跨臂逐位一致、adapter 确实移动过、
跨臂范数比在阈值内。这条纪律的直接来源是一次事故:LoRA 权重曾从未进入 optimizer,
500 步后 96/96 个 lora_B 全为 0,而"训练后"的臂与冻结基线逐位相同。
判读标准必须在看数字之前写进文档。round-155 §7 写下的方向性预测,让后续一个 与预期相反的结果能被立刻定位,而不是事后挑选解释。
# 前置: uv、Rust 工具链(engramdb-python 需要 maturin 构建)
uv sync --all-groups
uv run python -c "import engram_peft, engramdb, qwen35_ple; print('ok')"
uv run pre-commit install
make lint # ruff(范围与 CI 一致)
make test # pytest
make check # lint + test注意:本机
.venv不含 torch,pytest会有若干 collection error; 权威环境是远端(见下)。
bash scripts/ssh_autodl.sh # 交互 shell
bash scripts/ssh_autodl.sh 'uptime; df -h' # 单条命令
QWEN35_PORT=40783 bash scripts/ssh_autodl.sh '...' # 端口随实例变化,用 env 覆盖远端布局(/root/autodl-tmp/qwen35-ple/):
| 路径 | 内容 |
|---|---|
repo/ |
本仓库检出;PYTHONPATH=src 是必需的(venv 有 engramdb 但没有 qwen35_ple) |
venv/ |
Python 环境(torch 2.6.0+cu124 / transformers 5.16.1 / peft 0.20.0) |
models/ |
Qwen3.5-0.8B / Qwen3.5-2B / Qwen3.5-4B / qwen38_ple / Qwen3.8-Flash-Next-FP8-tokenizer |
qwen38-rows/ |
PLE 行表,128 个 shard_NNN.bin,各 400,001,920 B(只读) |
outputs/ |
实验产物 |
logs/ |
运行日志 |
/dev/shm/qwen38-rows 重启即失;需要时用
bash scripts/ensure_qwen38_rows.sh --python /root/autodl-tmp/qwen35-ple/venv/bin/python 重建。
bash scripts/ssh_autodl.sh 'cd /root/autodl-tmp/qwen35-ple/repo && \
/root/autodl-tmp/qwen35-ple/venv/bin/python scripts/bench_ngram_reference.py \
--train-npy data/phase1/PURE_WIKI/tokens.npy \
--eval-npy data/phase1/wikitext-heldout-decon/tokens.npy \
--orders 1,2,3,4 --smoothing mkn --uniform-vocab 248047 \
--acc-positions 20000 --acc-candidates 5000 \
--output outputs/ngram-reference.json'约 45 秒。自带 --self-test 回归覆盖。
scripts/probe_table_next_token.py —— 原始 2560 维行 → 下一个 token,对照显式计数 trigram
与乱序行控制(必须崩到下限,否则结论作废)。自带 scripts/selftest_probe_table.py
(signal 模式必须检出、noise 模式必须崩塌)。
ROOT=/root/autodl-tmp/qwen35-ple
$ROOT/venv/bin/python scripts/run_phase0.py \
--live-store --tokens-npy data/phase1/PURE_WIKI/tokens.npy \
--rows-dir /root/autodl-tmp/qwen35-ple/qwen38-rows \
--model-dir $ROOT/models/qwen38_ple --model $ROOT/models/Qwen3.5-0.8B \
--backbone-dtype bfloat16 --reader official --layer 2 --device cuda --bridge-mlp --out-mlp \
--official-reader-path data/official_ple_reader.pt \
--steps 0 --seeds 0 --modes real \
--qa --qa-exact-match --qa-gold-nll --qa-gold-nll-spaced \
--qa-file data/qa-standard/eval.jsonl --qa-max-new-tokens 32 \
--qa-prompt-template $'Question: {question}\nAnswer:' \
--qa-boolq-prompt-template $'Question: {question}\nAnswer with one word, Yes or No:' \
--output outputs/arm.json关键 flag:--ple-off(no-PLE 对照格)、--lora(主干共适应)、--qa-max-items(冒烟)。
--modes no-reader 在训练前就返回,所以 2×2 的 no-PLE 格必须用 --ple-off。
python scripts/summarize_arms.py --run A=a.json --run B=b.json --pair A=B --output arms.md
python scripts/summarize_gold_nll.py --run A=a.json --baseline A --output gold.md
python scripts/audit_reader_checkpoints.py --reference real=r.pt --arm control=c.pt --init data/official_ple_reader.pt
python scripts/bench_engram_edge.py --rows-dir ... --label nvme-persistent --cold| 脚本 | 用途 |
|---|---|
run_phase0.py |
主评测/训练入口(三线 real/control/no-reader、LoRA、--ple-off、QA EM/gold NLL) |
bench_ngram_reference.py |
计数 n-gram 参照系(MKN 1–4 阶,精度/字节) |
probe_table_next_token.py |
表的可读出性探针(含乱序控制) |
audit_reader_checkpoints.py |
无效臂审计(冻结一致性 / adapter 漂移 / 范数比) |
summarize_arms.py / summarize_gold_nll.py |
配对汇总(逐 item delta + SEM) |
bench_engram_edge.py |
端侧存储基准(热/冷缓存、batch sweep、RSS) |
build_mix.py / build_qa_standard_split.py |
语料混合与标准 QA 切分(含 --exclude-qa 去污染) |
ssh_autodl.sh |
远端入口(端口随实例变化) |
scripts/ 共 125 个 Python + 31 个 shell 脚本;完整清单见 docs/reproducibility-manifest.md。
src/qwen35_ple/ 实验编排代码(config / engine / data / train / eval / infer / serving)
ple_hash.py PLE 行 id 计算 —— §1 那条上界的来源
reader.py OfficialSourceQwenReader 等 reader 实现
live_store.py PLE 行表懒加载(LiveETStore / LiveETDataset)
configs/ 训练与推理配置
scripts/ 一次性脚本(数据构建、表资产、评测、审计)
docs/ 185 篇文档(索引见下)
tests/ 35 个测试文件(golden 对拍与不变量)
paper/ paper.typ + figures(矢量 SVG,make paper-figures 重生成)
docs/ 共 185 篇。不要通读,按主题进入:
起点(想快速了解现状)
| 文档 | 内容 |
|---|---|
round-157-why-the-graft-is-a-prior-not-a-knowledge-channel.md |
可证明的天花板 + 为何它只能承载先验(建议先读) |
round-162-format-prior.md |
决定性的否证:格式迁移真实但内容无关(六臂,预注册 + 机械判决) |
round-163-reader-forward-golden.md |
读出实现与官方数学位级对拍;官方 config 权威值;官方挂载点在第 1 层 |
round-164-window-composition-preregistration.md |
寻址窗口里有多少是"关于这道题的";BoolQ 后缀占 10/12;稀有度分层为何不可构造(预注册) |
reviewer-response-r1.md |
审稿意见逐条回复:理论形式化、窗口感受野的可执行验证、等价性框架、统计口径补齐;一条经核实为误读;四条需新实验(附计划与成本) |
round-164-window-composition-results.md |
读出把窗口坍缩成常量:c 的有效维度 1.001 vs h 的 1.480;随机映射基线不坍缩;预注册预测失败及其含义 |
round-165-collapse-provenance-results.md |
把塌缩拆成两个独立损失:答案位置的寻址逐字节常量(每任务 1/200 条不同行),而同一个 read-out 把有效维数 137 的输入压成 1.02 —— 前者是界的前提,后者是 read-out 缺陷 |
round-165-readout-repair-preregistration.md |
round-165 的预注册:塌缩溯源级联 + 端到端 read-out 替换(含反空转对照与冻结判定规则) |
round-166-unsaturated-multibackbone-preregistration.md |
非饱和正面结果的多骨干复现:逐字复用 round-162 的队列与判定规则,只换骨干;含 SATURATION_NOT_LIFTED 先决条件 |
round-166-unsaturated-multibackbone-results.md |
2B/4B 复现为 PARTIAL,并发现一个长度混淆:散文标记计数随生成长度上升,raw 符号随 regime 翻转;等长校正后 2B 由 −0.68 变 +0.58(p=2.8e−13),0.8B 的 +0.69 缩水 40% |
round-158-ngram-reference-frame.md |
计数参照系:这张表必须打败的数字 |
round-156-g0-nople-format-vs-content-and-metric-bugs.md |
格式 vs 知识;两个指标 bug;关机事故复盘 |
round-154-session-consolidation-and-handoff.md |
会话交接总览 |
round-153-goal-tech-debt-and-development-plan.md |
目标精确化、技术债、停止规则 |
round-167-ultimate-goal-tech-debt-and-plan-v2.md |
目标第三版 + 本 session 新增 8 类技术债 + 四阶段计划:目标加入"机制轴"(Engram 的收益在有效深度上,而我们从没测过);新债以测量效度债(长度混淆)与提案执行债(决定性对照被写下三次、执行零次)为首 |
round-167-stage0-debt-results.md |
Stage 0 还债结果:0.1 当场抓到两件事 —— 一个我写错的指标声明,以及论文 0.8B 格式论断的失效(校正后 share +1.157);4B 的那条被校正加强(share −0.016) |
unexecuted-controls.md |
未执行对照登记册:三份历史 TODO 合并,分栏未执行 12 / 已完成 14 / 已否决 4,每项带成本 |
live-claims.md |
活结论清单:每条带配置四元组(表冻结/可训练 × 主干冻结/共训 × 单/双层 × 饱和/非饱和);最强活正结论是 4B 格式迁移与 code>wiki |
round-167-stage1-effective-depth-preregistration.md |
Stage 1a 预注册:PLE 开/关的 effective depth。三种结局与判定规则在看数字前冻结 |
round-167-stage1a-effective-depth-results.md |
Stage 1a 结果:嫁接没有释放有效深度。三骨干无一 DEPTH_FREED;凡位移出现处 real 与 shuf 完全相同 → 效应来自注入形状而非内容。含 6× 吞吐记录(按 token 批处理 + 绕过 lm_head) |
round-167-stage1b-preregistration.md |
Stage 1b 预注册:塌缩是初始化/深度的(配方)还是架构的?四变体,判定规则在读取任何 PR 前冻结 |
round-167-stage1b-results.md |
Stage 1b 结果:塌缩是架构的,且不是零初始化造成的。nozero 与 prod 逐阶段完全相同 → 证伪「零初始化」假设链;e_t→value_proj 的 6.53× 衰减在四变体上相同,因为它冻结 |
round-167-stage2-gate-selectivity-preregistration.md |
Stage 2.2 预注册:gate 饱和是不是 always-on 伤害的原因?scalar(官方, 每分支一个标量) vs per_dim(每维独立)。判定规则先冻结 |
round-167-synthesis-surprises-and-new-directions.md |
七条意外结论 + 一个统一解释 + 四个新方向:塌缩是目标的最优解(saddle-to-saddle simplicity bias),所以初始化/深度都不是原因;下一步是让记忆变得必要而不是修读出 |
round-167-design-making-memory-necessary.md |
怎么让记忆变得必要(具体设计):秩 1 够是因为目标允许;冻结表下唯一可行构造是窗口遮蔽 + 剂量反应(W ∈ {0,1,2,4,8,12}),三个独立读数 + 预注册判据。含「这套设计不能证明什么」 |
round-167-design-corpus-selection-by-marginal-advantage.md |
能否"选主干 PPL 高、记忆 PPL 低"的语料?两篇文献给出警告(kNN-LM 对低频 target 更差)与 PLE 的关键区别(哈希检索永不失败);修正判据为三条件交集,并给出不需要训练的第一步:先量 margin = L_bb − L_cnt 的分布 |
round-167-design-finding-the-key.md |
必要更正:不是"信息不在",是"读不出来"(密码学视角)。把问题改成如何找到正确的密钥,列出 7 个可搜的解码器维度(族/容量/时间/初始化/目标/官方共训读出/输入集合),并给出唯一判决:CMI 随解码能力是否饱和。含与密码学的不类比 |
round-168-ultimate-goal-tech-debt-and-plan-v3.md |
终极目标第四版 + 本轮新债 + 计划 v3:目标加"天花板 vs 可实现"两层区分(我们所有测量都在受解码器限制的那一层,而天花板从未测过);新增 Stage 1.5 先测天花板;含停止清单与借鉴矩阵更新 |
gpu-utilisation-playbook.md |
GPU 利用率手册:≥50% 标准、四类诊断矩阵、本轮修掉的两个浪费(按 token 批处理、绕过 lm_head)、并发模式、提速必须先证等价 |
契约与设计:integration-contract.md(唯一权威)、qwen35-ple-design.md、roadmap.md
评测协议:round-145-*(标准 held-out 与 chat 模板)、round-146-*(cross-file oracle)、
round-148-*(format vs content 判决)、evaluation-card-paper.md、phase0-protocol.md
否定性结果(重要,避免重复劳动):round-148 / 149 / 150 / 152 / 155 / 156 / 157 / 158
存储与端侧:round-152-g3-engram-edge-storage-benchmark.md
可复现:reproducibility-manifest.md
历史:round-19 … round-147(早期 PLE 探针、机制分析、RAG/蒸馏路线、多轮系统性复盘)。
其中 round 44–123 主要探索 RAG / 蒸馏 / 可寻址记忆,结论已收敛并记录在 session-log.md。
session-log.md 是按会话的连续记录,含每轮的坑与修复。
已落地
- 契约 v1 冻结,CI 绿(lint + shell 语法 + pytest + 两个 synthetic gate + 论文 PDF)
- 三线评测协议、配对统计、gold NLL 分批(数值等价且 3× 加速)
- reader checkpoint / LoRA adapter 存取、bundle + serving adapter、reader registry
- 端侧存储基准、无效臂审计、计数参照系、表探针
- 自动关机 finisher(含生产者存活检测与失败即关机)
已知技术债(按优先级,完整清单见 docs/round-167-ultimate-goal-tech-debt-and-plan-v2.md §3)
| 优先级 | 项 |
|---|---|
| P0 | 测量效度债:指标必须附"只动滋扰变量"的扰动测试(round-166 长度混淆使 0.8B 的 +0.6933 虚高 40%) |
| P0 | 评价轴债:effective depth 自 round-26 起只是 TODO,而 Engram 的机制主张与收益都在这一轴 |
| P0 | 配置空间债:官方设计的 5 个关键量(可训练表 / 共训 / gate 选择性 / 读出初始化 / 双层注入)5 个未被扰动;zero_init_out 还是字面量,不可测 |
| P1 | 提案执行债:round-20 / round-146 / session-log 三次写出同一份决定性对照清单,执行零次 |
| P1 | 文献读入债:Memory Grafting 被记反(它是换 memory value 的内容);TokenMem 在诊断出病之前被否决 |
| P1 | 停止规则误触发:round-153 的停止规则只在「冻结嫁接」子空间成立,被读成方向级关闭 |
| P1 | 正面结果埋没:oracle headroom(raw +0.06 / chat +0.06,round-146 原文口径)与 code>wiki 三骨干存活未被继承 |
| P1 | 参数侧 iso-budget 曲线仍未做(round-153 起列为最大缺口);真实 vLLM / SGLang A/B 未做 |
| P2 | 端侧只测了 NVMe;USB SSD / SD 与移动端功耗未测 |
| P2 | 范围声明:论断未统一标注配置子空间四元组(表冻结/可训练 × 主干冻结/共训 × 单/双层 × 饱和/非饱和) |
停止规则(修订版)
round-153 预注册:若比例扫描在任何比例下都不显示相对同预算纯参数的劣势优势, 则把 PLE 重新定位为格式先验 + 可热插拔的领域先验,通用能力目标交还给参数与数据。 round-157/158 满足该条件 对于「冻结嫁接」这一配置。
修订后的纪律:
- ❌ 停止再跑「冻结表 + 冻结主干」的知识型 QA 消融 —— 那条界说它必然为零,第六次不会带来新信息。
- ✅ 尚未排除的是原版真正验证过的配置:可训练的表 + 学过使用记忆的主干。 在资源允许的范围内应测:主干参与训练(LoRA 或部分解冻)、gate 选择性修复 (可学习 per-dim q/k 权重、per-branch key),评测改为长尾文本的语言建模而非 QA 知识。
⚠️ 资源上做不到的部分(320M 行的表做 Sinkhorn 平衡、从零联合预训练)应明确标注为未验证, 而不是被前述否证顺带否定。
- 存储契约 C1(EngramDB → 使用方):行语义
PLE_QWEN_V1(16 头 / 160 维 / 320,001,536 行)、 视图格式(<view>.manifest.json+ keys 文件)、C ABI 符号冻结规则。 - 模型契约 C2(engram-peft → 本仓库):
EngramConfig只增不改;engine="deepseek"(默认)| "qwen_ple";table_source="engramdb:store"自动注入。 - 推理契约 C3(LLM-CompileForge ↔ EngramDB):
sfa_abi.proto加SfaWeightSource; 视图可作为外部权重源;运行时 dlopen 加载 C ABI。 - 数据契约 C4:tokenizer 唯一来源 = Qwen 官方(vocab 248320,与 Flash-Next 相同,已核实)。
变更纪律:只允许新增,禁止改语义/删除;ABI 演进用 _v2 新符号。
- Hugging Face:DefEki/qwen35-ple-auditable-ngram-memory
- 论文源码
paper/paper.typ,编译产物paper.pdf;make paper会先重生成全部图(scripts/make_paper_figures.py,全部从outputs/的实验产物出图),再编译 - 可复现清单
docs/reproducibility-manifest.md,评测卡docs/evaluation-card-paper.md