这篇接在 094 后面

SPR-094 证明了一件很窄、但很关键的事: 真实语料的 4,096 维上下文条件场,可以被压缩成 1/2/4/8/16 个概率区域;分辨率越高, 留出检索 NLL 越低,而且同容量下优于随机分区。

但 094 只证明了“这个坐标能保存信息”。它没有回答:

当一句话中的上下文一个接一个出现时,这些概率坐标能不能真正参与条件推断?

T1 就是为这个问题设计的。它不训练 Decoder,不生成句子,也不把 TreeHeap 写成已经完成的语言 模型。它只把一个词遮住,然后观察周围词逐个进入时,候选词的后验概率怎样变化。

T1 多尺度上下文后验曲线

先用一个 toy 看懂它

假设遮住了下面句子中的一个词:

Sisyphus ____ the stone uphill every day.

目标词可能是 pushes,也可能是 sees、finds、drops。在没有上下文时,系统只能使用词频 先验。随后按固定顺序暴露邻近词:

stone -> Sisyphus -> uphill -> every

SPR-094 已经把每个 context token 放进一棵 16 叶树。T1 不直接拿 context ID 做查表,而是先问: 这个 context 落在哪个多尺度概率区域?

在尺度 K 下,目标词 t 与概率区域 b 的条件关系为:

$$ p_K(b\mid t)= \frac{n_K(t,b)+\alpha} {\sum_j n_K(t,j)+K\alpha}. $$

观察到 m 个上下文区域后,候选词的打分为:

$$ \log q_K(t\mid b_{1:m}) =\log \pi(t)+\sum_{r=1}^{m}\log p_K(b_r\mid t)-\log Z. $$

这里:

  • pi(t) 是词频先验;
  • p_K(b_r|t) 表示候选词与当前上下文区域的训练共现关系;
  • Z 把全部候选词重新归一化,使概率和为 1;
  • q_K 是看到当前上下文后,对被遮住词的完整后验分布。

如果 stone 所在区域经常与 pushes 共现,pushes 的概率就会上升;如果再看到 uphill,而 它提供了新的区分信息,候选范围应进一步收窄。这就是本文所说的“后验退火”:不是温度数字 机械下降,而是观测增加后,概率质量从大量候选逐步集中到较小集合。

“更确定”和“更正确”不是一回事

后验熵定义为:

$$ H_K(T\mid b_{1:m}) =-\sum_t q_K(t\mid b_{1:m})\log q_K(t\mid b_{1:m}). $$

熵降低,只说明分布更集中。它没有保证正确答案的概率一定更高。

正确答案的负对数似然为:

$$ \operatorname{NLL}=-\log q_K(t_{gold}\mid b_{1:m}). $$

因此必须同时观察:

  1. 熵是否下降,即系统是否变得更确定;
  2. gold NLL 是否下降,即这种确定是否朝正确答案移动。

如果熵下降而 NLL 上升,系统不是“没有学到信息”,而是过度相信了重复或相关的证据。 这个区别后来成为 T1 最重要的新发现。

Parent 没有 token,loss 从哪里来

这里很容易产生一个关键疑问:leaf 上可以观察到 token 的概率质量,但 parent 本身没有 token, 它的目标和 loss 应该怎样计算?

答案是:parent 不需要拥有一个 token。它表示一组后代 leaf 的概率区域,目标质量由这些 leaf 相加得到。

考虑一棵只有四个 leaf 的树:

                 root
               /      \
          parent A   parent B
           /    \      /    \
         L1     L2   L3     L4

假设某个目标的经验 leaf 概率场是:

$$ r=(0.50,\ 0.30,\ 0.15,\ 0.05). $$

那么两个 parent 的目标质量不是额外标注出来的,而是后代质量之和:

$$ r(A)=r(L_1)+r(L_2)=0.80, $$$$ r(B)=r(L_3)+r(L_4)=0.20. $$

所以 root 的粗尺度目标场为:

$$ r_{root}=(0.80,\ 0.20). $$

进入 parent A 后,只在它自己的两个 child 中重新条件归一化:

$$ r(L_1\mid A)=\frac{0.50}{0.80}=0.625, \qquad r(L_2\mid A)=\frac{0.30}{0.80}=0.375. $$

parent B 同理:

$$ r(L_3\mid B)=0.75, \qquad r(L_4\mid B)=0.25. $$

这样,树学习的并不是“每个 parent 对应哪个 token”,而是一组局部条件选择:

root: A=0.80, B=0.20
A:    L1=0.625, L2=0.375
B:    L3=0.750, L4=0.250

沿路径重新相乘即可恢复 leaf 概率。例如:

