Virtual Embryo Challenge更新于 10-03 18:47(北京时间) / 每 5 分钟更新

总览 · ← 返回运行 20261002-202908-search-t1-scr-B

节点 n12

ot_cfm 训练端正则化搜索:OT 配对目标加噪(熵正则)、steps=800、HVG=2000 全部阴性且单调变差,提交父节点等价默认(pair_sigma=0、steps=1500、dim60、α0.85),关闭对照逐比特一致。

运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。20261002-202908-search-t1-scr-B
父节点n9
子节点n16
操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。改进
状态已打分
分数搜索目标分 54.37(+0.0) · X3 54.37(+0.0)
审查未审查
用时?从运行开始到结束(或到现在)的挂钟时间。25 分
程序版本3ea3209ebdd64f35370951ec95de6bb7e14aeac8 (programs.git)

方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。

来自 programs.git 3ea3209ebd:solution/METHOD.md

ot_cfm 训练端正则化搜索:OT 配对目标加噪(熵正则)、steps=800、HVG=2000 全部阴性且单调变差,提交父节点等价默认(pair_sigma=0、steps=1500、dim60、α0.85),关闭对照逐比特一致。

方法族与实现

family_id = ot_cfm,管线与父节点(node 9)逐比特相同:whiten-PCA(60) 潜空间 → minibatch 精确 OT(torchcfm ExactOptimalTransportConditionalFlowMatcher)配对 stage0→stage1 训练 MLP 速度场 v(z,t)(steps=1500, batch=64, lr=1e-3, HVG=2500)→ 自最后输入阶段阻尼 Euler 外推(α=0.85、t 钳 1)→ PCA 逆变换 + 逐细胞残差解码 → 硬零掩码。单输入阶段退化为 copy_last。

本节点代码改动(两处,均为参数化,默认值 = 父节点行为):

  1. --pair-sigma(PLAN 机制的真实实现):训练循环里对每个 minibatch 的 stage1 目标点加高斯噪声 y1 = T1[i1] + pair_sigma * randn(generator=g) 后再做精确 OT 配对,即熵正则化配对的近似。噪声用与采样同一个 seeded generator,确定。pair_sigma=0 不消耗额外随机数,输出与父节点逐比特一致(sha256 52351017830352494d3729284326e77311470e09d6ca6bfb504c39e4240fe688,改动前后各验证一次)。
  2. --sigma:把父节点硬编码的 torchcfm sigma=0.0 参数化。读 torchcfm 源码发现该 σ 只是条件路径的 σ_min(ut = x1 − (1−σ)·x0,xt 相应微调),不是 PLAN 假设的"配对时向目标点加高斯噪声";实测 σ=0.01/0.05 时速度场统计几乎不变(|v| mean 3.019→3.026/3.016),是近似 no-op。PLAN 机制因此改由 --pair-sigma 实现。

提交默认:pair_sigma=0, sigma=0, steps=1500, dim=60, alpha=0.85, n_hvg=2500——即 PLAN 新增机制关闭(阴性,见下),速度场机制本身打开。

对照结果(X3 A 半,seed 0,共用 5 次查分;父节点 A 半基线 53.46 / covariation 42.14)

配置boardcell_statecovariationde_recoverydirection
父节点默认(=--pair-sigma 0,逐比特)53.4668.0742.1449.0749.40
Q1 steps=800, sigma=051.6261.2943.8948.1849.65
Q2 steps=1500, sigma=0.01(σ_min,no-op)53.2667.5341.9649.0749.37
Q4 n-hvg=2000(PLAN 补充探索)51.2463.4540.4047.3249.18
P5 pair-sigma=0.10(PLAN 机制真实实现)51.4063.6440.1247.7549.40
P6 pair-sigma=0.3049.6560.3338.9845.6949.33

结论(对照基线 53.46):

  • steps=800 欠拟合(−1.84,cell_state 68.1→61.3),触发 PLAN 风险 2 的放弃条件(<52);结合父节点 steps=3000 更差(50.13),steps≈1500 是窄峰,不再扫。
  • torchcfm σ_min 是 no-op(53.26,噪声内),PLAN 的 sigma 搜索序列(0.01→0.05→0.10)在其原始参数上没有意义,按 PLAN 规则跳过剩余格点。
  • 配对加噪(真实熵正则机制)单调有害:0.10→−2.06,0.30→−3.81,且 covariation(本节点想修的最弱组分)不升反降(42.1→40.1→39.0)。方向明确,无需再测更小值(0.03 只会收敛回基线)。
  • n-hvg=2000 阴性(−2.22),与父节点 hvg4000 阴性一致,2500 是局部最优。
  • 所有 PLAN 方向均无正信号,按 PLAN 风险 4 如实提交父节点等价配置,报告阴性。

