不再只给模型打分,而是直接看它看见了什么

最近我们讨论了一个比普通消融更细的问题。

消融通常把某个模块删除,然后比较 NLL、BLEU 或其他指标。它能回答“这个模块是否有 因果贡献”,却不容易告诉我们:一个连续参数从小到大变化时,模型内部的观察结果究竟 怎样变形。

于是 Nio 提出了一个更直观的实验名称:

固定 checkpoint 和输入句子,逐档改变 TreeHeap 的观察矩阵,再把每一档直接 Decode 出来。这像把标本放在显微镜下,旋转调焦旋钮,寻找能够看清结构的焦距。

我们把它称为 TreeHeap 显微镜实验

它不是文学包装。这个比喻恰好对应了一套可复现的实验合同:

显微镜概念 TreeHeap 实验对象
固定标本 冻结 checkpoint 与固定输入句
物镜倍率 TreeHeap 递归深度
调焦旋钮 FOLD parent 的数值尺度
观察图像 Decoder 直接生成的文本
合焦 文本成形、正常结束、语义轮廓可辨

1. 我们调的到底是什么

当前协议 TreeHeap 会把相邻 child 两两合并成 parent。忽略 mask 的边界情况,本次只读 干预把局部算子写成:

$$ H_{parent}=s(H_{left}+H_{right}) $$

它对应一个作用于两个 child 的局部观察矩阵:

$$ M_s=\begin{bmatrix}sI & sI\end{bmatrix} $$

其中,$I$ 是隐态维度上的单位矩阵,$s$ 是我们旋转的“焦距”旋钮。

当前代码使用:

$$ s=\sqrt{\frac{1}{2}}\approx0.707 $$

这使两个独立、同方差 child 相加后大致保持二范数能量。它不是从语言语义推导出的 唯一答案,只是当前数值合同。另一个自然候选是算术平均:

$$ s=0.5 $$

我们还需要看更弱和更强的观察尺度会发生什么,因此第一轮扫描固定为:

s = 0, 0.25, 0.5, 0.707, 1.0

所有训练参数都被冻结。没有任何一档获得额外训练机会。

2. 为什么不用 NLL 决定答案

这次问题不是“哪一档对参考 token 的平均概率更高”,而是:

同一个 Decoder 在看到不同尺度的 TreeHeap 状态以后,会坍缩出怎样的文本?

如果只保存一个 NLL,我们看不到下面这些完全不同的失败形态:

  • 第一个 token 就选择 EOS,输出为空;
  • 只能生成几个与输入有关的词片段;
  • 能形成句子,但主体、动作或对象丢失;
  • 句长不断膨胀,重复局部短语;
  • 到最大长度仍不生成 EOS。

这些现象都可能被一个聚合分数压在一起。因此本轮以逐句 Decode 为主证据,长度、EOS、 重复率和字符相似度只用于整理观察。

3. 第一块标本怎样变化

第一轮使用训练完成的 TreeHeap-106M 第二遍语料 checkpoint,固定 greedy Decoder,测试 四个句子、三个递归深度。下面是一句短英文在 depth 7 下的完整变化:

Input: The child put the red apple on the table.

s=0
  ⁇ 子虫

s=0.25
  ⁇ 放进食

s=0.5
  放进餐后

s=0.707(当前实现)
  放进餐后,把孩子放在桌子上。

s=1.0
  放进的进食,把进食le-le 放在桌子上,把孩子放在小包上,
  把孩子放在一小瓶里,把孩子放在一小瓶里……
  (达到 48 pieces,仍未生成 EOS)

这里出现了一条肉眼可见的变化过程:弱观察只能留下碎片;中间尺度开始形成动作和位置; 尺度继续增加以后,生成长度与重复同时膨胀。

反方向的短句也出现了低尺度立即停止:

Input: 孩子把红苹果放在桌子上。
Depth: 5

s=0      -> 空输出,立即 EOS
s=0.25   -> 空输出,立即 EOS
s=0.5    -> The table is placed in the table.
s=0.707  -> Put a table in the table.
s=1.0    -> Put a table in the table.

这些译文远没有达到产品质量。显微镜实验观察的是状态能否形成以及怎样失稳,不能把“能 成句”偷换成“翻译正确”。

4. 第一条焦距曲线

每个尺度共有 12 个输出,汇总如下:

FOLD 尺度 空输出 未生成 EOS 平均输出 pieces 直接观察
0 2/12 1/12 9.42 容易立即停止或只剩词片段
0.25 2/12 1/12 9.42 与零尺度相近
0.5 0/12 0/12 11.92 全部正常结束,短句较稳定
0.707 0/12 0/12 18.17 轮廓更丰富,也出现语义漂移
1.0 0/12 4/12 30.33 长度膨胀、重复、停止失败

从这 60 个输出看,冻结 Decoder 并非只能接受训练时的唯一尺度。它在一个中间区间仍能 工作,但对 parent 幅度并不具备全尺度不变性。

我们暂时把 0.50.707 称为候选焦区

尺度过弱
  -> 证据不足,EOS 或短词片段占优

中间焦区
  -> 文本能够形成并正常停止

尺度过强
  -> 坍缩失稳,长度与重复扩张

这不是一条已经证明的普适规律。四句话太少,而且有一条隐藏的旁路尚未拆开。

5. s=0 为什么不等于只读 leaf

TreeHeap Decoder 在读取协议树前,还有一个学习得到的向上卷积 K_up

$$ H_{parent}^{read} =H_{parent}^{fold} +g_{up}K_{up}(H_{parent}^{fold},H_{left},H_{right}) $$

