Skip to content

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

qwen35-ple

Qwen3.5 主干 + Qwen3.8-Flash-Next PLE 记忆表的嫁接实验仓库。本仓库是四仓库协作中的 编排者:实现存储与模型核心的是兄弟仓库,这里做的是消融设计、评测协议、数据与实验编排。

本仓库的首要产出不是"一个更好的模型",而是一组关于「哈希 n-gram 外部记忆到底能做什么」 的可复现结论 —— 其中一条是证明,不是经验。 详见下方「结论摘要」。


结论摘要(TL;DR)

经过 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. ⚠️ round-164 Part B:读出把窗口坍缩成了一个常量 —— 这条对中心论点不利。

预注册的预测(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) 与上面之差 = 格式敏感度

四条硬纪律

  1. control(乱序行)不能替代 no-PLE 对照。 前者是主动扰动,只回答"内容是否匹配"; 后者才回答"有 PLE 是否比没有好"。缺 --ple-off 臂会让假阳性无法被内部证伪 —— round 152 的 G0 正是这么产生了一个后来被推翻的"正结果"。
  2. 任一臂偏离分布时,生成 EM 不是有效的内容探针。 它测的是解码稳定性。 必须同时报 teacher-forced NLL,且两者矛盾时先排查分词/格式,而不是默认信 NLL。
  3. 没有格式指纹就不许跨臂比较任何指标。
  4. 训练与评测必须同协议。 复用 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; 权威环境是远端(见下)。

远端(AutoDL)

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 重建。


复现主要结果

1. PLE 表的天花板(计数参照系,无需 GPU)

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 回归覆盖。

2. 表的可读出性探针(无需 GPU)

scripts/probe_table_next_token.py —— 原始 2560 维行 → 下一个 token,对照显式计数 trigram 与乱序行控制(必须崩到下限,否则结论作废)。自带 scripts/selftest_probe_table.py (signal 模式必须检出、noise 模式必须崩塌)。

3. 嫁接评测(需要 GPU)

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。

4. 汇总与审计

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 新符号。


公开 Artifact

  • 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

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages