先用三分钟读懂问题

这是一篇设计确认稿,不是实验胜利公告。

我们要解决的问题可以不使用任何项目术语来表达:

给定许多词和它们在语料中的使用关系,能否让每个词在一棵树中逐层找到位置,并使相近的 词更容易经过相近的分支?

旧方法会为每个词统计“它经常和哪些词一起出现”,再用同一张统计表从树根一路比较到叶子。 它可以给词分配稳定地址,却不等于每一层都发现了新的分类特征。语种、数字和标点等表面差异 可能在上层就消耗了大部分区分能力。

新设计尝试让每个树节点只观察到达本地的词,并重新计算本地最有区分力的方向。于是,根节点 可能先区分语种,下一层可能区分词类,更深一层才可能区分具体语义。这里的“可能”非常重要: 这是设计目标,还没有被实验充分证明。

整篇文章只做四件事:

  1. 用一个概率向量表示词在所有叶子之间的位置;
  2. 让每个节点从到达本地的词重新计算分类方向;
  3. 把分类结果写成向左或向右的概率,而不是一次不可撤销的硬选择;
  4. 反复更新位置与路径,检查它们能否达到稳定状态。

只关心结论的读者读到这里,再看“当前结论”即可。需要检查数学定义的读者可以继续向下。

最少术语表

下面区分三类名称,避免把项目内部语言伪装成通用理论。完整版本见 TreeHeap 开放术语表。

名称 类别 本文中的含义
token 通用机器学习术语 文本被切分后的一个计算单位,可以是字、词或子词
embedding 通用机器学习术语 把 token 映射为可参与距离、分类和预测计算的数值向量
leaf / 叶子 通用树结构术语 树最末端的节点;本文把所有叶子当作位置坐标
概率单纯形 标准数学术语 所有“非负且总和为 1”的概率向量组成的空间
协方差、主轴 标准统计术语 描述一组点主要沿什么方向变化;第一主轴就是变化最大的方向
JS 散度 标准信息论术语 比较两个概率分布差异的对称指标
概率路由 TreeHeap 项目术语 token 在一个节点向左、向右传播的概率
下坠 TreeHeap 项目术语 token 从根经过若干内部节点到达叶子的路由过程,不是物理重力
概率 Hash 本文的诊断性称呼 旧方法能生成稳定地址,但未证明地址具有逐层语义
固定点 标准数学术语 再更新一次仍保持不变的状态,即 $r^*=F(r^*)$
Claim / Evidence ARA 研究记录术语 Claim 是可被反驳的主张,Evidence 是支持或否定它的记录

这篇文章固定什么

我们最近重新检查了 TreeHeap token embedding 的“下坠”含义。旧实现把 token 的上下文共现 概率当作坐标,在每一层与左右节点的平均分布计算 JS 散度,再把连续选择压成一条路径。 这能分类,也能生成稳定地址,但它更接近递归概率 Hash:同一份共现分布被重复比较,没有一 个明确的局部几何算子保证特征逐层形成。

现在形成的新共识是:

这不是把二维小球比喻强行贴到神经网络上。下面给出它的可计算定义、尚未解决的启动问题和 可以否证它的实验边界。

为什么旧算法还不能叫特征下坠

这里的 A09 是项目内部实验编号,指“用上下文共现概率逐层分配 token 地址”的实验, 不是公开领域中的算法名称。它的输入是 token 的上下文概率分布:

$$ p_w \in \Delta^{K-1} $$

节点保存落入本节点的平均上下文原型。token 每到一个节点,都重新计算:

$$ d_L=JS(p_w,q_L),\qquad d_R=JS(p_w,q_R) $$

然后根据距离决定左右路径。但下坠过程中:

$$ p_w^{(d+1)}=p_w^{(d)} $$

输入本身没有进入新的局部坐标,也没有从当前概率场产生新的观测方向。树只是在不同子集中 反复比较同一个分布。

A10 是后续审计实验:它冻结 A09 的最佳配置,逐值重建结果,并检查每层究竟在区分什么。 “冻结合同”表示代码、数据、随机种子和参数均保持不变,以排除重跑时偷偷换题。结果完全复现:

指标 结果
活跃 token 945
leaf 32
sealed-C NLL 4.992762973593261
leaf utilization 29/32 = 0.90625
root child JS 0.5713615

节点确实形成了可解释的数值判别特征,但最强轴首先是中文与英文/拉丁字符,其后是数字、 标点、子词形态和语料风格。各深度平均 child JS 为:

depth 0: 0.5714
depth 1: 0.2993
depth 2: 0.2076
depth 3: 0.0520
depth 4: 0.0361

这说明“数值特征存在”已经有证据,“逐层形成语义特征”仍然没有。粗层迅速消耗了语种与 表面形式差异,深层虽然质量更均匀,但左右原型的可分性已经很弱。

一般的 L-leaf 单纯形

16 个 leaf 只是讨论时的例子。正式定义不锁死 leaf 数量。