机制生效证据(pair-sigma 打开时确实改变了速度场,但方向与 PLAN 预期相反)

  • 速度场统计(t=1 处 100 个探针细胞):pair_sigma 0 / 0.10 / 0.30 → mean pairwise cos 0.365 / 0.332 / 0.266,|v| mean 3.019 / 3.096 / 3.592,|v| std 0.956 / 0.967 / 1.086。PLAN 预期 cos 略升、std 略降(更平滑);实测 |v| 与 std 反而增大——目标加噪直接放大了条件向量 ut = y1 − x0 的方差,回归目标更噪,速度场不是更平滑而是更抖。
  • 每细胞位移 ||Δz||(α 阻尼后):mean 8.79 / 9.28 / 11.08,std 3.85 / 4.44 / 4.86,max 42.0 / 38.5 / 44.8。PLAN 预期 max 下降(极端位移减少);实测 max 基本不动、mean/std 上升。
  • 未触发 PLAN 风险 1 的退化停止条件(cos 始终 <0.90、|v| std >0.2),即速度场保持状态依赖(cos≈0.27–0.37,非常向量),机制真实生效但破坏了拟合质量,四组分中 cell_state、de_recovery、covariation 同时下降。
  • steps=800 时 |v| mean 2.489(vs 1500 的 3.019)、位移 mean 6.34(vs 8.79),确为欠拟合而非平滑化。
  • 速度场机制本体的 off 开关 --ablation zero_velocity 未重测(本节点未改动积分/解码路径,父节点已测 47.62 vs 50.29)。

mechanism_off_control

  • off = --pair-sigma 0 --sigma 0 --steps 1500(提交默认):输出 sha256 523510178303… 与父节点 node 9 提交代码在 X3 视图 seed 0 的输出逐比特一致(改动后复验通过),确认新代码路径在关闭时零污染。
  • on/off 差异见上表:打开(pair_sigma>0)在 X3 A 半上单调变差,故提交保持关闭,符合 PLAN 风险 4 的阴性处理约定。

验证与未验证

  • 已验证:X3 视图 seed 0 完整跑通(~40 s,CPU,峰值内存与父节点同级 ~1.9 GB);vec-check 通过;--pair-sigma 0 逐比特复现父节点;新参数不读绝对时间/路径/视图名,噪声走 seeded generator,对 seed 确定、视图无关(伪装视图平移时间不影响任何分支)。
  • 未验证:pair_sigma 与 alpha/steps 的交互(配对加噪后 α 重新调优或可部分挽回,但机制本体已 −2 到 −4 分且伤及目标组分 covariation,交互翻盘概率低,未花查分);proxy/proxy2 视图未重跑(管线与父节点逐比特一致,父节点已在两视图跑通)。
  • 生物学知识来源:本节点无新增生物学先验,全部改动是训练配置/正则化,prior/、external/ 未使用。

下一步建议

  • covariation(本族最弱组分,α0.85 时 42.1 vs copy_last ≈48.4)在训练端正则化方向已三连阴性(node 7 位移滤波、node 9 零掩码软化、本节点配对加噪+步数),建议转向父节点 next_suggestions #1:与 moscot 系基因空间位移做凸组合,或直接改投 local_ot 族(node 8/10,62.24/56.28)的结构。

调研员的计划

名称ot_cfm 软OT配对正则化 + 步数缩减修复速度场外推过拟合
动机父节点 9 的 covariation 42.29 是四组最弱且唯一低于父节点的组分(父父 43.56),且与 alpha 单调反向(α 0.65/0.85/1.0/1.2 → cov 44.4/42.1/39.9/36.2)。ANALYSIS 指出 steps 3000(50.13)< steps 1500(53.46)提示速度场已过拟合;当前 sigma=0 的精确 OT 配对产生极端配对对,导致速度向量方差大(|v| mean 1.90 std 0.52),外推到 t>1 时过拟合的速度场破坏基因共变结构。copy_last 基线 covariation ≈ 48.4,ot_cfm 在 α=0.85 时损失约 6 分。node 7 已证明 Δz 后处理(PC 阻尼、kNN 平滑)无效,因此本节点转向训练端正则化:软化配对(sigma>0)+ 减少训练步数(800),从源头产生更平滑、泛化更好的速度场。
做法在父节点 run.py 上改动两处训练配置,管线其余逐比特不变:

1. 软 OT 配对(sigma > 0):torchcfm ExactOptimalTransportConditionalFlowMatcher 的 sigma 参数从 0 改为 >0。sigma 在配对时向目标点加高斯噪声,等效于熵正则化,防止极端配对对产生过大速度向量。搜索序列(每次 1 查分):sigma = 0.01 → 0.05 → 0.10。优先试 0.01(最小扰动)。若 0.01 有效则试 0.05;若 0.01 无效(< +1 分)则跳过 0.05/0.10,不浪费查分。

2. 训练步数缩减:--steps 从 1500 改为 800。依据:3000 < 1500(50.13 vs 53.46),过拟合拐点在 1500 之前。800 步一次查分即可判断趋势。

3. 组合:若 sigma 和 steps 各自有正信号(≥ +1 分),组合最佳 sigma + steps=800 再查一次。

4. 补充探索(若上述均无正信号且查分余量 > 10):试 --n-hvg 2000(减少 HVG 可能降低速度场噪声),一次查分。

执行顺序(严格控制查分 ≤ 8 次):
Q1: steps=800, sigma=0(步数效应)
Q2: steps=1500, sigma=0.01(sigma 效应)
Q3: 取 Q1/Q2 中较好者,组合两者(如 steps=800+sigma=0.01)
Q4-Q5: 若 Q2 有效,试 sigma=0.05;若 Q3 有效,微调(如 steps=1000)
提交最佳配置。

单输入阶段退路不变:len(entries)<2 → copy_last。

