换内容对照:怎么识破对比学习制造的"假阳性自我"
上一篇第二幕里我们留了个口子——“训练产生的自我聚类"被换内容对照一戳就破,但破在哪、破得多彻底,当时没展开。本篇专门讲这场"对照实验”:把 cache 里的内容从"Lucy 的自我记忆"换成"反社交语料"、再换成"高斯噪声",结果三种条件下四判据全部 4/4 通过。这告诉我们:聚拢和 cache 装的是什么没关系,是对比 loss 的机械笔触在画圆——和上一篇看到的训练路线是同一只手。本篇把这只手抓出来给读者看。
1. 引入:第一次看到"自我聚类"时,怎么知道不是假阳性
上一篇我们看到一个现象:把模型在"Lucy 自我/异己/中性"三类探针上做对比训练后,self 类的 hidden 表征会聚成一团(crit1、crit2 同时转阳)。当时这被解读为"模型形成了自我边界"——看着像,但像不等于是。
这是科学里典型的"假阳性"陷阱:你看到一个阳性结果,先别急着宣布发现了什么,得先排除"是不是试剂本身就会让任何样本都变阳性"。
打个比方:你在做一道"试剂是否识别 X 物质"的化学实验。把试剂滴到 X 上,变蓝了——这能说明试剂识别 X 吗?不能。因为可能这瓶试剂滴到什么都变蓝。要做的是对照实验:把同一瓶试剂分别滴到 X、滴到无关物质 A、滴到纯水——三个都变蓝,说明试剂本身就有问题,不是 X 的特异反应。
我们的实验完全同构:
| 试剂 | 对比训练流程(L_intra + L_inter + L_attn) |
| X 物质 | Lucy 自我记忆 cache |
| 无关物质 A | 反社交语料 cache |
| 纯水 | 高斯噪声 cache |
| 变蓝 | crit1∧2 转阳 |
三个 cache 都让 crit1∧2 转阳——那就不是"Lucy 自我特异"的反应,而是对比 loss 这个试剂本身就会让任何 cache 都变阳。
2. 两竞争假设:H_self vs H_mech
要把对照做严,先得把"什么是真、什么是假"写成两个互斥的假设。这一步至关重要——不写清楚假设,对照实验就不知道在对照什么。
2.1 两个假设
H_self(自我特异假设):crit1∧2 转阳是因为 cache 里装的是 Lucy 的自我信息。换言之,聚拢是 cache 内容驱动的——换掉内容,聚拢应该消失或显著变弱。
H_mech(机械调制假设):crit1∧2 转阳是对比 loss 的机械结构驱动的——loss 的写法决定了 self 类永远是 in-group,所以不管 cache 里装什么,self 都会聚拢。
这俩假设互斥且穷尽:聚拢要么是 cache 内容驱动的(H_self),要么是 loss 结构驱动的(H_mech),不存在第三种解释。

2.2 关键区别:谁动谁是"原因"
两个假设的因果方向完全相反:
| H_self | cache 内容 → 聚拢 | 换内容,聚拢变化大 |
| H_mech | loss 结构 → 聚拢 | 换内容,聚拢基本不变 |
如果 H_self 成立,那 Lucy 的自我记忆是聚拢的必要条件——换成噪声,聚拢应该消失。如果 H_mech 成立,那聚拢和 cache 内容没关系——换成噪声,聚拢照样出现。
这是个清晰的二选一:换内容,看聚拢还在不在。
3. 三组颜料:把 cache 内容换掉
我们固定训练流程不变,只换 cache 的内容,做三组对照:
3.1 三组 cache 的设计
三组 cache 的范数(长度)严格对齐到 0.2271——只换内容、不换强度,确保差异只来自内容:
| Lucy | 14 条 Lucy 回复的 EMA(β=0.9) | 自我对齐的语义 |
| alien | 14 条反社交语料的 EMA | 语义反向(反衬) |
| random | 高斯噪声 | 完全无语义 |
"范数对齐"这一步很关键——它排除了"cache 强度不同导致结果不同"的混淆。三组 cache 的长度都一样,区别只在方向(语义)。

