Soft TreeHeap:梯度如何进入树堆结构

上一篇 SPR-018 把 TreeHeap 的目标说清楚了:

TreeHeap 不是要证明自己完全不同。
TreeHeap 要证明自己和 MLP / CNN / Transformer 一样,
也是一种可以构造预测函数的机器学习结构。

但这会立刻遇到一个核心问题:

梯度怎么进入 TreeHeap?

线性回归为什么能学习?

因为它有:

y_hat = W x + b
loss = MSE(y_hat, y)
gradient = d loss / d W
update W

训练结束后,数据里的规律被蒸馏进参数:

W, b

Transformer 也是类似的,只是参数从一个简单矩阵,变成很多矩阵:

Wq, Wk, Wv, Wo, FFN weights

loss 仍然通过梯度,把数据里的统计规律写进参数矩阵。

那么 TreeHeap 呢?

如果 TreeHeap 只是硬指针:

if query < node.key:
  go left
else:
  go right

或者硬写入:

arr[3] = value

那梯度很难传进去。

所以第一版 TreeHeap 不能直接从 hard tree 开始。

我们需要:

Soft TreeHeap

也就是:

硬树堆结构的连续松弛版本。

一句话 Claim

当前 claim 是:

如果把 TreeHeap 的写入、路由、停止、读取都改成可微的 soft distribution,
那么 TreeHeap 就可以像 MLP / Transformer 一样用 loss 和 gradient 学习。

梯度会被写入:
node_key
node_value
write kernel
query kernel
decoder kernel

这不是最终证明。

这只是进入机器学习的入口。

如果这个 claim 不成立,TreeHeap 后面不用谈 WMT,也不用谈世界模型。

从 Hard TreeHeap 到 Soft TreeHeap

这里有一个很容易误解的点:

Soft TreeHeap 不是推翻前面建立的 TreeHeap 数学基础。

更准确的说法是:

Hard TreeHeap 是离散代数对象。
Soft TreeHeap 是它的概率提升,也就是可微近似。

原来的 TreeHeap 有确定的地址、确定的子树、确定的路由。

例如一个 hard 操作可以写成:

O_a(H)

意思是:

在地址 a 上,对 TreeHeap H 做一次确定操作。

比如:

在地址 a 上执行 TreeHeap plus
读取 left(root)
沿着 root -> left -> right 走
在某个 subheap 上做 kernel matching

这些都是 hard TreeHeap 的操作。

Soft 以后,不是把这些操作删掉。

Soft 以后变成:

SoftO(H) = sum_a p(a) * O_a(H)

翻译成人话就是:

模型暂时不知道应该操作哪个地址,
所以它对多个地址都做一点操作,
每个地址的权重由概率 p(a) 决定。

如果概率分布是:

p(5) = 1.0
其他地址 = 0.0

那么:

SoftO(H) = O_5(H)

也就是说:

Soft TreeHeap 会退化回 Hard TreeHeap。

这非常重要。

因为它说明:

Soft TreeHeap 不是另一种东西。
它是 Hard TreeHeap 的连续版本。

可以把关系表写成这样:

Hard TreeHeap Soft TreeHeap
一个确定地址 一个地址概率分布
H_next = H ⊕_a x sum_a p(a) * (H ⊕_a x)
left / right / stop p_left / p_right / p_stop
一个确定子树 子树概率分布
一个确定卷积核位置 多个 subheap 上的加权 kernel
hard collapse 低温 softmax / top-k / argmax collapse

所以 Soft TreeHeap 的本质不是:

把树堆变成普通向量。

而是:

让 TreeHeap 的地址、路径、子结构都能携带概率。

这样 loss 才能通过概率分布反传。

一个小例子

hard 查询是:

query = 6

root = 8
6 < 8
go left

soft 查询是:

query = 6
root = 8

stop: 0.05
left: 0.85
right: 0.10

