Files
ts-as-modality/docs/diagnosis-2026-07-02-cross-domain.md
T
张宗平 150e3bd9fd docs(ts-as-modality): archive after cross-domain generalization failure
Full diagnostic chain (synth→real zero-shot→real finetune→held-out) shows
the TS-modality approach works in-distribution but fails to generalize
across entities: same SMD dataset, same 38 channels, just a different
machine (1→2) collapses output to repetition garbage. Root cause is the
lightweight TS encoder (2-layer TF, 2.1M params) learning dataset/machine-
specific patterns rather than transferable time-series representations.

This is a valuable negative result: it cleanly rules out the
'0.5B LLM + 2-layer TS encoder + single-distribution synth training'
route for general time-series understanding, which is more credible than
any 'looks like it works but never tested cross-domain' result.

Records:
- tasks.md: M6 diagnostic section (6.1-6.5) with evidence + archive decision
- proposal.md: Status header flagging archive + pointer to diagnosis
- docs/diagnosis-2026-07-02-cross-domain.md: full evidence chain, root-cause
  analysis, capability boundaries, asset inventory, restart conditions

Project status: archived. Code/data/checkpoints/reports preserved.
Restart requires any of: (1) larger encoder + real-data from-scratch
training, (2) channel-agnostic patch strategy, (3) multi-dataset joint
training with held-out-dataset generalization proof.
2026-07-03 11:52:09 +00:00

7.7 KiB
Raw Blame History

诊断报告 · ts-as-modality 跨域泛化失败与方案封存

日期2026-07-02 状态:方案封存(资产保留,不再投入) 决定性问题:合成域有效的「TS-as-modality」方案,能否泛化到真实时序?


TL;DR

方案在合成域内有效,但在真实时序上跨实体泛化失败——同一 SMD 数据集、同样 38 通道、仅换了机器(machine-1 → machine-2),模型输出从合法 JSON 崩溃为 repetition garbage。证据链完整指向:TS encoder 学到的是数据集/机器特有模式,而非可泛化的时序表征。方案作为研究性 PoC 划定了清晰的能力边界,但当前架构无法支撑「通用时序理解」这一目标,故封存。


完整诊断链

阶段 1:合成域内验证(成立)

在全量合成数据(50 万对齐 + 10 万 SFT)训练后:

指标 model pure_llm 结论
时序消融 change_rate 0.98/50 TS token 确实被消费
QA 均分(6 类) 2.41 0.90 (2.7×) TS 模态是必要非装饰
anomaly JSON 解析率 0.98 0.01 格式学习成功
VUS-PR 0.22 0.24 ⚠️ 输给 trivial baseline

阶段 1 结论:机制可行,QA 能力真实,但异常精准定位弱(VUS-PR 输 trivial)。

阶段 2zero-shot 跨域(崩溃)

用未微调的合成 ckpt 直接评测真实 SMDmachine-1/2/2-1 合并,prevalence 5.8% vs 合成 26%):

指标 modelreal 解读
parse_rate 0.00 没有任何输出可解析
Aff-F1 0.00 完全无定位能力
QA mean 0.00 vs synth 的 2.41
VUS-PR 0.2263 = all_report,是假象

输出样本repetition collapseLLM 在 OOD 输入下的典型崩溃):

'ERYoticaisonaisonanxietyaisonaisonanaisonanaison...'
'horizon: horizon: horizon: horizon: horizon:...'

VUS-PR=0.2263 的真相:模型输出全是 garbage → parse_anomaly_segments 失败 → answer_to_point_scores 返回全 0 → vus_pr(全0, y) 退化为 prevalence=0.226)。所以「VUS-PR 与 trivial 持平」是假象,模型实际什么都没做,只是被 prevalence 下限兜住了。这是一个评测陷阱:低质量输出在低 prevalence 下会被误读为「不算太差」。

干扰变量排除:改写 instruction(短措辞 / 通用模板)后输出仍是 garbage,排除「指令过长/格式不兼容」因素,确认是 TS embedding 的分布偏移所致:

  • 通道数:5(合成)→ 38SMD
  • 数值分布:合成 mean46/std23 vs SMD z-score 后 mean0/std0.6

阶段 3SMD 微调(训练域内有效)

从 stage2_final 继续训 LoRA on SMD trainmachine-1-1/1-2141 样本,500 步,EMA 1.27→1.00):

训练域内输出machine-1-1/1-2,微调后):

{"anomaly_regions": [{"start": 309, "end": 412}], "n_regions": 1}  ✅
{"anomaly_regions": [{"start": 0, "end": 136}], "n_regions": 1}    ✅
{"anomaly_regions": [{"start": 103, "end": 126}], "n_regions": 1}  ✅

4/5 产出合法 JSON,格式与语义均正确。机制在训练域内正常工作