设 TreeHeap 有 $L$ 个 leaf,token $w$ 的状态为:

$$ r_w=(r_{w1},\ldots,r_{wL}),\qquad r_{wi}\ge 0,\qquad \sum_{i=1}^{L}r_{wi}=1 $$

因此:

$$ r_w\in\Delta^{L-1} $$

它有 $L$ 个概率坐标和 $L-1$ 个自由度:

leaf 数量 单纯形自由度
8 7
16 15
32 31
64 63

这里的 $r_w$ 才是 token 在 TreeHeap 中的几何位置。它不是旧实现里的 $K$ 维共现统计表。 例如在四个叶子的玩具树中,

$$ r_w=(0.6,0.2,0.1,0.1) $$

表示 token 当前有 60% 的质量位于第一个叶子,另外 40% 分布在其余三个叶子。它不是说这个 词“有 60% 的语义”,而是一个可被训练和比较的位置表示。

切空间:概率怎样合法移动

因为概率和始终为 1,合法移动方向 $u$ 必须满足:

$$ \sum_i u_i=0 $$

所有这样的方向构成单纯形的切空间。主轴、梯度投影和局部旋转都必须留在这个空间内,否则 一次更新就可能把总概率从 1 推走。

例如:

$$ u=(0.1,-0.1,0,\ldots,0) $$

表示从第二个 leaf 向第一个 leaf 搬运 0.1 的概率,总质量保持不变。

每个节点观察自己的局部词群

“点云”是统计与几何中的常用说法,意思是一批向量点。本文的每个点就是一个 token 的位置 $r_w$;“局部点云”就是有一定概率到达当前节点的那批 token,而不是一种新的数据结构。

令 $m_{wv}$ 表示 token $w$ 到达节点 $v$ 的概率。节点 $v$ 只观察到达本地的加权点云。 它的局部中心为:

$$ \mu_v= \frac{\sum_wm_{wv}r_w} {\sum_wm_{wv}} $$

局部协方差为:

$$ C_v= \frac{ \sum_wm_{wv}(r_w-\mu_v)(r_w-\mu_v)^\top }{ \sum_wm_{wv} } $$

因为不同节点接收到的 token 和权重不同,所以通常有:

$$ C_{\mathrm{root}} \ne C_{\mathrm{left}} \ne C_{\mathrm{right}} $$

这正是“每个路由点的观测主轴不同”的数学来源。

主轴不是随意增加的一组参数

对局部协方差求特征分解:

$$ C_vu_{v,k}=\lambda_{v,k}u_{v,k} $$

最大的特征值对应第一主轴:

$$ u_v=\operatorname{eigmax}(C_v) $$

$u_v$ 表示本节点中概率点变化最大的方向,$\lambda_v$ 表示沿这个方向的变化强度。这里使用的 是标准主成分分析(PCA)的局部版本,不是 TreeHeap 新发明的数学定理。

当前共识不是让梯度直接随意修改 $u_v$。更符合几何含义的做法是:

  1. 关系损失推动 token 位置 $r_w$ 变化;
  2. 节点重新观察局部点云;
  3. 协方差 $C_v$ 随之变化;
  4. 主轴 $u_v$ 由新的协方差重新计算。

因此主轴是局部概率场的观测结果,而不是人工塞进节点的左右偏见。

从主轴产生概率路径

token 相对节点中心的位置投影到主轴:

$$ z_{wv}=u_v^\top(r_w-\mu_v) $$

为了让不同节点的尺度可比较,可以使用主特征值标准化:

$$ \hat z_{wv}= \frac{z_{wv}} {\sqrt{\lambda_v+\varepsilon}} $$

再把它变成连续路由概率:

$$ P(L\mid w,v)=\sigma(\hat z_{wv}) $$$$ P(R\mid w,v)=1-P(L\mid w,v) $$

这里不提供最低基数流量,不设置先强制均匀、后逐步撤销的保护项,也不加入容量平衡惩罚。 左右概率只由 token 在当前局部坐标系中的位置决定。

如果采用硬路由,超平面:

$$ u_v^\top(r-\mu_v)=0 $$

会把一个凸区域继续切成两个凸区域。采用软路由时,它变成一条概率过渡带,每个节点对应 一个加权局部区域。

共现信息放在哪里

共现关系仍然有用,但它不再是下坠坐标,也不需要作为一个大概率数组沿树传递。

它只负责提供训练关系。语料中的一次事件:

center token w -> observed context c

要求当前位置 $r_w$ 能够预测实际上下文:

$$ \mathcal L_{\mathrm{context}}

-\log P(c\mid r_w) $$

这条梯度推动 token 的单纯形位置变化。位置变化以后,局部中心、协方差、主轴和路径再依次 变化。

因此链路应当是:

$$ \text{语料关系} \rightarrow \text{位置梯度} \rightarrow r_w \rightarrow C_v \rightarrow u_v \rightarrow \text{概率路径} $$

共现只是可选的关系来源。句序、翻译对齐、问答关系或任务损失也可以承担同一角色。如果完 全没有关系数据,token ID 只是编号,任何语义排列都无法从编号本身推导出来。

