从转动旋钮,到让模型自己调焦

SPR-087 做的是一项冻结实验:固定训练完成的 TreeHeap-106M,逐档改变 FOLD parent 的尺度,然后直接看 Decoder 生成什么。

它观察到了三个事实:

  1. 尺度过低时,部分输出为空或只剩短片段;
  2. 中间存在连续的稳定成句区;
  3. 尺度过高时,递归越深,越容易长度膨胀、重复并失去 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 不要求三个尺度必须朝某个预想方向运动。正式结果分四层解释:

  1. 三个参数是否持续收到有限梯度;
  2. 任意两个最终尺度是否相差至少 0.02,形成可测的深度分化;
  3. 固定 valid mean NLL 是否改善至少 0.01
  4. 20 句直接 Decode 的字符 F2 是否改善,同时 formed 与 EOS 不明显退化。

如果 NLL 改善而直接文本退化,这不是成功,也不是废数据,而是一笔明确的交换。如果三个 尺度最终重新靠拢,则说明当前 token loss 更偏好共享焦距。如果它们继续分开,我们才得到 “递归深度会训练出不同观察尺度”的第一阶证据。

边界

F02 不是完整的自适应显微镜。三个参数只看递归深度,不看输入句子、类别或当前隐态;它也 没有联合训练新的语义压缩目标。

这一级阶梯只回答一个问题:

在冻结 TreeHeap 其余部分以后,梯度能否让不同递归深度主动选择自己的 FOLD 焦距,并 在直接生成中留下可见、可复现的变化?

答案等 taskd 372 跑完以后再写。失败记录、每个 wake 和原始译文都会保留。

License: GPLv3。本文中的可学习焦距参数化、实验合同、失败记录和 ARA evidence 按项目 许可证公开,欢迎复现、批评与提出反证。