这时模型还没有完全确定。

它主要相信:

应该 go left

但仍然保留一点:

stop / right 的可能性。

如果后面发现答案错了,loss 可以反向告诉它:

left 的概率应该再高一点;
right 的概率应该再低一点;
当前 node_key / query_kernel 应该如何调整。

这就是梯度进入 TreeHeap 的入口。

但这里有一个工程边界

完整的概率 TreeHeap 应该保存:

所有可能 TreeHeap 的概率分布。

这是最干净的数学版本。

但它太贵。

因为树一大,可能结构数量会爆炸。

工程上更可能采用的是近似版本:

每个 node 保存一个 value 分布;
每条 route 保存一个 action 分布;
每个 kernel 保存一个 soft attention 分布。

这可以叫:

mean-field Soft TreeHeap

它的好处是能训练。

它的风险是:

可能丢失不同路径之间的相关性。

所以后续实验不能只看任务准确率。

还要看:

Soft 近似是否破坏了 TreeHeap 原来的代数结构?

例如:

hard collapse 以后,是否还能得到合法树?
soft route 是否真的收敛到可解释路径?
subheap kernel 是否还能迁移?

这会成为后续 proof 的一部分。

为什么 hard TreeHeap 不适合第一版训练

假设我们有一个硬查询 kernel:

if query == node.key:
  return stop
if query < node.key:
  return left
if query > node.key:
  return right

这个逻辑很清楚,但对梯度不友好。

因为模型一旦选择:

left

它就完全不走:

right

如果最后错了,loss 很难告诉模型:

其实刚才 right 更好。

同样,硬写入也有问题:

arr[5] = value

如果写错位置,梯度很难平滑地告诉 encoder:

你应该往 arr[4] 写 0.2,往 arr[5] 写 0.8。

所以第一版必须用 soft 版本。

Soft Write 的弱版本:神经内存写入

先承认一个问题。

如果我们把可微写入写成:

write_logits = encoder(x, H)
write_prob = softmax(write_logits)

然后直接更新数组槽位:

arr_new[i] =
  (1 - write_prob[i]) * arr_old[i]
+ write_prob[i] * write_vector

这确实是可微的。

但它更像:

neural memory write

也就是神经网络记忆槽更新。

它的问题是:

梯度进入了 arr,
但没有真正进入 TreeHeap 的 plus 算子。

换句话说,它能证明:

一个数组内存可以被 softmax 写入。

但它不能证明:

TreeHeap 的加法、路径、子结构、卷积核可以被学习。

所以这个写法只能作为:

baseline
教学反例
最低可微版本

不能作为 TreeHeap 的正式写入机制。

正式机制应该是:

Soft Write = Soft Plus

更进一步:

Soft Write = Kernel-guided Soft Plus

Soft Plus:对 TreeHeap 加法的概率提升

先定义 hard plus。

假设:

H = 当前 TreeHeap
x = 新输入的 token / node / 小 TreeHeap
a = 一个地址或路径

hard 写入不是:

arr[a] = x

而是:

H_next = H ⊕_a x

其中:

⊕_a

表示:

在地址 a 上,把 x 按 TreeHeap 的规则并入 H。

这个规则可以包含:

路径比较
子树重排
局部 merge
权重更新
父子关系维护

这才是 TreeHeap 的加法味道。

Soft plus 不是直接改数组。

Soft plus 是:

H_next = sum_a p(a | H, x) * (H ⊕_a x)

翻译成人话:

模型不知道 x 应该插入哪个地址,
所以它先生成多个候选 TreeHeap:

candidate_a = H ⊕_a x

然后按概率把这些候选结构混合起来。

如果:

p(left.right) = 1.0
其他地址 = 0.0

那么:

H_next = H ⊕_{left.right} x

这就退化回 hard TreeHeap plus。

所以 Soft Plus 仍然继承原来的 TreeHeap 数学基础。

它不是:

矩阵内存插值。

它是:

TreeHeap plus 算子的 soft lifting。

Kernel-guided Soft Plus:用卷积核决定写入

还有一个更关键的问题:

p(a | H, x) 从哪里来?

如果只是让一个普通 encoder 直接输出所有地址概率:

p(a) = softmax(MLP(H, x))

那仍然有点像普通注意力。

更符合 TreeHeap 的方案是:

p(a) 由 TreeHeap convolution kernel 计算出来。

也就是:

score(a) = K_write(subheap(H, a), x)
p(a) = softmax(score(a))

其中:

K_write

是一个可微卷积核。

它观察:

当前位置的 subheap
新输入 x
局部路径
局部 key/value/weight
局部结构 pattern

然后判断:

x 是否应该写到这个位置;
x 是否应该继续往 left;
x 是否应该继续往 right;
x 是否应该在这里 stop 并 merge。

这样,写入就不再是 hardcode:

if x < node.key:
  go left

而是变成可微 kernel:

local_feature = phi(subheap(H, a), x)

score_stop  = w_stop  · local_feature
score_left  = w_left  · local_feature
score_right = w_right · local_feature

p_action = softmax([score_stop, score_left, score_right])

这个 K_write 就是 TreeHeap 上的卷积核。

它不是二维图像卷积核。

但它做的是同一类事情:

在局部结构上滑动;
提取局部 pattern;
给出下一步操作分数。

图像卷积看的是:

3x3 pixel patch

TreeHeap 卷积看的是:

root -> left/right 的小 subheap

例如:

        8
      /   \
     4     12

现在插入:

x.key = 6

卷积核在 root=8 看到:

6 更像应该去 left

于是输出:

stop:  0.05
left:  0.90
right: 0.05

到 node=4 时,它看到:

6 更像应该去 right

输出:

stop:  0.05
left:  0.05
right: 0.90

到空位或 node=6 时,它输出:

stop:  0.95
left:  0.025
right: 0.025

然后执行:

H_next = sum_a write_mass[a] * (H ⊕_a x)

这里的 write_mass[a] 不是外部指定的。

它来自 kernel 在树上的逐步传播:

mass[root] = 1

for step in search_steps:
  for each active address a:
    p_action = K_write(subheap(H, a), x)

    write_mass[a]       += mass[a] * p_stop
    mass_next[left(a)]  += mass[a] * p_left
    mass_next[right(a)] += mass[a] * p_right

最后:

H_next = sum_a write_mass[a] * Plus_a(H, x)

这才是 TreeHeap 版本的可微写入。

它的梯度链条是:

loss
H_next
sum_a write_mass[a] * Plus_a(H, x)
write_mass[a]
K_write(subheap(H, a), x)
kernel parameters

所以梯度进入的不是普通内存槽。

梯度进入的是:

TreeHeap convolution kernel
TreeHeap plus candidates
TreeHeap route distribution
TreeHeap collapse path

这比 naive soft memory write 更接近我们的目标。

Soft Route:可微路径选择

硬路由是:

go left

Soft route 是:

action_logits = query_kernel(query, node)
action_prob = softmax(action_logits)

输出:

{
  stop:  0.10,
  left:  0.75,
  right: 0.15
}

这表示:

当前更可能应该走 left,
但 right 和 stop 仍然保留少量概率。

如果当前节点有流量:

mass[i] = 0.80

那么下一步传播:

stop_mass[i]        += 0.80 * 0.10
mass_next[left(i)]  += 0.80 * 0.75
mass_next[right(i)] += 0.80 * 0.15

也就是:

stop_mass[i]        += mass[i] * p_stop
mass_next[left(i)]  += mass[i] * p_left
mass_next[right(i)] += mass[i] * p_right

跑多步以后,输出可以是:

y_hat = sum_i stop_mass[i] * node_value[i]

或者分类任务里:

