先用一句话回答
TreeHeap 的 F 函数,是决定“细粒度状态怎样组成粗粒度状态,以及状态怎样沿树继续传播”的规则。
它不是某一个已经找到的神秘公式,也不只是一个 loss。更准确地说,我们正在寻找的是一族函数:
输入:token 或 child 的状态、当前节点状态、可选的上下文
输出:parent 状态、左右路由概率、残差,以及下一层可继续使用的状态
如果 F 合理,TreeHeap 的每一层都保存同一种可继续计算的数据,只是分辨率不同;如果 F 不合理, 树仍然可以运行,却可能只是把数组换成树形摆放,或者在递归中丢掉 Decoder 真正需要的信息。
本文不要求读者先了解此前九十篇日志。我们从一个四 token 的例子开始,逐步说明 F 的对象、参数、 训练方法、实验结果和当前卡点。
为什么必须单独讨论 F
假设输入是:
西西弗 / 推 / 石头 / 上山
一个二叉 TreeHeap 可以先合并相邻状态,再继续向上:
西西弗 ─┐
├─ parent A ─┐
推 ──────┘ │
├─ root
石头 ────┐ │
├─ parent B ─┘
上山 ────┘
树形拓扑只告诉我们“谁和谁先计算”,没有告诉我们“怎样计算”。真正决定 parent A 是普通平均、 概率混合、可逆编码,还是一个完全不可读向量的,就是 F。
因此,下面三件事不能混为一谈:
- 拓扑:哪些节点相连,计算顺序是什么;
- F 函数:相连以后执行什么状态变换;
- READ/Decoder:怎样从这些状态取信息并生成输出。
拓扑像函数调用图,F 像每次调用的函数体,READ/Decoder 则是状态的消费者。只改变其中一个, 另外两个不会自动正确。
先解决一个历史歧义:F 曾经指三种东西
过去的研究记录为了交流方便,把三种相关对象都简称为 F。这会造成“F 是共享参数吗”“F 是搜索 算法还是递归公式”之类的混乱。本文开始采用三个名字。
1. 节点函数 f_v
节点 v 上执行的局部规则记为:
其中 x 是到达节点的状态,θ_v 是该节点自己的参数。当前概率路由版本中,θ_v 主要包含
观察轴 w_v 和阈值 b_v。
2. 整树函数 F_Θ
把所有节点函数按树的拓扑连接起来,得到整棵树的计算:
$$F_{\Theta}=f_{v_n}\circ\cdots\circ f_{v_2}\circ f_{v_1}$$这里的 Θ 是全部节点参数的集合。输入一个 token 状态后,F_Θ 给出它的路径、各层状态、
leaf 位置和可供 READ 使用的多分辨率表示。
3. 学习算法 A
搜索或训练 Θ 的算法另记为:
D 是语料统计或训练样本。蒙特卡洛、梯度下降、离散结构搜索都属于 A,而不是 F 本身。
这一区分非常重要:一次搜索失败,不等于 F 族必然错误;一个可微 F,也不等于训练目标能够 找到有用参数。
当前概率残差版本的数据是什么
当前实验没有把 token ID 直接当作可以计算的数。它先统计 token t 周围出现 context c 的
次数,再得到条件概率:
所以一个 token 的基础状态不是单个整数,而是一行概率:
token t -> [P(c1|t), P(c2|t), ..., P(cK|t)]
这行数据各分量非负、总和为 1,属于概率单纯形。它的物理含义也明确:描述“看到这个 token 时,它周围通常出现什么”。
为了计算路由,实验使用平方根概率坐标:
$$x_t=\sqrt{p_t}$$这样,概率分布之间的几何距离与 Hellinger 距离相容。它不是任意随机摆放的 embedding;坐标 来自可重复计算的全语料背景场。
一个节点究竟怎样路由
在节点 v,token 状态 x_t 先投影到该节点的局部观察轴:
w_v 决定这个节点观察哪些方向,b_v 决定切分位置。
硬路由只选择一侧:
$$z_v(t)\le0\Rightarrow L,\qquad z_v(t)>0\Rightarrow R$$软路由则保留两侧概率:
$$r_v(t)=P(R\mid t,v)=\sigma\left(z_v(t)/\tau\right)$$其中 τ 是温度。温度较低时接近硬选择;温度较高时,概率质量可以同时流向左右 child。
参数到底共享不共享
答案是:规则共享,节点参数通常不共享。
所有节点都使用同一种投影与 sigmoid 公式,这是共享的计算规则;但每个节点有自己的 w_v 和
b_v,因此它们可以观察不同的局部主轴。若所有节点强行共享同一组数值参数,树的不同位置会
反复采用同一个切分面,很难形成逐层细化的分辨率。
另一方面,FOLD 的概率守恒公式目前没有可训练参数,它是全树共享的数学合同。不要把“共享 公式”和“共享参数值”当成同一件事。
child 怎样合成 parent
设左右 child 的概率质量为 m_L、m_R,它们的 context 原型为 μ_L、μ_R。当前 FOLD 是
质量加权平均:
这个 parent 仍然是一行 context 概率,与 child 的数据类型和量纲一致。它不是把两个向量相加后 任其能量随深度增长。
更关键的是,它满足守恒关系:
$$m_P\mu_P=m_L\mu_L+m_R\mu_R$$因此 root 是整批 token 的公共背景;向下走时,child 相对 parent 增加的细节记为残差:
$$\Delta\mu_C=\mu_C-\mu_P$$沿路径累加即可恢复某一层的原型:
$$\mu_d=\mu_{root}+\sum_{k=1}^{d}\Delta\mu_k$$这给“多分辨率”一个可检查的定义:浅层保存公共背景,深层逐步增加区分信息。它仍不等于自然 语言中的缩句或语义层级;那需要下游证据。
F 影响架构中的哪些位置
F 不是只影响一个路由开关。它至少影响四处。
| 位置 | F 的作用 | 错误时的现象 |
|---|---|---|
| embedding 安装 | 决定 token 在树中的路径与邻居 | 同类不聚合、路径随 seed 漂移 |
| FOLD | 决定 parent 保存什么以及量纲是否闭合 | 深层爆炸、消失或成为不可读数据 |
| 多分辨率状态 | 决定粗层与细层的差值 | 每层重复,或高层完全收不到细节 |
| READ 接口 | 决定下游能否沿路径恢复有用概率场 | 训练 loss 下降但生成或 masked read 退化 |
Decoder 不必和 F 共享同一组参数,但两者必须通过串联训练或冻结接口形成协议。只要 READ/Decoder 的 loss 能通过可微状态回传到 F,F 就能接收下游任务的方向信息;是否应该允许它这样训练,取决 于我们正在检验“背景 embedding”还是“端到端任务表示”。二者不能用同一份证据替代。
怎样寻找 F
目前有三条不同路线。
路线一:蒙特卡洛搜索硬树
固定树深,每次修改一个节点的观察轴或阈值,让所有 token 重新下落,然后在未参与原型估计的 dev 共现数据上计算重建 NLL。更优方案被接受,少量更差方案按退火概率暂时接受,以跳出局部 极小值。
优点是硬树可以直接审计,路径和概率守恒都清楚。缺点是高维搜索昂贵,而且梯度不能直接告诉 离散提案下一步往哪里走。
路线二:梯度训练软树
把左右选择改成连续概率,让 loss 通过全部 soft path 回传到每个 w_v,b_v。这证明 F 的参数
可以被普通优化器更新,也能与 READ 串联。
难点在于训练得到的是概率混合场。训练结束后直接以 0.5 阈值硬化,会丢掉混合状态携带的
信息。软模型学得好,不代表硬路径导出后仍然好。
路线三:结构与参数联合搜索
更完整的 F 还可能改变树的连接方式,而不只是固定拓扑上的轴和阈值。拓扑是离散变量,节点 参数是连续变量,因此这是混合优化问题。
当前项目尚未证明动态拓扑可用。曾经比较过 left_deep、balanced、right_deep 等人工枚举
拓扑,结果说明组合顺序会改变 parent 的可读信息;它不能证明路由器自己会找到这些拓扑。
证据走到了哪里
下面不用编号代替结论,编号只作为复现入口。
| 实验 | 实际建立的证据 | 仍然没有建立 |
|---|---|---|
| A11 | 在固定真实语料背景场上,硬树蒙特卡洛搜索优于初始树和随机路由 | 通用语义 F |
| A12 | 3 个搜索 seed、4 个深度均复现重建收益 | 最佳深度或稳定语义拓扑 |
| A13 | F 可保存为自描述 checkpoint,并精确重载 | 下游可用性 |
| A14 | 更多语料使背景概率几何更稳定,但树分区仍明显漂移 | 搜索已收敛 |
| A15 | 冻结坐标可被 Token READ 和 Echo 使用;masked 语义门不胜随机码 | 最终 embedding |
| A16 | 无训练 Bayesian READ 证明更深层保留更多背景预测信息 | 当前 F 已无损或最优 |
| A17 | 软路由可微、可训练、会改变路径且不坍缩 | 重建 loss 能保护 READ |
| A18 | READ 梯度改善了未见数据上的软概率场 | 硬化后的 checkpoint 可用 |
两组关键数字最能说明现状。
A12 中,在同一个冻结语料场上,深度 3、4、5、6 的三 seed 搜索都通过,sealed-test NLL 的
中位改善分别约为 0.0540、0.0451、0.0505、0.0296。这说明 F 不是完全随机的摆放。
但 A18 中,READ-coupled 训练后的软场 NLL 为 4.758578,硬化后变为 4.899335,损失
0.140757。这把当前卡点定位到了 soft-to-hard 交接,而不是“梯度无法穿过树”。
为什么不能直接宣布“embedding 已完成”
一个表示系统至少要通过三个不同门槛:
可编码:token 能稳定进入数值空间
可组织:背景关系能形成非随机、可复现的层级
可消费:READ/Decoder 能利用它完成未见任务
当前结果已经较好地通过“可编码”,部分通过“可组织”,但“可消费”仍是混合结果。Token READ 达到 100% 只说明 token 身份能从坐标中恢复;没有 hash 碰撞时,这本来就是较低的门槛。真正 困难的是:遮住 token 后,剩余背景关系是否比随机码提供更多有效信息,以及这些信息能否经过 递归 READ 进入生成。
当前最合理的下一步
当前不应继续无约束地搜索更低的 embedding NLL,也不应立刻把所有路由硬化。更直接的工程路线是:
- 保留 A18 已经表现更好的软路由,作为第一版有效 F;
- 让 READ 和 Decoder 在连续路径质量上工作,先建立端到端可用性门;
- 单独加入 soft/hard 一致性目标,逐步稀疏化,而不是训练结束后突然阈值切断;
- 同时记录每层残差、路径熵、节点占用和梯度贡献,确认收益来自哪些深度;
- 只有软模型达到应用门禁后,再比较硬路由、Top-k 路由和稀疏概率路由的成本。
这里采用的是门禁思路,不要求一次找到全局最优 F。第一阶段只要求:有限、守恒、可训练、可 重载、比随机路由有信息,并能把梯度和状态可靠交给 READ。达到以后再优化速度、稀疏度和拓扑。
如何反驳这条路线
F 路线应当被降级或修改,如果出现以下任一稳定结果:
- 在相同数据、容量和预算下,搜索树长期不能胜过随机或简单 flat baseline;
- parent 概率质量不能闭合,残差不能重建对应层状态;
- 打乱 token 与概率行的对应关系后,READ 质量不下降;
- 多个 seed 下树结构完全漂移,并且下游关系也无法复现;
- 软路由的收益只能依赖稠密全路径计算,任何可接受成本的稀疏化都会消失;
- matched Transformer、SGNS 或简单概率模型在同等资源下稳定占优,而 TreeHeap 没有提供新的 能力或成本优势。
负结果不是项目失败,而是缩小 F 的候选集合。我们寻找的不是一个必须存在的答案,而是一条能 被公式、代码和未见数据共同约束的函数族。
最后的简化图
语料
-> token-context 共现计数
-> 每个 token 的条件概率行 p_t
-> 节点函数 f_v 计算局部路由
-> 整树函数 F_Theta 形成多层原型与残差
-> READ 取得一个或多个分辨率状态
-> Decoder 形成输出概率
学习算法 A:
Monte Carlo / gradient / topology search
|
+----> 更新 Theta,而不是取代 F
所以,F 函数问题最终可以压缩成一句工程问题:
能否找到一种逐层相容、概率守恒、可微、可稀疏化的状态变换,使粗层保留公共背景,深层补充 区分信息,并让 READ/Decoder 不必绕过 TreeHeap 就能使用这些信息?
我们已经知道这条链路可以开始工作,也知道它目前断在什么地方。尚未找到终点,但问题已经从 “寻找一个神秘公式”,变成了可以逐项实现、测量和反驳的架构任务。
License: GPLv3。本文中的定义、证据边界和实验入口随 SameTime / TreeHeap 项目公开。