vec-score 快速筛选:每次用 vec-score 查 X3 A 半,比较 board 和四组分。差距 < 2 分视为噪声内,不单独作为提交依据;需至少两个配置方向一致才确认趋势。
风险1. sigma>0 可能使配对过于模糊,速度场退化(方向信息丢失),cell_state 和 direction 同时下降。Engineer 应在 Q2 后立即检查 |v| mean/std 和 mean pairwise cos:若 cos > 0.90 或 |v| std < 0.2,说明速度场已退化为近似常向量,停止该方向。
2. steps=800 可能不足(欠拟合),速度场未充分学习,cell_state 下降。若 Q1 board < 52(比父节点低 > 2 分),说明 800 步不够,放弃该方向。
3. 两者组合可能效果不叠加(正则化来源重叠)。Q3 若不超过 Q1/Q2 中较好者,不继续组合搜索。
4. 改善可能 < 2 分(噪声内)。若所有变体与父节点差距 < 2 分,如实提交父节点等价配置(sigma=0, steps=1500),报告阴性。

代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。

对比:父节点版本 d853c47fa2。改动的文件:solution/METHOD.md +35 −52、solution/run.py +17 −2

diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 549599e..f7c9f02 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,70 +1,53 @@-ot_cfm 潜空间容量与外推强度重调:PCA 25→60、α 0.65→0.85(X3 A 半 50.29→53.46);PLAN 零掩码软化搜索后证实有害,默认关闭。+ot_cfm 训练端正则化搜索:OT 配对目标加噪(熵正则)、steps=800、HVG=2000 全部阴性且单调变差,提交父节点等价默认(pair_sigma=0、steps=1500、dim60、α0.85),关闭对照逐比特一致。  ## 方法族与实现 -`family_id = ot_cfm`,在父节点(node 6/7)同一管线上改动,管线其余部分逐比特不变:-whiten-PCA(dim) 潜空间 → minibatch 精确 OT(torchcfm `ExactOptimalTransportConditionalFlowMatcher`, sigma=0)配对 stage0→stage1 训练 MLP 速度场 v(z,t)(steps=1500, batch=64, lr=1e-3, HVG=2500)→ 自最后输入阶段阻尼 Euler 外推(t 钳到 1,α)→ PCA 逆变换 + 逐细胞残差解码 → 硬零掩码(只在输入非零位写值,clip≥0)。+`family_id = ot_cfm`,管线与父节点(node 9)逐比特相同:whiten-PCA(60) 潜空间 → minibatch 精确 OT(torchcfm `ExactOptimalTransportConditionalFlowMatcher`)配对 stage0→stage1 训练 MLP 速度场 v(z,t)(steps=1500, batch=64, lr=1e-3, HVG=2500)→ 自最后输入阶段阻尼 Euler 外推(α=0.85、t 钳 1)→ PCA 逆变换 + 逐细胞残差解码 → 硬零掩码。单输入阶段退化为 copy_last。 -本节点两条改动:+本节点代码改动(两处,均为参数化,默认值 = 父节点行为): -1. **PLAN 机制(解码零掩码软化)**:新增 `--unmask-scale` / `--unmask-thresh`。对输入为零的 HVG 位置,若 PCA 重建值 `rec > thresh`,写入 `scale × max(0, rec)`,否则保持 0;非零位逻辑不变。哪些基因被激活、激活多少完全由该细胞位移后在 PCA 空间的位置决定(细胞特异、基因特异),不是常数位移、也不是组成重加权。-2. **潜空间容量 / 外推强度**(父节点 `next_suggestions` #3 明确建议的方向):`--dim`、`--alpha`、`--n-hvg`、`--steps` 网格搜索,把解码环节的秩截断和外推幅度重调。+1. **`--pair-sigma`(PLAN 机制的真实实现)**:训练循环里对每个 minibatch 的 stage1 目标点加高斯噪声 `y1 = T1[i1] + pair_sigma * randn(generator=g)` 后再做精确 OT 配对,即熵正则化配对的近似。噪声用与采样同一个 seeded generator,确定。`pair_sigma=0` 不消耗额外随机数,输出与父节点**逐比特一致**(sha256 `52351017830352494d3729284326e77311470e09d6ca6bfb504c39e4240fe688`,改动前后各验证一次)。+2. **`--sigma`**:把父节点硬编码的 torchcfm `sigma=0.0` 参数化。读 torchcfm 源码发现该 σ 只是条件路径的 σ_min(ut = x1 − (1−σ)·x0,xt 相应微调),**不是** PLAN 假设的"配对时向目标点加高斯噪声";实测 σ=0.01/0.05 时速度场统计几乎不变(|v| mean 3.019→3.026/3.016),是近似 no-op。PLAN 机制因此改由 `--pair-sigma` 实现。 -提交默认:`dim=60, alpha=0.85, steps=1500, n_hvg=2500, unmask_scale=0`(即 PLAN 机制**关闭**,理由见下)。+提交默认:`pair_sigma=0, sigma=0, steps=1500, dim=60, alpha=0.85, n_hvg=2500`——即 **PLAN 新增机制关闭**(阴性,见下),速度场机制本身打开。 -## 对照结果(X3 A 半,seed 0,共用 15 次查分,父节点 A 半基线 50.29)+## 对照结果(X3 A 半,seed 0,共用 5 次查分;父节点 A 半基线 53.46 / covariation 42.14)  | 配置 | board | cell_state | covariation | de_recovery | direction | |---|---|---|---|---|---|-| 父节点 dim25 α0.65(=`--unmask-scale 0 --dim 25 --alpha 0.65`) | 50.29 | 59.61 | 43.59 | 46.67 | 49.02 |-| **PLAN 机制 dim25 α0.65 + unmask scale0.5 thresh1.0**(激活 10.4% 零位,nnz/cell 1967→2115) | **44.75** | 53.30 | **27.85** | 43.80 | 48.97 |-| dim60 α0.65 | 52.53 | 63.86 | 44.42 | 48.62 | 49.33 |-| dim60 α0.50 | 51.25 | 59.53 | 45.72 | 47.75 | 49.23 |-| dim60 α0.78 | 53.32 | 67.03 | 43.01 | 49.07 | 49.36 |-| **dim60 α0.85(提交)** | **53.46** | **68.07** | 42.14 | **49.07** | **49.40** |-| dim60 α1.00 | 52.72 | 67.38 | 39.92 | 48.62 | 49.46 |-| dim60 α1.20 | 49.52 | 59.13 | 36.24 | 48.62 | 49.50 |-| dim40 / dim80 / dim100 / dim150 / dim250(α0.65) | 48.89 / 50.65 / 51.43 / 49.78 / 48.56 | 57.3 / 61.2 / 60.9 / 57.6 / 51.9 | 41.5 / 44.7 / 46.3 / 46.1 / 48.0 | – | – |-| dim100 α0.85 | 52.39 | 65.29 | 45.01 | 46.09 | 49.13 |-| dim80 α1.00 | 50.16 | 62.21 | 40.85 | 43.80 | 49.49 |-| dim60 α0.85 hvg4000 | 51.77 | 65.27 | 42.18 | 45.69 | 49.31 |-| dim60 α0.85 steps3000 | 50.13 | 62.73 | 40.50 | 43.80 | 49.04 |-| dim25 α0.65 `--no-whiten` | 48.23 | 51.23 | 46.53 | 45.30 | 48.93 |--结论:-- **PLAN 机制为阴性**。低阈值(0/0.05/0.1)无意义——白化 PCA 重建在零位的取值中位数就有 0.458(p90=1.01),thresh=0 会激活 51% 的零位、nnz/cell 从 1967 跳到 3249(PLAN 风险 1「无差别稠密化」成立);把阈值提到 p90≈1.0 使激活比例回到 10.4%、nnz/cell 2115(落在 PLAN 期望的 2000–2200),covariation 仍从 43.6 崩到 27.9、cell_state 从 59.6 掉到 53.3。即「按重建值抬正零位」注入的是低秩平滑信号,破坏而不是恢复基因共变结构,故不再扫 3×3 格点,默认 `--unmask-scale 0`。-- **解码/潜空间容量是真正的杠杆**:dim 25→60 四个组分同时上升(board +2.2);α 0.65→0.85 再 +0.9,主要来自 cell_state(59.6→68.1,全树最高)与 de_recovery。α 与 covariation 单调反向(α↑ → covariation↓),board 在 α≈0.78–0.85 出现平台(53.32/53.46,差 0.14 < 噪声),α≥1.0 起过冲变差,取平台内点 0.85。--## 机制生效证据(速度场机制打开,`--unmask-scale` 关闭)--- 速度场非退化:`velocity: mean pairwise cos 0.524`(<0.95),`|v| mean 1.90 std 0.52`(状态依赖,不是常向量)。-- 位移非恒定且随 α 缩放:dim60 α0.85 下 per-cell 位移 mean/std/max 随 α 单调变化,输出与 α=0(`--ablation zero_velocity`,退化为最后阶段抽样复制)逐比特不同。-- 解码确实改写表达:输出基因方差 mean 0.112 vs 输入 0.101,nnz/cell 1964 vs 输入 1974(掩码保持稀疏,未稠密化)。-- 四组分变化归因:cell_state +8.5、de_recovery +2.4、direction +0.4、covariation −1.4(相对父节点 A 半),即位移幅度增大主要改善细胞状态分布与 DE 幅度,代价是共变结构轻微下降。-- PLAN 机制(关闭)的证据在上表第 2 行:打开时 nnz/cell 1967→2115、每细胞激活数 mean 148/std 74/max 452(细胞间非均匀)、涉及 2194/2500 个 HVG 且每基因被激活细胞数 p50=29/p90=91/max=177(基因间非均匀)——机制确实按预期改变了稀疏模式,但评分变差。+| 父节点默认(=`--pair-sigma 0`,逐比特) | 53.46 | 68.07 | 42.14 | 49.07 | 49.40 |+| Q1 steps=800, sigma=0 | 51.62 | 61.29 | 43.89 | 48.18 | 49.65 |+| Q2 steps=1500, sigma=0.01(σ_min,no-op) | 53.26 | 67.53 | 41.96 | 49.07 | 49.37 |+| Q4 n-hvg=2000(PLAN 补充探索) | 51.24 | 63.45 | 40.40 | 47.32 | 49.18 |+| P5 **pair-sigma=0.10**(PLAN 机制真实实现) | 51.40 | 63.64 | 40.12 | 47.75 | 49.40 |+| P6 **pair-sigma=0.30** | 49.65 | 60.33 | 38.98 | 45.69 | 49.33 |++结论(对照基线 53.46):+- **steps=800 欠拟合**(−1.84,cell_state 68.1→61.3),触发 PLAN 风险 2 的放弃条件(<52);结合父节点 steps=3000 更差(50.13),steps≈1500 是窄峰,不再扫。+- **torchcfm σ_min 是 no-op**(53.26,噪声内),PLAN 的 sigma 搜索序列(0.01→0.05→0.10)在其原始参数上没有意义,按 PLAN 规则跳过剩余格点。+- **配对加噪(真实熵正则机制)单调有害**:0.10→−2.06,0.30→−3.81,且 covariation(本节点想修的最弱组分)不升反降(42.1→40.1→39.0)。方向明确,无需再测更小值(0.03 只会收敛回基线)。+- **n-hvg=2000 阴性**(−2.22),与父节点 hvg4000 阴性一致,2500 是局部最优。+- 所有 PLAN 方向均无正信号,按 PLAN 风险 4 如实提交父节点等价配置,报告阴性。++## 机制生效证据(pair-sigma 打开时确实改变了速度场,但方向与 PLAN 预期相反)++- 速度场统计(t=1 处 100 个探针细胞):pair_sigma 0 / 0.10 / 0.30 → mean pairwise cos 0.365 / 0.332 / 0.266,|v| mean 3.019 / 3.096 / 3.592,|v| std 0.956 / 0.967 / 1.086。PLAN 预期 cos 略升、std 略降(更平滑);实测 **|v| 与 std 反而增大**——目标加噪直接放大了条件向量 ut = y1 − x0 的方差,回归目标更噪,速度场不是更平滑而是更抖。+- 每细胞位移 ||Δz||(α 阻尼后):mean 8.79 / 9.28 / 11.08,std 3.85 / 4.44 / 4.86,max 42.0 / 38.5 / 44.8。PLAN 预期 max 下降(极端位移减少);实测 max 基本不动、mean/std 上升。+- 未触发 PLAN 风险 1 的退化停止条件(cos 始终 <0.90、|v| std >0.2),即速度场保持状态依赖(cos≈0.27–0.37,非常向量),机制真实生效但破坏了拟合质量,四组分中 cell_state、de_recovery、covariation 同时下降。+- steps=800 时 |v| mean 2.489(vs 1500 的 3.019)、位移 mean 6.34(vs 8.79),确为欠拟合而非平滑化。+- 速度场机制本体的 off 开关 `--ablation zero_velocity` 未重测(本节点未改动积分/解码路径,父节点已测 47.62 vs 50.29)。  ## mechanism_off_control -- PLAN 的 off 开关 = `--unmask-scale 0`:本次实测输出 sha256 `e813b37bab9c…`,与父节点 METHOD.md 记录的默认输出 sha256 完全一致,即 off 路径逐比特复现父节点,代码改动未污染原逻辑。-- 速度场机制的 off 开关 = `--ablation zero_velocity`(α←0,输出 = 最后阶段抽样复制),父节点已测 47.62 vs 打开 50.29;本节点未重复消耗查分(代码路径未改动)。-- 提交默认:速度场机制**打开**,PLAN 零掩码软化**关闭**(阴性,见上)。+- off = `--pair-sigma 0 --sigma 0 --steps 1500`(提交默认):输出 sha256 `523510178303…` 与父节点 node 9 提交代码在 X3 视图 seed 0 的输出**逐比特一致**(改动后复验通过),确认新代码路径在关闭时零污染。+- on/off 差异见上表:打开(pair_sigma>0)在 X3 A 半上单调变差,故提交保持关闭,符合 PLAN 风险 4 的阴性处理约定。 -## 合规 / 确定性+## 验证与未验证 -- 输出只取决于视图数据(表达、`celltype` 未使用、阶段时间**差**)与 `--seed`:无视图路径/文件名/manifest 键序分支,无绝对发育时间分支(`t_end = 1 + (tT - t1)/(t1 - t0)` 只用时间差);时间统一平移不改变任何计算。-- 确定性:`np.random.seed(seed)` + `torch.manual_seed` + `torch.use_deterministic_algorithms(True)` + 单线程;seed 0 默认配置两次运行 sha256 相同(`5235101783…`)。`--seed` 任意非负整数无分支。-- 单输入阶段(proxy 形态)走 `copy_last` 退路,不崩。-- 未使用 `external/`、`prior/`,未使用任何保留阶段(E10.5/E12.5、9.5<E≤13.5)或保留基因型信息,未读 `uns.celltype_palette`。知识来源:仅通用算法(PCA、OT-CFM 条件流匹配,Tong et al. 2023 / torchcfm 实现;HVG 方差选择),无生物学先验写入。-- 运行 ~22 s、内存 <2 GB(限额 30 min / 28 GB);`vec-check` 通过(status ok);`EXECUTION.json` 保持 `{"gpu": false}`。--## 验证过 / 未验证--- 已验证:X3 视图 15 次查分的 dim/α/hvg/steps/whiten/unmask 搜索、off 对照逐比特复现父节点、seed 0 复现、vec-check、unmask 打开路径可运行。-- 未验证:proxy / proxy2 / final 视图实跑(本节点只按 X3 打分;单输入退路与两输入路径代码与父节点相同);α∈(0.85,1.0) 与 dim∈(60,80) 的更细格点(平台内,预期差异 <噪声);unmask 与 dim60/α0.85 的组合(unmask 在 dim25 上已使 covariation 崩 15.7 分,而 dim60/α0.85 的 covariation 本就更低 42.1,组合预期更差,未消耗额度);伪装视图重跑(代码无视图身份依赖,静态可判)。-- 风险:α/dim 是在 X3 A 半上选的超参,B 半与 3 seed 复跑可能回落;α 与 covariation 的单调权衡说明该配置偏向 cell_state,若 B 半 covariation 地板更严,提升会缩小。+- 已验证:X3 视图 seed 0 完整跑通(~40 s,CPU,峰值内存与父节点同级 ~1.9 GB);`vec-check` 通过;`--pair-sigma 0` 逐比特复现父节点;新参数不读绝对时间/路径/视图名,噪声走 seeded generator,对 seed 确定、视图无关(伪装视图平移时间不影响任何分支)。+- 未验证:pair_sigma 与 alpha/steps 的交互(配对加噪后 α 重新调优或可部分挽回,但机制本体已 −2 到 −4 分且伤及目标组分 covariation,交互翻盘概率低,未花查分);proxy/proxy2 视图未重跑(管线与父节点逐比特一致,父节点已在两视图跑通)。+- 生物学知识来源:本节点无新增生物学先验,全部改动是训练配置/正则化,`prior/`、`external/` 未使用。  ## 下一步建议 -1. covariation 是本配置唯一低于父节点的组分(42.1 vs 43.6,且 copy_last 有 48.4)。零掩码方向已证伪,建议改从**解码的低秩性**入手:把 Δrec 限制在前 k 个 PC 之外/之内分别加权,或用 gene-space OT 位移(moscot 系 covariation 52–54)与 ot_cfm 潜空间位移做**凸组合**,在 cell_state 68 与 covariation 48 之间取更优点。-2. α 与 dim 的联合平台已定位,不必再细扫;可试 steps 800(steps3000 变差提示速度场过拟合)与 sigma>0 的 OT 配对。-3. 位移滤波(k_active/γ/β/kNN)方向由 node 7 关闭,本节点结果不改变该结论。+- covariation(本族最弱组分,α0.85 时 42.1 vs copy_last ≈48.4)在训练端正则化方向已三连阴性(node 7 位移滤波、node 9 零掩码软化、本节点配对加噪+步数),建议转向父节点 next_suggestions #1:与 moscot 系基因空间位移做凸组合,或直接改投 local_ot 族(node 8/10,62.24/56.28)的结构。diff --git a/solution/run.py b/solution/run.pyindex 26c6d5d..2804df8 100644--- a/solution/run.py+++ b/solution/run.py@@ -6,6 +6,12 @@ manifest times) with damped velocity (alpha); decode via PCA inverse + per-cell Node 9: latent capacity / extrapolation strength re-tuned (dim 25->60, alpha 0.65->0.85); the PLAN soft zero-mask decode (--unmask-scale/--unmask-thresh) was searched and is OFF by default (it collapsed covariation, see METHOD.md). --unmask-scale 0 reproduces the hard zero-mask decode bit-for-bit.+Node 12: training-side regularization searched per PLAN -- soft OT pairing via Gaussian noise on+minibatch targets (--pair-sigma, the true entropic-regularization mechanism; torchcfm's own --sigma is+only the path sigma_min and a near no-op), steps=800, n-hvg=2000. All variants lost board score+monotonically in pair-sigma (0.10 -> -2.1, 0.30 -> -3.8 vs parent A-half 53.46); noise on targets+*increased* |v| and displacement std instead of smoothing them. Submitted default keeps pair-sigma=0,+sigma=0, steps=1500 (parent-equivalent, bit-for-bit, sha 523510178303...). Negative result. Ablation: --ablation zero_velocity zeroes the velocity field -> output equals copy of last stage. Single input stage -> copy_last fallback. CPU only, deterministic given --seed. """@@ -43,6 +49,11 @@ def main():     ap.add_argument("--alpha", type=float, default=0.85)     ap.add_argument("--dim", type=int, default=60)     ap.add_argument("--steps", type=int, default=1500)+    ap.add_argument("--sigma", type=float, default=0.0,+                    help="torchcfm path sigma_min (only perturbs ut by -sigma*x0; near-no-op, kept for control)")+    ap.add_argument("--pair-sigma", type=float, default=0.0,+                    help="std of Gaussian noise added to stage1 targets inside each minibatch before exact-OT "+                         "pairing (entropic regularization approximation, PLAN mechanism); 0 = exact pairing")     ap.add_argument("--n-hvg", type=int, default=2500)     ap.add_argument("--clamp-t", type=float, default=1.0)     ap.add_argument("--k-active", type=int, default=25,@@ -135,7 +146,7 @@ def main():      np.random.seed(args.seed)  # torchcfm OTPlanSampler uses numpy global RNG -    fm = ExactOptimalTransportConditionalFlowMatcher(sigma=0.0)+    fm = ExactOptimalTransportConditionalFlowMatcher(sigma=float(args.sigma))     dim = z0.shape[1]     torch.manual_seed(args.seed)     net = torch.nn.Sequential(@@ -152,11 +163,15 @@ def main():     batch = 64     n0, n1 = T0.shape[0], T1.shape[0]     g = torch.Generator().manual_seed(args.seed)+    pair_sigma = float(args.pair_sigma)     net.train()     for step in range(args.steps):         i0 = torch.randint(0, n0, (batch,), generator=g)         i1 = torch.randint(0, n1, (batch,), generator=g)-        t, xt, ut = fm.sample_location_and_conditional_flow(T0[i0], T1[i1])+        y1 = T1[i1]+        if pair_sigma > 0.0:+            y1 = y1 + pair_sigma * torch.randn(y1.shape, generator=g, dtype=y1.dtype)+        t, xt, ut = fm.sample_location_and_conditional_flow(T0[i0], y1)         v = net(torch.cat([xt, t[:, None]], dim=1))         loss = torch.nn.functional.mse_loss(v, ut)         opt.zero_grad(set_to_none=True)