logits = sum_i stop_mass[i] * node_logits[i]

这仍然是可微的。

梯度能进入:

query kernel
node_key
node_value
路径概率

一个完整 Toy:查找 key/value

任务:

输入一组 key/value
查询一个 key
输出对应 value

样本:

pairs = [(8,A), (4,B), (12,C), (2,D), (6,E), (10,F), (14,G)]
query = 6
target = E

理想结构是:

          8:A
         /   \
      4:B     12:C
     /  \     /   \
  2:D   6:E 10:F 14:G

如果是硬查找:

6 < 8  -> left
6 > 4  -> right
6 == 6 -> stop
output = E

Soft TreeHeap 不会一开始这么硬。

第 1 步在 root:

node.key = 8
query = 6

query kernel 输出:

stop:  0.05
left:  0.85
right: 0.10

第 2 步进入左子树,节点是 4:B

node.key = 4
query = 6

输出:

stop:  0.05
left:  0.10
right: 0.85

路径概率:

root -> left -> right
= 0.85 * 0.85
= 0.7225

第 3 步到 6:E

node.key = 6
query = 6

输出:

stop:  0.80
left:  0.10
right: 0.10

最终命中路径概率:

root -> left -> right -> stop
= 0.85 * 0.85 * 0.80
= 0.5780

如果模型输出了 E,loss 下降。

如果模型输出错了,loss 反传,梯度会告诉系统:

哪些节点 key/value 需要调整
哪些路由概率需要调整
哪个写入位置更合理

这就是 TreeHeap 的梯度学习过程。

Loss 不应该一开始大锅炖

上面讲了:

loss 可以进入 Soft TreeHeap。

但这不等于说:

所有 loss 都应该一开始混在一起。

一个很自然的教学写法是:

L =
  L_task
+ alpha * L_order
+ beta  * L_depth
+ gamma * L_entropy

这个式子适合帮助读者理解:

任务正确性、结构合法性、路径长度、概率坍缩
都可以变成训练信号。

但它不一定是好的工程设计。

因为多个 loss 直接相加,会遇到几个问题:

梯度方向可能互相抵消;
某个 loss 的尺度太大,压住其他 loss;
结构 loss 太早生效,导致模型过早坍缩;
熵 loss 太强,导致模型一直不敢做决定;
多个目标一起训练,难以知道到底哪个 kernel 学坏了。

这和 Transformer 的经验类似。

Transformer 不是只用一个观察角度看序列。

它用了:

multi-head attention

不同 head 可以学习不同关系。

TreeHeap 也应该类似。

更合理的设计不是:

一个巨大 loss 控制所有东西。

而是:

多个 TreeHeap kernel / head 各自学习一种结构能力。

Multi-kernel TreeHeap

可以先把 Soft TreeHeap 拆成几个 head。

Head 学什么 主要梯度来源
plus/kernel head 输入应该通过哪个 subheap kernel 并入 TreeHeap reconstruction / lookup / structure loss
route head 查询时走 stop/left/right lookup task loss
order head 是否形成有序树 order violation loss
depth head 路径是否短 expected depth loss
prefix head 高频符号是否更短 compression loss
collapse head 什么时候从概率变成确定结构 entropy / temperature schedule

这样每个 head 都比较清楚。

例如查找任务里,route head 主要学:

query 和当前 node 的关系。

order head 主要学:

left_key < root_key < right_key

prefix head 主要学:

高频符号走短路径。

这些目标不一定应该同时强行压到一个参数空间里。

更好的方式是:

让不同 kernel 先学会自己的局部规律,
再由上层组合。

Loss 设计一:任务 Head

任务 head 只负责最终答案。

如果输出是分类:

L_task = cross_entropy(y_hat, target)

如果输出是连续值:

L_task = MSE(y_hat, target)

例如 key/value 查找任务:

target = E
y_hat = soft_query(H, query)
L_task = cross_entropy(y_hat, E)

