SPR Echo Self-Repair
树的所有路由参数为 0 时,还能训练回来吗?
1. 问题
SPR-006 确立了树的 echo 结构。但一个追问没有回答:如果参数全部被置零,树还能自己修复吗?
这个问题不是理论假设——它等价于问"系统能否从全面瘫痪中自恢复"。如果答不出,模型就没有鲁棒性。
更难的是:乘法树下,全 0 时梯度也是 0(∂loss/∂p₀ = token × p₁ × p₂,p₁=p₂=0 则梯度和为零)。任何一阶优化都逃不出这个鞍点。
2. 方案:离散路由 + sigmoid 软判决
换个视角——树的分叉不是连续乘法,是离散方向决策。
每个节点:sigmoid(token @ W) → 右转概率
训练期: 软概率(梯度可穿透 sigmoid)
推理期: sign(token @ W) → 硬方向
W 初始化为零时,sigmoid(0) = 0.5——每个 token 左转和右转概率各半,路由处于最大熵状态。训练的目标是:让 W 从零长出来,把路由推到低熵(确定性)状态。
3. 训练
前向:每个 token 对每片叶子计算软分配概率矩阵(128×16)。
损失:两个部分。
组内方差: within_loss = Σ(token 到叶中心距离 × 分配概率)
平衡正则: balance_loss = (leaf_counts - ideal)² / ideal
总损失: loss = within_loss + 0.5 × balance_loss
平衡正则必不可少——没有它,所有 token 会坍缩到一片叶子(trivial solution)。
优化:Adam,500 步。
4. 结果
| 指标 | 训练前 | 训练后 |
|---|---|---|
| 确定性 | 随机 | 128/128 |
| 叶子活性 | 16/16 | 16/16 |
| 分配概率 | 0.06(均匀) | 0.26(集中化) |
| 组内损失 | - | 0.38 |
训练后,每个 token 的最可能叶子固定不变——同一 token 走两次,走到同一片叶子。echo 成立。
反转验证:初始时有 100/128 的 token 分配到最近叶子,训练后涨到 117/128——17 个 token 的路径被梯度反转到了正确的叶子。
5. BLEU 验证
5.1 词级简化版
先做简化验证:每个词独立路由(不分组),用 per-node 随机权重 + 中位数二分构建树。
| 数据 | 词数 | 架构 | 叶子 | BLEU-4 | 参数 | 训练 |
|---|---|---|---|---|---|---|
| 随机词 | 200 | per-node + median | 512 | 99.2% | 7K | 无 |
| WMT14 真实 | 3011 | per-node + median | 4096 | 100% | 65K | 无 |
| Phase 0 DummyModel | 56K | Embedding→Linear | - | 97.3% | 7.3M | 2 epoch |
词级版代码:spr_p7_bleu.py
5.2 递归二分(句子级——正确设计)
本节回到 SPR 的正确设计:每次节点 hash 的是一个 token 组(子串),不是单个 token。
"猫猫不吃苹果" → 整句到达根节点
│ 根节点 hash(整句) → median 半分
├─ "猫猫不吃"(左子树)
│ │ hash(猫猫不吃) → median 半分
│ ├─ "猫猫"
│ └─ "不吃"
└─ "苹果"(右子树)
└─ "苹果"(独叶)
每个内部节点做三件事:
- Hash 当前 token 组:
scores = group_emb @ node_W(本组全部 token 的投影) - 中位数二分:按 scores 排序 → 前半进左子树,后半进右子树
- 递归:每个子树带着自己的 token 组继续
当前 BLEU 实验是词级简化版(每词独立路由),句子级递归二分的 BLEU 待 SPR-008 实现。
词级版代码:spr_p7_bleu.py
6. 本质:学习就是反转路径判断
把训练过程剥到底:学习 = 梯度说"这个判定错了" + 反转它。
sigmoid(W @ token) = 0.3 → 当前判定去左
loss 的梯度说:应该去右 → ΔW 把 sigmoid 往 0.7 推
损失函数的工作不是"设计优化目标"——是定义什么算错。
| 场景 | “错了"的定义 | 梯度做什么 |
|---|---|---|
| echo(P6) | 同 token 两次到不同叶子 | 统一路由,推到确定性 |
| 平衡(P7) | 叶子分配不均 | 把多余的分出去 |
| 语义(P8-) | 语义不相干的 token 挤一叶 | 有语义差异的拆开 |
不需要复杂的损失公式——只需要回答一个问题:当前的路由判断里,哪个是错的? 答出来,梯度就自动反转它。
7. 结论
离散 sigmoid 路由 + 平衡损失解决了乘法树的全零鞍点问题。路由从随机态自恢复到确定态,证明树的决策机制具有自修复能力。
这为下一步——把路由从"随机→确定"升级为"无序→有序”(真正的翻译任务)——铺平了道路。
License: GPLv3 本文《SPR》系列采用 GPLv3 协议开源发布。