调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。

用到的知识库条目

编号标题出处
k031Offline OT toolkit in the sandbox: moscot TemporalProblem, wot OTModel, POT, geomloss10.1038/s41586-024-08453-2 (moscot); 10.1016/j.cell.2019.01.006 (Waddington-OT)
k041Within-stage pseudotime and graph toolkit offline: scanpy DPT/PAGA/Leiden, Palantir, CellRank 210.1186/s13059-019-1663-x (PAGA); 10.1038/s41587-019-0068-4 (Palantir); 10.1038/s41592-024-02303-9 (CellRank 2)
k018Damped per-type shift: shrinkage alpha on the observed deltanotes/plan/cards/T1.md

分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。

改了什么在父节点 run.py 上新增两个参数化开关:--pair-sigma(minibatch 内对 stage1 目标点加高斯噪声后再做精确 OT 配对,即 PLAN 熵正则的真实实现)和 --sigma(把 torchcfm 硬编码 sigma=0 参数化,实测只是路径 σ_min,近 no-op)。搜索 5 次查分全部阴性后,提交默认 pair_sigma=0/sigma=0/steps=1500,与父节点输出逐比特一致(sha 523510178303…),故榜分 +0.00。
各组分数的变化cell_state:噪声内(+0.00,69.78→69.78)
covariation:噪声内(+0.00,42.29→42.29);A 半内部探索显示 pair-sigma 0.10/0.30 反而使 covariation 42.14→40.12→38.98,即想修的组分被机制进一步破坏
de_recovery:噪声内(+0.00,提交配置与父节点逐比特相同,50.45→50.45)
direction:噪声内(+0.00,49.48→49.48)
family_idot_cfm
假设是否成立否
经验
  1. torchcfm ExactOptimalTransportConditionalFlowMatcher 的 sigma 参数只是条件路径 σ_min(ut = x1 − (1−σ)x0),不是配对噪声;在 ot_cfm 上做熵正则必须自己对 minibatch 目标点加噪,改库参数是近 no-op(σ=0.01 时 |v| mean 3.019→3.026,分数 53.46→53.26 在噪声内)。
  2. 对 stage1 目标加高斯噪声(pair_sigma)单调有害:0.10→−2.06、0.30→−3.81(A 半),且机制方向与预期相反——噪声直接放大条件向量 ut 的方差,|v| mean/std(3.02/0.96→3.59/1.09)和位移 mean/std(8.79/3.85→11.08/4.86)上升而非下降,速度场更抖不是更平滑;想靠配对加噪修 covariation 的假设被证伪。
  3. steps 在 ot_cfm 上是窄峰:800 欠拟合(−1.84,cell_state 68.1→61.3,|v| mean 3.02→2.49),3000 过拟合(node 9 已测 −3.3),1500 附近不必再扫。
  4. n-hvg 2500 是局部最优:2000 在本节点 −2.22,4000 在 node 9 −1.7,两个方向都已验证。
  5. covariation 短板的训练端正则化路线已三连阴性(node 7 位移滤波、node 9 零掩码软化、node 12 配对加噪+步数),该族内训练端超参空间基本探索完毕。
  6. 阴性时按 PLAN 预设的退路提交父节点等价配置并做逐比特 sha256 对照(本节点做到),能保证不丢分且 off 对照可信,值得后续节点沿用。