这个 head 回答:

最后答案对不对?

它不直接负责:

树是否漂亮;
路径是否最短;
概率是否已经坍缩。

Loss 设计二:Order Head

如果任务是有序查找树,可以单独给 order head 一个结构目标。

例如:

left_key < root_key < right_key

用 hinge loss 写:

L_order =
  max(0, left_key - root_key + margin)
+ max(0, root_key - right_key + margin)

如果左子节点比 root 还大,就会罚。

如果右子节点比 root 还小,也会罚。

这个 head 的作用不是替代任务 loss。

它的作用是:

让 TreeHeap 的内部结构更像可搜索结构。

这类似 CNN 的卷积结构偏置。

但区别是:

CNN 的局部结构通常是人工固定的二维邻域;
TreeHeap 的局部结构是可学习的地址 / 子树 / 路由。

Loss 设计三:Depth Head

如果查找绕很远,虽然答案对了,也不一定好。

可以单独训练一个 depth head:

L_depth = expected_search_steps

例如:

root -> left -> right -> stop

路径长度是 3。

如果模型绕成:

root -> right -> left -> left -> right -> stop

路径更长,就会被罚。

这个 head 对应的是:

搜索效率。

它可以晚一点加入。

因为训练早期模型还不会查找,如果太早惩罚路径长度,可能导致模型学会:

为了路径短,直接 stop。

但答案是错的。

Loss 设计四:Collapse Head

训练早期,我们允许不确定:

left: 0.45
right: 0.40
stop: 0.15

训练后期,我们希望它逐渐清晰:

left: 0.95
right: 0.03
stop: 0.02

所以可以使用 entropy 或 temperature schedule。

但这里要非常小心。

如果把 entropy loss 一开始就和 task loss 强行混在一起,可能出现两种坏情况。

第一种:

过早坍缩。

模型还没学会结构,就已经把概率压成 one-hot。

后面错了也很难改。

第二种:

长期不坍缩。

模型为了保留不确定性,永远不形成清晰路径。

所以 collapse head 更像一个控制器:

early:  high temperature, allow exploration
middle: reduce temperature
late:   low temperature, encourage collapse

它不应该无脑和所有 loss 相加。

推荐训练方式:分阶段或交替训练

更合理的训练流程可以是:

Stage 1:
  只训练 task head / route head。
  目标:答案能不能对。

Stage 2:
  加入 order head。
  目标:内部结构是否变成可搜索树。

Stage 3:
  加入 depth head。
  目标:路径是否更短。

Stage 4:
  加入 collapse head。
  目标:soft distribution 是否能稳定坍缩成 hard TreeHeap。

也可以采用交替训练:

step 1: update route kernel
step 2: update write kernel
step 3: update order kernel
step 4: update collapse controller

必要时还可以使用:

stop-gradient
freeze kernel
auxiliary probe
gradient clipping
loss normalization

这样做的好处是:

每一种梯度信息都有自己的入口;
每个 kernel 学坏了都能被定位;
不会把所有目标搅在一起互相污染。

所以 SPR-019 的正式观点应该是:

TreeHeap 可以通过 loss / gradient 学习,
但不应该依赖一个大锅炖总 loss。

TreeHeap 更合理的训练形态是:
multi-kernel + staged training + controlled collapse。

Huffman-like 压缩任务的 Loss

如果任务是学习加权前缀树,loss 可以换成:

L =
  L_reconstruct
+ lambda * L_length
+ mu * L_prefix_free

其中:

L_reconstruct:
  decoder 是否能还原符号。

L_length:
  高频符号路径是否更短。

L_prefix_free:
  是否避免一个符号路径成为另一个符号路径的前缀。

例如符号频率:

A: 0.50
B: 0.25
C: 0.15
D: 0.10

理想 Huffman-like 编码:

A -> 0
B -> 10
C -> 110
D -> 111