当我们把 $s$ 设成零时,直接 FOLD parent 确实变成零;但 K_up 仍能根据 children 重新生成一个残差 parent。

因此第一轮不能得出“leaf 自己就足够”的结论。准确说法是:

在直接 parent 被清零以后,leaves 与仍然启用的 K_up 路径有时还能驱动冻结 Decoder 生成文本。

这也是下一轮必须做二维实验的原因。

6. 下一轮:焦距乘以重建通道

正式 ARA 实验固定 20 个标本,分为五类:

  1. 简单主谓宾;
  2. 长距离依赖;
  3. 否定与操作顺序;
  4. 数字与实体;
  5. 抽象与递归描述。

每一类同时包含中译英和英译中。尺度网格加密为:

0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.707, 0.8, 1.0

同时设置两个 K_up 状态:

native  -> 保留训练得到的向上卷积
bypass  -> 旁路 K_up,只观察直接 FOLD parent 与 leaves

再乘以三个递归深度,总计:

20 specimens * 9 scales * 2 K_up modes * 3 depths = 1080 outputs

所有输出都必须保存。任何一条质量曲线中途下降都不能触发早停,因为我们寻找的正是完整 焦距曲线,而不是只保留一段单调区间。

7. 实验将回答三个问题

7.1 是否真的存在焦区

如果多个递归深度都出现连续的稳定成句区间,而两端更容易空输出或发散,“焦距”就不再 只是一个好听的名字,而是冻结模型的运行态性质。

7.2 是 FOLD 在调焦,还是 K_up 在补焦

如果旁路 K_up 后焦区大幅移动或消失,说明 Decoder 一直在主动修正 FOLD 的数值尺度。 如果两条曲线接近,焦距主要由直接 parent 幅度和后续解码边界决定。

7.3 焦距是共享的还是标本相关的

如果短句、长句、否定句和抽象句的最佳区间相近,我们得到一个架构级公共焦距候选。 如果不同类别需要不同尺度,那么固定常数可能不是最终答案,TreeHeap 需要根据输入和 递归深度学习一个自适应调焦协议。

8. 现在可以说什么

第一轮实验支持一个很窄但很清楚的观察:

FOLD parent 的数值尺度是冻结 TreeHeap Decoder 的因果变量。尺度过弱、适中和过强 会分别产生碎片化、成句和长度发散等不同 Decode 形态。

它还没有告诉我们哪个尺度最适合重新训练,也没有证明“搜索空间变大”是高尺度失败的 唯一机制。greedy 输出只能告诉我们 Decoder 的坍缩路径变了;要讨论概率空间,还需要 继续记录 EOS 概率、token entropy 和候选分布。

但显微镜已经架起来了。下一步不是猜一张更好的照片,而是在固定标本上画完焦距曲线, 再判断 TreeHeap 需要一个常量焦距,还是一套会自己调焦的观察协议。

9. 正式扫描结果:不是一个点,而是一片焦平面

文章写完后,正式任务在同一天完成了全部 1080 个固定单元。20 个标本、三个 depth、 九档尺度与两种 K_up 状态全部运行结束,没有按中途质量提前停止。

原生 K_up 下,通过成形、EOS 与空输出门槛的连续区间为:

depth 连续稳定尺度
5 0.375, 0.5, 0.625, 0.707
6 0.25, 0.375, 0.5, 0.625, 0.707
7 0.125, 0.25, 0.375, 0.5, 0.625, 0.707

所以“存在焦区”的 Claim 在三个 depth 上都通过了。它不是一个精确点,而是一段允许 Decoder 正常形成并结束文本的区间。

高尺度端点的失稳随深度明显增强:s=1 的 formed rate 从 depth 5 的 75%,下降到 depth 6 的 55% 和 depth 7 的 30%。depth 7 只有 40% 的输出在 64 pieces 内 产生 EOS。这比“看起来有点重复”更清楚:未经归一化的 parent 求和会沿递归逐层放大, 最终把冻结 Decoder 推出稳定坍缩区。

旁路 K_up 后,540 对单元中有 538 对生成文本发生变化。depth 5 的稳定区从 0.375..0.707 移到较低的 0..0.375,depth 6 也从 0.25..0.707 移到约 0..0.5。因此 K_up 的确参与调焦,但它不是简单地“补回丢失 parent”:在低尺度下, 关闭它有时反而更容易形成文本;在 0.625..0.8 附近,开启它通常带来更好的语义 相似度和稳定率。两条路径存在耦合。

更有意思的是不同倍率下的焦距分布。五类标本在 depth 5 的最佳 character-F2 尺度 IQR 为 0.375,没有共同焦点;depth 6 和 7 的 IQR 都缩小到 0.093,最佳尺度聚集在 0.707..0.8

这给出了一个比“把常数改成 0.5”更谨慎也更有价值的方向:

TreeHeap 的焦距可能随递归深度变化;浅层更依赖标本,深层才逐渐形成共同观察尺度。

同时,最稳定的成句区通常比最佳字符相似度区更低、更宽。语义焦点靠近失稳边界,这意味着 未来的自适应调焦不能只追求更强信号,也必须同时约束 EOS、长度与重复。显微镜实验找到的 不是一个立即替换生产参数的答案,而是一张可以继续训练和验证的焦平面。

下一阶训练实验见 SPR-088:TreeHeap 可学习焦距。F01 的冻结扫描 继续作为只读证据保留,不追认成训练结果。

License: GPLv3。本文中的 TreeHeap 显微镜实验、参数干预设计、ARA 判定与 evidence 按项目许可证公开,欢迎复现、批评与提出反证。