参数也是 TreeHeap:kernel 自己学会了卷积
SPR-038 之后,Houming818 提了一个关键修正:
参数本身也应该是 TreeHeap。
这个修正很重要。
SPR-038 做的是:
H <- H - eta * grad_H L
也就是更新当前样本的 heap state。
SPR-039 要证明的是另一件事:
Theta <- Theta - eta * grad_Theta L
也就是更新 kernel 的参数 TreeHeap。
这两件事必须分开。
对象定义
这次我们严格区分:
| 符号 | 含义 |
|---|---|
Theta |
parameter TreeHeap,模型参数的载体 |
H |
activation / memory TreeHeap,当前样本状态 |
A |
physical address rule,比如 left(i)=2i |
K_Theta |
由 Theta 定义的局部 kernel operator |
L |
scalar loss,用来产生梯度 |
计算过程是:
H_next = K_Theta(H, A)
L = loss(H_next, target)
Theta <- Theta - eta * grad_Theta L
这才是参数学习。
最小 TreeHeap 卷积任务
我们使用一棵 7 节点树:
1
/ \
2 3
/ \ / \
4 5 6 7
输入例子:
H = [1,2,3,4,5,6,7]
隐藏 kernel 是:
[root, left, right] = [1, 1, 1]
所以内部节点的目标是:
H'[1] = H[1] + H[2] + H[3] = 6
H'[2] = H[2] + H[4] + H[5] = 11
H'[3] = H[3] + H[6] + H[7] = 16
叶子保持不变:
H' = [6,11,16,4,5,6,7]
关键点是:
模型一开始不知道 [1,1,1]。
它只有参数:
Theta = [theta_root, theta_left, theta_right]
模型计算:
Y[i] = theta_root * H[i]
+ theta_left * H[left(i)]
+ theta_right * H[right(i)]
loss:
L = mean_squared_error(Y, target)
如果训练后:
Theta ~= [1,1,1]
就说明 kernel 参数真的学到了这个局部卷积规则。
实验结果
实验在 io.grepcode.cn 上执行。
证据目录:
ara/s1-echo/evidence/s1_kernel_parameter_learning_probe/
结果:
| 指标 | 数值 |
|---|---|
| pilot pass | true |
| learned theta | [0.9999999999999998, 0.9999999999999998, 1.0000000000000004] |
| theta L2 error | 5.44e-16 |
| theta delta L2 | 1.15777 |
| TreeHeap test MSE | 8.78e-31 |
| TreeHeap OOD MSE | 8.93e-30 |
| wrong-address test MSE | 5.92848 |
| flat-global test MSE | 3.56010 |
这说明:
Theta 确实移动了。
Theta 学回了隐藏 kernel [1,1,1]。
正确地址结构下 test / OOD 误差接近 0。
错误地址结构明显失败。
不看 left/right subheap 的 matched-size flat baseline 也失败。
为什么 wrong-address 很重要
如果只是让模型学一个线性函数,它当然可能会过拟合。
所以这次放了 wrong-address baseline。
正确 kernel 看的是:
node 1 -> [1,2,3]
node 2 -> [2,4,5]
node 3 -> [3,6,7]
wrong-address 看的是错误局部结构。
结果:
TreeHeap test MSE ~= 0
wrong-address test MSE = 5.92848
这说明收益不是来自“随便三个数做线性回归”,而是来自:
正确的 TreeHeap address / subheap 结构。
和 SPR-038 的区别
SPR-038:
更新 H
不更新 Theta
证明 state relaxation
SPR-039:
更新 Theta
不靠移动当前 H 来作弊
证明 kernel parameter learning
所以 SPR-039 补上了 SPR-038 留下的缺口。
现在我们可以说:
TreeHeap 不只是状态能被梯度松弛。
TreeHeap 的 kernel 参数也能被梯度训练。
和 Transformer 的关系
Transformer 的 attention 可以粗略看成:
score(i,j) = Q_i dot K_j
它在 flat token 图上学习关系。
TreeHeap kernel 的形式是:
state = K_Theta(root, left, right)
它在局部 subheap 上学习关系。
这次 proof 证明了最小版本:
K_Theta 可以通过梯度学到一个局部结构算子。
这不是说 TreeHeap 已经打败 Transformer。
更准确地说:
TreeHeap 和普通 ML 一样,可以通过 loss / gradient 学习函数;
但它学习的函数天然绑定 address / path / subheap 结构。
Claim 状态
S1-KERNEL-LEARN-C01:
A parameter TreeHeap Theta can learn a local subheap convolution rule
from scalar loss and gradient.
status: supported pilot
还没有证明什么
这次没有证明:
语言理解
WMT 翻译
真实 relation field
multi-kernel specialization
TreeHeap 胜过所有更大的 flat model
尤其最后一点要诚实:
一个更大的 flat linear model 当然可能拟合这个 toy。
这次 proof 的重点不是“所有 flat 都输”。
重点是:
在 TreeHeap 的 address / subheap 结构里,
共享 kernel 参数 Theta 可以被梯度学出来。
这是一个必要地基。
下一步
SPR-039 之后,下一步应该扩展三件事:
1. scalar kernel -> vector / matrix kernel
2. clean sum target -> noisy restore / mask restore
3. single kernel -> multi-kernel specialization
如果这些继续成立,TreeHeap 才能从:
能学一个 toy 卷积核
走向:
能学真实数据里的结构 kernel
一句话总结
SPR-039 的结论是:
参数 TreeHeap Theta 可以通过 scalar loss 和 gradient,
学会一个局部 subheap 卷积核。
这一步把 SPR-038 的状态松弛,推进到了真正的参数学习。
ARA: kernel parameter learning / evidence / claims