平均路径长度:

0.50 * 1
+ 0.25 * 2
+ 0.15 * 3
+ 0.10 * 3
= 1.75

固定长度编码是:

2.00

所以 predict 是:

如果 TreeHeap 能学习加权前缀树,
它的 expected path length 应该接近 Huffman oracle,
并低于 fixed-length baseline。

Predict

当前 predict 分四层。

Predict 1:可学习性

Soft TreeHeap 的 loss 应该能下降。

最小任务:

线性回归
二分类
XOR / parity
key/value lookup

如果这些都学不会,TreeHeap 不具备机器学习基本能力。

Predict 2:可搜索编码

在 key/value lookup 任务中,
TreeHeap encoder 应该能学习一种可被 query kernel 搜索的结构。

指标:

query accuracy
expected search depth
OOD key count generalization
tree order violation rate
failure tail

Predict 3:可压缩编码

在 weighted prefix coding 任务中,
TreeHeap encoder 应该能学习接近 Huffman oracle 的路径分配。

指标:

reconstruction accuracy
expected path length
prefix-free violation rate
gap to Huffman oracle
gap to fixed-length baseline

Predict 4:Soft 版本不破坏 TreeHeap 代数

如果 Soft TreeHeap 真的是 Hard TreeHeap 的概率提升,
那么当温度降低、分布接近 one-hot 时,
soft 结果应该接近对应 hard 操作的结果。

也就是:

kernel-guided soft plus collapse 后,应该接近 hard plus;
soft route collapse 后,应该接近 hard route;
soft subheap kernel collapse 后,应该接近 hard subheap kernel;
soft learned tree collapse 后,应该仍然是合法 TreeHeap。

指标:

hard-soft output gap
collapse legality rate
route interpretability
subheap relocation accuracy
gradient stability

Proof 设计

为了证明 claim,需要最少四组实验。

Experiment 0:Soft TreeHeap 能不能学习

目的:

证明 TreeHeap 和 MLP 一样,可以通过 loss / gradient 学函数。

任务:

linear regression
binary classification
XOR
small lookup

对比:

MLP
Soft TreeHeap

判断:

loss 是否下降;
accuracy 是否上升;
参数梯度是否非零;
训练是否稳定。

目的:

证明 encoder 能学习建一棵可搜索树。

任务:

输入 N 个 key/value;
查询 key;
输出 value。

训练:

N = 7, 15

测试外推:

N = 31, 63

对比:

flatten MLP
small Transformer
Soft TreeHeap
oracle BST

指标:

accuracy
expected search depth
sample efficiency
OOD generalization
tree order violation

Experiment 2:Learned Huffman-like Prefix Tree

目的:

证明 encoder 能学习加权前缀压缩结构。

任务:

输入符号频率;
encoder 输出 TreeHeap code;
decoder 根据路径还原符号。

对比:

fixed-length code
Huffman oracle
MLP autoencoder
Soft TreeHeap prefix encoder

指标:

reconstruction accuracy
expected code length
prefix-free violation
gap to Huffman oracle

Experiment 3:Hard/Soft Consistency 与 Loss Ablation

目的:

证明 Soft TreeHeap 没有破坏 Hard TreeHeap 的核心算子;
同时验证 multi-kernel 训练是否比大锅炖总 loss 更稳定。

这个实验分三部分。

第一半验证 hard/soft 一致性。

构造一个确定的 hard TreeHeap:

        8
      /   \
     4     12
    / \    / \
   2   6  10 14

hard 查询:

query = 6
8 -> left
4 -> right
6 -> stop
output = E

soft 查询使用同一棵树,但每一步不是确定动作,而是概率:

at 8:
  stop  0.01
  left  0.98
  right 0.01

at 4:
  stop  0.01
  left  0.01
  right 0.98

at 6:
  stop  0.98
  left  0.01
  right 0.01

这时正确路径概率约为:

0.98 * 0.98 * 0.98 = 0.941192

如果 temperature 继续降低,概率会更接近:

1.0

那么 soft 输出应该收敛到 hard 输出:

output_soft -> E

判断指标:

hard-soft output gap 是否下降;
正确路径概率是否上升;
collapse 后路径是否合法;
collapse 后是否等于 hard route。

第二半验证写入机制。

同一个 key/value lookup 建树任务,比较三种写入方式:

A: naive soft memory write
B: encoder soft plus
C: kernel-guided soft plus

A 是弱版本:

arr_new[i] =
  (1 - p[i]) * arr_old[i]
+ p[i] * write_vector

它测试:

普通神经内存写入能做到什么程度。

B 是中间版本:

H_next = sum_a p(a | H, x) * (H ⊕_a x)

p(a) 由普通 encoder 给出。

它测试:

只要有 soft plus,是否就足够。

C 是 TreeHeap 正式版本:

score(a) = K_write(subheap(H, a), x)
p(a) = softmax(score(a))
H_next = sum_a p(a) * (H ⊕_a x)

它测试:

用 TreeHeap 卷积核来决定写入位置,
是否比普通 encoder 更稳定、更可解释、更能外推。

判断指标:

lookup accuracy
OOD N=31/63 accuracy
expected search depth
collapse legality rate
route interpretability
hard-soft output gap
subheap relocation accuracy

如果我们的判断正确,C 应该至少在这些地方更好:

更容易形成可解释路径;
更容易坍缩成合法 TreeHeap;
在更大 N 上失败尾部更少;
对 subheap relocation 更稳。

第三半验证 loss 设计。

同一个 lookup 任务,比较三种训练方式:

D: only task loss
E: 大锅炖总 loss
F: multi-kernel staged training

其中 E 是:

L =
  L_task
+ alpha * L_order
+ beta  * L_depth
+ gamma * L_entropy

F 是:

Stage 1: train route/task head
Stage 2: add order head
Stage 3: add depth head
Stage 4: add collapse head

如果我们的判断正确,F 应该更稳。

预期结果不是 F 在所有指标上都赢。

更具体的 predict 是:

F 的梯度爆炸/消失次数更少;
F 的 collapse 更晚、更可控;
F 的 order violation 下降更平滑;
F 在 OOD N=31/63 上失败尾部更少;
E 可能训练更快,但更容易过早坍缩或目标对冲。

Falsification:什么结果会否定我们

这也要写清楚。

如果出现这些结果,claim 就要降级:

Soft TreeHeap 的 loss 不下降。
Soft route 梯度长期为 0 或爆炸。
TreeHeap lookup 不如同规模 MLP。
TreeHeap 无法外推到更大 N。
prefix tree 长度不如 fixed-length baseline。
soft collapse 后得不到合法 hard TreeHeap。
kernel-guided soft plus 不如 naive memory write。
multi-kernel 比大锅炖总 loss 更不稳定。
encoder 没有学出任何可解释结构。

这些结果说明:

TreeHeap 可能只是复杂包装,
没有带来有效归纳偏置。

当前 Claim 的边界

到目前为止,我们还没有证明:

Soft TreeHeap 一定能训练成功。
TreeHeap 一定优于 Transformer。
TreeHeap 能做 WMT。
Huffman-like 结构一定能通过梯度学出来。

现在只是确定了下一步要证明什么。

真正的 claim 是:

TreeHeap 如果要作为机器学习结构存在,
必须能让梯度进入它的结构状态。

Soft write 不应该只是内存插值。

正式路径应该是:

kernel-guided soft plus、soft route、soft stop/read。

如果这条路径成立,
TreeHeap 就能像 MLP / Transformer 一样用 loss 学习;
并且可能在搜索、压缩、路径解码这类结构任务上表现更好。

这就是 SPR-019 要进入实验的地方。

License: GPLv3