$$ P(L_1)=P(A)P(L_1\mid A)=0.80\times0.625=0.50. $$

单个正确 leaf 的路径 loss

如果一次观测的正确位置是 L2,那么监督信号可以分成两次局部选择:

root:选择 A
A:选择 L2

对应 NLL 为:

$$ L_{root}=-\log q(A), $$$$ L_A=-\log q(L_2\mid A). $$

路径总损失是:

$$ L_{path} =-\log q(A)-\log q(L_2\mid A) =-\log\left[q(A)q(L_2\mid A)\right] =-\log q(L_2). $$

因此,只要条件概率严格一致,逐层路径 NLL 与直接计算正确 leaf 的 NLL 相同。区别在于,路径 形式明确告诉每一层:本层只负责当前分叉新增的区分信息。

一般化到深度 D:

$$ L_{path} =\sum_{d=1}^{D} -\log q(c_d\mid parent_d). $$

这也说明为什么不能把每个尺度的完整预测 NLL 再全部相加。粗尺度已经计算过的质量如果在细尺度 被完整重复计算,就会让同一事实多次进入 loss。路径条件分解只让每个节点支付一次局部分叉代价。

Parent 当前有什么含义

在 T1 中,树的 leaf 和 parent 划分的是 context token 的条件区域。对于候选目标 token t, 某个 parent 的概率质量为:

$$ p(parent\mid t) =\sum_{\ell\in descendants(parent)}p(\ell\mid t). $$

当句子中观察到一个 context token c 时,它在每个尺度上都有唯一的祖先区域。T1 读取的是 候选词与该区域的条件关系,而不是要求 parent 自己变成一个可输出 token。

因此,当前 parent 最严格的定义是:

后代 leaf 概率质量的粗分辨率区域,以及通向下一层 child 的条件路由状态。

我们不能仅凭求和就把某个 parent 命名为“水果”“动作”或“主体”。如果未来发现香蕉、梨、苹果 稳定聚集在同一 parent,并且这个 parent 在未见数据中仍提供可复现的预测收益,才有证据说它 形成了某种粗粒度概念。

这个区分也把两个问题分开了:

  1. 计算问题:parent 的质量和路径 loss 可以由 leaf 严格推出;
  2. 语义问题:parent 是否形成可命名、可迁移的概念,仍需独立实验。

正式实验怎样避免偷看答案

正式任务在 io 的 RTX 3090 上执行,任务号为 650/651。合同如下:

项目 设置
WMT 英文侧扫描 200,000 行
目标词表 8,192 token
context 词表 4,096 token
留出事件 50,000 个 masked-token 事件
每个事件可见上下文 1、2、4 个
读取尺度 1、2、4、8、16 bins
随机控制 3 棵匹配容量的平衡随机树
区间估计 1,000 次配对 bootstrap

源语料行号 mod 10 == 0 的文本只用于留出测试,不参与建树和条件计数。每个事件必须具有四个 词表内邻近上下文,因此 m=1/2/4 比较使用完全相同的 masked-token 样本。

除了学习树,实验还有三个控制:

  • K=1 的词频先验;
  • 三棵相同叶容量、相同平滑、相同事件顺序的随机树;
  • 直接使用全部 4,096 个 context ID 的未压缩 Naive Bayes 参考。

最后一项容量大得多,所以只能回答“压缩损失还有多大”,不能作为匹配成本的竞争者。

正式结果

TreeHeap 的留出 NLL 如下,越低越好:

可见区域数 K 1 个上下文 2 个上下文 4 个上下文 随机树 4 上下文均值
1 7.268692 7.268692 7.268692 7.268692
2 7.121257 7.046452 7.065414 7.246786
4 7.055921 6.940678 6.951110 7.206609
8 6.993862 6.843883 6.842157 7.140439
16 6.938479 6.753027 6.745880 7.033263

在 16 个概率区域、4 个上下文处:

$$ \operatorname{NLL}_{random}-\operatorname{NLL}_{tree} =0.287383. $$

配对 bootstrap 的 95% 区间为:

$$ [0.276356,\ 0.298175]. $$

区间整体大于 0,说明这里看到的优势并非只来自一次样本均值波动。它仍然是单语料、单 learned tree 的点估计,不能自动升级成跨语料架构定律。

从一个上下文增加到四个上下文时,16-bin TreeHeap 的后验熵下降:

$$ 7.025415-6.470929=0.554486\ \text{nat}, $$

gold NLL 同时下降:

$$ 6.938479-6.745880=0.192599\ \text{nat}. $$

这说明上下文不只让分布变尖,也让正确词平均获得更高概率。