为什么选择固定点

token 位置决定局部主轴,局部主轴又改变 token 的下坠路径。它们不是一次前向计算就能独 立确定的:

$$ r^{(t)} \rightarrow C^{(t)} \rightarrow u^{(t)} \rightarrow \operatorname{route}^{(t)} \rightarrow r^{(t+1)} $$

目标是找到自洽状态:

$$ r^*=F(r^*) $$

这里至少需要同时观察两种收敛:

第一种是 token 位置变化:

$$ \frac1N\sum_wJS(r_w^{(t+1)},r_w^{(t)})\rightarrow0 $$

第二种是节点主轴旋转:

$$ \theta_v^{(t)}= \arccos\left( \left|{u_v^{(t+1)}}^\top u_v^{(t)}\right| \right)\rightarrow0 $$

绝对值用于消除特征向量的符号歧义:$u$ 与 $-u$ 是同一根轴,只是左右名称互换。

尚未闭合的核心:更新函数 F 到底是什么

这篇文章没有假装最后一个公式已经解决。

我们已经一致确认:

  • token 状态属于一般 $L$-leaf 单纯形;
  • 每个节点从局部点云计算不同主轴;
  • 路由是局部投影产生的连续概率;
  • 关系数据只通过 loss 推动位置,不作为下坠坐标;
  • 系统应通过迭代寻找固定点。

但仍缺少一个关键定义:

一轮所有节点的概率路由,怎样严格构造下一轮 token 状态 $r^{(t+1)}=F(r^{(t)})$?

这里的 $F$ 不是一个已经找到的神秘函数,只是“用旧状态计算新状态”这一步的统一记号。

如果直接把 root-to-leaf 路径概率当成新的 $r$,可能出现自我强化和早期路径锁定。如果把 它与旧状态简单平均,又引入了人为时间常数。如果让任务梯度独立更新 $r$,则必须说明 TreeHeap 路由在状态形成中究竟承担什么因果作用。

因此 $F$ 是下一阶段的算法核心,而不是可以藏在实现细节里的一个赋值语句。

启动时的对称性问题

若所有 token 严格从同一个均匀点开始:

$$ r_w^{(0)}=(1/L,\ldots,1/L) $$

那么所有 token 的局部协方差为零:

$$ C_v^{(0)}=0 $$

此时不存在可识别主轴。系统必须由关系损失、可审计的确定性扰动或一个明确的启动阶段打破 对称性。这个启动过程必须单独登记,不能把随机初始化偷偷当成已经形成的语义。

下一步怎样验证,而不是继续造术语

下一阶段暂称 A11“自洽单纯形下坠”。A11 也只是实验编号。它应当先经过可人工检查的小型 数据实验(toy experiment),而不是直接消耗大规模语料。

建议的尺度不是固定 16,而是:

$$ L\in\{8,16,32,64\} $$

需要记录:

  1. 均匀状态能否在明确关系力下启动;
  2. 不同节点的主轴夹角是否真正分化;
  3. leaf 状态与主轴是否收敛,还是周期振荡;
  4. 是否有大量 token 或节点坍缩到同一位置;
  5. 去掉局部主轴后,关系预测是否显著变差;
  6. 增加 $L$ 是否带来连续容量收益;
  7. 结果是否跨 seed 保持,而不是一次随机坐标排列。

任何一次较低 loss 都不能单独证明这套几何成立。真正的支持证据必须同时包含:固定点、局部 主轴分化、结构消融和可解释的路径变化。

当前结论

旧路线已经证明:递归概率 Hash 可以形成稳定地址,也可以形成数值判别特征。但它没有证明 特征会逐层下沉。

新的方向把问题重新定义为:

在 $L-1$ 维概率单纯形中,让每个 TreeHeap 节点观察自己的局部点云和主轴;让 token 在一系列不同的局部坐标系中形成概率路径;再寻找位置、主轴与路径共同自洽的固定点。

我们现在已经对几何对象和信息来源达成一致,但固定点算子 $F$ 仍然开放。下一步不是宣布 架构完成,而是把这个开放位置写成代码、toy 和可以失败的 Claim。

给第一次进入这个项目的人

你不需要接受 TreeHeap 的整套语言,才能检查本文。可独立复核的问题只有三个:

  1. 旧方法是否只是在不同节点重复比较同一个共现分布?
  2. 局部 PCA 是否真的让不同节点形成不同分类方向?
  3. 位置、分类方向和路径能否稳定收敛,而不是坍缩或循环?

如果这三个问题中任何一个失败,这个设计都需要修改。项目编号、故事和术语不能替它免于 反证。我们公开术语,不是为了建立只有内部成员能读懂的语言,而是为了让外部读者更容易指出 我们哪里错了。

License: GPLv3。本文中的概率单纯形、局部主轴、固定点定义、实验边界与后续 ARA 设计按项目许可证公开,欢迎复现、批评与提出反证。