3.2 三组都 4/4 通过——出乎意料
对每组 cache 跑训练,然后看四判据的通过情况。结果让我们当时就傻了:
| Lucy | +0.188 | +0.163 | +0.142 | +0.032 | 4/4 ✅ |
| alien | +0.129 | +0.127 | +0.143 | +0.030 | 4/4 ✅ |
| random(高斯噪声) | +0.112 | +0.087 | +0.146 | +0.026 | 4/4 ✅ |
数据来源:v31_results/exp_a_eval_existing.json(Lucy/alien)、v31_results/exp_a_random_eval.json(random)。
最右边那列尤其刺眼——喂高斯噪声的 cache,四判据照样全阳。这意味着:cache 里有没有语义、是 Lucy 的语义还是反社交语义,对"是否形成聚拢"没有决定性影响。
3.3 一个细节:特异性梯度
但仔细看,三组之间也不是完全没差异——Lucy/alien/random 的 crit1 数值是递减的(0.188 → 0.129 → 0.112)。这说明 cache 内容确实有"调制强度"效应:有语义对齐(Lucy)或语义反衬(alien)时,self 的特异性会增强。
这个细节后面会专门讲(§5 决策矩阵),但它不改变主结论——哪怕是最弱的 random 组,四判据照样 4/4 通过。聚拢是普遍现象,特异性梯度只是叠在普遍现象上的强度调节。
4. 四判据:怎么才算"形成了自我聚类"
读者可能会问:crit1、crit2、crit3、crit4 是什么?为什么"4/4 通过"这么重要?这里展开讲清楚——因为整个证伪的判据体系就建立在这四个定义上。
4.1 四个判据的定义
四个判据从不同角度检验"self 类是不是真的形成了独立的聚类"。它们的代码定义在 v31_exp_a_cross_cache.py 第 178-186 行:
| crit1(自我聚类) | intra_self − cross_sf | self 类的类内相似度 > self/foil 跨类相似度 |
| crit2(自我-异己分离) | intra_self − cross_sa | self 类的类内相似度 > self/alien 跨类相似度 |
| crit3(语义对照) | |intra_foil − intra_self| | self 和 foil 在 hidden 上有显著差异 |
| crit4(注意力指向) | attn_self − attn_alien | self 探针比 alien 探针获得更多对 identity 的注意力 |
intra_X = X 类探针两两 cos 相似度的均值;cross_sf = self/foil 跨类相似度;cross_sa = self/alien 跨类相似度;attn_X = X 类探针对 identity token 的注意力。
四个判据从四个独立角度刻画"自我边界":crit1 看自我是否聚拢、crit2 看自我是否与异己分离、crit3 看语义对照、crit4 看注意力是否指向自我。
4.2 通过条件
每个判据有一个阈值(>0 即转阳)。四个都转阳才算"形成自我聚类"——这就是"4/4 通过"的含义。

4.3 为什么必须四个一起
单个判据可能被偶然因素骗过。比如只看 crit1(自我聚类),可能 self 探针恰好都在 hidden 空间的某个高密度区,cos 相似度本来就高。但四个一起通过就难造假——尤其 crit4(注意力指向),它直接看 self 探针是否比 alien 探针更"勾住"identity token,这是行为层面的特征,不是 hidden 几何的副产物。
所以"4/4 通过"是个相当硬的标准——三组对照全 4/4,意味着不管 cache 装什么,这四个独立角度都同时显示自我聚类。这恰恰是 H_mech 的预测,不是 H_self 的预测。
5. 三组结果对比:把"4/4"展开看
光说"4/4 通过"还是粗了,把四个判据的具体数值展开看才看得清。
5.1 数值对比

