模型是不是换了一个角度画鸡蛋
本文记录的是推测与实验合同,不是已经成立的结论。
当前证据已经说明 TreeHeap Butterfly 参与了双向翻译计算,但还不能说明训练过程中变化的 Dreams 都是同一语义的不同视角。
1. Houming818 提出的“画鸡蛋”问题
同一个鸡蛋,从正面、侧面、远处和近处观察,投影的形状都不同。画家最后只需要画出一个视角,但训练观察能力时,可以围着鸡蛋看一圈。
这个类比进入 TreeHeap 后,问题变成:
Butterfly 让同一个输入依次经过多种异构坐标折叠。Encoder 和 Decoder 在训练中共同变化时,我们怎么知道模型最终采用了哪个观察坐标?不同 epoch 的 Dreams 会不会只是从不同角度画出的同一个语义?
Butterfly 中间态:
$
$ H^{(0)},H^{(1)},\ldots,H^{(D)} $$
不是多条已经成形的自然语言 string,而是同一个输入的多个潜在坐标状态。当前程序也没有把这些状态平行送给 Decoder,而是串行计算:
$
$ H^{(D)} = B_{D-1}\circ\cdots\circ B_1\circ B_0(H^{(0)}) $$
只有这个统一干涉态继续进入 FOLD:
$
$ H_{\mathrm{state}} = \operatorname{FOLD}(H^{(D)}) $$
因此,我们观察的是一块不断旋转的内部画板,不是让 Decoder 在许多独立句子中挑一条。
2. 为什么内部坐标可以变化
设 Encoder 产生状态
$H$,Decoder 为
$D$。如果内部存在一个可逆变换
$A$:
$
$ H'=A(H) $$
并且 Decoder 同时学会:
$
$ D'(H')=D(A^{-1}H') $$
那么:
$
$ D'(H')=D(H) $$
外部功能可以完全不变,但内部坐标已经改变。
这意味着 token 交叉熵只要求 Encoder 与 Decoder 配合完成目标,不要求它们采用研究者指定的坐标系。训练中的参数变化可能同时调整:
Butterfly 怎样折叠地址
FOLD 怎样形成 root/detail
READ 怎样分配深度质量
Decoder 怎样解释这些状态
这正是“私有协议”的坐标不唯一性。
3. Dreams 变化不等于视角变化
必须把三种现象分开。
3.1 内部坐标旋转
原始 H 变化明显
对齐以后 H 可以恢复
关键语义和输出分布保持稳定
这才是本文要寻找的坐标漂移。
3.2 合法的表面视角变化
下面两句话词面不同,但可以表达同一事件:
新公司预计将在2019年春季开始运营。
新公司计划于2019年春天投入运作。
如果实体、时间、事件和论元关系都保留,可以把它们视为同一语义的不同表面投影。
3.3 真实生成错误
下面这些不能仅凭“视角不同”解释:
主体和客体互换
否定词丢失
before 变成 after
612 名乘客变成 600 人
原因和结果颠倒
连续重复同一句短语
产生输入中不存在的事件
流畅不等于正确。内部坐标能够对齐,也不自动证明 Dream 的语义正确。
4. 为什么原来的六条 Dreams 不够
现有探针能观察年份、简单因果和自由长句,但很难区分模型到底保存了什么语法关系。
因此,新的固定探针加入了人类语法分析中更典型的最小差异。
4.1 主体与客体反转
Ultraman defeated the little monster.
The little monster defeated Ultraman.
两句话拥有相同的实体和关系词,只有谁打败谁不同。词袋模型无法解决,结构状态必须保留手性。
4.2 主动与被动
The wind blew the rain against the glass.
The rain was blown against the glass by the wind.
表面顺序变化,但事件角色应当保持一致。
4.3 否定
The cat ate the fish.
The cat did not eat the fish.
模型若只保存“猫、吃、鱼”的共现,会丢掉决定句意的极性。
4.4 时间顺序
Xiaohong arrived before Xiaoming ate dinner.
Xiaohong arrived after Xiaoming ate dinner.
实体与事件相同,但时间方向相反。
4.5 量词
Every window in that house is open.
Not every window in that house is open.
“not every”不能退化为“every”,也不能错误翻成“所有窗户都没开”。
4.6 附着关系
I used a telescope to see the man.
I saw the man who was holding a telescope.
两句话都包含“我、男人、望远镜、看见”,但望远镜属于不同关系。
此外还加入中文“把/被”、话题结构、关系从句、因果方向、精确数字和嵌套长句。完整探针公开保存在:
ara/s3-generation/dreams.txt
这些句子不会进入训练,只在固定 wake 点观察模型。
5. 当前长训为什么提出了这个问题
截至约 4881 万训练样本,当前双向 Butterfly TreeHeap 的验证结果为:
| 项目 | NLL |
|---|---|
| 原生 Butterfly | 3.4223 |
| 运行时改成 Identity | 5.0234 |
| Identity 损伤 | +1.6011 |
| 英译中 | 3.7219 |
| 中译英 | 3.1227 |
这支持当前 checkpoint 依赖 Butterfly 通信,但 Dreams 并不是单调变好:
- 有时年份、事件和论元逐渐出现;
- 有时同一句在后续 checkpoint 又发生重复;
- 短句通常比长句稳定;
- 中译英整体比英译中稳定。
仅凭这些现象,我们无法判断:
模型更换了内部视角
Decoder 的输出模式在漂移
模型发生了普通遗忘
或者 greedy argmax 在接近概率上跳变
因此必须观察中间态。
6. 实验一:先审核可见的 Dreams
对 taskd 89 已保存的所有不可变 Dreams 快照,按固定句逐 checkpoint 排列。
每条输出分别标注:
主体/客体是否正确
否定是否正确
时间顺序是否正确
数字与实体是否正确
因果方向是否正确
整体含义是否可接受
表面措辞是否改变
是否存在严重重复
语义事实分数与流畅度、BLEU、词面相似度分开报告。
如果措辞不断变化,但角色、事实和因果稳定,才获得“表面视角变化”的候选证据。如果事实同时变化,则仍然是模型不稳定。
7. 实验二:给 Butterfly 接一个只读示波器
在 Butterfly 每个串行阶段后记录:
$
$ H_i^{(0)},H_i^{(1)},\ldots,H_i^{(D)} $$
探针采用只读的 detach。只有最终状态进入 FOLD,中间态不进入 Decoder、不计算额外 Loss,也不改变梯度。
当前 RTX 3090 训练只占约 5.2 GB 显存。最大 batch 下,一个阶段约 2 MiB,八个阶段约 16 MiB。固定几十条句子的 wake 探针可以承受;把数千万训练样本全部落盘则不可接受。
8. 实验三:跨 checkpoint 对齐坐标
取早、晚两个 checkpoint。把语法探针稳定分为:
calibration:只用于求坐标变换
heldout:只用于验证
在 calibration 上求正交 Procrustes 对齐:
$
$ A^* = \underset{A^\top A=I}{\arg\min} \left\| X_{\mathrm{cal}}A-Y_{\mathrm{cal}} \right\|_F $$
然后只在 heldout 上计算未对齐状态误差、对齐后状态误差和 alignment gain:
$
$ \text{gain} = 1- \frac{\text{aligned NRMSE}} {\text{raw NRMSE}} $$
若在同一批数据上拟合和评分,灵活的变换可能伪造一致性,所以禁止这样做。
9. 注册 Predict
P1:语义与表面可以分离
两个后期 checkpoint 之间,至少 25% 的探针发生措辞变化,同时平均语义事实分数下降不超过 0.05。
P2:内部坐标可以在留出句上恢复
至少两个 Butterfly 阶段的 heldout alignment gain 不低于 20%。
P3:对立含义不能被对齐坍缩
对齐以后,“奥特曼打怪兽”和“怪兽打奥特曼”仍必须比同一事件的主动/被动表达更加可分。若所有句子都被压到一起,对齐没有语义意义。
P4:任务功能必须真实改善
至少有一个阶段的参考 NLL 或语义事实分数改善。只有参数坐标变化、任务始终很差,只能叫参数漂移。
P5:探针不能改变被观察对象
打开与关闭 trace 后必须满足:
max absolute logit difference <= 1e-6
greedy token IDs 完全相同
10. 什么结果会推翻推测
以下任何结果都必须降级 Claim:
对齐不能改善 heldout 状态
对齐只对参与拟合的句子有效
主客体、否定和时序在对齐后一起坍缩
表面变化总伴随事实错误
trace 改变了 logits 或输出 token
没有两个独立 checkpoint 可供比较
还要区分两种部分结果:
- 中间态能对齐、语义不稳定:只证明坐标重参数化;
- 语义稳定、中间态不能对齐:只证明表面输出稳定;
- 两者同时成立:才支持私有协议视角漂移。
11. 当前工程状态
ARA 已登记:
S3-TREEHEAP-VIEW-DRIFT-C04
实验脚本:
ara/s3-generation/src/s3_treeheap_viewpoint_drift.py
它提供“self-test / capture / compare”三个阶段。当前 96 小时训练不会被热修改。任务结束后,先对最佳与最新 checkpoint 做两点 smoke;如果只保存了一个有效 checkpoint,则当前历史只能完成 Dreams 回溯,完整轨迹留给下一次训练。
12. 本文真正想知道什么
问题不是“模型的每一句 Dream 能不能被解释成正确”。
真正的问题是:
当 TreeHeap 的 Butterfly、FOLD 和 Decoder 一起训练时,它们是否形成了一个不断调整但仍保持语义关系的私有坐标协议?
如果答案为否,我们得到一个清楚的失败:Dreams 波动只是生成不稳定。
如果答案为是,我们第一次能够区分:
模型忘记了什么
模型换了一种说法
模型只是旋转了内部画板
这三件事不能再混为一谈。
13. 追加实验:多看几眼最终要画的视角
前面的实验计划观察 checkpoint 之间的内部坐标漂移。讨论继续以后,Houming818 又提出了一个更直接的问题:
如果画家围着鸡蛋观察了许多异构投影,但最后需要画出自然语言的原始顺序,那么训练时是否应该让模型多看几眼这个原序视角?
当前模型的默认数据流是:
原始 token 顺序 H0
-> 完整 XOR Butterfly B(H0)
-> FOLD
-> H_state
-> 共享 Decoder
追加实验不修改 FOLD、Decoder、目标译文和交叉熵,只改变进入 FOLD 前的输入视角:
以概率 p: H0 -> FOLD -> Decoder
以概率 1 - p: B(H0) -> FOLD -> Decoder
这里的 p 不是答案正确率,也不是某种语法标签。它只是训练样本采用原序视角的比例:
p |
原序视角 | Butterfly 视角 |
|---|---|---|
| 0.0 | 0% | 100% |
| 0.2 | 20% | 80% |
| 0.4 | 40% | 60% |
| 0.6 | 60% | 40% |
每个实验臂都使用同一 checkpoint、同一批 299,407 个样本、6,308,579 个目标 token 和 6,056 次参数更新。一个样本只出现一次,因此这个实验首先回答“固定训练预算怎样分配”,而不是“增加额外训练量是否有帮助”。
14. JS:怎样测量两种视角是否说同一种概率语言
对同一个输入和同一个待预测 token,分别运行 Butterfly 与原序路径。设两条路径输出的词表概率桶为
$P_B$和
$P_I$。
先取中间概率桶:
$
$ M=\frac{P_B+P_I}{2} $$
再计算 Jensen–Shannon divergence:
$
$ JS(P_B,P_I)=\frac{1}{2}KL(P_B\Vert M)+\frac{1}{2}KL(P_I\Vert M) $$
最后对验证集中所有非 PAD token 取平均。
直观地说:如果 Butterfly 认为下一个词是“苹果”的概率为 70%,原序路径却认为只有 20%,两套协议相距较远,JS 会较大。如果两个概率桶几乎相同,JS 就接近零。
JS 小不自动等于翻译正确。两条路径也可能一起输出同一个错误答案。因此实验还同时检查 Native NLL、Identity NLL、输入打乱损伤、结构替换损伤和 Dreams。
15. 正式结果
正式任务在 io 的 RTX 3090 上完成。主表如下,NLL 和 JS 都是越低越好:
原序比例 p |
Native NLL | 相对 p=0 |
Identity NLL | 跨视角 JS | Source shuffle 损伤 |
|---|---|---|---|---|---|
| 0.0 | 3.2710 | 0.0000 | 4.8336 | 0.2378 | +1.8247 |
| 0.2 | 3.2826 | +0.0116 | 3.7668 | 0.1011 | +1.8468 |
| 0.4 | 3.2939 | +0.0229 | 3.6963 | 0.0910 | +1.8575 |
| 0.6 | 3.3090 | +0.0380 | 3.6480 | 0.0838 | +1.8566 |
结果不是简单的“支持”或“失败”,而是出现了一条清楚的折中曲线。
15.1 固定预算下,Native NLL 没有改善
p=0 的 Native NLL 最低。随着 p 增加,Native NLL 在中英两个方向都单调升高。因此,预注册的 C05 具体预测——“适量原序提醒在固定预算下改善 Native NLL”——没有通过。
但这不等于原序信号无效。固定总 token 数以后,原序 token 增加必然挤占 Butterfly token:
p |
Butterfly token | 原序 token |
|---|---|---|
| 0.0 | 630.9 万 | 0 |
| 0.2 | 503.6 万 | 127.3 万 |
| 0.4 | 377.7 万 | 253.2 万 |
| 0.6 | 251.9 万 | 379.0 万 |
所以这张表测到的是训练能量重新分配后的结果。它还不能回答:保持 630.9 万 Butterfly token 不变,再额外增加原序 token,会发生什么。
15.2 投喂比例确实推动了共享协议
JS 从 0.2378 降到 0.0838,下降约 65%。Identity NLL 同时从 4.8336 降到 3.6480。
更关键的是,最前面的 20% 原序信号完成了绝大部分变化:
| 比例变化 | JS 改善 | Native NLL 代价 |
|---|---|---|
| 0% -> 20% | 0.1367 | 0.0116 |
| 20% -> 40% | 0.0101 | 0.0113 |
| 40% -> 60% | 0.0072 | 0.0151 |
这说明 p=0.2 附近存在明显拐点。少量原序视角就能强烈改变共享 FOLD/Decoder 的读取协议;继续增加比例,跨视角一致性的边际收益迅速变小。
15.3 低 JS 不是因为模型放弃了输入和结构
如果模型对任何输入都输出同一个概率桶,JS 也会下降。正式实验没有出现这种取巧:
- 打乱 source 后,NLL 始终恶化约
1.82--1.86; - Identity 和 Adjacent 结构替换仍然造成明显损伤;
- Butterfly communication 保持非零变换;
- communication kernel 在训练中持续收到梯度。
因此,当前最谨慎的结论是:
语料视角的投放比例能够推动 TreeHeap 的共享读取协议。它让原序和 Butterfly 坐标产生更接近的输出分布,但固定预算下,这种一致性会消耗 Native Butterfly 的专门训练能量。
这仍然没有证明模型内部存在唯一的“主视角”。尤其在 p=0.2 时,原序样本只是少数,却已经产生巨大影响。可能的原因不仅是出现次数,还包括原序坐标更容易读取、单次梯度牵引更强。当前实验没有保存每个比例的完整 checkpoint,不能事后定位究竟是哪一层向哪一套坐标移动。
15.4 Dreams 没有提供相反证据
固定 Dreams 中有些句子的措辞或局部关系变好,另一些仍然重复、漏失事实或产生新错误。没有出现随 p 增加而稳定改善的人工可见趋势。因此 Dreams 只记录为观察材料,不用于推翻主验证集结果。
16. 这次实验改变了什么认识
这次结果把两个以前混在一起的问题拆开了:
问题 A:模型能否同时读懂多种内部坐标?
问题 B:模型在目标推理路径上的质量是否更高?
增加原序比例明显帮助了问题 A,却没有在固定预算下帮助问题 B。这意味着“协议统一”和“Native 专门化”不是同一个评价指标。
从训练角度看,当前每一步近似计算:
$
$ g_p=(1-p)g_{Butterfly}+p g_{Identity} $$
p 像方向盘,决定平均梯度朝哪套协议移动;总训练 token 和更新次数像油门,决定沿这个方向走多远。当前实验只转动了方向盘,同时保持总油量不变。
17. 下一步:不再拿走 Butterfly 能量
下一轮不重复同一个固定预算比例扫描。我们先选择收益拐点 p=0.2,构造三个严格对照:
| 实验臂 | Butterfly token | 原序 token | 总 token | 回答的问题 |
|---|---|---|---|---|
| 历史基线 | 630.9 万 | 0 | 630.9 万 | 当前 p=0 结果 |
| 等算力加长 | 788.6 万 | 0 | 788.6 万 | 仅仅多训练是否足够 |
| 双视角增强 | 630.9 万 | 157.7 万 | 788.6 万 | 额外原序视角是否提供新信息 |
实现时,每训练四个 Butterfly batch,双视角增强臂额外训练一个原序 batch。等算力加长臂则额外训练一个 Butterfly batch。这样两臂总计算量相同,而双视角臂不会失去原来的 Butterfly 更新次数。
判定方式也相应改变:
- 双视角增强优于历史基线,但不优于等算力加长:收益主要来自多训练;
- 双视角增强与等算力加长 Native NLL 接近,但 JS 明显更低:原序视角提供了低成本协议校准;
- 双视角增强同时获得更低 Native NLL 和更低 JS:支持“额外视角产生可迁移信息”;
- Native NLL 仍系统性更差:说明两套视角存在不可忽略的梯度冲突或容量限制。
下一轮还必须保存每个实验臂的 checkpoint、分阶段 NLL/JS 曲线和固定 Dreams。只有这样,才能判断“训练得还不够”与“最终平衡点本来就不同”。新的实验会另行预注册,不修改本次 C05 的失败判据。
18. 当前结论
本轮实验已经结束。它没有证明“增加原序比例会在固定预算下改善 Native 翻译”,但它第一次以受控数据证明:
TreeHeap 私有协议并不是完全不受训练视角控制。仅 20% 的原序投喂,就能以很小的 Native NLL 代价,让两个输入坐标的输出分布显著靠近。
下一步不再争论这个现象是否存在,而是检验它来自归一化比例,还是可以通过增加绝对训练强度转化为实际任务收益。
License: GPLv3。本文公开 Claim、反证条件、探针语料与实验代码;任何人都可以复现、修改或给出相反证据。