粗分辨率已经能读到信息

如果所有有效关系只存在于最细的 16 个叶节点,那么 4-bin TreeHeap 不应稳定优于 4-bin 随机树。 实际结果是:

$$ 7.206609-6.951110=0.255499. $$

也就是说,把 16 个叶节点合并成四个较粗区域以后,学习树仍然保存了可用条件结构。这是对 “多分辨率表示”的直接支持:粗尺度不是空壳,也不只是细尺度数组换一个名字。

但这项结果只说明词汇条件关系能够跨尺度读取。它没有证明 parent 已经是句义,也没有证明 root 可以恢复完整句子。

反例:第四个证据可能让系统更自信,却更错

未压缩 4,096-context 参考的 NLL 是:

可见上下文数 NLL
1 6.250681
2 5.714359
4 6.044044

从两个上下文增加到四个上下文后,后验熵继续下降,但 gold NLL 反而上升。这不是数据表写反了。

原因在于当前 reader 使用了条件独立假设:

$$ p(b_1,b_2,b_3,b_4\mid t) \approx \prod_{r=1}^{4}p(b_r\mid t). $$

真实语言中的邻近词显然相关。例如 pushes、stone 和 uphill 不是三次互不相关的观测;它们 可能共同来自同一个短语或事件结构。直接相乘会把同一来源的信息重复计票,使后验过早变尖。

T1 的 16-bin 压缩树在正式数据中从 m=2 到 m=4 仍有轻微改善,但 smoke 曾出现小幅反弹。 因此,我们不能写成“TreeHeap 已经解决相关证据问题”。更准确的说法是:

压缩概率区域在这次正式实验中起到了部分正则化作用,但相关证据怎样累计,仍是 READ 必须 显式解决的算法问题。

为什么 Top-1 没有一起改善

16-bin TreeHeap 的 Top-1 从一个上下文的 0.05458 变为四个上下文的 0.05010,没有随着 NLL 单调上升。

这并不否定 NLL 的改善。NLL 测量整个概率分布是否给正确答案更多质量;Top-1 只看最大值对应 的一个 token。系统可能把正确答案从极低概率提升到第二、第三或第十名,从而改善 NLL,却仍未 越过排名第一的高频竞争者。

所以 T1 支持的是“后验信息与校准改善”,不是“argmax 解码已经更好”。在进入生成前,排名、 词序和序列决策仍需新的实验合同。

T1 改变了哪一段架构认识

094 之后,我们已经有三层可以区分的对象:

  1. 背景场:训练语料产生的 token-context 条件统计;
  2. 多尺度 Embedding:context 树与目标 token 的跨区域概率质量;
  3. 事件后验:当前句子暴露 context 后,对 masked occurrence 重新计算的候选分布。

第三层不是静态 token type 的另一张表,而是同一个 token 在当前句子中的 occurrence state。它 开始回答过去反复出现的问题:静态 Embedding 怎样进入一次真实语言事件?

当前链路可以写成:

$$ \text{corpus} \longrightarrow \text{background field} \longrightarrow \text{multiscale type embedding} \longrightarrow \text{context posterior occurrence}. $$

但链路还没有接到可训练的句子 FOLD、分辨率感知 READ 与 autoregressive Decoder。因此它是接口 前的可行性证据,不是端到端模型的完成声明。

后续更新:概率场里真的有金字塔吗

在完成 T1 后,我们增加了 M1“多尺度概率场显微镜”。它专门回答一个比 NLL 更结构化的问题:

各尺度之间是否存在类似 Fourier 级数或图像金字塔的递归规律?

这里必须先区分两种金字塔。

T0:质量金字塔

对任意 parent,左右 child 质量满足:

$$ m_n=m_L+m_R. $$

再定义局部分叉概率:

$$ a_n=\frac{m_L}{m_L+m_R}. $$

则:

$$ m_L=m_na_n, \qquad m_R=m_n(1-a_n). $$

因此 16-leaf 概率场可以精确改写成 15 个内部节点分叉概率。parent 保存粗质量,局部分叉参数 保存合并时丢失的细节。这类似树上的 Haar 小波,但它首先是一个数学恒等式,不能单独算作发现 了语言规律。

T1:后验修正金字塔

T1 的各尺度后验都定义在相同的 token 候选集合上,所以它们不是简单的 parent 求和。尺度从 K 变为 2K 时,细后验等于粗后验加入局部分叉证据后重新归一化:

$$ \Delta_{K\to2K}(t;c_{1:m}) =\sum_{r=1}^{m} \log\frac{p_{2K}(b_r^{2K}\mid t)} {p_K(b_r^K\mid t)}, $$$$ \log q_{2K}(t\mid c) =\log q_K(t\mid c) +\Delta_{K\to2K}(t;c)-\log Z. $$