mechanism_active是
下一步建议
  1. 针对 covariation:放弃 ot_cfm 训练端正则化,改做结构组合——把 moscot 基因空间 OT 位移与 ot_cfm 潜空间位移按权重 w∈{0.3,0.5,0.7} 凸组合(父节点 next_suggestions #1),在 cell_state 68 与 copy_last 的 covariation≈48 之间找折中点。
  2. 针对全组分:把后续查分预算转向 local_ot 族(node 8 已 62.24),在其结构上做改进,比在 ot_cfm(54.37 平台)上继续调参回报更高。
  3. 不建议再花查分测 pair_sigma 与 alpha 的交互或更小的 pair_sigma(0.03):机制本体已 −2 到 −4 分且伤及目标组分,翻盘概率低、方向已明确。

对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。

只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。

分析员

角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。分析员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数?大模型一共回复了几轮(每轮可以调用多个工具)。2
工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。共 1 次:write 1
用时不到 1 分
token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。输入 12,560 · 输出 1,194 · 思考 974
任务(第一行)分析节点 n12 的打分结果,写 ANALYSIS.json
最后的回答(摘录)
ANALYSIS.json written
原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。/home/spark-longxinyang/vec/runs/formal/20261002-202908-search-t1-scr-B/nodes/12/analyst.jsonl 6 KB
/home/spark-longxinyang/vec/runs/formal/20261002-202908-search-t1-scr-B/nodes/12/analyst.stderr

工程师

角色工程师 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数20
工具调用共 26 次:bash 17、edit 7、read 1、write 1
用时15 分
token 数输入 47,570 · 输出 7,673 · 思考 9,700
任务(第一行)按计划修改程序:ot_cfm 软OT配对正则化 + 步数缩减修复速度场外推过拟合
最后的回答(摘录)
**做了什么**:按 PLAN 在父节点(node 9, ot_cfm, A 半 53.46)上搜索训练端正则化。发现 torchcfm 的 `sigma` 只是路径 σ_min(近 no-op),PLAN 假设的"配对目标加噪"熵正则改由新参数 `--pair-sigma` 真实实现;连同 steps=800、HVG=2000 共查 5 次分。

**查分结果**(X3 A 半,基线 53.46):steps=800 → 51.62(欠拟合);σ_min=0.01 → 53.26(no-op);hvg2000 → 51.24;pair-sigma 0.10 → 51.40、0.30 → 49.65(单调有害,且 |v|/位移 std 反升、covariation 反降,与 PLAN 预期相反)。全部阴性,按 PLAN 风险 4 提交父节点等价配置,关闭对照逐比特复现(sha `523510178303…`),vec-check 通过,用 5/20 次查分。

**下一步最值得试**:ot_cfm 的 covariation 短板在训练端正则化方向已三连阴性(node 7/9/12),应转向父节点建议的与 moscot 基因空间位移凸组合,或把资源投向 local_ot 族(node 8, 62.24)。
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261002-202908-search-t1-scr-B/nodes/12/engineer.jsonl 120 KB
/home/spark-longxinyang/vec/runs/formal/20261002-202908-search-t1-scr-B/nodes/12/engineer.stderr

调研员

角色调研员 alibaba-token-plan-cn/qwen3.8-max
调用次数1 次
轮数1
工具调用共 0 次:—
用时8 分
token 数输入 16,797 · 输出 14,321 · 思考 8,192
任务(第一行)为节点 n12(改进,父节点 n9)写改进计划 PLAN.json
最后的回答(摘录)
= 0.01 → 0.05 → 0.10。优先试 0.01(最小扰动)。若 0.01 有效则试 0.05;若 0.01 无效(< +1 分)则跳过 0.05/0.10,不浪费查分。\n\n2. **训练步数缩减**:--steps 从 1500 改为 800。依据:3000 < 1500(50.13 vs 53.46),过拟合拐点在 1500 之前。800 步一次查分即可判断趋势。\n\n3. **组合**:若 sigma 和 steps 各自有正信号(≥ +1 分),组合最佳 sigma + steps=800 再查一次。\n\n4. **补充探索(若上述均无正信号且查分余量 > 10)**:试 --n-hvg 2000(减少 HVG 可能降低速度场噪声),一次查分。\n\n执行顺序(严格控制查分 ≤ 8 次):\n  Q1: steps=800, sigma=0(步数效应)\n  Q2: steps=1500, sigma=0.01(sigma 效应)\n  Q3: 取 Q1/Q2 中较好者,组合两者(如 steps=800+sigma=0.01)\n  Q4-Q5: 若 Q2 有效,试 sigma=0.05;若 Q3 有效,微调(如 steps=1000)\n  提交最佳配置。\n\n单输入阶段退路不变:len(entries)<2 → copy_last。\n\nvec-score 快速筛选:每次用 `vec-score` 查 X3 A 半,比较 board 和四组分。差距 < 2 分视为噪声内,不单独作为提交依据;需至少两个配置方向一致才确认趋势。",
  "expected_groups": ["covariation", "de_recovery"],
  "risks": "1. sigma>0 可能使配对过于模糊,速度场退化(方向信息丢失),cell_state 和 direction 同时下降。Engineer 应在 Q2 后立即检查 |v| mean/std 和 mean pairwise cos:若 cos > 0.90 或 |v| std < 0.2,说明速度场已退化为近似常向量,停止该方向。\n2. steps=800 可能不足(欠拟合),速度场未充分学习,cell_state 下降。若 Q1 board < 52(比父节点低 > 2 分),说明 800 步不够,放弃该方向。\n3. 两者组合可能效果不叠加(正则化来源重叠)。Q3 若不超过 Q1/Q2 中较好者,不继续组合搜索。\n4. 改善可能 < 2 分(噪声内)。若所有变体与父节点差距 < 2 分,如实提交父节点等价配置(sigma=0, steps=1500),报告阴性。",
  "family_id": "ot_cfm",
  "mechanism": "在训练端引入熵正则化(sigma>0 软化 OT 配对)并减少训练步数,使速度场更平滑、减少过拟合,从而在外推阶段产生更保守的位移,减轻对基因共变结构的破坏。核心机制仍是状态相关的速度场 v(z,t),改变的是配对质量和训练充分度。",
  "vs_constant_shift": "速度场随细胞在潜空间的位置变化(|v| mean 1.90 std 0.52,非零方差),不是每型同一向量。软化配对改变的是训练信号的质量(减少极端配对对),使速度场更平滑,但仍然保持状态依赖性。与常数位移的区别:关闭速度场(--ablation zero_velocity)后输出退化为最后阶段抽样复制(47.62),打开后 50.29+,证明机制有效。",
  "mechanism_evidence": "Engineer 应记录并报告:(1) 训练后速度场统计:|v| mean/std、mean pairwise cosine similarity(sigma>0 预期 cos 略升、std 略降,表明更平滑);(2) 每细胞位移 ||Δz|| 的 mean/std/max(sigma>0 预期 max 下降,极端位移减少);(3) 四组分各自变化,重点看 covariation 是否回升、cell_state 是否保持;(4) 若可能,打印训练 loss 曲线最后 100 步的方差(过拟合时方差大)。",
  "mechanism_off_control": "sigma=0 + steps=1500 即父节点默认配置,输出应与父节点逐比特相同(sha256 一致)。Engineer 先跑一次 `--sigma 0 --steps 1500` 确认 sha256 与父节点 METHOD.md 记录一致,再开始搜索。若不一致,说明代码改动污染了原逻辑,必须先修复。",
  "sources": []
}
原始记录位置/home/spark-longxinyang/vec/runs/formal/20261002-202908-search-t1-scr-B/nodes/12/researcher.jsonl 55 KB
/home/spark-longxinyang/vec/runs/formal/20261002-202908-search-t1-scr-B/nodes/12/researcher.stderr