feat: factor DeepSeek boundary and role blocks

This commit is contained in:
wuyang
2026-07-29 21:42:07 +08:00
parent 8cebb8cb30
commit 1d0a331e06
21 changed files with 8060293 additions and 33 deletions
@@ -0,0 +1,486 @@
# DeepSeek-V2-Lite 完整角色块 2×2 因子审计
> 状态:真实官方权重执行(X)<br />
> 模型:`deepseek-ai/DeepSeek-V2-Lite` **base checkpoint**<br />
> revision:`604d5664dddd88a0433dbae533b7fe9472482de0`<br />
> 执行边界:layer 0–6;观测 MoE layer 1–6<br />
> 样本:WikiText-2 / TNEWS / HumanEval / GSM8K 各 32 条<br />
> 正式运行与独立复跑:byte-exact<br />
> 完整 JSON SHA-256:`a703dddb6d04182b1a608c213bfd341cfc32e1801be42c417dca30a505087e82`
## 0. 一句话先说结论
固定 DeepSeek-V2-Lite base 权重、128 个公开样本、历史、EOS、目标长度、
目标位置和八格 batch 后,把目标前的完整两-token 角色块拆成:
```text
delimiter
: x
head User User: User x
Assistant Assistant: Assistant x
```
目标内容、prompt-balanced 的 24 个 layer×domain 平均 system-edge TV:
```text
User: .037304
Assistant: .037015
User x .037239
Assistant x .036220
```
对 system-edge 距离做 2×2 因子分解:
```text
head main −.000654 9↑ / 15↓
delimiter main −.000430 8↑ / 16↓
head×delimiter −.000729 6↑ / 18↓
```
大多数 95% bootstrap CI 跨零,且跨层跨域存在相反方向。因此:
> `User`/`Assistant` 词头和冒号/`x` 分隔符都会直接条件化后续路由,但没有
> 任何一个因子对 system message 的路由作用形成统一、跨层跨域的调制方向。
更细的一条可见模式是:
> 在本轮选定的单个分隔符对照中,把冒号换成 `x`,多数格会让
> User-vs-Assistant 的直接路由距离稍微缩小。
但这只是 `:`↔`x` 的 one-control 结果,不能泛化成“标点语义”。
---
## 1. 为什么上一轮角色词头实验还不够
固定 tokenizer 中:
```text
User: → [5726, 25]
Assistant: → [77398, 25]
```
上一轮只替换第一个 ID:
```text
User → Assistant / x
```
而冒号 ID `25` 始终保留。这能识别“词头单 ID 条件化”,却不能回答:
1. 冒号自身是否参与后续路由;
2. 词头作用是否依赖冒号;
3. `User:`↔`Assistant:` 的差异能否被称为完整角色块效应。
本轮把两个 token 位置都纳入因子设计,同时保留所有其他序列合同。
---
## 2. 角色标记并不是 special token
固定 tokenizer:
| 文本 | token IDs | token 数 | special |
|---|---|---:|---:|
| `User` | `[5726]` | 1 | 否 |
| `Assistant` | `[77398]` | 1 | 否 |
| `:` | `[25]` | 1 | 否 |
| `x` | `[87]` | 1 | 否 |
| `User:` | `[5726, 25]` | 2 | 否 |
| `Assistant:` | `[77398, 25]` | 2 | 否 |
| EOS | `[100001]` | 1 | 是 |
所以“角色标记”是两个普通词元组成的块,而不是一个不可拆的专用 role token。
这也解释了为什么要避免一句含混的话:
```text
我们替换了角色 token。
```
更准确的是:
```text
我们在固定两-token 角色块中独立操纵词头 ID 与分隔符 ID。
```
---
## 3. 2×2×2 设计
三个二元因子:
- `S`:system message 关闭 / 开启;
- `H`:head 为 `User` / `Assistant`;
- `D`:delimiter 为冒号 / `x`。
四个角色块水平:
| 水平 | token IDs | head | delimiter | 官方 |
|---|---|---|---|---:|
| `user_colon` | `[5726, 25]` | User | `:` | 是 |
| `assistant_colon` | `[77398, 25]` | Assistant | `:` | 否 |
| `user_x` | `[5726, 87]` | User | `x` | 否 |
| `assistant_x` | `[77398, 87]` | Assistant | `x` | 否 |
乘上 system 开/关,共八格:
```text
S0/S1 × {User:, Assistant:, User x, Assistant x}
```
所有修改都发生在目标内容之前。历史 assistant 的官方 EOS 和目标之后的
generation suffix `Assistant:` 均保持不变。
---
## 4. 编辑合同与验证闸门
相对官方 `[User, :]`:
| 水平 | 改动 token 数 |
|---|---:|
| `user_colon` | 0 |
| `assistant_colon` | 1 |
| `user_x` | 1 |
| `assistant_x` | 2 |
正式 renderer 验证:
| 闸门 | 结果 |
|---|---:|
| source prompts | 128 |
| 输入变体 | 1,024 |
| system groups | 256 |
| 八格同长度 | 256 / 256 |
| 八格同目标位置 | 256 / 256 |
| official 零改动 | 256 / 256 |
| 单 ID 改动 | 512 / 512 |
| 双 ID 改动 | 256 / 256 |
| 实际 MoE routes | 2,044,224 |
每个 source 的八个条件进入同一个 32-row BF16 batch。正式运行与独立复跑
都是 66,975,110 bytes,完整 JSON byte-exact。
---
## 5. 因子分解怎样读
设四种角色块下的 system-edge 距离分别为:
```text
E(U:) E(A:) E(Ux) E(Ax)
```
### 5.1 head main
```text
0.5 × [(E(A:) − E(U:)) + (E(Ax) − E(Ux))]
```
问:平均跨过两个 delimiter,User→Assistant 是否改变 system edge?
### 5.2 delimiter main
```text
0.5 × [(E(Ux) − E(U:)) + (E(Ax) − E(A:))]
```
问:平均跨过两个 head,冒号→x 是否改变 system edge?
### 5.3 head × delimiter
```text
(E(Ax) − E(Ux)) − (E(A:) − E(U:))
```
问:head 的作用是否依赖 delimiter?
这些是带符号的距离差。它们不是标准 TV,也不是准确率效应。
---
## 6. 主结果:没有统一的 system 调制因子
主口径:
```text
scope = target_content
aggregation = prompt_balanced
metric = total variation
bootstrap = source-paired, 2,000 resamples
seed = 20260729
```
24 格平均:
| 量 | 平均值 | 点估计方向 | CI 全正 / 全负 / 跨零 |
|---|---:|---:|---:|
| `E(User:)` | .037304 | — | — |
| `E(Assistant:)` | .037015 | — | — |
| `E(User x)` | .037239 | — | — |
| `E(Assistant x)` | .036220 | — | — |
| head main | -.000654 | 9↑ / 15↓ | 3 / 3 / 18 |
| delimiter main | -.000430 | 8↑ / 16↓ | 1 / 0 / 23 |
| head×delimiter | -.000729 | 6↑ / 18↓ | 1 / 1 / 22 |
可读结论:
- 四种角色块的平均 system-edge TV 非常接近;
- 三个因子效应相对原始 system edge 很小;
- 大多数 CI 跨零;
- 个别 layer×domain 出现方向明确但互相相反的局部单元;
- 因此不能把某个局部格子升级成统一规律。
代表性局部单元:
| 层×域 | 观察 |
|---|---|
| L2 代码 | head main `+.004`,CI `[+.002, +.007]` |
| L3 代码 | head main `+.005`,CI `[+.003, +.008]` |
| L4 中文 | head main `-.005`,CI `[-.008, -.000]` |
| L4 数学 | head main `-.006`,CI `[-.010, -.003]` |
| L5 代码 | interaction `+.014`,CI `[+.005, +.023]` |
| L6 中文 | interaction `-.009`,CI `[-.017, -.002]` |
| L6 代码 | head main `+.005`,CI `[+.001, +.009]` |
正负局部单元同时存在,恰好是“不存在统一方向”的证据,而不是噪声需要隐藏。
---
## 7. CV 也不支持单一均衡故事
目标内容、prompt-balanced 的 system-edge ΔCV 因子:
| 因子 | 24 格平均 | 点估计方向 | CI 正 / 负 / 跨零 |
|---|---:|---:|---:|
| head main | +.001756 | 17↑ / 7↓ | 4 / 3 / 17 |
| delimiter main | -.003107 | 10↑ / 14↓ | 1 / 5 / 18 |
| head×delimiter | -.001543 | 11↑ / 13↓ | 3 / 2 / 19 |
CV 是专家负载离散程度,不是“模型质量”:
- CV 增大不等于能力提高;
- CV 减小不等于路由更合理;
- system-edge ΔCV 也不等于 absolute CV。
本轮只能说不同角色块对负载分布变化的调制跨层跨域混合。
---
## 8. 直接作用:两个 token 位置都会条件化后续路由
跨 24 格平均 direct target TV:
| 直接边 | S0 | S1 | S1−S0 | 点估计方向 |
|---|---:|---:|---:|---:|
| head:`User:`↔`Assistant:` | .022399 | .021933 | -.000466 | 10↑ / 14↓ |
| head:`User x`↔`Assistant x` | .018726 | .019973 | +.001248 | 14↑ / 10↓ |
| delimiter:`User:`↔`User x` | .026560 | .025679 | -.000881 | 12↑ / 12↓ |
| delimiter:`Assistant:`↔`Assistant x` | .024495 | .024949 | +.000454 | 12↑ / 12↓ |
所有四条 direct edge 的 TV 都清晰非零,说明:
- head 身份能影响后续目标;
- delimiter 身份也能影响后续目标;
- 但 system 是否放大它们没有统一方向。
---
## 9. head 的直接作用依赖 delimiter 吗
比较:
```text
head@x − head@colon
```
跨 24 格平均:
| system | Δ direct TV | 点估计方向 | CI 正 / 负 / 跨零 |
|---|---:|---:|---:|
| S0 | -.003673 | 3↑ / 21↓ | 0 / 8 / 16 |
| S1 | -.001960 | 4↑ / 20↓ | 1 / 6 / 17 |
| S1−S0 | +.001714 | 13↑ / 11↓ | 4 / 0 / 20 |
因此最窄的描述是:
> 在本实验选定的 `:`↔`x` 对照中,冒号换成 `x` 后,
> User-vs-Assistant 的直接路由距离在多数 layer×domain 略微减小。
但 system 对这项依赖的 modulation 仍混合。
不能说:
> 冒号编码了角色语义,或标点普遍增强角色区分。
要支持这类说法,至少还需多个频率与句法匹配的 delimiter,对 Chat/SFT
checkpoint 做同样设计,并接入生成行为。
---
## 10. 完整输入为什么出现更明显的 delimiter 效应
full-input、prompt-balanced 的平均 system-edge TV:
```text
User: .138962
Assistant: .139096
User x .141328
Assistant x .141220
```
对应因子:
```text
head main +.000013
delimiter main +.002246
head×delimiter −.000242
```
delimiter main 在 24 格为 20↑ / 4↓,CI 分类 14 正 / 1 负 / 9 跨零。
但完整输入包含被编辑的 delimiter token 本身,因此它无法单独回答“对后续目标
的下游影响”。这就是为什么主结论仍使用精确对齐的 `target_content`。
---
## 11. 路由集合稳定性
head direct edge 的聚合 target top-6 set exact:
| 层 | `User:`↔`Assistant:` S0 / S1 | `User x`↔`Assistant x` S0 / S1 |
|---:|---:|---:|
| 1 | 79.9% / 81.8% | 80.4% / 81.7% |
| 2 | 81.9% / 82.8% | 83.3% / 84.4% |
| 3 | 81.4% / 79.8% | 85.7% / 83.7% |
| 4 | 76.8% / 74.3% | 78.4% / 77.0% |
| 5 | 71.8% / 73.8% | 77.0% / 74.8% |
| 6 | 69.7% / 70.7% | 77.3% / 76.4% |
delimiter-at-User 的 set exact 从 L1 的约 83% 下降到 L6 的约 67%。
这表示两-token 块的微小改动可以在深度中逐步传播,但不是所有目标 token
都改变专家集合。
---
## 12. batch-content 审计
本轮的 `User:` / `Assistant:` 两类条件与上一轮角色词头实验共享:
```text
message hash 512 / 512 exact
rendered hash 512 / 512 exact
token-ID hash 512 / 512 exact
target contract 512 / 512 exact
```
跨实验共享条件的 target route hash:
| 层 | exact |
|---:|---:|
| 1 | 512 / 512 |
| 2 | 368 / 512 |
| 3 | 279 / 512 |
| 4 | 230 / 512 |
| 5 | 178 / 512 |
| 6 | 156 / 512 |
原因不是 token 合同变化,而是 companion rows 从上一轮的其他角色词头条件换成
本轮的完整两-token 组合;BF16 深层临界 gate 会因此分化。
正式推断规则:
> 只使用同一次八格 forward 内的比较;跨实验 exact 仅作为执行审计,
> 不跨 batch 拼接效应值。
---
## 13. 可复现入口
正式运行:
```bash
PYTHONPATH=/tmp/deepseek-v2-lite-pydeps.6ZJAH3:/usr/lib/python3/dist-packages \
/home/wuyang/.pyenv/versions/navi-router-cu128/bin/python \
experiments/deepseek/v2_lite_routing_role_marker_block_factorial.py \
--artifact-dir /tmp/deepseek-v2-lite-artifacts.OEjfce \
--human-eval /tmp/llm-atlas-routing-corpus/human-eval/data/HumanEval.jsonl.gz \
--gsm8k /tmp/llm-atlas-routing-corpus/gsm8k/grade_school_math/data/test.jsonl \
--tnews /tmp/llm-atlas-routing-corpus/tnews/test.json \
--tnews-archive /tmp/llm-atlas-routing-corpus/tnews_public.zip \
--wikitext /tmp/llm-atlas-routing-corpus/wikitext-2-raw-v1-validation.parquet \
--output src/data/deepseek-v2-lite-routing-role-marker-block-factorial.json \
--batch-prompts 4 \
--bootstrap 2000 \
--seed 20260729
```
独立复跑只改输出文件名。前端 compact:
```bash
npm run build:data:deepseek-role-block
```
| 文件 | bytes | SHA-256 |
|---|---:|---|
| 正式运行 JSON | 66,975,110 | `a703dddb…7e82` |
| 独立复跑 JSON | 66,975,110 | `a703dddb…7e82` |
---
## 14. 与 prompt sensitivity 文献的关系
角色块同时包含词汇选择与 delimiter 选择,因此与 prompt sensitivity 文献中的
lexical / syntactic / delimiter perturbation 有直接问题关联:
- [Lexical Sensitivity of Language Models](https://aclanthology.org/2024.emnlp-main.295/)
研究词汇变化对模型表现的影响;
- [Prompt Sensitivity Prediction](https://aclanthology.org/2024.naacl-long.325/)
讨论 prompt variation 的可预测性;
- [PROMPTPRISM](https://aclanthology.org/2026.findings-eacl.61.pdf)
把 delimiter、prefix、suffix 与 special-token 修改明确分开;
- [URIAL](https://proceedings.iclr.cc/paper_files/paper/2024/file/6bcbb4a501dbad0eba1b660c1a55318c-Paper-Conference.pdf)
是理解 base model 如何利用对话格式的背景;
- [LIMA](https://arxiv.org/abs/2305.11206)
提供回合格式与对齐数据的相关背景。
这些工作说明“格式细节值得测”,但没有预先决定本实验的路由结果。本实验也
没有复现它们的行为指标。
---
## 15. 允许说什么,不允许说什么
可以说:
- `User:` 与 `Assistant:` 在固定 tokenizer 中都是两个普通 token;
- head 与 delimiter 的直接替换都能改变后续目标的专家路由;
- `:`→`x` 在多数格略微缩小 head direct TV;
- head、delimiter 和 interaction 都没有统一调制 system-edge 的方向;
- 本轮 edit、位置、长度、对齐与复跑闸门通过。
不可以说:
- 冒号就是角色语义;
- `User` / `Assistant` head 对应固定专家专长;
- 某种角色块让路由“更好”或负载“更合理”;
- `x` 代表全部非标点或全部普通 delimiter;
- base checkpoint 的路由等价于 Chat/SFT/RL 行为;
- 路由 TV 可以替代生成准确率、指令遵循或安全评测;
- 六个 MoE 层的结果可直接外推到完整 27 层。
---
## 16. 下一步
本轮完成了两-token 角色块的固定协议因子分解。接下来最有价值的两条线是:
1. 在 `DeepSeek-V2-Lite-Chat` 上复现同一 tokenizer 与同一设计,区分
base routing 与对齐后行为;
2. 下载完整 checkpoint,执行全部 27 层,检查局部模式是否在更深层反转、
消失或增强。
在这两条完成前,网站会把结论停在:
> **base 权重、layer 1–6、固定公开语料、固定 batch 的路由机制证据。**
@@ -0,0 +1,513 @@
# DeepSeek-V2-Lite 特殊 Token 家族控制审计
> 状态:真实官方权重执行(X)<br />
> 模型:`deepseek-ai/DeepSeek-V2-Lite` **base checkpoint**<br />
> revision:`604d5664dddd88a0433dbae533b7fe9472482de0`<br />
> 执行边界:layer 0–6;观测 MoE layer 1–6<br />
> 样本:WikiText-2 / TNEWS / HumanEval / GSM8K 各 32 条<br />
> 正式运行与独立复跑:byte-exact<br />
> 完整 JSON SHA-256:`c372c1b03a8b15f615b54ded5d9257a8fc2cdb7728001735d3d4c1d8534af5bf`
## 0. 一句话先说结论
固定 DeepSeek-V2-Lite base 权重、128 个公开样本、重复词元历史、角色块、
长度、目标位置和八格 batch 后,只把历史 assistant 后的一个边界 ID 设为
`EOS / BOS / x / .`:
```text
目标内容 · prompt-balanced · 24 个 layer×domain 平均 system-edge TV
EOS .037518
BOS .048018
x .053975
句点 .055289
```
相对官方 EOS:
```text
BOS − EOS +.010500 22↑ / 2↓
x − EOS +.016457 24↑ / 0↓
句点 − EOS +.017771 24↑ / 0↓
```
这说明:
> 在本实验的固定协议中,边界的具体 token 身份会改变后续目标内容对 system
> 开关的路由距离;BOS 不能简单复现 EOS 的作用。
但是它**不能**推出:
> “特殊 token 普遍让 system effect 更小”。
原因非常具体:固定 tokenizer 的 special inventory 只有 EOS 和 BOS,
所以二者确实被完全枚举;但普通词元空间接近十万个 ID,本实验只挑了 `x`
和句点两个对照。`mean(x, .) − mean(EOS, BOS) = +.011864` 是四个 ID 内的
描述性 2-vs-2 汇总,不是对“普通 token 总体”的抽样推断。
---
## 1. 为什么要继续做这一轮
上一轮边界实验比较:
```text
EOS ↔ x / 句点 / 换行
```
结果表明,三个普通单 token 替换都能改变后续目标路由,而且多数格子的
system-edge TV 大于 EOS 条件。但它仍留下一个关键混淆:
- EOS 是特殊 token;
- 三个替换项都不是特殊 token;
- 因此差异可能来自 EOS 的具体身份,也可能来自“specialness”。
本轮加入 BOS,因为 BOS:
- 与 EOS 一样是 tokenizer 官方声明的 special token;
- 与 EOS 一样只有一个 token ID;
- 可以在不改变长度、目标位置和 batch shape 的前提下进行单 ID 替换。
问题随之变成:
1. BOS 能否复现 EOS 的 system-edge 路由模式?
2. EOS/BOS 与两个选定普通对照的描述性均值是否不同?
3. 这种差异是否在直接替换、CV、完整输入等口径下也同向?
---
## 2. 固定 tokenizer 的完整特殊词元库存
固定 revision 的真实 tokenizer 合同:
| 项目 | token / ID |
|---|---|
| `vocab_size` | `100000` |
| tokenizer 总长度 | `100002` |
| BOS | `<|begin▁of▁sentence|>` / `100000` |
| EOS | `<|end▁of▁sentence|>` / `100001` |
| PAD | `100001`,与 EOS 同 ID |
| `all_special_ids` | `[100000, 100001]` |
| `all_special_tokens` 数量 | `2` |
因此:
```text
special inventory = {BOS, EOS}
```
本轮确实穷尽了 special inventory,而不是只挑两个看起来特殊的字符串。
四个实验 ID:
| 水平 | token ID | special | 官方历史边界 |
|---|---:|---:|---:|
| `eos` | `100001` | 是 | 是 |
| `bos` | `100000` | 是 | 否,反事实 |
| `x` | `87` | 否 | 否,反事实 |
| `period` | `13` | 否 | 否,反事实 |
需要特别注意:
- PAD 与 EOS 共用 ID,所以不能把 PAD 当作第五个独立 special control;
- `x` 和句点不是从普通词元总体随机抽样;
- 普通词元还有不同频率、脚本、空白、标点和语义类别,本实验没有覆盖。
官方合同可在固定 revision 的
[tokenizer_config.json](https://huggingface.co/deepseek-ai/DeepSeek-V2-Lite/blob/604d5664dddd88a0433dbae533b7fe9472482de0/tokenizer_config.json)
中核查。
---
## 3. 2×4 实验设计
两个因子:
- `S`:system message 关闭 / 开启;
- `B`:边界 ID 为 EOS / BOS / `x` / 句点。
八格:
| 条件 | system | 边界 ID | 官方模板序列 |
|---|---:|---|---:|
| `S0 / EOS` | 0 | `100001` | 是 |
| `S1 / EOS` | 1 | `100001` | 是 |
| `S0 / BOS` | 0 | `100000` | 否 |
| `S1 / BOS` | 1 | `100000` | 否 |
| `S0 / X` | 0 | `87` | 否 |
| `S1 / X` | 1 | `87` | 否 |
| `S0 / PERIOD` | 0 | `13` | 否 |
| `S1 / PERIOD` | 1 | `13` | 否 |
序列局部形态:
```text
... Assistant : x [BOUNDARY_ID] User : TARGET ...
```
所有替换发生在官方 renderer 完成之后。除 EOS 外,其余三格是明确的
token-ID counterfactual,不是官方模板会自然渲染出的聊天。
---
## 4. 什么被严格固定
每个 source 的八格共同固定:
- 同一 checkpoint、revision、tokenizer 与 remote code;
- 同一 system 文本;
- 同一重复词元 user/assistant 历史;
- 同一 `User:` / `Assistant:` 角色块;
- 同一目标文本和 canonical 23-token span;
- 同一序列长度;
- 同一目标绝对起止位置;
- 同一 attention mask 和 right-padding;
- 同一个 32-row BF16 forward。
正式验证:
| 闸门 | 结果 |
|---|---:|
| source prompts | 128 |
| 输入变体 | 1,024 |
| system groups | 256 |
| 八格同长度 | 256 / 256 |
| 八格同目标位置 | 256 / 256 |
| 官方 EOS 零 ID 改动 | 256 / 256 |
| 三类反事实恰好一 ID 改动 | 768 / 768 |
| 实际 MoE routes | 2,044,224 |
正式运行与独立复跑都是 54,440,827 bytes,完整 JSON byte-exact。
---
## 5. 统计量回答的是三个不同问题
### 5.1 system edge
固定边界 `b`:
```text
TV(P(S0, b), P(S1, b))
```
它问:开关 system 时,目标内容的专家份额移动了多少?
### 5.2 相对 EOS 的 system-edge contrast
```text
TV_system(b) − TV_system(EOS)
```
它问:把边界 ID 换掉后,system-edge 距离变大还是变小?
### 5.3 直接替换距离
固定 system 水平 `s`:
```text
TV(P(s, EOS), P(s, b))
```
它问:只改这个历史 ID,本身让后续目标路由移动了多少?
直接替换距离非零,不代表 system-edge contrast 必然同方向。这两张账不能相减
之后只保留一个顺眼结论。
---
## 6. 主结果:目标内容的 system edge
主口径是:
```text
scope = target_content
aggregation = prompt_balanced
metric = total variation
bootstrap = source-paired, 2,000 resamples
seed = 20260729
```
24 格 system-edge TV:
| 层 | 域 | EOS | BOS | x | 句点 | BOS−EOS [95% CI] |
|---:|---|---:|---:|---:|---:|---:|
| 1 | 英文 | .056 | .108 | .084 | .081 | +.052 [.040, .061] |
| 1 | 中文 | .028 | .057 | .051 | .052 | +.030 [.022, .037] |
| 1 | 代码 | .057 | .071 | .080 | .081 | +.014 [.007, .022] |
| 1 | 数学 | .078 | .125 | .107 | .105 | +.047 [.039, .053] |
| 2 | 英文 | .030 | .039 | .044 | .043 | +.009 [.002, .017] |
| 2 | 中文 | .020 | .026 | .027 | .029 | +.005 [.001, .013] |
| 2 | 代码 | .033 | .044 | .054 | .050 | +.011 [.005, .019] |
| 2 | 数学 | .041 | .049 | .052 | .055 | +.008 [.003, .016] |
| 3 | 英文 | .030 | .042 | .043 | .044 | +.012 [.005, .017] |
| 3 | 中文 | .023 | .027 | .032 | .028 | +.004 [.000, .013] |
| 3 | 代码 | .041 | .049 | .047 | .044 | +.008 [.002, .014] |
| 3 | 数学 | .032 | .039 | .035 | .036 | +.006 [.001, .014] |
| 4 | 英文 | .034 | .040 | .050 | .052 | +.006 [.001, .014] |
| 4 | 中文 | .030 | .032 | .041 | .042 | +.003 [-.001, .010] |
| 4 | 代码 | .041 | .048 | .061 | .075 | +.007 [.001, .015] |
| 4 | 数学 | .051 | .057 | .069 | .070 | +.006 [.000, .015] |
| 5 | 英文 | .034 | .039 | .050 | .052 | +.006 [-.000, .013] |
| 5 | 中文 | .026 | .030 | .037 | .045 | +.004 [.001, .013] |
| 5 | 代码 | .039 | .039 | .051 | .051 | +.000 [-.005, .008] |
| 5 | 数学 | .044 | .042 | .055 | .053 | -.002 [-.008, .006] |
| 6 | 英文 | .031 | .038 | .056 | .060 | +.007 [.001, .014] |
| 6 | 中文 | .026 | .029 | .044 | .048 | +.003 [.000, .011] |
| 6 | 代码 | .032 | .043 | .061 | .062 | +.011 [.006, .018] |
| 6 | 数学 | .045 | .039 | .066 | .070 | -.006 [-.011, .002] |
把 24 格作为描述性层×域单元汇总:
| contrast | 平均 ΔTV | 点估计方向 | CI 全正 / 全负 / 跨零 |
|---|---:|---:|---:|
| BOS−EOS | +.010500 | 22↑ / 2↓ | 19 / 0 / 5 |
| x−EOS | +.016457 | 24↑ / 0↓ | 23 / 0 / 1 |
| 句点−EOS | +.017771 | 24↑ / 0↓ | 22 / 0 / 2 |
可读结论:
- BOS 在多数格比 EOS 产生更大的 system-edge 路由距离;
- 但 L5/L6 数学已经出现反向点估计;
- `x` 和句点的差异更大、更一致;
- 因此“BOS 是特殊 token”并不足以复现 EOS 的模式。
---
## 7. 四 ID 的描述性 family summary
只在同一 shared-source bootstrap 内计算:
```text
special mean = mean(EOS, BOS)
ordinary-control mean = mean(x, period)
ordinary − special
```
目标内容、prompt-balanced 的 24 格均值:
```text
special mean .042768
ordinary-control mean .054632
ordinary − special +.011864
```
24 / 24 点估计为正;95% CI 分类为 20 全正、0 全负、4 跨零。
正确表述:
> 在这四个具体 ID 中,两个选定普通对照的 system-edge TV 均值高于完整
> special inventory 的均值。
错误表述:
> 普通 token 普遍比特殊 token 产生更大的 system effect。
后一句需要对普通 token 总体定义抽样框、抽取更多频率与类别匹配 ID,并进行
层级推断;本轮没有做。
---
## 8. 直接替换没有给出同样简单的故事
跨 24 格平均 direct target TV:
| EOS→替换项 | S0 | S1 | S1−S0 | 点估计方向 |
|---|---:|---:|---:|---:|
| BOS | .043479 | .040793 | -.002686 | 7↑ / 17↓ |
| x | .036428 | .044132 | +.007704 | 20↑ / 4↓ |
| 句点 | .036296 | .045606 | +.009310 | 22↑ / 2↓ |
其中:
- BOS direct interaction 的 CI 分类为 3 正 / 4 负 / 17 跨零;
- `x` 为 10 正 / 0 负 / 14 跨零;
- 句点为 12 正 / 0 负 / 12 跨零。
所以本轮不是“所有替换都被 system 统一放大”。BOS 与两个普通对照在
直接作用的 system modulation 上呈现不同方向。
CV 也没有形成简单类别规律。BOS−EOS 的 system-edge ΔCV 跨 24 格平均
`+.009904`,点估计 `13↑ / 11↓`,CI `7 / 3 / 14`。
---
## 9. 为什么完整输入只能作稳健性账
完整输入会把被编辑的边界 token 自己也计入聚合,因此它混合:
1. 边界 ID 自身的路由;
2. 后续角色块;
3. 对齐目标内容的下游传播。
full-input、prompt-balanced 的平均 system-edge TV:
```text
EOS .138988
BOS .137253
x .141592
句点 .140312
```
BOS−EOS 平均为 `-.001735`,点估计 `6↑ / 18↓`;方向与目标内容主结果不同。
四 ID family summary 为 `+.002831`,也远小于目标内容的 `+.011864`。
这不是矛盾,而是统计对象不同。因果主张只落在:
> **边界 token 之后、精确对齐的目标内容路由。**
---
## 10. 路由集合稳定性
以 EOS↔BOS 的直接替换为例,聚合后的 target top-6 set exact:
| 层 | S0 | S1 | mean Jaccard S0 / S1 |
|---:|---:|---:|---:|
| 1 | 40.9% | 45.4% | .795 / .817 |
| 2 | 52.8% | 53.2% | .851 / .853 |
| 3 | 60.4% | 57.4% | .880 / .870 |
| 4 | 59.8% | 54.8% | .878 / .862 |
| 5 | 59.5% | 58.6% | .875 / .874 |
| 6 | 58.9% | 57.9% | .872 / .870 |
这说明一个历史单 ID 的变化可以传播到后续专家集合,但并非每个 token 都换
专家;路由变化是部分、分层且受内容影响的。
---
## 11. batch-content 审计
当前实验与上一轮边界实验共享 EOS / `x` / 句点三类条件:
```text
message hash 768 / 768 exact
rendered hash 768 / 768 exact
token-ID hash 768 / 768 exact
target contract 768 / 768 exact
```
然而把同一行放入不同 companion rows 的 32-row BF16 batch 后,深层临界
gate 决策不必 byte-exact。把三个共享水平合计:
| 层 | target route hash exact | target integer load exact |
|---:|---:|---:|
| 1 | 768 / 768 | 768 / 768 |
| 2 | 610 / 768 | 667 / 768 |
| 3 | 477 / 768 | 572 / 768 |
| 4 | 368 / 768 | 496 / 768 |
| 5 | 269 / 768 | 437 / 768 |
| 6 | 244 / 768 | 402 / 768 |
因此:
> BF16 的 batch content 是执行合同的一部分。正式统计只比较本轮同一个
> 八格 batch 内的 source-paired 条件,不跨实验拼接深层数值。
---
## 12. 可复现入口
正式运行:
```bash
PYTHONPATH=/tmp/deepseek-v2-lite-pydeps.6ZJAH3:/usr/lib/python3/dist-packages \
/home/wuyang/.pyenv/versions/navi-router-cu128/bin/python \
experiments/deepseek/v2_lite_routing_special_token_family_control.py \
--artifact-dir /tmp/deepseek-v2-lite-artifacts.OEjfce \
--human-eval /tmp/llm-atlas-routing-corpus/human-eval/data/HumanEval.jsonl.gz \
--gsm8k /tmp/llm-atlas-routing-corpus/gsm8k/grade_school_math/data/test.jsonl \
--tnews /tmp/llm-atlas-routing-corpus/tnews/test.json \
--tnews-archive /tmp/llm-atlas-routing-corpus/tnews_public.zip \
--wikitext /tmp/llm-atlas-routing-corpus/wikitext-2-raw-v1-validation.parquet \
--output src/data/deepseek-v2-lite-routing-special-token-family-control.json \
--batch-prompts 4 \
--bootstrap 2000 \
--seed 20260729
```
独立复跑只改输出文件名。确定性前端 compact:
```bash
npm run build:data:deepseek-special
```
完整工件:
| 文件 | bytes | SHA-256 |
|---|---:|---|
| 正式运行 JSON | 54,440,827 | `c372c1b0…4af5bf` |
| 独立复跑 JSON | 54,440,827 | `c372c1b0…4af5bf` |
---
## 13. 与已有论文怎样对齐
外部研究已经反复说明 prompt 的词汇、格式与分隔符变化可能显著影响模型输出:
- [Lexical Sensitivity of Language Models](https://aclanthology.org/2024.emnlp-main.295/)
研究词汇变化对任务表现的影响;
- [Prompt Sensitivity Prediction](https://aclanthology.org/2024.naacl-long.325/)
讨论模型与任务对 prompt 变化的敏感性;
- [PROMPTPRISM](https://aclanthology.org/2026.findings-eacl.61.pdf)
在 taxonomy 中明确区分 delimiter、prefix、suffix 与 special-token 修改;
- [URIAL](https://proceedings.iclr.cc/paper_files/paper/2024/file/6bcbb4a501dbad0eba1b660c1a55318c-Paper-Conference.pdf)
展示 base model 对格式化与对齐样式的利用;
- [LIMA](https://arxiv.org/abs/2305.11206)
是理解对话格式、回合边界与少量高质量对齐数据的背景材料。
这些论文提供问题背景,但不替本实验背书。尤其不能把:
```text
路由 TV 变化
```
直接改写成:
```text
准确率、质量、安全性或指令遵循变化
```
本实验没有生成答案,也没有行为评测。
---
## 14. 允许说什么,不允许说什么
可以说:
- 固定 tokenizer 的 special inventory 只有 BOS 和 EOS;
- 在固定协议里,BOS 不复现 EOS 的目标 system-edge 路由模式;
- `x`/句点相对 EOS 在 24 格中表现出更大的目标 system-edge TV;
- 四 ID 的 2-vs-2 family summary 是描述性结果;
- 单 ID 边界变化能传播到后续目标的 MoE routing;
- 正式运行与独立复跑 byte-exact。
不可以说:
- 普通 token 普遍比 special token 更有效;
- EOS 让模型更懂回合或让回答更好;
- BOS/EOS 具有已识别的专家语义;
- 结果适用于所有 27 层、Chat/SFT/RL 权重或线上流量;
- 路由差异等于性能差异;
- 24 个 layer×domain 单元是 24 个独立随机样本。
---
## 15. 下一步
这一轮解决了 special inventory,却还没有解决角色块内部结构。固定模板中的:
```text
User: = [5726, 25]
Assistant: = [77398, 25]
```
都是两个普通 token。所以下一轮采用完整 2×2:
```text
head = User / Assistant
delimiter = : / x
```
用同一个 batch 分离词头主效应、分隔符主效应与二者 interaction。