从转动旋钮,到让模型自己调焦
SPR-087 做的是一项冻结实验:固定训练完成的 TreeHeap-106M,逐档改变 FOLD parent 的尺度,然后直接看 Decoder 生成什么。
它观察到了三个事实:
- 尺度过低时,部分输出为空或只剩短片段;
- 中间存在连续的稳定成句区;
- 尺度过高时,递归越深,越容易长度膨胀、重复并失去 EOS。
depth 6 和 depth 7 的字符相似度焦点还开始聚集到 0.707..0.8。但这仍然只是研究者
替模型转动旋钮。它没有回答更关键的问题:
如果把旋钮接上梯度,TreeHeap 能不能自己学会调焦?
这就是 F02 的目标。
最小训练原型:只增加三个参数
我们没有立即加入样本级控制网络。那会同时改变容量、路由和优化空间,即使结果变好,也 很难知道究竟是不是焦距在起作用。
F02 只给 depth 5、6、7 各增加一个坐标,共三个可训练参数。尺度写成:
u_d = tanh(theta_d)
s_d = sqrt(0.5) + (1 - sqrt(0.5)) * u_d, u_d >= 0
s_d = sqrt(0.5) + sqrt(0.5) * u_d, u_d < 0
parent = s_d * (left + right)
当 theta_d=0 时,尺度严格回到生产实现的 sqrt(0.5)。向两个方向移动时,尺度保持在
开区间 (0,1),不会因为三个新参数直接把递归能量推到无界区域。
除了这三个坐标,TreeHeap-106M checkpoint 的旧参数全部冻结:
- source encoder 不更新;
- compressor 不更新;
- FOLD 之外的协议参数不更新;
K_up保持训练后的原生状态,但不更新;- 语言 Decoder 不更新。
因此,训练后任何输出变化都只能来自三个深度焦距,而不是整个模型重新记住了一遍语料。
为什么训练仍然使用 token loss
F02 的主观察对象是直接 Decode,但焦距参数仍需要一个可信信号。当前最可靠的信号仍是 teacher-forced token cross entropy:它负责告诉三个旋钮梯度方向。
这不等于重新把 NLL 当作唯一结论。每个正式 wake 还会在锁定的 20 个显微镜标本上,对 三个 depth 直接生成文本,记录:
- 原始译文;
- formed rate;
- EOS rate;
- 输出长度与参考长度比;
- 相邻重复率;
- character-F2 diagnostic。
训练 loss 是推动旋钮的手,直接 Decode 才是我们透过目镜看到的图像。
第一次 smoke 为什么失败
初始 smoke taskd 370 确实完成了 30 steps,但被 P0 拒绝。失败不是 OOM,也不是生成
文本不同:直接文本逐字一致,基座哈希、三层梯度和 reload 都正常。
问题出在最初的参数化:
s = sigmoid(logit(sqrt(0.5)))
数学上它等于 sqrt(0.5),但 float32 经过逆函数往返后产生了微小舍入,step-0 NLL 相差
3.110864e-8,超过预注册的 1e-9 同函数门。
我们没有把门槛改宽,也没有删除失败记录。r1 改为以 sqrt(0.5) 为绝对零点的双侧坐标,
使 theta=0 不再经过逆函数往返。
这个失败很小,但值得留下:当实验只研究三个标量时,起点的微小不一致也可能被误认成 训练收益。
Smoke r1:梯度已经到达焦距
修正后的 taskd 371 跑满 30 steps,全部安全门通过:
| 检查 | 结果 |
|---|---|
| step-0 NLL 差 | 0 |
| step-0 直接文本 | 逐字一致 |
| 三个 depth 的梯度 | 全部非零且有限 |
| 原 106M 基座 | 哈希不变 |
| checkpoint reload | NLL 误差为 0 |
| formed rate | 1.0 -> 1.0 |
30 步后的尺度已经出现分化:
| depth | 初始尺度 | 30-step 尺度 |
|---|---|---|
| 5 | 0.70710677 | 0.70969760 |
| 6 | 0.70710677 | 0.70627469 |
| 7 | 0.70710677 | 0.70328337 |
valid mean NLL 暂时改善 0.00102895。两个 smoke 标本的字符 F2 没有变化,所以现在只能
说“梯度能够调焦”,还不能说“调焦改善了翻译”。
正式训练合同
正式 taskd 372 已启动,合同固定为:
- TreeHeap-106M pass-2 checkpoint;
- 只训练三个焦距坐标;
- batch 64;
- 固定 5,000 steps;
- 约 32 万条训练样本暴露;
- depth 5/6/7 循环训练;
- 每 500 steps 保存 wake、直接译文与小型 focus checkpoint;
- 质量曲线即使非单调也不提前停止。
只有 OOM、CUDA/Xid、NaN/Inf、基座哈希改变、reload 损坏、270W 功率限制解除或 step 停止推进,才允许中断。
我们准备怎样判断结果
F02 不要求三个尺度必须朝某个预想方向运动。正式结果分四层解释:
- 三个参数是否持续收到有限梯度;
- 任意两个最终尺度是否相差至少
0.02,形成可测的深度分化; - 固定 valid mean NLL 是否改善至少
0.01; - 20 句直接 Decode 的字符 F2 是否改善,同时 formed 与 EOS 不明显退化。
如果 NLL 改善而直接文本退化,这不是成功,也不是废数据,而是一笔明确的交换。如果三个 尺度最终重新靠拢,则说明当前 token loss 更偏好共享焦距。如果它们继续分开,我们才得到 “递归深度会训练出不同观察尺度”的第一阶证据。
边界
F02 不是完整的自适应显微镜。三个参数只看递归深度,不看输入句子、类别或当前隐态;它也 没有联合训练新的语义压缩目标。
这一级阶梯只回答一个问题:
在冻结 TreeHeap 其余部分以后,梯度能否让不同递归深度主动选择自己的 FOLD 焦距,并 在直接生成中留下可见、可复现的变化?
答案等 taskd 372 跑完以后再写。失败记录、每个 wake 和原始译文都会保留。
License: GPLv3。本文中的可学习焦距参数化、实验合同、失败记录和 ARA evidence 按项目 许可证公开,欢迎复现、批评与提出反证。