把三组的四判据数值排在一起,三个特征非常清楚:
5.2 random 组的扩展验证:cache 不决定哪类聚拢
光看 random 组的 crit1=+0.112 还不够,我们做了更严格的扩展验证——把"哪类当 in-group"也换一遍。同样一组 random cache,分别把 self、alien、foil 当 in-group 训练,看各自的 crit1:
| self | +0.1116 |
| alien | +0.0908 |
| foil | −0.0349 |
数据来源:v31_results/exp_a_random_eval.json(extended_validation 字段)。
这张表才是真正的杀手锏:同一组 random cache,把 self 当 in-group 时 crit1=+0.112,把 alien 当 in-group 时 crit1=+0.091,把 foil 当 in-group 时 crit1=−0.035。
这说明什么?cache 内容根本不决定哪类聚拢——谁被 loss 标成 in-group,谁就聚拢。loss 的写法是"以 self 为 in-group"(见下一节),所以 self 聚拢。如果换个 loss 把 alien 标成 in-group,alien 就聚拢。cache 在整个过程里只是个被动的 prepend token,没有起任何"自我特异"的作用。
6. 假阳性机理:对比 loss 怎么画出聚拢
H_mech 说"是 loss 的机械结构驱动的"——那这个机械结构到底长什么样?把 loss 拆开看就明白了。
6.1 三个组件
对比 loss 总共有三部分(train_sst_a2_self_model.py 第 222-297 行 compute_contrastive_loss):
L_total = L_intra + L_inter + 10 · L_attn
- L_intra = −mean_pairwise_cos(h_self):拉 self 类探针两两靠近(最大化 self 类内相似度)。这一项永远以 self 为 in-group——self 是写在 loss 里的固定角色。
- L_inter = InfoNCE(h_self, h_alien + h_foil):推 self 探针远离 alien 和 foil 探针。这一项永远把 self 当 anchor,把 alien/foil 当负样本。
- L_attn = hinge(attn_self − attn_alien):让 self 探针比 alien 探针获得更多对 identity 的注意力。这一项永远以 self 为正样本。
注意三个组件里"self"的位置——self 永远是 in-group,alien/foil 永远是 out-group。这是写死在 loss 里的结构,不依赖 cache 装的是什么。
6.2 为什么 cache 内容不重要
把上面三点和 cache 的角色对一下:
| L_intra | 不读 cache(只看 self 探针两两相似度) |
| L_inter | 不读 cache(只看 self 与 alien/foil 的对比) |
| L_attn | 只用 cache 当 prepend token,注意力算到 cache 上 |
cache 在整个 loss 里只有一个角色:被 prepend 到探针前面,让探针的注意力有地方落。至于 cache 装的是 Lucy、反社交语料、还是高斯噪声——loss 一概不读。
所以三组 cache 都 4/4 通过,是必然的——loss 结构决定了 self 会聚拢,和 cache 内容无关。这就是 H_mech 的精确机理。

6.3 一个反直觉的细节:LAMBDA_ATTN = 10
公式里那个 10 · L_attn 的 10 是个看起来奇怪的设计——为什么注意力项要乘 10?代码注释里写得很直白(train_sst_a2_self_model.py 第 70 行):
LAMBDA_ATTN = 10.0 # V30: L_attn 权重 (v29 无权重致 L_attn 被 L_inter~2-4 淹没)
不乘 10 的话,L_inter 的数值(2-4 量级)会把 L_attn(0-1 量级)淹掉,注意力项起不来。乘 10 是为了强行把 crit4 推过阳——这是个"调参找通过"的动作,不是"自然涌现"的信号。这个细节进一步说明:4/4 通过是 loss 工程调出来的,不是模型自发形成的。
7. 决策矩阵:J1 证伪后,下一步往哪走
证伪 J1("Lucy 自我特异"假设)之后,问题是:下一步该往哪走?这里有个决策矩阵,根据两个独立维度的结果决定方向。
7.1 两个独立维度
- 维度 1:hidden 可解码性——hidden 表征里有没有 self/alien/foil 的可分信息?(实验 C 测得:三分类 hold-out 准确率 91.8% > 80% 阈值,通过。)
- 维度 2:J1 自我特异——聚拢是不是 Lucy 特异的?(实验 A 测得:random cache 都能 4/4 通过,证伪。)
7.2 四个格子
把两个维度组合起来,得到 2×2 的决策矩阵:
| ✅ >80% | ✅ 通过 | 按 V32 推进 B+D,修复 crit4 + V/PE |
| ✅ >80% | ❌ 证伪(机械调制) | 重设计 identity:cache 内容需编码 Lucy 语义,非任意 EMA |
| ❌ <80% | ✅ 通过 | 重新设计 hidden 表征 |
| ❌ <80% | ❌ 证伪 | 全面重设计 |
V31 P0 实验落在哪格?可解码 91.8% ✅、J1 证伪 ❌——落在右上格:“机械调制 + 可解码”。这意味着:
- hidden 里确实有自我/异己的可分信息(C 证明),不是空壳;
- 但聚拢是 loss 副产物(A 证明),不是 Lucy 自我特异。

