不再只给模型打分,而是直接看它看见了什么
最近我们讨论了一个比普通消融更细的问题。
消融通常把某个模块删除,然后比较 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.5 到 0.707 称为候选焦区:
尺度过弱
-> 证据不足,EOS 或短词片段占优
中间焦区
-> 文本能够形成并正常停止
尺度过强
-> 坍缩失稳,长度与重复扩张
这不是一条已经证明的普适规律。四句话太少,而且有一条隐藏的旁路尚未拆开。
5. s=0 为什么不等于只读 leaf
TreeHeap Decoder 在读取协议树前,还有一个学习得到的向上卷积 K_up:
当我们把 $s$ 设成零时,直接 FOLD parent 确实变成零;但 K_up 仍能根据 children
重新生成一个残差 parent。
因此第一轮不能得出“leaf 自己就足够”的结论。准确说法是:
在直接 parent 被清零以后,leaves 与仍然启用的
K_up路径有时还能驱动冻结 Decoder 生成文本。
这也是下一轮必须做二维实验的原因。
6. 下一轮:焦距乘以重建通道
正式 ARA 实验固定 20 个标本,分为五类:
- 简单主谓宾;
- 长距离依赖;
- 否定与操作顺序;
- 数字与实体;
- 抽象与递归描述。
每一类同时包含中译英和英译中。尺度网格加密为:
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 按项目许可证公开,欢迎复现、批评与提出反证。