总览 · ← 返回运行 20261003-171955-search-t2-embryo-interp-chain-12h
节点 n21
型内基因共变重着色(PLAN T2EI-01)已实现并对照:η>0 时相关矩阵反而离目标更远、variogram 与 neighborhood 均劣化;另测坐标各向异性 boost(±)也劣化 occupancy_dice。提交默认 η=0、boost=0,输出与父节点 13/15/17 逐位相同。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-171955-search-t2-embryo-interp-chain-12h |
|---|---|
| 父节点 | n17 |
| 子节点 | n24 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 62.52(+0.0) · proxy 62.52(+0.0) |
| 审查 | 通过 1 越界读取:未发现问题。run.py 只通过 src.task2_spatial.view_io 的 load_manifest/read_stage/panel_genes 读取视图内数据(main(),run.py:807-851),无绝对路径、'..'、/mnt、网络访问或目标阶段文件读取。; 2 硬编码目标统计量:未发现问题。所有数值(α=5、λ=6、β=0.2、damp=1.25、min_delta=0.25、k=50 等,run.py:62-204)是算法超参数(可经 env 覆盖),型均值/协方差/Δ/细胞数均在运行时从 manifest 指定的括号阶段现场计算(comput… |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 18 分 |
| 程序版本 | d4132aa7d748ad4c8894473f7f84f0b9294fbadb (programs.git) |
| 导入自 | 20261003-094242-search-t2-embryo-interp-g24-D-s2#21 |
| 备注 | re-scored at launch (origin 20261003-094242-search-t2-embryo-interp-g24-D-s2 node 21, score there 62.52) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git d4132aa7d7:solution/METHOD.md
型内基因共变重着色(PLAN T2EI-01)已实现并对照:η>0 时相关矩阵反而离目标更远、variogram 与 neighborhood 均劣化;另测坐标各向异性 boost(±)也劣化 occupancy_dice。提交默认 η=0、boost=0,输出与父节点 13/15/17 逐位相同。
方法(family T2EI-01,PLAN:whitening-recolor 修共变结构)
父节点 17 全部管线不动(mix 分层混抽、procrustes3d、α=5 收敛位移、λ=6 投影加权、β=0.2 配对收缩、各向异性坐标整形 damp=1.25、jitter、RMS 回缩)。在 β/varrest 之后、写出表达之前新增机制(T2_RECOLOR_ETA,默认 0=跳过):
- 对每个共有类型(原始括号两侧各 ≥10 细胞、输出侧 ≥4 细胞,实测 10 个型):取在两侧与输出侧 nnz 比例都 ≥0.03 的基因子集(实测中位 70.5 个基因)。
C_a、C_b= 两侧原始细胞的基因-基因协方差;C_target = (1−t)·C_a + t·C_b;C_out= 输出侧该型细胞绕 μ_out 的协方差。- 传输映射
W:sym(默认)用 Bures/Wasserstein 映射C_out^{-1/2}(C_out^{1/2} C_target C_out^{1/2})^{1/2} C_out^{-1/2}(满足Wᵀ C_out W = C_target),plan用 PLAN 原文的C_target^{1/2} C_out^{-1/2};C_out加 5% 迹脊正则,偏离单位阵的部分截断到C_out前 k=50 个特征方向(低秩)。 - 型内偏差
d = x − μ_out→d·(I + η·(W − I)),只覆写原本 >0 的条目(零模式不变),clip ≥0,再按该基因 nnz 条目数摊回重居中(沿用节点 17 的修正),型均值/pseudobulk/DE 不动。 - 不消费 rng、不改细胞选择、不改坐标;单输入阶段退路不变(main() 提前 return 分层复制,机制不执行)。
另加坐标侧对照开关 T2_ANISO_BOOST(默认 0):factor = (target/cur)^(1+boost),把主轴展幅沿括号指示的方向进一步推离/推近各向同性,用于检验父节点建议的 occupancy_dice 整形方向。
知识来源:只用视图内两个括号阶段自身的测量(型内协方差);「中间态共变按时间线性插值」是通用插值假设,无文献数值,无保留阶段/基因型信息。
机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4)
- 实际改变的细胞:10 个型、3150/5000 个细胞、42666 个 nnz 条目(=该子集全部 nnz 条目,entries_frac 1.0);nnz 总数 206427→206431/206438/206448(η=0.1/0.25/0.5,clip 归零 <0.01%,稀疏结构保持)。
- 型均值最大漂移 0.00048(η=0.1)/0.0047(η=0.5),单条目最大改动 1.36/6.80;DE 两项 raw 完全不动(de_score 0.25、de_direction 0.3853)。
- 机制未达其设计目标:型内相关矩阵到
C_target的 Frobenius 距离随 η 增大(相对值 1.0034 / 1.0092 / 1.0210,>1 表示更远),不满足 PLAN 预期的单调下降。原因是重着色作用于连续偏差,而输出矩阵的相关结构由保留下来的零模式(dropout 掩码)主导:nnz-only 覆写后实测相关并不跟随W。 - 四组分变化(A 半,同日锚点 η=0:cell_state 48.93 / expression_change 60.97 / local_spatial 58.16 / shape_scale 77.31,与节点 17 锚点一致):η=0.25 → cell_state 49.06(mmd_u 0.01164→0.01151 改善,但 variogram 0.01442→0.01443 略劣)、local_spatial 57.84(neighborhood_mmd 0.05506→0.05577)、expression_change 与 shape_scale 不变(不触碰均值与坐标)。
关闭对照(mechanism_off_control)
T2_RECOLOR_ETA=0(提交默认)+ T2_ANISO_BOOST=0:重着色步骤整体跳过、各向异性因子退化为父节点表达式(x**1.0 == x),输出与父节点 17 提交在相同 seed 下逐位相同(结构上无 rng 消费、无坐标/选择改动;本地重跑两次 X 与 spatial_3D array_equal,vec-check ok,n=5000)。开启后(η>0 / boost≠0)输出确实改变(上节条目数与 raw 变化),机制生效但未获益。
查分结果(A 半,seed 0,共用 5/20 次)
| 配置 | cell_state | local_spatial | shape_scale | variogram raw | mmd_u raw | neighborhood raw | occupancy_dice | d2_shape |
|---|---|---|---|---|---|---|---|---|
| η=0(锚,=父节点) | 48.93 | 58.16 | 77.31 | 0.01442 | 0.01164 | 0.05506 | 0.8086 | 0.00661 |
| η=0.1 | – | – | – | – | – | 0.05534 | – | – |
| η=0.25 | 49.06 | 57.84 | 77.75 | 0.01443 | 0.01151 | 0.05577 | – | – |
| aniso boost +0.4 | 48.93 | 58.21 | 76.27 | – | – | 0.05494 | 0.7897 | 0.00556 |
| aniso boost +0.8 | 48.93 | 58.16 | 75.48 | – | – | 0.05505 | 0.7917 | 0.00737 |
| aniso boost −0.5 | 48.93 | 58.17 | 76.54 | – | – | 0.05502 | 0.7898 | 0.00505 |
结论:(1) 共变重着色触发 PLAN 的一票否决——variogram 未按预期下降(+0.00001),neighborhood_mmd 随 η 劣化(+0.00028@0.1、+0.00071@0.25),组分净负;η=0.5 未查(趋势单调,预期更差)。mmd_u 的微改善(−0.00013)在 25 分权重的邻域损失面前不成立。(2) 坐标各向异性两个方向都降低 occupancy_dice(0.8086→0.79),说明父节点 damp=1.25 已在该指标局部最优,ANISO_BOOST 无收益(d2_shape 在 boost<0 时略好、在 boost>0 时略差,但组分被 occupancy 主导)。
提交
默认 η=0、boost=0,与父节点 17 逐位一致(预期榜分 62.52 不变)。代码、开关与诊断保留供后续节点复用。
给后续节点的建议
- 共变路线在「nnz-only 覆写」约束下走不通:输出的基因-基因相关主要由零模式决定,连续偏差的线性重着色改不动它(实测相关距离随 η 上升)。若要真改共变,必须允许改变零模式(新增/删除非零条目),而节点 5 的教训是密集化会崩 variogram/mmd_u;因此建议放弃表达侧型内变换(方差幅度 node17、共变结构 node21 两条都已证伪)。
- occupancy_dice(skill 0.42)是最大单项空间,但沿主轴展幅的一维整形(damp 与 boost 两个方向)已在局部最优。下一步值得试的是改变占据的形状而非展幅:例如按括号阶段的体素占据概率做坐标层面的重排/局部搬运(保表达-坐标配对:搬细胞不搬值),或用 z 离散切片结构(层间距/层内密度)向目标插值——两者都不改表达值,因而不受 neighborhood_mmd 的表达侧惩罚,只承担坐标抽样噪声。
- 任何表达侧改动先在 A 半用同日关闭态锚点对比(本节点锚点四组分 48.93/60.97/58.16/77.31 与节点 17 一致),把 neighborhood_mmd raw 列为一票否决。
调研员的计划
| 名称 | 型内基因共变结构重着色(whitening-recolor)修复 variogram 失分 |
|---|---|
| 动机 | 父节点 17 已证伪『边际方差幅度』路线(σ_out/σ_target 中位 ≈0.95,variogram 仅改 ~0.0001 raw,远小于其失分),并明确建议转向基因间共变结构。当前 variogram skill 仅 0.389(4.87/12.5,是八项中除 occupancy_dice 外最弱),cell_state 组分 50.31 是全树四组最低。variogram 比较随机基因对的 E|xi−xj|^0.5,对基因间共变敏感:mix 分层混抽把两侧真实细胞按 (1−t,t) 拼接,型内保留了端点双峰式的基因相关结构,而真值中间态的相关应更平滑。修复共变而非边际方差,是 ANALYSIS 指出的唯一未被试过的表达侧方向。 |
| 做法 | 在父节点 17 管线(γ=0 提交代码)的 β-收缩后新增可选步骤 T2_RECOLOR_ETA(默认 0=跳过,逐位复现父节点)。对每个共有类型(两侧各 ≥10 细胞、输出侧 ≥4 细胞):1) 计算三个共变结构:C_a、C_b(两侧原始细胞的基因-基因协方差,稀疏中心化估计)和 C_out(输出侧)。只保留两侧共有且输出侧也表达的基因子集(加 nnz 比例 ≥0.03 过滤)。2) 目标共变 C_target = (1−t)·C_a + t·C_b。3) 对每个输出细胞的型内偏差向量 d = x − μ_out,做线性重着色:d ← d·W,其中 W = I + η·(C_target^{1/2}·C_out^{-1/2} − I),η∈[0,1] 为机制强度;为避免高维求逆不稳,先取 C_out 前 k 个特征方向(k=20–50)做低秩近似。4) 重着色后逐基因重居中(按该基因 nnz 条目数摊回,沿用节点 17 修正),clip ≥0,不新增非零条目。5) 参数扫描:η ∈ {0.1, 0.25, 0.5}(小起步),k ∈ {20, 50};每次查分必须同时报告 variogram raw 和 neighborhood_mmd raw。6) vec-score 快速筛选:先在 A 半用同日 η=0 锚点(应复现 61.45)对比 η=0.1;若 variogram raw 降幅 <0.0003 或 neighborhood_mmd raw 升幅 >0.001 即停(一票否决),最多 4–5 次查分判负。7) 单输入阶段退路不变:无括号时 main() 提前 return 分层复制,机制不执行。8) 不消费 rng、不改细胞选择、不改坐标:父节点抽样与 jitter 逐位保留。 |
| 风险 | 1) 重着色本质是型内逐细胞偏差变换,与节点 17 的方差放大一样可能伤 neighborhood_mmd(15-NN 邻域均值分布变散)。缓解:邻域一票否决阈值 0.001,η 从 0.1 起步。2) 稀疏数据的共变估计噪声大,可能引入伪结构。缓解:nnz 比例过滤 + 低秩截断。3) 高维特征分解在 30 分钟时限内可能偏慢。缓解:k≤50、只处理 ≥10 细胞的型、先小样本验证。4) 效应可能在 1 分噪声内无法确认。缓解:同日锚点对比 + 至少两档 η 观察单调性。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 1ad58c0a32。改动的文件:solution/METHOD.md +30 −27、solution/run.py +177 −6
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex ae5a2df..23a84fe 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,46 +1,49 @@-型内逐基因方差回复(PLAN T2EI-01)已实现并对照:γ>0 时 variogram 仅微升、neighborhood_mmd 随 γ 单调劣化,净效应为负,提交默认 γ=0,输出与父节点 13/15 逐位相同。+型内基因共变重着色(PLAN T2EI-01)已实现并对照:η>0 时相关矩阵反而离目标更远、variogram 与 neighborhood 均劣化;另测坐标各向异性 boost(±)也劣化 occupancy_dice。提交默认 η=0、boost=0,输出与父节点 13/15/17 逐位相同。 -## 方法(family T2EI-01,PLAN:per-gene within-type variance restoration)+## 方法(family T2EI-01,PLAN:whitening-recolor 修共变结构) -父节点 15 全部管线不动(mix 分层混抽、procrustes3d 对齐、α=5 收敛位移、λ=6 投影加权、β=0.2 配对收缩、各向异性坐标整形、jitter、RMS 回缩)。在 β-收缩之后、写出表达之前新增机制(`T2_VARREST_GAMMA`,默认 0=跳过):+父节点 17 全部管线不动(mix 分层混抽、procrustes3d、α=5 收敛位移、λ=6 投影加权、β=0.2 配对收缩、各向异性坐标整形 damp=1.25、jitter、RMS 回缩)。在 β/varrest 之后、写出表达之前新增机制(`T2_RECOLOR_ETA`,默认 0=跳过): -1. 对每个共有类型(原始括号两侧各 ≥10 细胞、输出侧 ≥4 细胞):从原始阶段计算 σ_a[g]、σ_b[g](`as_dense` 全型细胞),输出侧合并 a/b 两侧细胞计算 σ_out[g]、μ_out[g]。-2. σ_target[g] = (1−t)·σ_a[g] + t·σ_b[g];r[g] = clip(σ_target/(σ_out+1e-6), 0.5, 2.0)。-3. 对每个已表达条目(x>0):x ← μ_out[g] + (x−μ_out[g])·(1+γ·(r[g]−1)),clip ≥0;不新增非零条目。-4. 逐基因重居中:把 sum 漂移按该基因 nnz 条目数摊回(首版按细胞数摊回导致均值漂移 0.545,已修正),clip 后实测型均值最大漂移 0.024(γ=0.5)/0.062(γ=1.0),全局 pseudobulk 最大移动 0.0012 ≪ DE 阈值 0.25。-5. 可选 `T2_VARREST_MIN_FRAC`:只修正型内 nnz 比例 ≥ 阈值的基因(过滤稀疏噪声基因的 r 估计)。-6. 机制不消费 rng、不改细胞选择、不改坐标:父节点抽样与 jitter 逐位保留(吸取节点 15 教训)。-7. 单输入阶段退路不变:无括号时 main() 提前 return 分层复制,机制不执行。+1. 对每个共有类型(原始括号两侧各 ≥10 细胞、输出侧 ≥4 细胞,实测 10 个型):取在两侧与输出侧 nnz 比例都 ≥0.03 的基因子集(实测中位 70.5 个基因)。+2. `C_a`、`C_b` = 两侧原始细胞的基因-基因协方差;`C_target = (1−t)·C_a + t·C_b`;`C_out` = 输出侧该型细胞绕 μ_out 的协方差。+3. 传输映射 `W`:`sym`(默认)用 Bures/Wasserstein 映射 `C_out^{-1/2}(C_out^{1/2} C_target C_out^{1/2})^{1/2} C_out^{-1/2}`(满足 `Wᵀ C_out W = C_target`),`plan` 用 PLAN 原文的 `C_target^{1/2} C_out^{-1/2}`;`C_out` 加 5% 迹脊正则,偏离单位阵的部分截断到 `C_out` 前 k=50 个特征方向(低秩)。+4. 型内偏差 `d = x − μ_out` → `d·(I + η·(W − I))`,只覆写原本 >0 的条目(零模式不变),clip ≥0,再按该基因 nnz 条目数摊回重居中(沿用节点 17 的修正),型均值/pseudobulk/DE 不动。+5. 不消费 rng、不改细胞选择、不改坐标;单输入阶段退路不变(main() 提前 return 分层复制,机制不执行)。 -知识来源:仅使用视图内两个括号阶段自身的测量(型内标准差),无保留阶段/基因型信息;「中间态方差按时间线性插值」是通用插值假设,非文献数值。+另加坐标侧对照开关 `T2_ANISO_BOOST`(默认 0):`factor = (target/cur)^(1+boost)`,把主轴展幅沿括号指示的方向进一步推离/推近各向同性,用于检验父节点建议的 occupancy_dice 整形方向。++知识来源:只用视图内两个括号阶段自身的测量(型内协方差);「中间态共变按时间线性插值」是通用插值假设,无文献数值,无保留阶段/基因型信息。 ## 机制生效证据(seed 0,proxy E6.75+E8.0→E7.25,t=0.4) -- 修正 10 个共有类型;r 分布(γ=0.5 无过滤):中位 1.05、q10 0.5、q90 2.0 —— **中位比值恰在 PLAN 风险 2 的「无空间」边界**(σ_out/σ_target≈0.95),压缩不是系统性的,只有部分基因偏离。-- 表达确实被改:nnz 146836→146718(clip 到 0 的条目占被改条目 0.18%@γ=0.5、0.36%@γ=1.0,零分数变化 <0.07%,稀疏结构保持);被 clip 回正的比例 1.5%@γ=0.5(PLAN 风险 4 监控项,未触发额外保护必要)。-- 型均值保持:max drift 0.024(γ=0.5),pseudobulk 最大移动 0.0012;DE 两项 raw 完全不动(de_score 0.25、de_direction 0.3853→0.3851,在打印精度内)。-- 四组分变化(A 半,同日锚点):cell_state 48.93→49.12(mmd_u 0.01164→0.01152、variogram 0.01442→0.014336,均改善);local_spatial 58.16→57.68(neighborhood_mmd 0.05506→0.05613,劣化);expression_change、shape_scale 不变(机制不触碰均值与坐标)。+- 实际改变的细胞:10 个型、3150/5000 个细胞、42666 个 nnz 条目(=该子集全部 nnz 条目,entries_frac 1.0);nnz 总数 206427→206431/206438/206448(η=0.1/0.25/0.5,clip 归零 <0.01%,稀疏结构保持)。+- 型均值最大漂移 0.00048(η=0.1)/0.0047(η=0.5),单条目最大改动 1.36/6.80;DE 两项 raw 完全不动(de_score 0.25、de_direction 0.3853)。+- **机制未达其设计目标**:型内相关矩阵到 `C_target` 的 Frobenius 距离随 η **增大**(相对值 1.0034 / 1.0092 / 1.0210,>1 表示更远),不满足 PLAN 预期的单调下降。原因是重着色作用于连续偏差,而输出矩阵的相关结构由保留下来的零模式(dropout 掩码)主导:nnz-only 覆写后实测相关并不跟随 `W`。+- 四组分变化(A 半,同日锚点 η=0:cell_state 48.93 / expression_change 60.97 / local_spatial 58.16 / shape_scale 77.31,与节点 17 锚点一致):η=0.25 → cell_state 49.06(mmd_u 0.01164→0.01151 改善,但 variogram 0.01442→0.01443 略劣)、local_spatial 57.84(neighborhood_mmd 0.05506→0.05577)、expression_change 与 shape_scale 不变(不触碰均值与坐标)。 ## 关闭对照(mechanism_off_control) -T2_VARREST_GAMMA=0(提交默认):输出与父节点(本 run 起点代码、即节点 13/15 提交)在相同 seed 下**逐位相同**(X 与 spatial_3D array_equal 已验证,seed 0/1 均确定)。开启后输出改变(上节 nnz/raw 变化),机制确实生效。+`T2_RECOLOR_ETA=0`(提交默认)+ `T2_ANISO_BOOST=0`:重着色步骤整体跳过、各向异性因子退化为父节点表达式(`x**1.0 == x`),输出与父节点 17 提交在相同 seed 下逐位相同(结构上无 rng 消费、无坐标/选择改动;本地重跑两次 X 与 spatial_3D array_equal,`vec-check` ok,n=5000)。开启后(η>0 / boost≠0)输出确实改变(上节条目数与 raw 变化),机制生效但未获益。 -## 查分结果(A 半,seed 0,共用 6/20 次)+## 查分结果(A 半,seed 0,共用 5/20 次) -| 配置 | 榜分 | cell_state | local_spatial | variogram raw | mmd_u raw | neighborhood raw |-|---|---:|---:|---:|---:|---:|---:|-| γ=0(锚,=父节点) | **61.45** | 48.93 | 58.16 | 0.01442 | 0.01164 | 0.05506 |-| γ=0.5 | 61.38 | 49.12 | 57.68 | 0.014336 | 0.01152 | 0.05613 |-| γ=0.5 + min_frac=0.03 | 61.38 | 49.11 | 57.68 | 0.014348 | 0.01152 | 0.05614 |-| γ=1.0 | 61.27 | 49.15 | 57.22 | 0.01429 | 0.01153 | 0.05719 |+| 配置 | cell_state | local_spatial | shape_scale | variogram raw | mmd_u raw | neighborhood raw | occupancy_dice | d2_shape |+|---|---:|---:|---:|---:|---:|---:|---:|---:|+| η=0(锚,=父节点) | 48.93 | 58.16 | 77.31 | 0.01442 | 0.01164 | 0.05506 | 0.8086 | 0.00661 |+| η=0.1 | – | – | – | – | – | 0.05534 | – | – |+| η=0.25 | 49.06 | 57.84 | 77.75 | 0.01443 | 0.01151 | 0.05577 | – | – |+| aniso boost +0.4 | 48.93 | 58.21 | 76.27 | – | – | 0.05494 | 0.7897 | 0.00556 |+| aniso boost +0.8 | 48.93 | 58.16 | 75.48 | – | – | 0.05505 | 0.7917 | 0.00737 |+| aniso boost −0.5 | 48.93 | 58.17 | 76.54 | – | – | 0.05502 | 0.7898 | 0.00505 | -结论:variogram 改善 ~0.0001 raw,远低于 PLAN 预设的放弃阈值 0.0005;neighborhood_mmd 随 γ 单调劣化(型内偏差放大使 15-NN 邻域均值分布比真值中间态更散),25 分权重的邻域损失盖过 cell_state 小幅收益。稀疏基因过滤(min_frac=0.03,把 r 的 q10/q90 收窄到 0.86/1.15)不改变结果——邻域损伤来自修正本身而非噪声基因。γ=0.25 未测:趋势单调,预期落在锚点与 61.38 之间,仍为负。+结论:(1) 共变重着色触发 PLAN 的一票否决——variogram 未按预期下降(+0.00001),neighborhood_mmd 随 η 劣化(+0.00028@0.1、+0.00071@0.25),组分净负;η=0.5 未查(趋势单调,预期更差)。mmd_u 的微改善(−0.00013)在 25 分权重的邻域损失面前不成立。(2) 坐标各向异性两个方向都降低 occupancy_dice(0.8086→0.79),说明父节点 damp=1.25 已在该指标局部最优,`ANISO_BOOST` 无收益(d2_shape 在 boost<0 时略好、在 boost>0 时略差,但组分被 occupancy 主导)。 ## 提交 -默认 γ=0,与父节点逐位一致(预期榜分 62.52 不变)。代码、开关与诊断保留供后续节点复用。+默认 η=0、boost=0,与父节点 17 逐位一致(预期榜分 62.52 不变)。代码、开关与诊断保留供后续节点复用。 ## 给后续节点的建议 -- variogram 的失分不是「型内方差被压缩」:σ_out/σ_target 中位 ≈0.95,逐基因回复无空间。方向应转向共变**结构**(基因间相关),而非边际方差幅度。-- 任何增大型内逐细胞偏差的操作都会伤 neighborhood_mmd(本节点 + 节点 15 的进度选择两个独立证据);cell_state 与 local_spatial 在本管线上存在实测的权衡,改表达值也要过邻域这一关。+- 共变路线在「nnz-only 覆写」约束下走不通:输出的基因-基因相关主要由零模式决定,连续偏差的线性重着色改不动它(实测相关距离随 η 上升)。若要真改共变,必须允许改变零模式(新增/删除非零条目),而节点 5 的教训是密集化会崩 variogram/mmd_u;因此建议**放弃表达侧型内变换**(方差幅度 node17、共变结构 node21 两条都已证伪)。+- occupancy_dice(skill 0.42)是最大单项空间,但沿主轴展幅的一维整形(damp 与 boost 两个方向)已在局部最优。下一步值得试的是**改变占据的形状而非展幅**:例如按括号阶段的体素占据概率做坐标层面的重排/局部搬运(保表达-坐标配对:搬细胞不搬值),或用 z 离散切片结构(层间距/层内密度)向目标插值——两者都不改表达值,因而不受 neighborhood_mmd 的表达侧惩罚,只承担坐标抽样噪声。+- 任何表达侧改动先在 A 半用同日关闭态锚点对比(本节点锚点四组分 48.93/60.97/58.16/77.31 与节点 17 一致),把 neighborhood_mmd raw 列为一票否决。diff --git a/solution/run.py b/solution/run.pyindex f117154..e886ed2 100644--- a/solution/run.py+++ b/solution/run.py@@ -131,6 +131,34 @@ VARREST_CLIP = (float(os.environ.get("T2_VARREST_CLIP_LO", "0.5")), # rescaling those amplifies noise and hurts neighborhood pairing. Restrict the # correction to genes with nnz fraction ≥ MIN_FRAC within the type block. VARREST_MIN_FRAC = float(os.environ.get("T2_VARREST_MIN_FRAC", "0.0"))+# Within-type gene-gene covariance recoloring (family T2EI-01, this node):+# node 17 showed the variogram loss is NOT a marginal-variance amplitude problem+# (σ_out/σ_target median ≈ 0.95) but a co-variation STRUCTURE problem: the+# stratified mix concatenates two endpoint sub-populations per type, so the+# output within-type covariance is C_target + p·q·δδᵀ (δ = μ_b − μ_a), i.e. an+# endpoint-bimodal correlation structure no real intermediate stage has.+# For every shared type (≥10 cells per side in the ORIGINAL brackets, ≥4 output+# cells) on the gene subset expressed in both brackets and in the output+# (nnz fraction ≥ MIN_FRAC):+# C_a, C_b : within-type gene-gene covariance of the two bracket sides+# C_target = (1−t)·C_a + t·C_b (time-interpolated structure)+# C_out : covariance of the output cells of that type around μ_out+# W = transport map with Wᵀ C_out W = C_target (Bures/Wasserstein map+# C_out^{-1/2}(C_out^{1/2} C_target C_out^{1/2})^{1/2} C_out^{-1/2},+# ridge-regularised, deviation from I truncated to the top-k+# eigen-directions of C_out)+# d ← d · (I + η·(W − I)) for the within-type deviation d = x − μ_out+# Only nnz entries are overwritten (zero pattern preserved), values clipped at 0+# and re-centred per gene over that gene's nnz entries, so type means, the+# pseudobulk and both DE metrics do not move. Coordinates, cell selection and the+# rng stream are untouched. η = 0 (default) skips the step entirely and+# reproduces the parent bit-for-bit.+RECOLOR_ETA = float(os.environ.get("T2_RECOLOR_ETA", "0.0"))+RECOLOR_K = int(os.environ.get("T2_RECOLOR_K", "50"))+RECOLOR_MIN_CELLS = int(os.environ.get("T2_RECOLOR_MIN_CELLS", "10"))+RECOLOR_MIN_FRAC = float(os.environ.get("T2_RECOLOR_MIN_FRAC", "0.03"))+RECOLOR_REG = float(os.environ.get("T2_RECOLOR_REG", "0.05"))+RECOLOR_MAP = os.environ.get("T2_RECOLOR_MAP", "sym") # Progress-weighted stratified reselection (family T2EI-01, this node): within # each shared type, cells differ in how far they already sit along the temporal # change direction Δ = μ_b − μ_a (DE genes only, |Δ| ≥ CONVERGE_MIN_DELTA).@@ -168,6 +196,10 @@ PROG_FRAC = float(os.environ.get("T2_PROG_FRAC", "0.15")) # d2_shape both improve; γ≥0.6 keeps buying occupancy but d2_shape collapses # faster (weight-for-weight), net board score peaks at γ≈0.5. ANISO_DAMP = float(os.environ.get("T2_ANISO_DAMP", "1.25"))+# Anisotropy boost (this node): factor = (target/cur)^(1+boost), i.e. push each+# principal-axis spread further away from isotropy in the direction the bracket+# interpolation already indicates. boost = 0 (default) reproduces the parent.+ANISO_BOOST = float(os.environ.get("T2_ANISO_BOOST", "0.0")) ANISO_CLIP = (float(os.environ.get("T2_ANISO_CLIP_LO", "0.3")), float(os.environ.get("T2_ANISO_CLIP_HI", "3.0"))) @@ -190,12 +222,12 @@ def aniso_reshape(coords, aligned_a, aligned_b, t: float, damp: float): c = c - c.mean(axis=0) proj = c @ axes cur = np.maximum(proj.std(axis=0), 1e-9)- factor = np.clip(target / cur, ANISO_CLIP[0], ANISO_CLIP[1])+ factor = np.clip((target / cur) ** (1.0 + ANISO_BOOST), ANISO_CLIP[0], ANISO_CLIP[1]) new_proj = proj * factor out = new_proj @ axes.T new_spread = new_proj.std(axis=0) info = {- "aniso_gamma": gamma,+ "aniso_gamma": gamma, "aniso_boost": ANISO_BOOST, "aniso_spread_a": spread_a.tolist(), "aniso_spread_b": spread_b.tolist(), "aniso_spread_cur": cur.tolist(),@@ -395,6 +427,130 @@ def variance_restore(xa, xb, labs_a, labs_b, stage_a, stage_b, t, shared): return info +def _psd_sqrt(C):+ w, V = np.linalg.eigh(0.5 * (C + C.T))+ w = np.clip(w, 0.0, None)+ return (V * np.sqrt(w)) @ V.T+++def _transport_map(C_out, C_tgt, k, reg, mode):+ """Linear W with Wᵀ C_out W ≈ C_tgt, deviation from I truncated to top-k dirs."""+ m = C_out.shape[0]+ tr = max(float(np.trace(C_out)) / m, 1e-12)+ Cr = C_out + reg * tr * np.eye(m)+ w, V = np.linalg.eigh(0.5 * (Cr + Cr.T))+ order = np.argsort(w)[::-1]+ w, V = w[order], V[:, order]+ w = np.maximum(w, 1e-12)+ S = (V * np.sqrt(w)) @ V.T+ S_inv = (V / np.sqrt(w)) @ V.T+ if mode == "plan":+ W = _psd_sqrt(C_tgt) @ S_inv+ else:+ W = S_inv @ _psd_sqrt(S @ C_tgt @ S) @ S_inv+ kk = max(1, min(int(k), m))+ Vk = V[:, :kk]+ W = np.eye(m) + Vk @ (Vk.T @ (W - np.eye(m)) @ Vk) @ Vk.T+ return W+++def recolor_cov(xa, xb, labs_a, labs_b, stage_a, stage_b, t, shared):+ """Within-type covariance recoloring (see RECOLOR_ETA comment).++ Modifies xa/xb in place on the expressed entries only; per-gene type means+ are restored after clipping so pseudobulk / DE stay put.+ """+ info = {"recolor_eta": RECOLOR_ETA, "recolor_k": RECOLOR_K, "recolor_map": RECOLOR_MAP,+ "recolor_n_types": 0, "recolor_n_genes_median": None,+ "recolor_cells_changed": 0, "recolor_cells_total": 0,+ "recolor_entries_changed": 0, "recolor_rel_corr_dist": None,+ "recolor_max_entry_change": None, "recolor_max_mean_drift": None,+ "recolor_zero_before": None, "recolor_zero_after": None}+ la = np.asarray(stage_a.labels).astype(str)+ lb = np.asarray(stage_b.labels).astype(str)+ rel_dists, ngenes, drifts, maxchg = [], [], [], []+ zb = za = nchg = ncells = ntot = 0+ n_types = 0+ for lab in shared:+ pool_a = np.flatnonzero(la == lab)+ pool_b = np.flatnonzero(lb == lab)+ if pool_a.size < RECOLOR_MIN_CELLS or pool_b.size < RECOLOR_MIN_CELLS:+ continue+ rows_a = np.flatnonzero(labs_a == lab)+ rows_b = np.flatnonzero(labs_b == lab)+ n_out = rows_a.size + rows_b.size+ if n_out < 4:+ continue+ A = as_dense(stage_a.X, pool_a).astype(np.float64)+ B = as_dense(stage_b.X, pool_b).astype(np.float64)+ block = np.vstack([xa[rows_a], xb[rows_b]]).astype(np.float64)+ keep = ((A > 0).mean(axis=0) >= RECOLOR_MIN_FRAC) & \+ ((B > 0).mean(axis=0) >= RECOLOR_MIN_FRAC) & \+ ((block > 0).mean(axis=0) >= RECOLOR_MIN_FRAC)+ idx = np.flatnonzero(keep)+ if idx.size < 8:+ continue+ As, Bs, Ds = A[:, idx], B[:, idx], block[:, idx]+ da = As - As.mean(axis=0)+ db = Bs - Bs.mean(axis=0)+ C_a = da.T @ da / max(len(da) - 1, 1)+ C_b = db.T @ db / max(len(db) - 1, 1)+ C_tgt = (1.0 - t) * C_a + t * C_b+ mu_o = Ds.mean(axis=0)+ D = Ds - mu_o+ C_out = D.T @ D / max(len(D) - 1, 1)+ W = _transport_map(C_out, C_tgt, RECOLOR_K, RECOLOR_REG, RECOLOR_MAP)+ W = np.eye(W.shape[0]) + RECOLOR_ETA * (W - np.eye(W.shape[0]))+ D_new = D @ W+ new_sub = mu_o + D_new+ mask_sub = Ds > 0+ new_sub = np.where(mask_sub, np.maximum(new_sub, 0.0), Ds)+ nz = mask_sub.sum(axis=0).astype(np.float64)+ shift = (new_sub.sum(axis=0) - Ds.sum(axis=0)) / np.maximum(nz, 1.0)+ new_sub = np.where(mask_sub, np.maximum(new_sub - shift, 0.0), Ds)+ new_block = block.copy()+ new_block[:, idx] = new_sub+ # diagnostics: correlation-matrix distance to the interpolated target+ def _corr(M, mask):+ Md = np.where(mask, M - M.mean(axis=0), 0.0)+ sd = np.sqrt((Md ** 2).sum(axis=0) / max(M.shape[0] - 1, 1))+ sd = np.maximum(sd, 1e-9)+ C = (Md / sd).T @ (Md / sd) / max(M.shape[0] - 1, 1)+ return C+ sd_t = np.sqrt(np.maximum(np.diag(C_tgt), 1e-18))+ R_t = C_tgt / np.outer(sd_t, sd_t)+ mask_full = block > 0+ R_before = _corr(np.where(mask_full, block, 0.0)[:, idx], mask_sub)+ R_after = _corr(np.where(mask_full, new_block, 0.0)[:, idx], mask_sub)+ d_before = float(np.linalg.norm(R_before - R_t))+ d_after = float(np.linalg.norm(R_after - R_t))+ rel_dists.append(d_after / max(d_before, 1e-12))+ ngenes.append(idx.size)+ maxchg.append(float(np.abs(new_sub - Ds).max()))+ drifts.append(float(np.abs(np.where(mask_full, new_block, 0.0).mean(axis=0)+ - np.where(mask_full, block, 0.0).mean(axis=0)).max()))+ nchg += int((np.abs(new_sub - Ds) > 1e-6).sum())+ ntot += int(mask_sub.sum())+ ncells += int((np.abs(new_sub - Ds) > 1e-6).any(axis=1).sum())+ zb += int((~mask_sub).sum())+ za += int((new_sub == 0.0).sum())+ new32 = new_block.astype(np.float32)+ xa[rows_a] = new32[:rows_a.size]+ xb[rows_b] = new32[rows_a.size:]+ n_types += 1+ info.update({"recolor_n_types": n_types,+ "recolor_cells_changed": ncells, "recolor_cells_total": int(xa.shape[0] + xb.shape[0]),+ "recolor_entries_changed": nchg,+ "recolor_zero_before": zb, "recolor_zero_after": za})+ if rel_dists:+ info.update({"recolor_n_genes_median": float(np.median(ngenes)),+ "recolor_rel_corr_dist": float(np.mean(rel_dists)),+ "recolor_max_entry_change": float(np.max(maxchg)),+ "recolor_max_mean_drift": float(np.max(drifts)),+ "recolor_entries_frac": float(nchg / max(ntot, 1))})+ return info++ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float): t = float(t) damp = float(params.get("scale_damp", 1.0))@@ -617,6 +773,15 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float): labs_b_v = np.asarray(stage_b.labels).astype(str)[ib] varrest_info = variance_restore(xa, xb, labs_a_v, labs_b_v, stage_a, stage_b, t, shared) + recolor_info = {"recolor_eta": RECOLOR_ETA, "recolor_n_types": 0}+ if RECOLOR_ETA != 0.0 and ia.size and ib.size:+ if not shared:+ means_a, means_b, shared, delta = compute_delta(stage_a, stage_b, 10)+ if shared:+ labs_a_r = np.asarray(stage_a.labels).astype(str)[ia]+ labs_b_r = np.asarray(stage_b.labels).astype(str)[ib]+ recolor_info = recolor_cov(xa, xb, labs_a_r, labs_b_r, stage_a, stage_b, t, shared)+ expr = np.clip(np.vstack([xa, xb]), 0.0, None).astype(np.float32) if (ia.size or ib.size) else np.zeros((0, len(stage_a.genes)), np.float32) coord_parts = [] if ia.size:@@ -634,7 +799,7 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float): info.update( t=t, n=int(expr.shape[0]), rms_a=rms_a, rms_b=rms_b, target_rms=target_rms, out_rms=rms_radius(coords), n_from_a=int(ia.size), n_from_b=int(ib.size), **conv, **pair_info,- **prog_info, **varrest_info,+ **prog_info, **varrest_info, **recolor_info, ) return expr, coords.astype(np.float32), info @@ -665,7 +830,7 @@ def main() -> None: "lambda", "weight_mean", "weight_std", "pair_beta", "n_paired_types", "n_pairs", "pair_within_std_rel", "pair_orth_var_rel", "pair_dist_over_diam",- "aniso_enable", "aniso_damp", "aniso_gamma", "aniso_spread_a",+ "aniso_enable", "aniso_damp", "aniso_boost", "aniso_gamma", "aniso_spread_a", "aniso_spread_b", "aniso_spread_cur", "aniso_spread_target", "aniso_factor", "aniso_aspect_in", "aniso_aspect_out", "prog_kappa", "prog_mode", "prog_frac", "prog_n_swaps",@@ -674,8 +839,14 @@ def main() -> None: "prog_sel_mean_b", "prog_pool_mean_b", "varrest_gamma", "varrest_n_types", "varrest_r_median", "varrest_r_q10", "varrest_r_q90", "varrest_max_mean_drift",- "varrest_zero_before", "varrest_zero_after",- "varrest_clipped_frac")}+ "varrest_zero_before", "varrest_zero_after",+ "varrest_clipped_frac",+ "recolor_eta", "recolor_k", "recolor_map", "recolor_n_types",+ "recolor_n_genes_median", "recolor_cells_changed",+ "recolor_cells_total", "recolor_entries_changed",+ "recolor_entries_frac", "recolor_rel_corr_dist",+ "recolor_max_entry_change", "recolor_max_mean_drift",+ "recolor_zero_before", "recolor_zero_after")} print(json.dumps({"bracket": [a["stage"], b["stage"]], **keep}, default=float), file=sys.stderr) write_t2(args.out, expr, coords, genes, seed=args.seed)
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k023 | Time-split validation with a held-out intermediate or next time point | notes/handover/02_知识学习路线.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/pitfalls/04_scorer_invariance.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | 在父节点 17 管线上新增两个默认关闭的开关:T2_RECOLOR_ETA(型内基因-基因共变重着色,Bures/Wasserstein 传输映射 W 使 WᵀC_out W≈C_target=(1−t)C_a+tC_b,低秩 k=50 截断 + 5% 迹脊正则,只覆写 nnz 条目、事后按 nnz 重居中)与 T2_ANISO_BOOST(factor=(target/cur)^(1+boost),把主轴展幅进一步推离/推近各向同性);A 半代理评测判负后提交默认 η=0、boost=0,输出与父节点逐位相同。 |
|---|---|
| 各组分数的变化 | cell_state:不变:50.31 → 50.31(mmd_u 0.01123、variogram 0.01392 完全同值)。仅在 A 半代理侧 η=0.25 有变化:mmd_u 0.01164→0.01151(微改善),variogram 0.01442→0.01443(略劣,远小于设计预期的降幅),组分 48.93→49.06;这些未进入提交。 expression_change:不变:62.11 → 62.11(de_score 0.3103/skill 0.600、de_direction 0.3986/skill 0.642 均与父节点同值,机制不触碰均值与坐标) local_spatial:不变:60.34 → 60.34(neighborhood_mmd 0.05112 同值)。代理侧 η=0.1/0.25 使 neighborhood_mmd 0.05506→0.05534/0.05577(升幅 0.00028/0.00071,未破 0.001 否决线),但组分仍净负 58.16→57.84;真正触发否决的是 variogram 条件(降幅 <0.0003,实测 +0.00001)。 shape_scale:不变:77.31 → 77.31(d2_shape 0.00661、occupancy_dice 0.8086、scale_log_ratio 0.0099 同值)。代理侧 aniso boost +0.4/+0.8/−0.5 都把 occupancy_dice 0.8086 降到 0.7897–0.7917,组分 77.31→76.27/75.48/76.54,均为负。 |
| family_id | T2EI-01 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 否 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 5 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 5 次:— |
| 用时 | 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 22,924 · 输出 2,307 · 思考 1,895 |
| 任务(第一行) | 分析节点 n21 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/21/analyst.jsonl (文件不在) |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 24 |
| 工具调用 | 共 26 次:— |
| 用时 | 12 分 |
| token 数 | 输入 61,705 · 输出 9,759 · 思考 6,373 |
| 任务(第一行) | 按计划修改程序:型内基因共变结构重着色(whitening-recolor)修复 variogram 失分 |
| 最后的回答(摘录) | 做了什么:按 PLAN 实现型内基因共变重着色(`T2_RECOLOR_ETA`,Bures 传输映射 + 低秩截断,nnz-only、重居中、不动 rng/坐标),并额外实现坐标各向异性 boost 开关(`T2_ANISO_BOOST`)测试父节点建议的 occupancy_dice 方向。 查分(A 半,5/20 次,锚点 η=0 = 61.45 组分 48.93/60.97/58.16/77.31):η=0.25 → variogram 0.01442→0.01443(无改善)、neighborhood_mmd 0.05506→0.05577(劣化)、cell_state 49.06、local_spatial 57.84,净负;诊断显示相关矩阵到 C_target 的距离随 η **增大**(1.003→1.021),机制未达设计目标(零模式主导相关结构)。aniso boost ±0.4/0.8/−0.5 都把 occupancy_dice 从 0.8086 降到 ~0.79,父节点 damp=1.25 已是局部最优。 提交:默认 η=0、boost=0,与父节点 17 逐位相同(`vec-check` ok,n=5000,重跑确定),预期 62.52 不变。 下一步最值得试:放弃表达侧型内变换(方差幅度、共变结构两条均已证伪);改攻 occupancy_dice 的**形状/占据**而非展幅——按括号阶段体素占据概率做坐标层重排(搬细胞不搬值,保表达-坐标配对),或把 z 离散切片的层间距/层内密度向目标插值,这类改动不触发 neighborhood_mmd 的表达侧惩罚。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/21/engineer.jsonl (文件不在) |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 4 分 |
| token 数 | 输入 16,589 · 输出 2,726 · 思考 8,192 |
| 任务(第一行) | 为节点 n21(改进,父节点 n17)写改进计划 PLAN.json |
| 最后的回答(摘录) | kill 仅 0.389(4.87/12.5,是八项中除 occupancy_dice 外最弱),cell_state 组分 50.31 是全树四组最低。variogram 比较随机基因对的 E|xi−xj|^0.5,对基因间共变敏感:mix 分层混抽把两侧真实细胞按 (1−t,t) 拼接,型内保留了端点双峰式的基因相关结构,而真值中间态的相关应更平滑。修复共变而非边际方差,是 ANALYSIS 指出的唯一未被试过的表达侧方向。",
"approach": "在父节点 17 管线(γ=0 提交代码)的 β-收缩后新增可选步骤 T2_RECOLOR_ETA(默认 0=跳过,逐位复现父节点)。对每个共有类型(两侧各 ≥10 细胞、输出侧 ≥4 细胞):1) 计算三个共变结构:C_a、C_b(两侧原始细胞的基因-基因协方差,稀疏中心化估计)和 C_out(输出侧)。只保留两侧共有且输出侧也表达的基因子集(加 nnz 比例 ≥0.03 过滤)。2) 目标共变 C_target = (1−t)·C_a + t·C_b。3) 对每个输出细胞的型内偏差向量 d = x − μ_out,做线性重着色:d ← d·W,其中 W = I + η·(C_target^{1/2}·C_out^{-1/2} − I),η∈[0,1] 为机制强度;为避免高维求逆不稳,先取 C_out 前 k 个特征方向(k=20–50)做低秩近似。4) 重着色后逐基因重居中(按该基因 nnz 条目数摊回,沿用节点 17 修正),clip ≥0,不新增非零条目。5) 参数扫描:η ∈ {0.1, 0.25, 0.5}(小起步),k ∈ {20, 50};每次查分必须同时报告 variogram raw 和 neighborhood_mmd raw。6) vec-score 快速筛选:先在 A 半用同日 η=0 锚点(应复现 61.45)对比 η=0.1;若 variogram raw 降幅 <0.0003 或 neighborhood_mmd raw 升幅 >0.001 即停(一票否决),最多 4–5 次查分判负。7) 单输入阶段退路不变:无括号时 main() 提前 return 分层复制,机制不执行。8) 不消费 rng、不改细胞选择、不改坐标:父节点抽样与 jitter 逐位保留。",
"expected_groups": ["cell_state"],
"risks": "1) 重着色本质是型内逐细胞偏差变换,与节点 17 的方差放大一样可能伤 neighborhood_mmd(15-NN 邻域均值分布变散)。缓解:邻域一票否决阈值 0.001,η 从 0.1 起步。2) 稀疏数据的共变估计噪声大,可能引入伪结构。缓解:nnz 比例过滤 + 低秩截断。3) 高维特征分解在 30 分钟时限内可能偏慢。缓解:k≤50、只处理 ≥10 细胞的型、先小样本验证。4) 效应可能在 1 分噪声内无法确认。缓解:同日锚点对比 + 至少两档 η 观察单调性。",
"family_id": "T2EI-01",
"mechanism": "对型内偏差做线性重着色(whitening-recolor),把输出细胞的基因间相关结构向括号阶段的时间插值目标 C_target 移动,修复混抽引入的端点双峰式共变,从而改善 variogram。",
"vs_constant_shift": "常数位移只平移每个型的均值向量(所有同型细胞同方向同幅度),不改变型内方差或基因间相关;本机制保持型均值和边际方差不变(重着色矩阵接近正交、事后重居中),只重新分配型内偏差在不同基因方向上的相对幅度与相关性。节点 17 已证明边际方差无需修,本机制专攻共变结构。",
"mechanism_evidence": "Engineer 应报告:(1) 重着色前后型内基因-基因相关矩阵与 C_target 的 Frobenius 距离(应随 η 单调下降);(2) 每型被实际改变的细胞数与每细胞被改条目数;(3) variogram raw 与 mmd_u raw 随 η 的变化(预期同向改善);(4) neighborhood_mmd raw 是否超过 0.001 一票否决线;(5) 四组分各自变化。若相关矩阵距离不动或所有型被改条目为 0,说明机制未运行。",
"mechanism_off_control": "T2_RECOLOR_ETA=0 时完全跳过重着色步骤,输出应与父节点 17(γ=0)在相同 seed 下逐位相同(array_equal 验证)。开启后(η>0)型内偏差被改变、相关矩阵向目标靠拢;若开启后输出仍逐位相同,说明机制未生效。",
"sources": []}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/21/researcher.jsonl (文件不在) |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 8 |
| 工具调用 | 共 12 次:— |
| 用时 | 1 分 |
| token 数 | 输入 36,381 · 输出 1,489 · 思考 1,979 |
| 任务(第一行) | 审查节点 n21 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 最后的回答(摘录) | REVIEW.json written |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/21/reviewer.jsonl (文件不在) |