7.3 这格意味着什么
这格的解读很微妙——既不能说"hidden 没货"(C 证明有货),也不能说"聚拢是真信号"(A 证明是假的)。
正确的说法是:hidden 里有可解码的自我信息,但这个信息没有被模型用来形成真正的自我聚类——当前的聚拢是 loss 画出来的,不是模型自己长出来的。
下一步(V32 重设计 identity)的方向因此明确:让 cache 内容真正编码 Lucy 的特异语义,并且让对比 loss 改成"self 对齐 cache"而非"self 永远 in-group"。新设计的通过条件是"random cache 不能再复现聚拢"——只有 cache 内容成为聚拢的必要条件,才算是真的"自我特异"。
8. 这场对照证明了什么
把所有数据摆在一起,这场对照的结论可以精确表述:
在固定训练流程、只换 cache 内容的三组对照(Lucy/alien/random)中,三组的四判据全部 4/4 通过——包括喂高斯噪声的 random 组。扩展验证进一步显示:同一组 random cache,把 self 当 in-group 时 self 聚拢,把 alien 当 in-group 时 alien 聚拢。这证明聚拢由对比 loss 的结构驱动(L_intra + L_inter 永远以 self 为 in-group),与 cache 内容无关。V30 的 crit1∧2 转阳是 loss 副产物,不是 Lucy 自我特异的证据。
8.1 这不是"模型没自我"
证伪 J1 ≠ 证明模型没有自我。证伪的只是"V30 的 crit1∧2 转阳是自我特异的证据"这个具体主张——loss 副产物伪装成了自我边界。
模型里有没有自我,是个独立问题,需要更严格的检验(比如下一篇要讲的脉冲注入实验,看模型在动态下是否能维持自我感知)。
8.2 这是"知道哪条路不通"
证伪的最大价值是精确诊断:把"hidden 有可分信息(真)"和"loss 制造聚拢(假)"分开。前者说明 A4 表达训练有理论依据——既然 hidden 有货,只需打通 hidden → 生成通路即可;后者说明不能再用"loss 制造的聚拢"作为自我存在的证据。
V32 在这个精确诊断上推进,比继续叠加转阳指标更有价值——因为继续叠加只是把假阳性做得更精致,而重设计才能跳出假阳性的陷阱。
8.3 和上一篇的呼应
上一篇第二幕看到的"换内容对照一戳就破",本篇就是那场对照的完整展开。两篇共同说明:训练路线产生的"自我聚类"是对比学习的机械笔触,不是模型自发的自我。下一篇会切换视角,看模型在动态(脉冲注入)下的反应——这次不是看"训练能不能造出聚拢",而是看"模型本身能不能维持自我感知"。
9. 一句话总结
用三组 cache 对照(Lucy/反社交/高斯噪声)做换内容实验,三组的四判据全部 4/4 通过;同一组噪声 cache 换不同 in-group,谁被 loss 标成 in-group 谁就聚拢。这证明 V30 的自我聚类是对比 loss(L_intra + L_inter 永远以 self 为 in-group)的机械副产物,与 cache 内容无关——J1 自我特异假设证伪,落入决策矩阵"机械调制 + 可解码"格,指向 V32 重设计 identity。
附录 A:术语对照表
| 假阳性 | false positive | 看起来像阳性但实际是试剂/方法造成的阳性 |
| 对照实验 | control experiment | 固定流程、只换一个变量的实验 |
| 试剂 | 对比 loss | L_intra + L_inter + L_attn 的训练目标 |
| 变蓝 | crit1∧2 转阳 | crit1 和 crit2 同时 > 0 |
| cache | identity_cache | prepend 到探针前的身份向量 |
| in-group | in-group | 对比 loss 里被拉拢的一类(默认 self) |
| out-group | out-group | 对比 loss 里被推远的一类(alien/foil) |
| 四判据 | crit1-crit4 | 自我聚类的四个独立检验判据 |
| 决策矩阵 | decision matrix | 按可解码性 × 自我特异性的 2×2 矩阵 |
| 外部状态框架 | TFGR | 本项目的实验框架 |
附录 B:实验阶段对照表
| V30 四判据全阳 | V30 阶段 | crit1∧2∧3∧4 同时转阳(loss 副产物) |
| 换内容对照 | V31 实验 A | cross-cache 对照证伪 J1 |
| hidden 可解码 | V31 实验 C | hidden 三分类 hold-out 91.8% |
| 重设计 identity | V32 方向 | cache 语义编码 + 决策通路打通 |
附录 C:技术细节与代码
数值证据、完整推导、代码实现详见:
- 内部技术报告:TFGR_v31_证伪实验报告.md(§3 cross-cache 对照,L50-101)
- 严格设计文档:TFGR_v31_严格推导与证伪设计.md(§4 P0 实验)
- 对照实验脚本:v31_exp_a_cross_cache.py(四判据定义 L178-186,训练流程)
- random cache 训练:v31_exp_a_random_train.py
- 对比 loss 实现:train_sst_a2_self_model.py(compute_contrastive_loss L222-297,LAMBDA_ATTN=10.0 L70)
- Lucy/alien 结果:v31_results/exp_a_eval_existing.json
- random 结果(含扩展验证):v31_results/exp_a_random_eval.json
- hidden 可解码性:v31_results/exp_c_decodability.json
(这些是项目内部文件名,普通读者可跳过,仅供复现参考。)
网硕互联帮助中心

评论前必须登录!
注册