在 200K 语料、50,000 个正式 masked-token 事件上,这个递推式的最大绝对数值闭合误差为:

$$ 1.144409\times10^{-5}. $$

所以 T1 确实具有一种“粗后验 + 局部细节”的精确递归表示。

真正观察到的结构:有效信息前置

四上下文时,从 K=1 到 K=16,learned topology 对正确词产生的平均总对数概率增益为:

$$ 0.522812. $$

其中到 K=4 已经获得的比例为:

topology 到 K=4 已获得的总增益比例
learned tree 0.607451
random tree mean 0.263590
learned-leaf permutation mean 0.378829

也就是说,learned tree 不只是最终 16-leaf 概率场有效;它把较多有助于正确词判断的信息安排在了 较粗的前两次分裂中。打乱同一组 leaf 的排列以后,最终 K=16 表示没有丢失,但这种粗尺度 前置显著减弱。这才是当前可以支持的“内部金字塔”证据。

没有观察到简单的级数衰减

learned tree 四个深度的 Haar 式细节能量为:

0.321586 / 0.158577 / 0.312618 / 0.299835

held-out cross-entropy 的逐层贡献为:

0.518268 / 0.608847 / 0.522474 / 0.531875

它们都没有随深度单调下降。因此不能把当前概率场描述成“低阶项最大,越高阶越小”的简单 Fourier 式级数。更准确的说法是:粗层优先组织了一部分有判别力的信息,但细层仍保存大量 不可忽略的修正。

另外两个探索门失败了:

  • 保留四个最大细节参数时,learned JS 重建误差为 0.028009,随机树反而只有 0.008186。 随机混合会产生更平滑、更容易近似的场,因此“容易压缩”不能单独代表结构更好;
  • 二次 parent-to-child 回归的 held-out R-squared 为 0.124078,高于随机树的 0.038021, 但低于 leaf permutation 的 0.216238。所以当前没有证据宣布一个统一低阶多项式就是 F。

M1 最终留下的结构认识是:

T0: parent mass + local split detail -> exact leaf field
T1: coarse posterior + local log-evidence residual -> exact fine posterior
learned topology: useful evidence is statistically front-loaded toward coarse scales

它比“所有系数逐层缩小”弱,但比“只有 16 个无关 float”强。

后续还要解决什么

T1 暴露的下一问不是“再增加几个上下文”,而是:

两条相似证据应该完整累加,还是只有它们带来的新区分信息才应该累加?

T2 有四个候选机制:

机制 核心动作 优点 风险
证据温度 将总 evidence 乘以可学习或校准的 lambda 简单、可作为基线 只缩放总量,不识别重复来源
重复区域去重 同一概率区域重复出现时降低后续权重 直接针对重复 bin 不同 token 落在同一区域也可能提供新信息
新信息加权 只按新增 KL、熵降或区分度累计证据 接近真正问题 需要定义稳定、可微的增量信息
粗细分层累计 粗层决定类别,细层只补充类别内部身份 与 TreeHeap 多尺度结构一致 必须防止粗层错误锁死细层

当前建议是:先用证据温度建立一个不会偷看 test 的校准基线,再测试“新信息加权 + 粗细分层” 是否能在相同事件上同时改善 NLL、Top-1 和校准,而不是只让熵继续下降。

dev/test 必须重新隔离。参数只能在 dev 上选择,sealed test 只打开一次;否则 T2 会把后验校准 变成对 T1 测试集的人工拟合。

当前结论边界

T1 现在可以支持:

  • 学习树的概率区域可以参与留出 masked-token 条件推断;
  • 更多上下文在正式预算上降低了 TreeHeap 后验熵与 gold NLL;
  • 有效结构存在于 4-bin 粗尺度,不只存在于 16-bin 叶层;
  • 相关上下文会让独立似然乘法过度计票,下一步需要显式校准。

T1 现在不能支持:

  • TreeHeap 已经学会句义压缩;
  • parent 或 root 已经形成自然语言概念;
  • FOLD/READ 私有协议已经闭合;
  • Top-1、BLEU 或自由生成已经改善;
  • 多尺度概率树已经优于 Transformer;
  • 上下文越多,结果必然单调变好。

截至 095,TreeHeap 的最新窄结论是:语料背景可以被压缩为可逐尺度读取的概率坐标;当前 句子的上下文也能在这个坐标中形成更集中的 token 后验。真正尚未解决的,是如何只累计新的 证据,而不把语言中的相关性重复计算。