feat: factor DeepSeek boundary and role blocks
This commit is contained in:
@@ -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 的路由机制证据。**
|
||||
Reference in New Issue
Block a user