hetero-moe-router — 路由实验三合一(全部失败或半成功)
已合并两个实验仓库:
hetero-moe-router-unfrozen、hetero-moe-shared-routed的内容现在在子目录里,原仓库已归档删除。
目录(本仓库已合并)
| 路径 | 原来在 | 内容 |
|---|
| unfrozen/ | hetero-moe-router-unfrozen | 专家解冻实验 |
| shared-routed/ | hetero-moe-shared-routed | 共享专家 + 路由专家 |
| 根目录 | 本仓库原有 | 专家冻结实验(v33 原设定) |
三个实验对照
| 实验 | task loss | 专家负载 | 探针 | 判定 |
|---|---|---|---|---|
| 根目录(冻结) | 52.97 → 13.09 | — | 0.390 / 0.296 | 路由没学 |
**unfrozen/**(解冻) |
52.97 → 0.112 | [0.295,0.814,0.890,0.001] |
0.256 / 0.266 | 塌缩 |
**shared-routed/**(共享+路由) |
52.97 → 0.10 | [0.001,0.999,0.9997,0.0001] |
— | 融合成功,路由塌 |
unfrozen/report.json 自带声明:
"INDEPENDENT EXPERIMENT: expert weights UNFROZEN and randomly initialized — NOT the project v33 setting."
shared-routed/ 的结构:y = x + SharedExpert(fusion) + routed experts(dispatch)。
它的融合部分是成功的:跨模态余弦 0.029 → 0.107,正相关比例 73.8% → 96.7%。
这是本系列第一次把跨模态融合做成功。路由部分仍失败。
共同结论
根因是目标函数只跟模态有关、不跟内容有关 —— 路由拿不到内容梯度。
这直接导致 v62 的两个改变:
- 任务换成真实分类(交叉熵 + 真实标签)
- 融合层从 256 维扩到 1024 维(= Σ 子空间)
v62 后续:held-out 0.9076(v62.3),负载均衡 0.612 —— 不塌缩。
⚠️ 更正一条历史说法:v62.0 当时报的「held-out 0.9016 / 负载均衡 0.8774 / 路由熵 0.5016」
不能作为「v62 不塌缩」的证据。那组数字里,proj_space.router 是 lazy 创建的 ——
既没被 load_state_dict 加载上,也从未进入 optimizer,所以它统计的是一个
随机初始化的模块(0.8774 尤其误导)。v62.1/v62.2 的同一组数字同样作废。
作废的是槽门控那部分;专家的数字有效(fusion.W_router 是 nn.Parameter,
从 __init__ 起就在 trainable 里),所以「换成真实分类任务后专家不再塌缩」
这个结论本身站得住 —— 只是支撑它的数字得换成 v62.3 的。
重要
这三个是实验记录,report.json 的 loss 曲线不能当性能指标引用。
⚠️ 均为裸 state_dict(torch.save),不是 from_pretrained 格式。