阶段 4:跨实体 held-out(崩溃,决定性)

用同一个微调后模型评测 SMD held-outmachine-2-1,同数据集/同 38 通道/同样 z-score 分布,仅换机器):

[anomaly] '{"}</seo_http>\xa0\n\xa0\n\xa0\n\n\xa0\xa0 (since)...'   ❌
[anomaly] '{"id": 1, "name": "nan</sk_inch_regions> \n\n\n...'        ❌
[describe] '------------{"}</ewanewanewanewanewanewanewan...'          ❌

全 garbage。从训练域内(machine-1)到 held-outmachine-2),输入分布的偏移仅仅是「换了台服务器」,模型就从「会」变成「完全不会」。


根因分析

不是评测管道 bug、不是数据量不足、不是指令格式问题、不是通道数不匹配(held-out 也是 38 通道)。

根因是 TS encoder 学到的是数据集/机器特有的统计特征,而非可泛化的时序表征

  1. 架构容量不足TS encoder 仅 2 层 TF + patch 线性嵌入,~2.1M 参数。这个容量足以「记忆」machine-1 的分布特征,但不足以学到「时序形态→语义」的通用映射。
  2. 训练分布单一:仅在合成数据上训练 encoder/projector,合成分布的特征(固定 5 通道、特定数值范围、模板化异常形态)被编码进了表征。
  3. 泛化瓶颈在 encoder 侧LoRA 只调 LLM,但 LLM 侧(语言能力)本来就没问题——崩溃发生在 encoder 输出的 TS embedding 严重偏离 LLM 能理解的流形时。
  4. 微调样本不足141 样本对 encoder 2.1M 参数,学到的更像「记忆 machine-1」而非「适应 SMD 通用分布」。

这是一个架构性而非工程性短板:轻量 TS encoder + 单分布训练的组合,决定了它无法跨实体泛化。


方案意义与边界(诚实评估)

成立的部分

  • TS 模态融合机制可行:证明 soft token 能承载时序信息并被 LLM 消费(非被忽略的噪声)。
  • 合成域内 QA 能力真实2.7× 于 pure_llm,TS 模态对时序问答有实质增益。
  • 工程管线完整可复现:合成数据、训练、断点续训、评测全链路跑通,含真实数据接入。

未立住的部分

  • 跨实体泛化失败:同数据集换机器就崩溃,不能称为「理解时序」。
  • 作为异常检测器:合成域 VUS-PR 输 trivial,真实域 zero-shot 完全失效。
  • zero-shot 跨域能力:不存在。

方案定位

作为「轻量 TS-modality 融合」的研究性 PoC,其核心价值在于清晰、诚实地划定了能力边界:合成域内可行,但当前架构无法泛化到真实时序。这是一个有价值的负结果——它明确排除了「0.5B LLM + 2 层 TS encoder + 单分布合成训练」这条路线做通用时序理解的可能性,优于任何「看起来 work 但未测跨域」的结果。


资产清单(封存保留)

代码git-tracked):

  • src/tsmm/data/model/train/eval 完整模块
  • scripts/gen/train/eval 监督脚本(含流式+断点续训)
  • tests/158 单测全绿

数据/模型git-ignore,本地保留):

  • data/align.jsonl50万)、sft.jsonl10万)、eval_synth.jsonl2k held-out
  • data/real/smd/SMD 3 机合并 npy)、data/eval_real.jsonlmachine-2-1 held-out)、data/smd_ft/sft.jsonlmachine-1-1/1-2 微调集)
  • checkpoints/stage1/stage1_final.pt31250 步)、checkpoints/stage2/9375 步 + lora)、checkpoints/stage2_smd/SMD 微调 500 步)
  • data/small_scale_backup/(小规模对比备份)

报告git-trackedreports/):

  • eval-2026-06-30.md:小规模首评(40/类)
  • eval-2026-07-01.md:全量重训评测(synth 全量 2000)
  • eval-2026-07-02.md:真实数据评测(synth + realzero-shot 崩溃记录)
  • instruct_check.jsonT4.2 指令遵循抽检

重启条件

若未来重启本方案,需满足以下任一前提(按预期 ROI 排序):

  1. 更大 encoder + 真实数据从头训练encoder >10M 参数,且用真实多数据集从头训练(非仅微调),让 encoder 有足够容量和分布覆盖学到通用表征。
  2. channel-agnostic patch 策略:消除「通道数」这一硬约束(当前 patch embed 固定 5 通道,是跨域的物理障碍),如 per-channel 独立编码后聚合。
  3. 多真实数据集混合训练验证泛化:在 SMD/SWaT/PSM 等多个真实数据集上联合训练,并在完全 held-out 的数据集上验证——只有这种泛化成立,方案才算「通用」。

在以上任一条件未满足前,本方案不再投入。