总览 · ← 返回运行 20261003-171955-search-t2-embryo-interp-chain-12h
节点 n51 在终选来历上
NBSMOOTH:把非零表达向 15-NN 邻域均值轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动)提升邻域相干;PLAN 的加性 VPRECENT 与 James-Stein 收缩均证否。
| 运行?一次完整的自动搜索或 Agent 会话,有自己的锁定配置和证据包。 | 20261003-171955-search-t2-embryo-interp-chain-12h |
|---|---|
| 父节点 | n49 |
| 子节点 | n53 |
| 操作?种子:人写的起点;改进:在父节点上改;草稿:从头写;修复:修父节点的报错。 | 改进 |
| 状态 | 已打分 |
| 分数 | 搜索目标分 66.34(+0.2) · proxy 66.34(+0.2) · 3 次复测均分 65.85 |
| 审查 | 通过 1 越界读取:未发现问题。全部 IO 只有 run.py:949(view/prior/tf_regulons/collectri_mouse.tsv.gz)与 run.py:1133-1145(prior/reactome、prior/go、prior/msigdb 的 gmt),都在 view_manifest.json 的 prior 清单内;无绝对路径、..、/mnt、/home、data/raw、downloads、src/common/evaluation;数据读取全走框架 view_io 的 load_manifest/panel_genes/read_stage(run.py… |
| 用时?从运行开始到结束(或到现在)的挂钟时间。 | 43 分 |
| 程序版本 | 01713da47734602ff4bd158a67dc87a7ff5fa4e1 (programs.git) |
方法说明?节点程序自带的 METHOD.md:这个程序做了什么、为什么。
来自 programs.git 01713da477:solution/METHOD.md
NBSMOOTH:把非零表达向 15-NN 邻域均值轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动)提升邻域相干;PLAN 的加性 VPRECENT 与 James-Stein 收缩均证否。
本节点做了什么(improve,父节点 49)
父节点 49(WIDENP,榜分 66.10 / 3 种子 65.66)四组最弱是 cell_state(A 半 59.6),其中 variogram(skill≈0.55)是地板以上最弱指标。PLAN 指定机制 VPRECENT:把 WITHINP 的乘性再居中因子 f_g 换成加性、"保方差" 的逐基因位移 δ_g=μ_full−μ_drawn(只作用于非零值、≤0 截 0)。
PLAN 机制被证否,改交父节点 ANALYSIS 建议 #2 的备选机制 NBSMOOTH(针对 local_spatial/nbhd,权重 25 最高)。
PLAN 机制 VPRECENT(加性再居中)——证否
实现于 WITHINP_MODE="add"(T2_WITHINP_MODE=add 复现)。δ_g=μ_full−μ_drawn,可加下限 δ_g≥c·μ_drawn,nnz-only、x+δ≤0→0,之后仍走原池化伪批量复原 g=clip(pb0/pb1,0.5,2)。A 半 seed 0,父锚点 65.4745(variogram 0.007101、mmd_u 0.01008、nbhd 0.04741、de_dir 0.3784):
| 解码 | 榜分 | variogram | mmd_u | nbhd | de_dir |
|---|---|---|---|---|---|
| δ-floor c=−0.3 | 65.4029 | 0.007131 | 0.01010 | 0.04772 | 0.3761 |
| δ-floor c=−0.5(PLAN 初值) | 65.3944 | 0.007124 | 0.01012 | 0.04774 | 0.3755 |
| δ-floor c=−0.8(=无限制,−0.8 未绑定) | 65.3928 | 0.007128 | 0.01013 | 0.04772 | 0.3756 |
| 1/p_nz 精确再居中(c=−0.5) | 未查分:δ 放大到 25、支持集损失 25%、g 饱和到 2.0,本地即判灾难 | — | — | — | — |
四档全部劣于父节点,且 variogram(目标指标)不降反升(0.00710→0.00713),mmd_u、nbhd 同向变差。de_score 逐位冻结在 0.3214(pb-neutral 生效),de_dir 的 ±0.003 是 g 复原 float32 舍入在近零 dp 基因上的秩抖动,非真实信号。
证否原因(机制证据):PLAN 假设"加性只移均值、保方差"不成立——实测 max|var_after/var_before−1| = 109(不是 ≈0)。因为位移是 nnz-only + 0 截断:零保持不变、负值截 0,这不是对分布的常数平移,方差照样被扭曲,和它想替换的乘性 f 同类。进一步,代数上"保方差的乘性再居中"恰好退化成加性位移,所以整个再居中族(乘性/加性)已探尽,父节点的乘性 f(含其 f² 方差缩放)反而是族内最优。支持集损失(非零→零)平均 0.5%、最大 7.2%,在 2% 阈内,不是主因;主因是加性位移本身扭曲了 nnz 幅值分布。
备选机制 1:James-Stein 收缩(父建议 #1)——证否
实现于 WITHINP_MODE="js"(T2_JS_N0/T2_JS_P/T2_JS_WMIN)。把硬 clip 的 f 换成按可靠度收缩 f→1:f=clip(r^(W·w_n),0.6,1.6)。两种可靠度:
- 尺寸可靠度(JS_P=0,w_n=n/(n+n0)):n0=15→65.4666、n0=30→65.4603;
- 逐基因 SNR 可靠度(JS_P=2,w=snr²/(snr²+n0),snr=|log r|/CV):n0=0.001→65.4376、n0=0.003→65.4351。
四档全部劣于父(65.4745),且 variogram 随收缩单调变差(0.00710→0.00712–0.00713)。JS_N0=0 逐位还原父节点(sha256 一致),证明是干净推广。结论:把 f 往 1 收=削弱再居中,单调变差,印证父的"全量乘性再居中 + 硬 clip [0.6,1.6]"是族内最优。
备选机制 2(提交):NBSMOOTH 邻域相干平滑(父建议 #2)
实现于 NBSMOOTH_ENABLE(默认开),位于 mix_converge 末尾、所有表达改动之后、坐标已定型处:
- 对最终输出坐标建 cKDTree,每个细胞取 k=15 最近邻(默认排除自身,
T2_NBSMOOTH_SELF=0); x_i ← (1−β)·x_i + β·mean_{j∈15NN(i)} x_j,nnz-only(零保持零,不做零→非零注入,遵节点 37 教训),负值截 0;- 池化伪批量中和:平滑后按基因
g=clip(pb_before/pb_after,0.5,2)整体复原,dp 逐位还原 → de_score/de_direction 结构性冻结; - 坐标不动 → shape_scale 三项逐位不变;
- β=0.35(默认)。单输入视图 b=None 走 copy_last 早退,NBSMOOTH 被
ia.size and ib.size门跳过,自动 no-op。
为什么与 PSEUDOSTEP 不同:PSEUDOSTEP 把细胞向 型均值 收缩(与位置无关),解耦了表达-位置配对,故恶化 nbhd(父节点已证否)。NBSMOOTH 把细胞向 空间邻域均值 收缩,正是 neighborhood_mmd 读取的"表达-位置相干"同方向:混合云把同型的 a 侧/b 侧细胞放在对齐坐标上,其邻域内表达散布大于真实单一中间期,轻度 β 平滑把邻域均值分布收紧向真值。
提交配置的机制证据(3 种子配对,A 半)
| seed | 父 49 | NBSMOOTH β=0.35 | Δ | nbhd(父→nb) | local_spatial(父→nb) | mmd_u(父→nb) | variogram(父→nb) |
|---|---|---|---|---|---|---|---|
| 0 | 65.4745 | 65.6959 | +0.221 | 0.04741→0.04507 | 61.81→63.02 | 0.01008→0.01034 | 0.007101→0.007117 |
| 1 | 65.1269 | 65.3320 | +0.205 | 0.04777→0.04549 | 61.62→62.80 | 0.00976→0.01006 | 0.007318→0.007320 |
| 2 | 65.0317 | 65.1917 | +0.160 | 0.04744→0.04514 | 61.79→62.98 | 0.01010→0.01057 | 0.007032→0.007043 |
3 种子均值 +0.196,方向全正。nbhd 3/3 改善(0.0474→0.0451,权重 25 + 结构门),local_spatial 3/3 约 +1.2;代价是 mmd_u 3/3 微升、cell_state 微降约 −0.3…−0.5。de_score/de_direction 逐位冻结(pb-neutral),shape_scale 逐位不变(坐标不动)——与 PLAN 的 expected_groups(cell_state、local_spatial)中 local_spatial 命中,cell_state 未命中(反被小幅牺牲,因 nbhd 权重远高于 mmd_u/variogram 的净损失)。
β 扫描(A 半 s0):0.1→65.560、0.2→65.633、0.3→65.681、0.35→65.696、0.4→65.701、0.5→65.670。峰值 0.35–0.4,0.5 掉头(cell_state 损失盖过 nbhd 收益)。取 β=0.35(近峰、对 cell_state 更保守,B 半更稳健)。
A 半→B 半迁移预期
净增益 +0.20(A 半)虽在 T2 ~1 分噪声内,但按 §5 应以配对差方向一致性判定——3 种子全正、nbhd 3/3 改善,是真实机制增益而非噪声。nbhd 改善源自空间相干这一通用性质,应迁移到 B 半(方法卡:插值两榜本地↔官网接近)。父 B 半 66.10,预期 NBSMOOTH B 半 ≈ 66.3。
关键参数
T2_WITHINP_MODE=mul(默认,父 49 乘性再居中,clip [0.6,1.6]、g [0.5,2.0])T2_NBSMOOTH=1(默认开)、T2_NBSMOOTH_BETA=0.35、T2_NBSMOOTH_K=15、T2_NBSMOOTH_SELF=0、T2_NBSMOOTH_NNZ=1、T2_NBSMOOTH_PBNEUTRAL=1- VPRECENT/JS 作为被证否机制留在代码后(
T2_WITHINP_MODE=add/js),默认不启用。
--ablate mechanism(机制关闭对照)
--ablate mechanism 设 NBSMOOTH_ENABLE=False、WITHINP_MODE="mul",其余管线(WIDENP clip、SIDEFRIM、NBHDCOH、DETR 等)不动 → 逐位还原父节点 49(sha256 = dabb16d3…,已验证 seed 0)。默认输出(NBSMOOTH 开)sha256 = e2a8efff…,与 ablate 不同 → mechanism_active=yes。
验证过 / 未验证
- 验证过:VPRECENT 4 解码 + JS 4 配置全劣于父(证否);NBSMOOTH 3 种子配对全正、nbhd 3/3 改善;default/ablate 的 sha256;vec-check 通过;单输入 no-op;无 RNG(确定);无绝对时间/视图路径依赖(视图无关)。查分 15 次(额度内)。
- 未验证:B 半(官网)实际分——只有 A 半;未在真实 final 视图(可能不同 bracket/细胞数)上跑,但机制数据驱动、单输入自动退化;β 更细网格(0.35–0.4 之间)与 k≠15 未扫(k=15 锁定为 nbhd 度量尺度)。
生物学知识来源
NBSMOOTH 不含硬编码的保留阶段测量值:k-NN 邻域、β、坐标全部由程序从 view 的输入表达与坐标现场计算。用到的通用机制知识仅为"空间邻近细胞表达相干"(组织内局部表达连续性,属细胞状态/空间转录组的通用性质,非某保留阶段的定量测量)。无外部数据、无保留阶段/基因型数据。
调研员的计划
| 名称 | VPRECENT:加性保方差再居中替代 WITHINP 乘性 f,修复 variogram 共变失真 |
|---|---|
| 动机 | 父节点 49 的 cell_state 组 60.96 是四组最弱,其中 variogram skill 0.565(7.06/12.5)是地板以上最弱指标。WITHINP 的乘性因子 f_g 把型内基因方差缩放 f_g²(f=1.3 → 方差 +69%,f=0.8 → −36%),扭曲了 variogram 度量的基因对共变结构 E|x_i−x_j|^0.5。父节点 ANALYSIS 明确建议'保型内方差的再居中'。历史增益全部来自支持集/检出率通道与 draw-noise 再居中(ANALYSIS lessons),幅度族已系统性证否,本方案是再居中机制的结构性改进(乘性→加性),不属于幅度族。 |
| 做法 | 步骤: 1. 在 WITHINP 位置,把乘性 f_g=clip((μ_full/μ_drawn)^w, lo, hi) 替换为加性位移 δ_g = μ_full(g) − μ_drawn(g)。对子集内每个细胞、每个 x_{ig}>0 的基因:x'{ig}=x{ig}+δ_g;若 x'{ig}≤0 则置 0(支持集只缩不扩,与 DETR 方向一致)。x{ig}=0 的不动。 2. 加性位移后重新计算池化伪批量 pb1,用现有 g=clip(pb0/pb1, 0.5, 2.0) 复原因子保 DE 通道中性(与父节点相同逻辑)。 3. 对 drawn 细胞数 <5 或来源阶段该类型 <10 细胞的子集跳过(沿用 WITHINP_MIN_DRAWN 阈值)。 4. 坐标、支持集的零→非零方向、DETR/NBHDCOH 置零管线全部不动。 5. 关键参数初值:δ_g 无额外超参(直接由 μ_full−μ_drawn 决定),仅保留 g-clip [0.5,2.0]。若加性位移导致过多支持集缩减(>2% 非零→零),加一个 δ 下限:δ_g = max(δ_g, −0.5×μ_drawn(g)),防止大负位移。搜索范围:该下限系数 ∈ {−0.3, −0.5, −0.8, 无限制}。 6. 单输入阶段退路:若只有一个输入阶段,无括号对侧,μ_full=μ_drawn,δ_g=0,机制自动退化为无操作。 7. 快速筛选:先 A 半 seed 0 跑 vec-score,看 variogram raw 是否 <0.007047(父值)且 de_score 不变;再用 seed 0/1/2 配对确认。预期提升在噪声内(<1 分),必须靠配对差方向一致性判定。 |
| 风险 | 1. 加性位移使部分小表达非零值变零,支持集缩减过多 → variogram 反而恶化(类似密集支持集变化的灾难)。Engineer 应在第一次查分后统计非零→零的基因×细胞数,若 >2% 立即启用 δ 下限保护。2. 加性位移对高表达基因(μ_drawn>>δ)几乎无效、对低表达基因(μ_drawn≈|δ|)影响大,可能引入低表达基因的异质性 → 检查低表达基因子集的 variogram 贡献。3. 预期收益极小(≤0.05 分),可能完全在噪声内;若 3 种子配对差方向不一致(非全正),应判定无效并回退。4. pb-neutral 的 g 复用在加性位移后可能不精确(因为加性改变了池化均值的计算方式),需验证 dp 残差仍在 float32 舍入级。 |
代码改动?这个节点的程序和父节点程序的逐行差别:绿色是新增,红色是删除。
对比:父节点版本 29a1a6241c。改动的文件:solution/METHOD.md +59 −119、solution/README.md +8 −1、solution/run.py +240 −18
diff --git a/solution/METHOD.md b/solution/METHOD.mdindex 4fc0556..9a994a6 100644--- a/solution/METHOD.md+++ b/solution/METHOD.md@@ -1,138 +1,78 @@-WIDENP:放宽 WITHINP 再居中 clip f→[0.6,1.6]、伪批量复原 clip g→[0.5,2.0],更强移除抽样漂移且令 dp 复原精确;PLAN 的 PSEUDOSTEP 经 6 次查分全证否。+NBSMOOTH:把非零表达向 15-NN 邻域均值轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动)提升邻域相干;PLAN 的加性 VPRECENT 与 James-Stein 收缩均证否。 -## 概要+## 本节点做了什么(improve,父节点 49) -- family_id: T2EI-01(提交机制 WIDENP,属 draw-noise 再居中族);PLAN 指定的 T2EI-09(PSEUDOSTEP)已在榜上证否,代码保留在 `T2_PSEUDOSTEP=0` 默认关。-- 提交机制 **WIDENP**:在父节点 47 全部管线之上,只把 WITHINP(节点 44 的抽样漂移再居中)的两个 clip 放宽——- - 型×侧再居中因子 `f` 的 clip:`[0.8, 1.25] → [0.6, 1.6]`(`WITHINP_CLIP`);- - 池化伪批量复原因子 `g` 的 clip:`[0.9, 1.1] → [0.5, 2.0]`(`WITHINP_G_CLIP`)。-- `--ablate mechanism` 把两个 clip 还原到父值并强制 `PSEUDOSTEP=False`,输出与父节点 47 **逐位一致**(sha256 已验证,见下)。-- 纯 CPU,`EXECUTION.json = {"gpu": false}`;运行 ~1.9 s / ~0.6 GB,远低于 limits(28 GB / 30 min)。+父节点 49(WIDENP,榜分 66.10 / 3 种子 65.66)四组最弱是 **cell_state**(A 半 59.6),其中 **variogram**(skill≈0.55)是地板以上最弱指标。PLAN 指定机制 **VPRECENT**:把 WITHINP 的乘性再居中因子 f_g 换成加性、"保方差" 的逐基因位移 δ_g=μ_full−μ_drawn(只作用于非零值、≤0 截 0)。 -## 机制(WIDENP)如何工作+**PLAN 机制被证否**,改交父节点 ANALYSIS 建议 #2 的备选机制 **NBSMOOTH**(针对 local_spatial/nbhd,权重 25 最高)。 -WITHINP(节点 44)对每个「类型 × 侧(a/b)」的输出子集,用一个有界乘性因子-`f_g = clip(((μ_full+ε)/(μ_drawn+ε))^w, lo, hi)` 把**被抽中子集**的逐基因均值回正到该类型在来源-阶段的**全阶段**均值 μ_full,从而移除有限抽样带来的漂移(drawn 子集均值 ≠ 全阶段均值);随后用-一个逐基因的统一因子 `g = clip(pb0/pb1, glo, ghi)` 复原**池化伪批量**,使 dp(= pb_out − pb_ref,-de_score / de_direction 的输入)保持不变,机制的可见效应纯粹是「固定池化均值下、基因质量在类型/细胞-之间的再分配」——即 cell_state 通道(mmd_u / variogram / neighborhood_mmd)。+## PLAN 机制 VPRECENT(加性再居中)——证否 -父节点的诊断显示两个 clip 都在**触界**:`f_dev_max` 被夹在 0.25(真实漂移可达 0.6),`g_min/g_max`-同时贴在 0.9 和 1.1(`g_dev_mean=0.0487`)。这意味着:-1. `f` 触界 ⇒ 漂移大的类型×侧(多为小 drawn 子集)**没被充分回正**,残余抽样噪声留在 cell_state 通道;-2. `g` 触界 ⇒ 池化伪批量**复原不完全**,dp 有残余漂移,父节点 ANALYSIS 明确点名这会「使 de_direction 受损」。+实现于 `WITHINP_MODE="add"`(`T2_WITHINP_MODE=add` 复现)。δ_g=μ_full−μ_drawn,可加下限 δ_g≥c·μ_drawn,nnz-only、x+δ≤0→0,之后仍走原池化伪批量复原 g=clip(pb0/pb1,0.5,2)。A 半 seed 0,父锚点 **65.4745**(variogram 0.007101、mmd_u 0.01008、nbhd 0.04741、de_dir 0.3784): -WIDENP 同时放宽两个 clip:`f[0.6,1.6]` 允许回正最多 60% 的漂移(移除更多 draw-noise),`g[0.5,2.0]`-让 dp 复原**精确**(g 不再触界,实测 g∈[0.88,1.50],dp 复原残差落到 float32 舍入级)。这是一个因果清晰、-低风险的改动:它只加强一个已被证明有效的机制(WITHINP),不改支持集、不改坐标、不动 DE 秩通道的结构。+| 解码 | 榜分 | variogram | mmd_u | nbhd | de_dir |+|---|---|---|---|---|---|+| δ-floor c=−0.3 | 65.4029 | 0.007131 | 0.01010 | 0.04772 | 0.3761 |+| δ-floor c=−0.5(PLAN 初值) | 65.3944 | 0.007124 | 0.01012 | 0.04774 | 0.3755 |+| δ-floor c=−0.8(=无限制,−0.8 未绑定) | 65.3928 | 0.007128 | 0.01013 | 0.04772 | 0.3756 |+| 1/p_nz 精确再居中(c=−0.5) | 未查分:δ 放大到 25、支持集损失 25%、g 饱和到 2.0,本地即判灾难 | — | — | — | — | -## 关闭机制对照(`--ablate mechanism`)+四档全部劣于父节点,且 **variogram(目标指标)不降反升**(0.00710→0.00713),mmd_u、nbhd 同向变差。de_score 逐位冻结在 0.3214(pb-neutral 生效),de_dir 的 ±0.003 是 g 复原 float32 舍入在近零 dp 基因上的秩抖动,非真实信号。 -- `--ablate mechanism` ⇒ `WITHINP_CLIP=(0.8,1.25)`、`WITHINP_G_CLIP=(0.9,1.1)`、`PSEUDOSTEP=False`。-- 实测:`preds/final_ablate.h5ad` 与父节点 47 输出 `preds/parent_off.h5ad` **sha256 逐位一致**- (`5787c387dd37ebb370ea768fa124dbf43115bcb075b85dbf12a40853e8b40d50`)。-- 因此 `mechanism_active = yes`(默认输出 `dabb16d3…` ≠ ablate 输出 `5787c387…`),关掉后榜分差 = WIDENP 的净收益。+**证否原因(机制证据)**:PLAN 假设"加性只移均值、保方差"不成立——实测 `max|var_after/var_before−1| = 109`(不是 ≈0)。因为位移是 **nnz-only + 0 截断**:零保持不变、负值截 0,这不是对分布的常数平移,方差照样被扭曲,和它想替换的乘性 f 同类。进一步,代数上"保方差的乘性再居中"恰好退化成加性位移,所以整个再居中族(乘性/加性)已探尽,父节点的乘性 f(含其 f² 方差缩放)反而是族内最优。支持集损失(非零→零)平均 0.5%、最大 7.2%,在 2% 阈内,不是主因;主因是加性位移本身扭曲了 nnz 幅值分布。 -## 机制生效的证据(A 半,seed 0/1/2 配对;baseline = 父节点 47)+## 备选机制 1:James-Stein 收缩(父建议 #1)——证否 -WIDENP 相对父节点的四组分与逐指标变化(raw,越小越好除 de_*):+实现于 `WITHINP_MODE="js"`(`T2_JS_N0/T2_JS_P/T2_JS_WMIN`)。把硬 clip 的 f 换成按可靠度收缩 f→1:`f=clip(r^(W·w_n),0.6,1.6)`。两种可靠度: -| seed | 榜分 base→WIDENP | Δ | de_direction | mmd_u | variogram | neighborhood_mmd |-|---|---|---|---|---|---|---|-| 0 | 65.447 → 65.475 | +0.028 | 0.3771→0.3784 | 0.01010→0.01008 | 0.007112→0.007101 | 0.04749→0.04741 |-| 1 | 65.079 → 65.124 | +0.045 | 0.3697→0.3722 | 0.00980→0.00976 | 0.007324→0.007318 | 0.04791→0.04777 |-| 2 | 65.025 → 65.031 | +0.006 | 0.3723→0.3715 | 0.01013→0.01010 | 0.007011→0.007032 | 0.04754→0.04744 |-| 均值 | 65.184 → 65.210 | **+0.026** | 2/3 改善 | **3/3 改善** | 2/3 改善 | **3/3 改善** |+- **尺寸可靠度**(JS_P=0,w_n=n/(n+n0)):n0=15→65.4666、n0=30→65.4603;+- **逐基因 SNR 可靠度**(JS_P=2,w=snr²/(snr²+n0),snr=|log r|/CV):n0=0.001→65.4376、n0=0.003→65.4351。 -- **哪些细胞被改变**:所有属于「有 ≥5 个 drawn 细胞、且其来源阶段该类型 ≥10 细胞」的类型×侧子集的细胞- (proxy:43 个类型×侧被回正,覆盖共有类型与单侧类型)。WIDENP 只改这些子集的**表达值**(逐基因乘性回正 +- 统一 g 复原),不改支持集(不置零/不新增非零)、不改坐标。-- **四组分变化**:cell_state(mmd_u 三种子全改善、variogram 2/3)、local_spatial(neighborhood_mmd 三种子- 全改善,是最一致的信号——空间上聚簇的同类型细胞表达更相干)、expression_change(de_direction 2/3 改善,- 来自 g 放宽后 dp 精确复原)、shape_scale 逐位不动(WIDENP 不碰坐标)。-- de_score 三种子逐位不变(0.3214):dp 精确复原 ⇒ DE 秩/符号通道结构性冻结,与设计一致。+四档全部劣于父(65.4745),且 variogram 随收缩单调变差(0.00710→0.00712–0.00713)。`JS_N0=0` 逐位还原父节点(sha256 一致),证明是干净推广。结论:把 f 往 1 收=削弱再居中,单调变差,印证父的"全量乘性再居中 + 硬 clip [0.6,1.6]"是族内最优。 -幅度小(+0.026 A 半,在 T2 ~1 分噪声内),但 3 种子配对差全为正、且 nbhd/mmd_u 逐指标 3/3 一致改善,-是真实的小增益而非单次噪声(配对比较抵消了 seed 噪声,比绝对分敏感得多)。+## 备选机制 2(提交):NBSMOOTH 邻域相干平滑(父建议 #2) -## f-clip 宽度扫描(A 半 seed 0,均配 g[0.5,2.0])+实现于 `NBSMOOTH_ENABLE`(默认开),位于 mix_converge 末尾、所有表达改动之后、坐标已定型处: -| f-clip | 榜分 | Δ vs base | de_direction | variogram | nbhd |-|---|---|---|---|---|---|-| [0.8,1.25](父,g[0.9,1.1]) | 65.447 | — | 0.3771 | 0.007112 | 0.04749 |-| [0.8,1.25](仅 g 放宽[0.5,2.0]) | 65.446 | −0.001 | 0.3771 | 0.007114 | 0.04748 |-| [0.7,1.4] | 65.460 | +0.013 | 0.3776 | 0.007119 | 0.04745 |-| **[0.6,1.6](提交)** | **65.475** | **+0.028** | 0.3784 | 0.007101 | 0.04741 |-| [0.5,1.8] | 65.475 | +0.028 | 0.3782 | 0.007109 | 0.04740 |-| [0.4,2.0] | 65.481 | +0.034 | 0.3782 | 0.007100 | 0.04738 |--- 只放宽 g(不放宽 f):−0.001,**无效**——说明收益来自 f 放宽(更强回正),g 放宽只是让 dp 复原精确、- 顺带小幅改善 de_direction。-- f 越宽越好但**在 [0.6,1.6] 处饱和**([0.6,1.6]→[0.4,2.0] 仅 +0.006,在噪声内)。选 [0.6,1.6] 的理由:- 它是父节点 ANALYSIS next_suggestion #3 明确建议的宽度,且避免了 [0.4,2.0] 对 5–10 细胞小子集做- ≤2.5× 激进回正可能带来的「拟合抽样噪声 / 抹掉真实型内方差」风险(更宽的 clip 只影响漂移最大的小子集,- 其漂移 increasingly 由抽样噪声而非真实漂移主导)。--## PLAN 机制 PSEUDOSTEP 被证否(6 次查分,A 半 seed 0,baseline=父 65.447)--PLAN 指定:每个输出细胞 `x' = x + λ·(μ_tgt − x)`,`μ_tgt=(1−t)μ_a+tμ_b`(全阶段均值),仅 DE 基因-(|Δ|≥0.25),位移后精确中和池化伪批量,坐标不动。实现于 `T2_PSEUDOSTEP=1`,默认关。逐指标 points/raw:--| 组合 | 榜分 | Δ | de_score | de_direction | mmd_u | variogram | neighborhood_mmd |+- 对最终输出坐标建 cKDTree,每个细胞取 **k=15** 最近邻(默认排除自身,`T2_NBSMOOTH_SELF=0`);+- `x_i ← (1−β)·x_i + β·mean_{j∈15NN(i)} x_j`,**nnz-only**(零保持零,不做零→非零注入,遵节点 37 教训),负值截 0;+- **池化伪批量中和**:平滑后按基因 `g=clip(pb_before/pb_after,0.5,2)` 整体复原,dp 逐位还原 → de_score/de_direction 结构性冻结;+- **坐标不动** → shape_scale 三项逐位不变;+- β=0.35(默认)。单输入视图 b=None 走 copy_last 早退,NBSMOOTH 被 `ia.size and ib.size` 门跳过,自动 no-op。++**为什么与 PSEUDOSTEP 不同**:PSEUDOSTEP 把细胞向 **型均值** 收缩(与位置无关),解耦了表达-位置配对,故恶化 nbhd(父节点已证否)。NBSMOOTH 把细胞向 **空间邻域均值** 收缩,正是 neighborhood_mmd 读取的"表达-位置相干"同方向:混合云把同型的 a 侧/b 侧细胞放在对齐坐标上,其邻域内表达散布大于真实单一中间期,轻度 β 平滑把邻域均值分布收紧向真值。++### 提交配置的机制证据(3 种子配对,A 半)++| seed | 父 49 | NBSMOOTH β=0.35 | Δ | nbhd(父→nb) | local_spatial(父→nb) | mmd_u(父→nb) | variogram(父→nb) | |---|---|---|---|---|---|---|---|-| λ=0.05, nnz-only, pb-neutral | 65.416 | −0.031 | 0.3214 | 0.3771 | 0.01007 | 0.007119 | 0.04778 |-| λ=0.10, nnz-only, pb-neutral | 65.376 | −0.071 | 0.3214 | 0.3771 | 0.01006 | 0.007125 | 0.04810 |-| λ=0.15, nnz-only, pb-neutral | 65.330 | −0.117 | 0.3214 | 0.3771 | 0.01007 | 0.007131 | 0.04842 |-| λ=0.10, **关 pb-neutral** | 64.949 | −0.498 | 0.3214 | 0.3765 | 0.01062 | 0.007078 | 0.05045 |-| λ=0.10, **dense(改支持集)** | 61.785 | −3.662 | 0.3214 | 0.3766 | 0.01125 | 0.017603 | 0.05171 |-| λ=0.10, dense + 关 pb-neutral | 61.968 | −3.479 | 0.3214 | 0.3798 | 0.01065 | 0.019357 | 0.04956 |--证否结论与教训:-1. **净效应全负**,且随 λ 单调变差(−0.031→−0.071→−0.117):型内均值方向的幅度收缩对 mmd_u 只有边际改善- (skill 0.6403→0.6409,+0.01 pts,因为 α=5 收敛位移已把 within-type std 压到 0.91,分布已接近目标紧致度,- 再收缩边际收益递减),却**单调恶化 variogram 与 neighborhood_mmd**(收缩把细胞表达拉向类型均值,破坏了- 「表达-位置配对」,正是 nbhd 读的统计量)。λ≥0.10 时 nbhd raw 恶化 +6.1e-4 / +9.3e-4,**破 PLAN 的 +5e-4 否决线**。-2. **pb-neutral 是必需的**:关掉后 dp_dev 从 6e-6 跳到 0.09,mmd_u 与 nbhd 明显恶化,−0.50。-3. **nnz-only(保支持集)是关键**:dense 位移(改支持集,零→非零)令 variogram 崩溃 2.5×(0.0071→0.0176/0.0194),- −3.5…−3.7。这直接印证 PLAN risk #2,也解释了为何本族一律用 nnz-only。-4. **DE 通道在 pb-neutral 下结构性冻结**:de_score 6 次全为 0.3214,de_direction 仅在关 pb-neutral(dp 漂移)时- 才动,证明「精确中和池化伪批量 ⇒ de_score/de_direction 不变」的设计判断成立(也因此 PLAN 把 expression_change- 列进 expected_groups 是不成立的:精确保 pb 时该组不可能动)。-5. 与树史一致:VARISO(19)/PAIR(11)/RESID/AMPSHRINK 等**幅度类**型内方差改造反复证否,variogram 卡在 ~0.55;- cell_state 的历史增益全部来自**支持集/检出率通道**(DETR 37、NBHDCOH 41/43)与 **draw-noise 再居中**(WITHINP 44)。- WIDENP 正落在后者(已被证明有效的通道)上,故取它作备选。+| 0 | 65.4745 | 65.6959 | **+0.221** | 0.04741→0.04507 | 61.81→63.02 | 0.01008→0.01034 | 0.007101→0.007117 |+| 1 | 65.1269 | 65.3320 | **+0.205** | 0.04777→0.04549 | 61.62→62.80 | 0.00976→0.01006 | 0.007318→0.007320 |+| 2 | 65.0317 | 65.1917 | **+0.160** | 0.04744→0.04514 | 61.79→62.98 | 0.01010→0.01057 | 0.007032→0.007043 |++3 种子均值 +0.196,**方向全正**。**nbhd 3/3 改善**(0.0474→0.0451,权重 25 + 结构门),local_spatial 3/3 约 +1.2;代价是 mmd_u 3/3 微升、cell_state 微降约 −0.3…−0.5。de_score/de_direction 逐位冻结(pb-neutral),shape_scale 逐位不变(坐标不动)——与 PLAN 的 expected_groups(cell_state、local_spatial)中 local_spatial 命中,cell_state 未命中(反被小幅牺牲,因 nbhd 权重远高于 mmd_u/variogram 的净损失)。++β 扫描(A 半 s0):0.1→65.560、0.2→65.633、0.3→65.681、0.35→65.696、0.4→65.701、0.5→65.670。峰值 0.35–0.4,0.5 掉头(cell_state 损失盖过 nbhd 收益)。取 **β=0.35**(近峰、对 cell_state 更保守,B 半更稳健)。++### A 半→B 半迁移预期++净增益 +0.20(A 半)虽在 T2 ~1 分噪声内,但按 §5 应以配对差方向一致性判定——3 种子全正、nbhd 3/3 改善,是真实机制增益而非噪声。nbhd 改善源自空间相干这一通用性质,应迁移到 B 半(方法卡:插值两榜本地↔官网接近)。父 B 半 66.10,预期 NBSMOOTH B 半 ≈ 66.3。++## 关键参数++- `T2_WITHINP_MODE=mul`(默认,父 49 乘性再居中,clip [0.6,1.6]、g [0.5,2.0])+- `T2_NBSMOOTH=1`(默认开)、`T2_NBSMOOTH_BETA=0.35`、`T2_NBSMOOTH_K=15`、`T2_NBSMOOTH_SELF=0`、`T2_NBSMOOTH_NNZ=1`、`T2_NBSMOOTH_PBNEUTRAL=1`+- VPRECENT/JS 作为被证否机制留在代码后(`T2_WITHINP_MODE=add`/`js`),默认不启用。++## --ablate mechanism(机制关闭对照)++`--ablate mechanism` 设 `NBSMOOTH_ENABLE=False`、`WITHINP_MODE="mul"`,其余管线(WIDENP clip、SIDEFRIM、NBHDCOH、DETR 等)不动 → **逐位还原父节点 49**(sha256 = dabb16d3…,已验证 seed 0)。默认输出(NBSMOOTH 开)sha256 = e2a8efff…,与 ablate 不同 → mechanism_active=yes。 ## 验证过 / 未验证 -**已验证**:-- 默认输出 = 已打分的 w_both 配置(seed 0/1/2 默认运行与 env 覆盖运行 sha256 逐位一致)。-- `--ablate mechanism` 逐位还原父节点 47(sha256 一致)。-- **视图无关**:伪装视图(所有阶段时间 +1 天平移 7.75/9.0→8.25、manifest 键顺序打乱、换随机路径 /tmp)- 输出与真实视图 **逐位一致**(sha256 `dabb16d3…`,`cmp` BYTE-IDENTICAL)。机制只用相对量(t=(target−a)/(b−a)、- 数据算出的类型均值),不依赖绝对时间/路径/键序。-- **确定性**:同 seed 重跑逐位一致;seed 0/1/2 各异(用 `np.random.default_rng`,无全局随机态依赖)。-- **单输入退路**:`interp_bracket` 无括号时返回 b=None,main() 走 copy_last 提前返回,mix_converge(含 WIDENP- 与 PSEUDOSTEP)根本不被调用;WIDENP 是 WITHINP 的 clip,本身要求 ia.size 且 ib.size。-- `vec-check` 通过;细胞数 = max_cells(5000),坐标有限,X 无 NaN/Inf,基因顺序 = genes.txt。--**未验证**:-- WIDENP 的收益(A 半 +0.026)在 B 半正式分上的兑现幅度未测(父节点 SIDEFRIM 曾 A 半 +0.14→官网 +0.07,- 坐标类本地收益被低估/高估都有可能);量级在 T2 ~1 分噪声内,只凭 3 种子配对一致性判定为真实小增益。-- 真实括号(E6.75+E8.0 之外的其它视图)上 f 触界程度可能不同,clip 宽度的最优值可能平移;但机制方向- (放宽 f 移除更多 draw-noise)与具体括号无关。-- PSEUDOSTEP 未做 3 种子(首次查分即触发 nbhd 否决线 + 全分项恶化,按 PLAN risk #1/#3 与本节点判无效门槛停)。--## 知识来源--无外部生物学知识。WIDENP 与 PSEUDOSTEP 都是纯统计机制(抽样漂移再居中 / 伪时间幅度收缩),只用视图内-数据(表达、celltype 标签、阶段时间差)现场计算,不引入任何保留阶段/基因型的测量值、文献比例或记忆知识。--## 下一步建议--- cell_state:variogram 仍是最弱指标(skill 0.5515);WIDENP 只微改它。可试「更细粒度的 draw-noise 移除」——- 按类型×侧再居中的同时保留全阶段型内方差(当前 f 回正会连带缩放方差),或对 WITHINP_MIN_DRAWN 小子集用- 收缩估计(James-Stein 式)而非硬 clip。-- local_spatial:nbhd 对「同类型细胞表达相干」最敏感(WIDENP 3/3 改善它);可试在 NBHDCOH 的邻域相干置零之外,- 对**非零值**也做轻度邻域相干平滑(保池化均值),但须守 nbhd 否决线与 d2_shape。-- 幅度类型内方差改造(PSEUDOSTEP/VARISO/PAIR/RESID/AMPSHRINK)已系统性证否,不建议再搜该族。+- **验证过**:VPRECENT 4 解码 + JS 4 配置全劣于父(证否);NBSMOOTH 3 种子配对全正、nbhd 3/3 改善;default/ablate 的 sha256;vec-check 通过;单输入 no-op;无 RNG(确定);无绝对时间/视图路径依赖(视图无关)。查分 15 次(额度内)。+- **未验证**:B 半(官网)实际分——只有 A 半;未在真实 final 视图(可能不同 bracket/细胞数)上跑,但机制数据驱动、单输入自动退化;β 更细网格(0.35–0.4 之间)与 k≠15 未扫(k=15 锁定为 nbhd 度量尺度)。++## 生物学知识来源++NBSMOOTH 不含硬编码的保留阶段测量值:k-NN 邻域、β、坐标全部由程序从 view 的输入表达与坐标现场计算。用到的通用机制知识仅为"空间邻近细胞表达相干"(组织内局部表达连续性,属细胞状态/空间转录组的通用性质,非某保留阶段的定量测量)。无外部数据、无保留阶段/基因型数据。diff --git a/solution/README.md b/solution/README.mdindex 4df56cc..485b3f9 100644--- a/solution/README.md+++ b/solution/README.md@@ -1,4 +1,11 @@-# mix + 表达收敛管线 + DETR / DETR_EXT / NBHDCOH(_SHARED) / WITHINP + SIDEFRIM + WIDENP(T2:embryo:val_interp)+# mix + 表达收敛管线 + DETR / DETR_EXT / NBHDCOH(_SHARED) / WITHINP + SIDEFRIM + WIDENP + NBSMOOTH(T2:embryo:val_interp)++> **本节点(51)提交机制 = NBSMOOTH**(详见 METHOD.md):在父节点 49(WIDENP,乘性再居中)之上,+> 对最终非零表达向 15-NN 邻域均值做轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动),+> 提升 neighborhood_mmd 读取的表达-位置相干。A 半 3 种子配对 vs 父 +0.221/+0.205/+0.160(全正,+> nbhd 3/3 改善、local_spatial +1.2)。`--ablate mechanism`(或 `T2_NBSMOOTH=0`)逐位还原父节点 49。+> PLAN 指定的加性 VPRECENT 与备选 James-Stein 收缩均经多档查分证否(见 METHOD.md),代码保留在+> `T2_WITHINP_MODE=add/js` 后默认不启用。以下为父节点 49 及上游管线的历史说明。 父节点 47 管线原样保留(mix 混抽 + α=5 类型级收敛位移 + 软阈值基因权重 + 相关扩散 η=1/asym=0.85 + λ=6 投影加权 + β=0.2 型内配对收缩 + aniso 坐标整形 damp=1.25 + SIDEFRIMdiff --git a/solution/run.py b/solution/run.pyindex ec46ccc..3d79dbf 100644--- a/solution/run.py+++ b/solution/run.py@@ -8,6 +8,39 @@ exp(log r_a + SCALE_DAMP·t·Δlog r), and draws cells stratified by type: round(t·n) from the later stage, the rest from the earlier one. Coordinates travel with the cells. n is log-linear in t, clipped to the board range. +This node (51, NBSMOOTH, family T2EI-01): the PLAN mechanism (VPRECENT: replace+WITHINP's multiplicative recentering factor f_g with an ADDITIVE, supposedly+variance-preserving per-gene shift δ_g=μ_full−μ_drawn applied to nnz entries and+clipped at 0) was implemented and FALSIFIED on the board over 4 decodes (A-half+seed 0, parent anchor 65.4745): δ-floor −0.3 / −0.5 / −0.8(=none) → 65.4029 /+65.3944 / 65.3928, all WORSE than parent on every channel (variogram 0.00710→+0.00713, mmd_u 0.01008→0.0101+, nbhd 0.04741→0.0477+). The variance-preservation+premise FAILED (max|var_after/var_before−1| = 109, not ≈0): an nnz-only shift+with 0-clip is NOT a constant shift (zeros stay, negatives clip), so it distorts+variance exactly like the multiplicative f it replaced — and algebraically a+variance-preserving multiplicative recenter IS the additive shift, so the whole+recentering family is exhausted. The 1/p_nnz exact-recenter decode was+catastrophic (δ up to 25, 25% support loss). The parent-suggested James-Stein+shrinkage of f (size-reliability JS_P=0 n0∈{15,30} → 65.467/65.460; per-gene+SNR-reliability JS_P=2 n0∈{0.001,0.003} → 65.438/65.435) was ALSO falsified:+shrinking f toward 1 reduces recentering and monotonically worsens variogram,+confirming the parent's full multiplicative recentering is the family optimum.+The SUBMITTED alternative is NBSMOOTH (parent next_suggestion #2): a mild+spatial-coherence smoothing of the final nonzero expression toward each cell's+k=15-NN neighborhood average, x_i ← (1−β)x_i + β·mean_{j∈15NN(i)} x_j (nnz-only,+pooled-pseudobulk neutralized, coords fixed), β=0.35. Unlike PSEUDOSTEP (which+contracted toward the TYPE mean regardless of position and DECOUPLED expression+from position, worsening nbhd), NBSMOOTH contracts each cell toward its SPATIAL+neighbors — the same-direction coupling neighborhood_mmd rewards. A-half 3-seed+paired vs parent: +0.221/+0.205/+0.160 (mean +0.196, ALL positive); nbhd+improves 3/3 (0.0474→0.0451) and local_spatial +1.2 3/3 (61.8→63.0), the+highest-weight metric (25 pts + structure gate), at a small mmd_u/cell_state+cost (−0.3..−0.5). de_score/de_direction structurally frozen (exact pb restore)+and shape_scale bit-untouched (coords never move). β sweep peaks at 0.35–0.4+(β=0.5 turns down as cell_state loss overtakes the nbhd gain). --ablate+mechanism (or T2_NBSMOOTH=0) disables NBSMOOTH and reproduces parent node 49+bit-for-bit (sha256-verified). See METHOD.md.+ This node (49, WIDENP, family T2EI-01): the PLAN mechanism (PSEUDOSTEP: move every output cell a small step λ toward its type's interpolated target mean μ_tgt=(1−t)μ_a+tμ_b, DE genes only, exact pooled-pseudobulk neutralization,@@ -671,6 +704,71 @@ WITHINP_ALLTYPES = os.environ.get("T2_WITHINP_ALLTYPES", "1") == "1" WITHINP_PBNEUTRAL = os.environ.get("T2_WITHINP_PBNEUTRAL", "1") == "1" WITHINP_G_CLIP = (float(os.environ.get("T2_WITHINP_GLO", "0.5")), float(os.environ.get("T2_WITHINP_GHI", "2.0")))+# VPRECENT (mechanism of this node 51, family T2EI-01): replace WITHINP's+# multiplicative recentering factor f_g with an ADDITIVE, variance-preserving+# per-gene shift δ_g = μ_full(g) − μ_drawn(g). The multiplicative f rescales+# each subset's within-type gene variance by f² (f=1.6 → +156%, f=0.6 → −64%),+# distorting the gene-pair difference structure the variogram reads (parent's+# weakest above-floor metric, skill 0.565); the additive shift moves ONLY the+# mean, keeping the drawn subset's variance bit-exact wherever no 0-clipping+# occurs. Applied to post-displacement nnz entries only: x' = max(x + δ, 0) for+# x > 0, zeros untouched — the support can only SHRINK (nonzero→zero), the+# toxic zero→nonzero direction (node-37 lesson) is structurally impossible.+# δ floor: δ_g ≥ VPRE_FLOOR · μ_drawn(g) bounds support loss for genes whose+# drawn mean drifted far above the full mean (VPRE_FLOOR=999 → unlimited).+# VPRE_PNZ=1 scales δ by 1/p_nnz so the subset's ALL-CELL mean is recentered+# exactly (literal PLAN decode VPRE_PNZ=0 shifts only nnz values, correcting+# the all-cell mean by p_nnz·δ). The pooled-pseudobulk restore g afterwards is+# unchanged, so the DE-rank channel stays structurally frozen.+# WITHINP_MODE="mul" (or --ablate mechanism) restores the parent's+# multiplicative path bit-for-bit. Single-input views never reach this block+# (b is None → copy_last early return); if only one side has drawn cells,+# μ_full = μ_drawn per subset ⇒ δ = 0 ⇒ automatic no-op.+WITHINP_MODE = os.environ.get("T2_WITHINP_MODE", "mul") # "add" | "mul" | "js"+VPRE_FLOOR = float(os.environ.get("T2_VPRE_FLOOR", "-0.5"))+VPRE_PNZ = os.environ.get("T2_VPRE_PNZ", "0") == "1"+# JS (submitted ALTERNATIVE mechanism of this node 51, family T2EI-01, after the+# PLAN's additive VPRECENT was falsified): the parent ANALYSIS next_suggestion #1+# — replace WITHINP's HARD multiplicative clip f=clip(r^W,LO,HI) with a James-+# Stein-style shrinkage that pulls f toward 1 by a per-subset RELIABILITY weight,+# so small / noisy type×side drawn subsets (whose drift estimate μ_full−μ_pre is+# mostly sampling error and whose f² variance scaling distorts the gene-pair+# difference structure the variogram reads) are recentered LESS, preserving their+# real within-type variance, while large reliable subsets keep the parent's full+# recentering. reliability w_n = n_drawn/(n_drawn + JS_N0·(σ_g/μ_g)^JS_P):+# JS_P=0 → pure size reliability (small subsets shrunk); JS_P=2 → per-gene+# signal-to-noise reliability (genes whose drift is small vs their within-type CV+# are shrunk toward no-op, genes with reliable drift keep full f). JS_N0=0+# reduces EXACTLY to the parent multiplicative f (w_n=1). Support bit-preserved+# (pure positive scaling), coordinates untouched, pb-neutral restore unchanged so+# the DE-rank channel stays structurally frozen.+JS_N0 = float(os.environ.get("T2_JS_N0", "10.0"))+JS_P = float(os.environ.get("T2_JS_P", "0.0"))+JS_WMIN = float(os.environ.get("T2_JS_WMIN", "0.0"))+# NBSMOOTH (second ALTERNATIVE mechanism of this node 51, family T2EI-01, parent+# ANALYSIS next_suggestion #2): a MILD spatial-coherence smoothing of the final+# nonzero expression toward each cell's k-NN (k=15, the exact scale the+# neighborhood_mmd metric reads) neighborhood average. Unlike PSEUDOSTEP (which+# contracted cells toward their TYPE mean regardless of position and thereby+# DECOUPLED expression from position, worsening nbhd), NBSMOOTH contracts each+# cell toward its SPATIAL neighbors — the same-direction coupling nbhd rewards+# (spatially-close cells become expression-coherent). The mixed cloud places+# a-side and b-side cells of a type at aligned coordinates; their within-+# neighborhood expression scatter exceeds a real single intermediate stage's, so+# a mild β-blend toward the local mean should tighten the neighborhood-average+# distribution toward the truth. nnz-only (zeros preserved → no zero→nonzero+# injection, node-37 lesson; support can only stay) and pooled-pseudobulk+# neutralized (one uniform per-gene rescale restores dp → de_score/de_direction+# structurally frozen). Coordinates never move. β=0 (or T2_NBSMOOTH=0, or+# --ablate mechanism) is an exact no-op reproducing the parent bit-for-bit.+NBSMOOTH_ENABLE = os.environ.get("T2_NBSMOOTH", "1") == "1"+NBSMOOTH_BETA = float(os.environ.get("T2_NBSMOOTH_BETA", "0.35"))+NBSMOOTH_K = int(os.environ.get("T2_NBSMOOTH_K", "15"))+NBSMOOTH_SELF = os.environ.get("T2_NBSMOOTH_SELF", "0") == "1"+NBSMOOTH_NNZ = os.environ.get("T2_NBSMOOTH_NNZ", "1") == "1"+NBSMOOTH_PBNEUTRAL = os.environ.get("T2_NBSMOOTH_PBNEUTRAL", "1") == "1"+NBSMOOTH_G_CLIP = (float(os.environ.get("T2_NBSMOOTH_GLO", "0.5")),+ float(os.environ.get("T2_NBSMOOTH_GHI", "2.0"))) # AMPSHRINK (mechanism of this node 39, family T2EI-01): DETR repaired the # zero/nonzero SUPPORT channel; the nnz AMPLITUDE channel is still frozen at # the source stage (a-side cells keep the E_a nnz-value distribution, b-side@@ -1881,7 +1979,14 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s "withinp_drift_rel_med": None, "withinp_alltypes": bool(WITHINP_ALLTYPES), "withinp_pbneutral": None, "withinp_g_min": None, "withinp_g_max": None,- "withinp_g_dev_mean": None}+ "withinp_g_dev_mean": None,+ "withinp_mode": WITHINP_MODE, "vpre_floor": VPRE_FLOOR,+ "vpre_pnz": bool(VPRE_PNZ),+ "vpre_delta_abs_mean": None, "vpre_delta_abs_max": None,+ "vpre_var_dev_max": None, "vpre_shrink_frac_mean": None,+ "vpre_shrink_frac_max": None,+ "js_n0": JS_N0, "js_p": JS_P, "js_wmin": JS_WMIN,+ "js_w_mean": None, "js_w_min": None, "js_w_max": None} if WITHINP and WITHINP_W != 0.0 and ia.size and ib.size: la_w = np.asarray(stage_a.labels).astype(str) lb_w = np.asarray(stage_b.labels).astype(str)@@ -1895,6 +2000,8 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s pb_pool0 = ((xa.astype(np.float64).sum(axis=0) + xb.astype(np.float64).sum(axis=0)) / n_out_w) if WITHINP_PBNEUTRAL else None fdev, drifts, pbsh = [], [], []+ vpre_dev, vpre_shr, vpre_dlt = [], [], []+ js_w = [] # WITHINP_ALLTYPES: the recentering for one side only needs that side's # FULL-stage mean of the type — no cross-side information. Restricting # to types present at BOTH stages (the displacement gate) would skip@@ -1923,12 +2030,57 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s mu_full = Xfd.mean(axis=0) tstd = Xfd.std(axis=0) mu_pre = pre[mo].astype(np.float64).mean(axis=0)- ratio = (mu_full + WITHINP_EPS) / (mu_pre + WITHINP_EPS)- f = np.clip(ratio ** WITHINP_W, WITHINP_CLIP[0], WITHINP_CLIP[1]).astype(np.float32) pb0 = X[mo].astype(np.float64).mean(axis=0)- X[mo] = X[mo] * f[None, :]+ if WITHINP_MODE == "add":+ # VPRECENT: additive, variance-preserving recentering.+ # δ_g = μ_full − μ_drawn, floored at VPRE_FLOOR·μ_drawn to+ # bound support loss; applied to post-displacement nnz+ # entries with clip-at-0 (support can only shrink).+ delta = mu_full - mu_pre+ if VPRE_FLOOR < 900.0:+ delta = np.maximum(delta, VPRE_FLOOR * mu_pre)+ Xsub = X[mo].astype(np.float64)+ nz = Xsub > 0+ if VPRE_PNZ:+ pnz = nz.mean(axis=0)+ delta = np.where(pnz > 1e-6, delta / np.maximum(pnz, 1e-6), 0.0)+ var_before = Xsub.var(axis=0)+ newsub = np.where(nz, np.maximum(Xsub + delta[None, :], 0.0), Xsub)+ X[mo] = newsub.astype(np.float32)+ new64 = X[mo].astype(np.float64)+ var_after = new64.var(axis=0)+ vok = var_before > 1e-9+ if vok.any():+ vpre_dev.append(float(np.abs(var_after[vok] / var_before[vok] - 1.0).max()))+ n_nz = int(nz.sum())+ if n_nz:+ vpre_shr.append(float((nz & (new64 <= 0)).sum()) / n_nz)+ vpre_dlt.append(np.abs(delta))+ elif WITHINP_MODE == "js":+ n_sub = float(int(mo.sum()))+ ratio = (mu_full + WITHINP_EPS) / (mu_pre + WITHINP_EPS)+ if JS_P == 0.0:+ # pure size reliability: small drawn subsets shrunk to f≈1+ w_n = np.full(mu_full.shape, n_sub / (n_sub + JS_N0), dtype=np.float64)+ else:+ # per-gene signal-to-noise reliability: signal = |log drift|,+ # noise = within-type CV (σ_g/μ_g). Genes whose drift is+ # small vs their CV are shrunk toward no-op.+ cv = tstd / np.maximum(mu_full, 1e-6)+ snr = np.abs(np.log(np.maximum(ratio, 1e-9))) / np.maximum(cv, 1e-6)+ snr_p = np.power(snr, JS_P)+ w_n = snr_p / (snr_p + JS_N0)+ w_n = np.clip(w_n, JS_WMIN, 1.0)+ f = np.clip(ratio ** (WITHINP_W * w_n), WITHINP_CLIP[0], WITHINP_CLIP[1]).astype(np.float32)+ X[mo] = X[mo] * f[None, :]+ fdev.append(np.abs(f - 1.0))+ js_w.append(w_n)+ else:+ ratio = (mu_full + WITHINP_EPS) / (mu_pre + WITHINP_EPS)+ f = np.clip(ratio ** WITHINP_W, WITHINP_CLIP[0], WITHINP_CLIP[1]).astype(np.float32)+ X[mo] = X[mo] * f[None, :]+ fdev.append(np.abs(f - 1.0)) pb1 = X[mo].astype(np.float64).mean(axis=0)- fdev.append(np.abs(f - 1.0)) drifts.append(np.abs(mu_full - mu_pre) / np.maximum(tstd, 1e-6)) pbsh.append(float(np.abs(pb1 - pb0).max())) withinp_info["withinp_n_sides"] += 1@@ -1936,8 +2088,21 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s fall = np.concatenate(fdev) withinp_info["withinp_f_dev_mean"] = float(fall.mean()) withinp_info["withinp_f_dev_max"] = float(fall.max())+ if drifts: withinp_info["withinp_pb_maxshift"] = float(np.max(pbsh)) withinp_info["withinp_drift_rel_med"] = float(np.median(np.concatenate(drifts)))+ if vpre_dlt:+ dall = np.concatenate(vpre_dlt)+ withinp_info["vpre_delta_abs_mean"] = float(dall.mean())+ withinp_info["vpre_delta_abs_max"] = float(dall.max())+ withinp_info["vpre_var_dev_max"] = float(max(vpre_dev)) if vpre_dev else None+ withinp_info["vpre_shrink_frac_mean"] = float(np.mean(vpre_shr)) if vpre_shr else None+ withinp_info["vpre_shrink_frac_max"] = float(np.max(vpre_shr)) if vpre_shr else None+ if js_w:+ jw = np.concatenate(js_w)+ withinp_info["js_w_mean"] = float(jw.mean())+ withinp_info["js_w_min"] = float(jw.min())+ withinp_info["js_w_max"] = float(jw.max()) if WITHINP_PBNEUTRAL and pb_pool0 is not None and n_out_w: # Restore each gene's POOLED output pseudobulk (hence dp, the input # of de_score / de_direction) to its pre-WITHINP value with one@@ -2971,6 +3136,47 @@ def mix_converge(stage_a, stage_b, t: float, params: dict, alpha: float, view: s info.update(pstep_info) info.update(pbproj_info) info.update(tshift_info)+ # NBSMOOTH (this node 51, second alternative mechanism): mild spatial-+ # coherence smoothing of the final nnz expression toward each cell's k-NN+ # neighborhood average (k=15, the neighborhood_mmd scale). nnz-only ++ # pb-neutral + coords fixed. See the config block for the full rationale.+ nbsmooth_info = {"nbsmooth_enable": bool(NBSMOOTH_ENABLE and NBSMOOTH_BETA > 0.0),+ "nbsmooth_beta": NBSMOOTH_BETA, "nbsmooth_k": NBSMOOTH_K,+ "nbsmooth_self": bool(NBSMOOTH_SELF), "nbsmooth_nnz": bool(NBSMOOTH_NNZ),+ "nbsmooth_pbneutral": bool(NBSMOOTH_PBNEUTRAL),+ "nbsmooth_move_rel_mean": None, "nbsmooth_pb_maxshift": None,+ "nbsmooth_g_min": None, "nbsmooth_g_max": None}+ if (NBSMOOTH_ENABLE and NBSMOOTH_BETA > 0.0 and ia.size and ib.size+ and expr.shape[0] >= NBSMOOTH_K + 2 and coords.shape[0] == expr.shape[0]):+ from scipy.spatial import cKDTree+ pb_before_nb = expr.mean(axis=0).astype(np.float64)+ tree = cKDTree(coords)+ kq = NBSMOOTH_K if NBSMOOTH_SELF else NBSMOOTH_K + 1+ _, idx = tree.query(coords, k=kq)+ if not NBSMOOTH_SELF:+ idx = idx[:, 1:] # drop self (col 0)+ idx = np.asarray(idx, dtype=np.int64)+ nb_mean = expr[idx].mean(axis=1).astype(np.float64) # (n, G)+ cur = expr.astype(np.float64)+ new = (1.0 - NBSMOOTH_BETA) * cur + NBSMOOTH_BETA * nb_mean+ if NBSMOOTH_NNZ:+ new = np.where(cur > 0, new, cur) # preserve support (zeros stay)+ new = np.clip(new, 0.0, None)+ move = np.abs(new - cur)+ denom = float(np.abs(cur).sum()) + 1e-12+ nbsmooth_info["nbsmooth_move_rel_mean"] = float(move.sum() / denom)+ expr = new.astype(np.float32)+ if NBSMOOTH_PBNEUTRAL:+ pb_after_nb = expr.mean(axis=0).astype(np.float64)+ nbsmooth_info["nbsmooth_pb_maxshift"] = float(np.abs(pb_after_nb - pb_before_nb).max())+ gnb = np.ones_like(pb_before_nb)+ oknb = (pb_after_nb > 1e-9) & (pb_before_nb > 1e-9)+ gnb[oknb] = np.clip(pb_before_nb[oknb] / pb_after_nb[oknb],+ NBSMOOTH_G_CLIP[0], NBSMOOTH_G_CLIP[1])+ expr = (expr * gnb.astype(np.float32)[None, :]).astype(np.float32)+ nbsmooth_info["nbsmooth_g_min"] = float(gnb.min())+ nbsmooth_info["nbsmooth_g_max"] = float(gnb.max())+ info.update(nbsmooth_info) info.update(clamp_info) info.update(resid_info) info.update(spat_info)@@ -2990,23 +3196,29 @@ def main() -> None: parser.add_argument("--out", required=True) parser.add_argument("--seed", type=int, default=0) parser.add_argument("--ablate", default=None,- help="mechanism-off control: 'mechanism' (or any name) disables "- "PSEUDOSTEP (this node's submitted pseudotime-step contraction) — "- "an exact no-op that reproduces parent node 47 bit-for-bit")+ help="mechanism-off control: 'mechanism' (or any name) reverts "+ "VPRECENT (this node's additive variance-preserving recentering) "+ "to the parent's multiplicative WITHINP f — an exact no-op that "+ "reproduces parent node 49 bit-for-bit") args = parser.parse_args() global RESID_GAMMA, SPATRESID_THETA, DETR_FLIP_ON, AMPS_ENABLE, DETR_EXT, NBHDGATE, NBHDCOH global NBHDCOH_SHARED, PROGCOH, WITHINP, ANISO2_GAMMA, SIDEFRIM, PSEUDOSTEP- global WITHINP_CLIP, WITHINP_G_CLIP+ global WITHINP_CLIP, WITHINP_G_CLIP, WITHINP_MODE, VPRE_FLOOR, VPRE_PNZ+ global NBSMOOTH_ENABLE, NBSMOOTH_BETA, JS_N0 if args.ablate:- # Only THIS node's submitted mechanism (WIDENP: the widened WITHINP- # recentering / pb-restore clips) is switched off (contract G39.7);- # SIDEFRIM (node 47), NBHDCOH, DETR and everything upstream stay active.- # Reverting BOTH clips to the parent values is an exact no-op relative to- # node 47, so the ablated output reproduces parent node 47 bit-for-bit.- # PSEUDOSTEP (the falsified PLAN mechanism) is default-off and also forced- # off here; PROGCOH/ANISO2 are default-off.- WITHINP_CLIP = (0.8, 1.25)- WITHINP_G_CLIP = (0.9, 1.1)+ # Only THIS node's submitted mechanism is switched off (contract G39.7);+ # WIDENP's clips (node 49), SIDEFRIM (node 47), NBHDCOH, DETR and+ # everything upstream stay active. The submitted mechanism is whichever+ # of VPRECENT (additive) / JS (James-Stein) / NBSMOOTH (spatial smoothing)+ # is default-on; reverting WITHINP_MODE to the parent's multiplicative f+ # (node 49's widened clips kept), disabling NBSMOOTH, and zeroing JS's+ # shrinkage is an exact no-op relative to node 49, so the ablated output+ # reproduces parent node 49 bit-for-bit. PSEUDOSTEP (the falsified+ # node-49 PLAN mechanism) is default-off and also forced off here;+ # PROGCOH/ANISO2 are default-off.+ WITHINP_MODE = "mul"+ NBSMOOTH_ENABLE = False+ NBSMOOTH_BETA = 0.0 PSEUDOSTEP = False PROGCOH = False ANISO2_GAMMA = 0.0@@ -3154,6 +3366,16 @@ def main() -> None: "withinp_pb_maxshift", "withinp_drift_rel_med", "withinp_alltypes", "withinp_pbneutral", "withinp_g_min", "withinp_g_max", "withinp_g_dev_mean",+ "withinp_mode", "vpre_floor", "vpre_pnz",+ "vpre_delta_abs_mean", "vpre_delta_abs_max",+ "vpre_var_dev_max", "vpre_shrink_frac_mean",+ "vpre_shrink_frac_max",+ "js_n0", "js_p", "js_wmin", "js_w_mean",+ "js_w_min", "js_w_max",+ "nbsmooth_enable", "nbsmooth_beta", "nbsmooth_k",+ "nbsmooth_self", "nbsmooth_nnz", "nbsmooth_pbneutral",+ "nbsmooth_move_rel_mean", "nbsmooth_pb_maxshift",+ "nbsmooth_g_min", "nbsmooth_g_max", "pseudostep_enable", "pseudostep_lambda", "pseudostep_tau", "pseudostep_nnz_only", "pseudostep_pbneutral", "pseudostep_n_types", "pseudostep_n_cells",
调研来源?调研员查到并用到的知识条目和文献检索结果(只列标题和编号)。
用到的知识库条目
| 编号 | 标题 | 出处 |
|---|---|---|
| k007 | Interval staging and held-out-window filtering of external data | notes/official/来件/virtualembryo.ai/rules.md |
| k026 | Canonicalise predicted 3D coordinates before submission | notes/pitfalls/04_scorer_invariance.md |
| k024 | World-model evaluation dimensions for state-transition predictors | notes/competition/07_biomedical_world_models.md |
分析结果?分析员写的 ANALYSIS.json:改了什么、各组分数怎么变、假设是否成立、经验和下一步建议。
| 改了什么 | PLAN 的 VPRECENT(加性再居中)与备选 James-Stein 收缩均实现后在 A 半证否,最终提交父建议 #2 的 NBSMOOTH:在所有表达改动之后、坐标定型处,对非零表达向 15-NN 邻域均值平滑 x←(1−β)x+β·mean(15NN)(β=0.35,nnz-only、池化伪批量复原 g=clip(pb0/pb1,0.5,2)、坐标不动);ablate 关闭后逐位还原父节点 49。 |
|---|---|
| 各组分数的变化 | cell_state:轻微变差,接近噪声:mmd_u raw 0.00954→0.00982,得分 −0.08;variogram raw 0.007047→0.00706,得分 −0.01;组 60.96→60.61(−0.35,在 T2 ~1 分噪声内)。 expression_change:不变:de_score 0.3448、de_direction 0.397 均逐位与父相同(pb-neutral 复原使 DE 秩通道结构性冻结),组 62.76→62.76。 local_spatial:变好:neighborhood_mmd raw 0.04554→0.04309,skill 0.631→0.644,得分 +0.33;组 63.12→64.42(+1.30,略超噪声)。A 半 3 种子配对 nbhd 3/3 改善(0.0474→0.0451),与榜上方向一致。 shape_scale:不变:d2_shape 0.00721、occupancy_dice 0.8177、scale_log_ratio 0.0099 逐位与父相同(坐标不动),组 77.57→77.57。 |
| family_id | T2EI-01 |
| 假设是否成立 | 否 |
| 经验 |
|
| mechanism_active | 是 |
| 下一步建议 |
|
对话摘要?每个角色和大模型对话的统计:轮数、工具调用、用时、token 数和最后的回答摘录;原始记录只给路径。
只给统计和最后回答的摘录;完整对话请到原始记录位置里列出的文件看。
分析员
| 角色?调研员写计划、工程师改代码、分析员解读分数、审查员检查作弊。 | 分析员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数?大模型一共回复了几轮(每轮可以调用多个工具)。 | 6 |
| 工具调用?大模型调用读文件、执行命令等工具的次数,按工具名统计。 | 共 7 次:bash 6、write 1 |
| 用时 | 1 分 |
| token 数?输入 / 输出(含思考)的 token 数,来自接口返回的用量。 | 输入 26,554 · 输出 1,668 · 思考 1,589 |
| 任务(第一行) | 分析节点 n51 的打分结果,写 ANALYSIS.json |
| 最后的回答(摘录) | ANALYSIS.json written |
| 原始记录位置?完整对话记录在 Spark 上的文件路径;看板不复制原始内容。 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/analyst.jsonl 21 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/analyst.stderr |
工程师
| 角色 | 工程师 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 79 |
| 工具调用 | 共 84 次:bash 60、edit 20、read 3、write 1 |
| 用时 | 39 分 |
| token 数 | 输入 181,232 · 输出 27,824 · 思考 49,704 |
| 任务(第一行) | 按计划修改程序:VPRECENT:加性保方差再居中替代 WITHINP 乘性 f,修复 variogram 共变失真 |
| 最后的回答(摘录) | 节点 51 完成。全部验证通过:default=NBSMOOTH β0.35(sha e2a8)、`--ablate mechanism`=父节点49逐位还原(sha dabb16)、vec-check ok、确定性(两次运行 sha 一致)、运行 2.2s / 0.6GB(限 30min/28GB)、视图无关(不读 board/mode/绝对时间)、无 RNG。查分用了 19/20。
**做了什么**
- 按 PLAN 实现 **VPRECENT**(加性再居中替代 WITHINP 乘性 f,nnz-only + 0 截断,δ 下限可调)→ **证否**:4 档解码(floor −0.3/−0.5/−0.8/无 + 1/p_nz)全劣于父,variogram 不降反升。机制假设(保方差)实测失败:`max|var_after/var_before−1|=109`,因 nnz-only+截断非常数平移;且代数上"保方差乘性再居中"就等于加性位移,整个再居中族已探尽。
- 备选 1 **James-Stein 收缩 f**(父建议 #1,尺寸/SNR 两种可靠度)→ 4 配置全证否(收缩=削弱再居中,单调变差;JS_N0=0 逐位还原父)。
- 备选 2(**提交**)**NBSMOOTH**(父建议 #2):对最终非零表达向 15-NN 邻域均值轻度平滑(β=0.35,nnz-only、池化伪批量中和、坐标不动)。与 PSEUDOSTEP 不同——向**空间**邻域(而非型均值)收缩,正是 neighborhood_mmd 读取的表达-位置相干方向。
**查分结果(A 半 3 种子配对 vs 父 49)**:+0.221 / +0.205 / +0.160,均值 **+0.196 全正**;nbhd 3/3 改善(0.0474→0.0451,权重 25)、local_spatial 3/3 约 +1.2;代价 mmd_u/cell_state 微降约 −0.3…−0.5;de_score/de_direction 逐位冻结、shape_scale 逐位不变。β 扫描峰值 0.35–0.4,取 0.35(对弱组更保守)。
**下一步最值得试**
1. NBSMOOTH 的 k 与 β 联合细调(k∈{10,20}、β∈{0.35,0.4}),或按邻域同源纯度(a/b 侧混合度)自适应 β,试图在保住 nbhd 增益的同时减小 mmd_u/cell_state 损失。
2. 把 NBSMOOTH 的空间相干思路用到支持集通道之外——例如对 nbhd 贡献最大的边缘/稀疏区细胞单独加权平滑。
3. cell_state(variogram)仍是地板以上最弱项,但再居中/幅度族已系统性证否;需换非幅度机制(如检出率/共变的结构级改造)才可能有空间。 |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/engineer.jsonl 507 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/engineer.stderr |
调研员
| 角色 | 调研员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 1 |
| 工具调用 | 共 0 次:— |
| 用时 | 2 分 |
| token 数 | 输入 21,968 · 输出 1,409 · 思考 5,573 |
| 任务(第一行) | 为节点 n51(改进,父节点 n49)写改进计划 PLAN.json |
| 最后的回答(摘录) | 1. 在 WITHINP 位置,把乘性 f_g=clip((μ_full/μ_drawn)^w, lo, hi) 替换为加性位移 δ_g = μ_full(g) − μ_drawn(g)。对子集内每个细胞、每个 x_{ig}>0 的基因:x'_{ig}=x_{ig}+δ_g;若 x'_{ig}≤0 则置 0(支持集只缩不扩,与 DETR 方向一致)。x_{ig}=0 的不动。\n2. 加性位移后重新计算池化伪批量 pb1,用现有 g=clip(pb0/pb1, 0.5, 2.0) 复原因子保 DE 通道中性(与父节点相同逻辑)。\n3. 对 drawn 细胞数 <5 或来源阶段该类型 <10 细胞的子集跳过(沿用 WITHINP_MIN_DRAWN 阈值)。\n4. 坐标、支持集的零→非零方向、DETR/NBHDCOH 置零管线全部不动。\n5. 关键参数初值:δ_g 无额外超参(直接由 μ_full−μ_drawn 决定),仅保留 g-clip [0.5,2.0]。若加性位移导致过多支持集缩减(>2% 非零→零),加一个 δ 下限:δ_g = max(δ_g, −0.5×μ_drawn(g)),防止大负位移。搜索范围:该下限系数 ∈ {−0.3, −0.5, −0.8, 无限制}。\n6. 单输入阶段退路:若只有一个输入阶段,无括号对侧,μ_full=μ_drawn,δ_g=0,机制自动退化为无操作。\n7. 快速筛选:先 A 半 seed 0 跑 vec-score,看 variogram raw 是否 <0.007047(父值)且 de_score 不变;再用 seed 0/1/2 配对确认。预期提升在噪声内(<1 分),必须靠配对差方向一致性判定。",
"expected_groups": ["cell_state", "local_spatial"],
"risks": "1. 加性位移使部分小表达非零值变零,支持集缩减过多 → variogram 反而恶化(类似密集支持集变化的灾难)。Engineer 应在第一次查分后统计非零→零的基因×细胞数,若 >2% 立即启用 δ 下限保护。2. 加性位移对高表达基因(μ_drawn>>δ)几乎无效、对低表达基因(μ_drawn≈|δ|)影响大,可能引入低表达基因的异质性 → 检查低表达基因子集的 variogram 贡献。3. 预期收益极小(≤0.05 分),可能完全在噪声内;若 3 种子配对差方向不一致(非全正),应判定无效并回退。4. pb-neutral 的 g 复用在加性位移后可能不精确(因为加性改变了池化均值的计算方式),需验证 dp 残差仍在 float32 舍入级。",
"family_id": "T2EI-01",
"mechanism": "将 WITHINP 的乘性再居中因子 f_g(缩放均值同时缩放方差)替换为加性位移 δ_g=μ_full(g)−μ_drawn(g)(只移均值、保方差),消除有限抽样漂移的同时保持型内基因方差结构,从而保护 variogram 度量的基因对共变。",
"vs_constant_shift": "δ_g 按类型×侧×基因三维度变化:不同细胞类型有不同的 drawn/full 均值差,不同基因的 δ 也不同。它不是全局常数位移,也不是组成重加权;它是对每个子集内抽样漂移的局部校正,且只作用于非零表达值,不改变支持集的零→非零方向。",
"mechanism_evidence": "1. 型内逐基因方差比较:加性位移后各子集的基因方差应与位移前逐位一致(乘性则会变),Engineer 应输出 max|var_after/var_before − 1| 并验证 ≈0。2. variogram raw 值:目标 <0.007047(父值),若 ≥0.0071 说明机制无效或有害。3. 支持集变化统计:非零→零的细胞×基因对数应 <2%。4. 四组分分解:cell_state 应改善(variogram 主驱动),expression_change 应逐位不变(pb-neutral),shape_scale 应逐位不变(坐标不动)。5. 3 种子配对差方向一致性。",
"mechanism_off_control": "--ablate mechanism 将所有 δ_g 设为 0(即跳过加性位移),保留 g 复用和其余管线不变,输出应与父节点 49 逐位一致(sha256 验证)。预期差别:ablate 输出的型内基因方差保持 drawn 子集原始值(含抽样漂移),variogram raw 回到父值 0.007047;默认输出方差被保留但均值被校正,variogram raw 应更低。"
}
``` |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/researcher.jsonl 6 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/researcher.stderr |
审查员
| 角色 | 审查员 alibaba-token-plan-cn/qwen3.8-max |
|---|---|
| 调用次数 | 1 次 |
| 轮数 | 30 |
| 工具调用 | 共 41 次:bash 40、write 1 |
| 用时 | 7 分 |
| token 数 | 输入 69,695 · 输出 4,549 · 思考 9,152 |
| 任务(第一行) | 审查节点 n51 的程序是否越界读取、写死目标、钻评分器漏洞 |
| 最后的回答(摘录) | REVIEW.json written |
| 原始记录位置 | /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/reviewer.jsonl 299 KB /home/spark-longxinyang/vec/runs/formal/20261003-171955-search-t2-embryo-interp-chain-12h/nodes/51/reviewer.stderr |