Files
internal-docs/knowledges/mask-ddpm.md
2026-01-30 00:51:08 +08:00

919 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# maskddpm 项目说明书(内部长文版|约 3 千字)
> 目标:以“论文叙述 + 说明书”混合风格,把项目的背景、方法、流程、评估、局限、未来方向完整写清楚。
> 面向对象:对扩散模型/时序建模不熟悉的读者也能读懂。
> 注意:不写具体实现代码,只写概念与方法。
---
## 摘要Abstract
工业控制系统ICS数据具有“多变量、强时序、混合类型”的特点。传统生成模型往往只能满足分布或时序之一难以同时兼顾。我们提出一种 **两阶段混合扩散框架maskddpm**:第一阶段学习时序趋势,第二阶段用扩散模型学习残差分布,同时对离散变量采用遮蔽‑恢复式扩散。为解决少数变量主导 KS 的问题,我们进一步提出 **Typeaware 分治思路**,将程序驱动变量与过程变量分离处理,并配套完善的诊断与评估体系。实验表明,该框架能显著改善分布一致性,同时保持一定的时序结构,且具备可解释的误差定位能力。
---
## 1. 背景与动机Why this problem is hard
工业数据和普通时间序列有本质区别:
1) **物理惯性**:许多变量变化缓慢,前一刻会强烈影响后一刻。
2) **程序驱动**:部分变量来自操作者/调度程序,呈现“阶跃 + 长时间停留”。
3) **混合类型**:连续传感器与离散状态共存,必须分别处理。
如果只用一个模型去学所有变量,会产生明显问题:
- 模型为了对齐分布,会牺牲时序结构 → lag1 变差
- 模型为了时序稳定,会模糊分布 → KS 上升
- 离散变量如果当连续处理,会出现非法值 → JSD 上升
因此,需要一种结构化的建模策略来“拆分矛盾”。
---
## 2. 问题定义Problem Formulation
给定真实序列 \(X \in \mathbb{R}^{T\times D}\),其中:
- \(T\):时间长度
- \(D\):变量维度(连续 + 离散)
目标是学习生成模型 \(G\),输出 \(\hat{X}\),使得:
**分布一致性**
\[
\forall i,\; F^{(i)}_{gen}(x) \approx F^{(i)}_{real}(x)
\]
**时序一致性**
\[
\rho_1(\hat{x}^{(i)}) \approx \rho_1(x^{(i)})
\]
**离散合法性**
\[
\hat{x}^{(j)} \in \mathcal{V}_j
\]
其中 \(\rho_1\) 表示 lag1 相关,\(\mathcal{V}_j\) 是离散变量的合法词表。
---
## 3. 方法概览Method Overview
核心设计是 **两阶段 + 混合扩散**
### 阶段 1时序趋势建模
用序列模型学习“整体趋势”。直觉上,这一步只负责回答“序列怎么变化”。
### 阶段 2分布残差建模
用扩散模型学习“趋势以外的残差”,修正分布形状。直觉上,这一步只负责回答“数值分布像不像”。
这种解耦让“时序一致性”与“分布一致性”不再直接冲突。
---
## 4. 模型结构Model Details
### 4.1 连续变量扩散DDPM
扩散过程:
\[
x_t = \sqrt{\bar{\alpha}_t}\,x_0 + \sqrt{1-\bar{\alpha}_t}\,\epsilon,\quad \epsilon \sim \mathcal{N}(0,I)
\]
**解释**
- \(x_0\) 是真实残差
- \(x_t\) 是加噪后的数据
- 模型学习从 \(x_t\) 还原 \(x_0\) 或 \(\epsilon\)
### 4.2 离散变量扩散Mask Diffusion
离散变量通过“遮蔽 + 恢复”建模:
- 随机遮蔽部分 token
- 学习预测原始 token
这样保证离散输出 **合法且可解释**
### 4.3 时序模块Temporal GRU
GRU 用于学习连续序列的趋势:
- 输入:连续序列
- 输出:趋势序列
- 用于构建残差:\(x_{resid} = x - trend\)
直观理解:
- GRU 负责“走向”
- 扩散负责“修正细节”
---
## 5. 损失函数设计Loss Design
### 5.1 连续损失
\[
\mathcal{L}_{cont} =
\begin{cases}
\|\hat{\epsilon}-\epsilon\|^2 & (预测噪声)\\
\|\hat{x}_0-x_0\|^2 & (预测原值)
\end{cases}
\]
**解释**:衡量“去噪后是否接近真实残差”。
### 5.2 离散损失
\[
\mathcal{L}_{disc} = \frac{1}{|\mathcal{M}|}\sum_{(i,t)\in\mathcal{M}} CE(\hat{p}_{i,t}, y_{i,t})
\]
**解释**:只对被遮蔽的 token 做交叉熵,确保离散预测正确。
### 5.3 总损失
\[
\mathcal{L} = \lambda \mathcal{L}_{cont} + (1-\lambda)\mathcal{L}_{disc}
\]
**解释**\(\lambda\) 决定分布与离散的权衡。
### 5.4 额外增强(可选)
**SNR 权重**
\[
\mathcal{L}_{snr} = \frac{\text{SNR}_t}{\text{SNR}_t+\gamma}\,\mathcal{L}_{cont}
\]
**分位数对齐**
\[
\mathcal{L}_Q = \frac{1}{K}\sum_k \|Q_k(x_{real}) - Q_k(x_{gen})\|_1
\]
这些项有助于降低 KS但可能牺牲时序一致性。
---
## 6. 评估指标Evaluation Metrics
### 6.1 KS分布一致性
\[
KS_i = \sup_x |F^{(i)}_{gen}(x) - F^{(i)}_{real}(x)|
\]
**解释**:越小代表分布越接近。
### 6.2 JSD离散一致性
\[
JSD(P,Q)=\tfrac12 KL(P\|M)+\tfrac12 KL(Q\|M)
\]
**解释**:衡量离散分布差异。
### 6.3 Lag1 Diff时序一致性
\[
\Delta_{lag1} = \frac{1}{d}\sum_i |\rho_1(\hat{x}_i) - \rho_1(x_i)|
\]
**解释**:衡量相邻时刻相关性偏差。
---
## 7. 诊断与分治思想Typeaware
现实中,少数变量会主导 KS
- setpoint/demand程序驱动
- actuator饱和/停留)
- derived tags确定性映射
因此我们提出 Typeaware 分治:
| 类型 | 特性 | 处理思路 |
|------|------|---------|
| Type1 | 程序驱动 | 单独建模/重采样 |
| Type2 | 控制器输出 | 条件生成 |
| Type3 | 执行器位置 | 状态 + 停留模型 |
| Type4 | PV 过程量 | 扩散建模 |
| Type5 | 派生变量 | 确定性映射 |
| Type6 | 辅助量 | 简单统计模型 |
当前实现为 **KSonly baseline**(经验重采样),只用于诊断上界。
---
## 8. 方法优势与局限
### 优势
- 将时序与分布解耦,训练更稳定
- 连续/离散混合扩散保证合法性
- 诊断工具完整,可定位问题变量
### 局限
- Type1/2/3 仍是难点
- KS 与时序存在 tradeoff
- KSonly baseline 破坏联合分布
---
## 9. 未来方向
1) Type1/2/3 条件生成器替代重采样
2) Type4 加工况 embedding
3) 增加跨变量相关性评估
---
## 10. 结论
maskddpm 通过“两阶段趋势 + 扩散残差”实现了更平衡的 ICS 序列生成框架。项目已经在大多数变量上取得合理分布对齐,但仍需针对程序驱动变量进行专门建模。该框架提供了一个清晰可扩展的研究路径。
---
## 附录:公式解释简表
| 公式 | 含义 |
|------|------|
| DDPM 加噪 | 描述连续变量如何被噪声腐蚀 |
| 连续损失 | 衡量去噪结果与真实残差距离 |
| 离散交叉熵 | 衡量遮蔽 token 是否正确恢复 |
| KS | 分布最大偏差 |
| JSD | 离散分布偏差 |
| Lag1 Diff | 时序相关差异 |
---
# Part 1 / 4 — 方法与理论基础(约 5k
> 本部分重点:把“这个方法为什么合理”讲清楚,建立读者对整体框架的直觉与理论基础。
## 1.1 工业时序生成的独特性
工业控制系统ICS数据和常规时序数据如股票、天气有本质差别。最关键的三点是
**(a) 强物理约束**
许多过程变量受到物理规律约束,比如液位变化不可能突然跳跃,压力和温度的变化速度有上限。这意味着模型必须尊重“惯性”与“平滑性”。
**(b) 强程序驱动**
工业系统中存在大量“外部控制信号”例如设定值setpoint、需求demand、运行模式。这些变量不是由过程自然演化产生而是外部程序/操作者指令造成。它们往往呈现“阶跃+停留”模式。
**(c) 混合变量类型**
同时存在连续变量(传感器、控制量)和离散变量(状态、模式、告警)。如果把离散变量强行当连续变量,会造成语义错误,例如出现“介于运行/停机之间”的无意义状态。
因此,工业时序生成不是单纯的“预测下一步”,而是需要同时兼顾分布、时序、离散合法性。
---
## 1.2 为什么单一模型会失败
如果用单一的序列模型(例如 LSTM/Transformer去同时优化分布与时序通常会出现以下冲突
- **分布损失优化 → 时序退化**
模型为了匹配每个变量的分布,会倾向于忽略时间结构,生成“看起来像分布,但像噪声”的序列。
- **时序损失优化 → 分布退化**
模型为了保持时序连续性,生成的数值往往过于平滑,导致分布偏离真实数据(尤其重尾、尖峰)。
- **离散变量错误**
离散变量被当作连续变量,会出现非法 token导致 JSD 增大。
因此,必须引入结构性拆分:让不同模块只负责自己擅长的部分。
---
## 1.3 设计原则:解耦与专职化
本项目遵循三条核心原则:
**原则 1解耦“时序”与“分布”**
- 时序结构由 Temporal 模块负责
- 分布细节由 Diffusion 模块负责
**原则 2连续与离散分开建模**
- 连续变量适合高斯扩散
- 离散变量适合 maskdiffusion
**原则 3对难学变量分类处理**
- 程序驱动变量Type1不适合 DDPM
- 执行器变量Type3需要额外模型
这些原则构成了本项目的总体方法论。
---
## 1.4 两阶段框架的理论直觉
两阶段方法可以理解为:
\[
X = \text{Trend}(X) + \text{Residual}(X)
\]
**趋势部分**:决定序列“怎么走”,例如逐渐上升/下降,保持物理惯性。
**残差部分**:决定数值“长什么样”,例如分布形状、重尾、异常点等。
如果直接用一个模型去学 \(X\),它必须同时解决趋势与分布问题。而我们拆成两部分后:
- 第一阶段GRU只学趋势
- 第二阶段Diffusion只学残差
这样能显著减少“时序 vs 分布”的冲突。
---
## 1.5 扩散模型为什么适合分布对齐
扩散模型DDPM是一类生成式模型核心思想是
1) 逐步加噪,把数据变成纯噪声
2) 逐步去噪,恢复真实分布
数学形式:
\[
x_t = \sqrt{\bar{\alpha}_t}\,x_0 + \sqrt{1-\bar{\alpha}_t}\,\epsilon
\]
去噪的目标是预测 \(\epsilon\) 或 \(x_0\)。
**优点**
- 可以拟合复杂、多峰、重尾分布
- 不依赖显式的概率密度函数
这正是 ICS 数据中“分布复杂”的现实需求。
---
## 1.6 为什么离散变量要用 maskdiffusion
离散变量的关键问题是“语义合法性”。如果直接用连续扩散,会生成不合法值(例如 0.3、1.7 等),导致模型失效。
maskdiffusion 的思路:
1) 随机遮蔽部分 token
2) 模型预测被遮蔽 token
损失是交叉熵:
\[
\mathcal{L}_{disc} = \frac{1}{|\mathcal{M}|}\sum_{(i,t)\in\mathcal{M}} CE(\hat{p}_{i,t},y_{i,t})
\]
这样保证输出必然来自 vocab语义上合法。
---
## 1.7 为什么需要 Typeaware 分治
即使有两阶段 + 混合扩散,仍然会发现 KS 被少数变量主导:
- Type1setpoint/demand几乎是“程序信号”
- Type3执行器具有“停留+饱和”特性
- Type5派生变量是确定性函数
这些变量从统计机制上就不适合扩散模型,因此需要额外设计。
Typeaware 的意义是:
- 把“扩散学不好的变量”剥离出去
- 让扩散专注于真正适合它的变量Type4
---
## 1.8 指标设计的意义(直觉解释)
我们采用三类核心指标:
**(a) KS分布对齐**
衡量生成分布与真实分布最大差距,越小越好。
**(b) JSD离散一致性**
衡量离散状态频率是否接近真实。
**(c) Lag1 Diff时序一致性**
衡量相邻时刻相关结构是否接近真实。
这三个指标对应三个核心目标:分布、时序、合法性。
---
## 1.9 理论层面的 tradeoff
可以理解为:
- KS 低 → 表示分布好
- Lag1 diff 低 → 表示时序好
但在实践中:
- 如果模型过度优化 KS序列可能变成“随机抽样” → 时序崩坏
- 如果模型过度优化时序,分布会过于平滑 → KS 上升
因此,一个好的模型必须在二者之间找到平衡点。这正是本项目提出两阶段框架的核心动机。
---
## 1.10 小结
本部分给出了方法的理论基础:
1) ICS 数据复杂且混合类型,单一模型难以兼顾
2) 两阶段结构用于解耦时序与分布
3) 混合扩散用于处理连续与离散
4) Typeaware 分治用于处理“扩散难学”的变量
下一部分将详细介绍**训练流程与损失设计**。
---
# Part 2 / 4 — 训练流程与损失设计(约 5k
> 本部分重点:让普通读者清楚“模型训练到底在做什么、每一步优化的目标是什么、为什么需要这些 loss”。
## 2.1 训练流程总览(高层视角)
整个训练分为两个阶段:
1) **Temporal Stage**训练一个时序模型GRU学习序列趋势。
2) **Diffusion Stage**:训练扩散模型,学习趋势残差的分布。
换句话说,训练不是一次性完成,而是先学“怎么变化”,再学“变化后的数值细节”。
---
## 2.2 Temporal Stage学趋势的意义
工业过程的动态通常平滑且具有惯性。假设我们直接用扩散模型学习整个序列,那么它必须同时完成“序列走向”和“数值分布”的建模任务。这样会产生冲突:
- 过度优化分布 → 序列变随机
- 过度优化时序 → 分布变窄
Temporal Stage 的目的就是先把“走向”固定住。
### 训练方式(直觉)
- 输入:连续变量序列
- 目标:预测下一时刻的连续序列
- 损失MSE
这样模型学到的是“趋势结构”,而不是复杂分布。
---
## 2.3 Diffusion Stage学残差分布
在 Temporal Stage 得到趋势序列 \(T\) 后,我们构造残差:
\[
R = X - T
\]
Diffusion Stage 的目标是拟合残差分布。这样最终生成结果为:
\[
\hat{X} = \hat{R} + T
\]
**直观理解**
- 趋势提供骨架
- 残差提供“真实的噪声与细节”
---
## 2.4 连续分支损失设计
### 基本损失
在扩散中,我们可以选择预测噪声 \(\epsilon\),或直接预测原始 \(x_0\)
\[
\mathcal{L}_{cont} =
\begin{cases}
\|\hat{\epsilon} - \epsilon\|^2 & (eps 预测)\\
\|\hat{x}_0 - x_0\|^2 & (x0 预测)
\end{cases}
\]
### 为什么要预测 eps 或 x0
- eps 预测更稳定(扩散原始形式)
- x0 预测更容易做分布校正
因此在不同实验中会切换。
---
## 2.5 离散分支损失设计
离散变量使用 maskdiffusion。训练时随机遮蔽一部分 token
\[
\mathcal{L}_{disc} = \frac{1}{|\mathcal{M}|}\sum_{(i,t)\in\mathcal{M}} CE(\hat{p}_{i,t},y_{i,t})
\]
直觉解释:
- 只对被 mask 的 token 计算交叉熵
- 学到的是“在上下文中恢复正确状态”
这样避免了离散变量非法输出问题。
---
## 2.6 总损失与权衡
最终损失采用线性加权:
\[
\mathcal{L} = \lambda\mathcal{L}_{cont} + (1-\lambda)\mathcal{L}_{disc}
\]
**\(\lambda\) 的作用**
- \(\lambda\) 大 → 连续分布更好,离散可能退化
- \(\lambda\) 小 → 离散更好,连续分布可能偏差
这是训练中的关键权衡参数。
---
## 2.7 SNR 加权(为什么需要)
扩散过程早期噪声大、后期噪声小。直接用统一损失会导致训练不均衡。
因此引入 SNR 权重:
\[
\mathcal{L}_{snr} = \frac{\text{SNR}_t}{\text{SNR}_t+\gamma}\mathcal{L}_{cont}
\]
直觉解释:
- 在高噪声阶段,降低损失权重
- 在低噪声阶段,更强调精细结构
---
## 2.8 分位数损失(为什么对 KS 有效)
KS 本质是比较分布的 CDF。
因此加入分位数损失:
\[
\mathcal{L}_Q = \frac{1}{K}\sum_k \|Q_k(x_{real}) - Q_k(x_{gen})\|_1
\]
直觉解释:
- 让模型对齐分布的关键分位点
- 尤其改善重尾和尖峰变量
---
## 2.9 残差统计约束(防止塌缩)
为了避免残差分布塌缩,加入 mean/std 对齐:
\[
\mathcal{L}_{stat} = \|\mu_{gen}-\mu_{real}\|^2 + \|\sigma_{gen}-\sigma_{real}\|^2
\]
解释:
- 约束残差均值与方差
- 防止模型学到“过于平滑”残差
---
## 2.10 为什么训练会慢(深度解释)
1) **两阶段训练**
- Temporal 训练 + Diffusion 训练
- 训练成本几乎翻倍
2) **扩散步数大**
- timesteps=600
- 每次训练/采样都要反复迭代
3) **Transformer backbone**
- 自注意力复杂度随序列长度平方增长
- seq_len=128 时显存和时间增加明显
---
## 2.11 训练中的常见异常与解释
**(a) loss 降得慢**
- 原因:扩散训练本身慢
- 解决:降低 timesteps 或增大 batch
**(b) loss 大幅波动**
- 原因:噪声采样随机性 + 分布复杂性
- 解决:增加 EMA 或降低学习率
**(c) lag1 差**
- 原因trend 学得不足或 seq_len mismatch
- 解决:提高 temporal_epochs并统一 seq_len 与 sample_seq_len
---
## 2.12 小结
本部分强调了训练的核心逻辑:
- Temporal Stage 负责时序结构
- Diffusion Stage 负责分布残差
- Loss 设计通过多项损失平衡分布与时序
下一部分将深入说明评估与诊断体系。
---
# Part 3 / 4 — 评估与诊断体系(约 5k
> 本部分重点:让读者理解“如何判断模型好坏”,以及“为什么需要诊断工具”。
## 3.1 为什么只看 loss 不够
训练 loss 只能说明“模型在拟合训练目标”,但不一定等价于真实质量。
在本项目中loss 可能降低,但 KS 或 lag1 仍可能很差,因为:
- loss 主要优化局部误差,而 KS 衡量整体分布差异
- 模型可能学到“平均值附近”,但尾部严重缺失
- 离散变量可能预测错误,但 loss 依旧较小
因此,必须使用更贴近目标的评估指标。
---
## 3.2 分布一致性指标KS
KS 统计量定义为:
\[
KS_i = \sup_x |F^{(i)}_{gen}(x)-F^{(i)}_{real}(x)|
\]
**解释**
- \(F_{gen}\):生成分布的累积分布函数
- \(F_{real}\):真实分布的累积分布函数
- KS 表示两条 CDF 曲线的最大距离
**直观理解**
- KS 小 → 生成分布几乎重合
- KS 大 → 分布偏移明显
**注意**:在尖峰/离散化变量上,必须使用 tieaware KS否则会被高估。
---
## 3.3 离散一致性指标JSD
JensenShannon Divergence
\[
JSD(P,Q)=\tfrac12 KL(P\|M)+\tfrac12 KL(Q\|M)
\]
其中 \(M = (P+Q)/2\)。
**解释**
- 衡量离散分布差异
- 适合评估状态类变量
- 越小越好
---
## 3.4 时序一致性指标Lag1 Diff
Lag1 相关差异:
\[
\Delta_{lag1} = \frac{1}{d}\sum_i |\rho_1(\hat{x}_i)-\rho_1(x_i)|
\]
**解释**
- 计算每个变量的相邻相关性
- 衡量“时间上的惯性是否正确”
- 越小越好
---
## 3.5 为什么要做诊断
即使平均 KS 下降,也可能是“部分变量非常好,部分变量非常差”。
这会误导优化方向。因此必须诊断:
- 哪些变量最差?
- 它们的分布差在什么区间?
- 它们属于哪种类型?
---
## 3.6 诊断工具 1Perfeature KS 排序
我们用 `ranked_ks.py` 输出:
- 变量 KS 从高到低排序
- 观察“topN 主导问题变量”
**意义**
- 精准定位瓶颈
- 避免盲目改模型
---
## 3.7 诊断工具 2CDF 图
`diagnose_ks.py` 绘制 CDF 对比:
- 真实 vs 生成
- 可直观看到“尾部缺失 / 中位数偏移 / 饱和堆积”
这是理解 KS 高的最直接手段。
---
## 3.8 诊断工具 3Filtered KS
Filtered KS 会剔除:
- 标准差为 0 的变量
- KS 极端异常的变量
**意义**
- 判断“整体模型是否已经合理”
- 证明 KS 被少数变量拖垮
---
## 3.9 Typewise 评估
为了对应 Typeaware 分治策略,我们也统计:
- Type1 KS 均值
- Type2 KS 均值
- Type3 KS 均值
-
这样可以看到不同类型变量的贡献。
---
## 3.10 评估指标的 tradeoff
现实中常见情况:
- KS 下降 → lag1 上升
- lag1 下降 → KS 上升
因此需要在实验中明确目标:
- 若目标是分布一致性,接受时序退化
- 若目标是时序一致性,接受分布偏差
这也是论文中必须讨论的权衡点。
---
## 3.11 KSonly baseline 的作用
KSonly baseline 是一种诊断工具:
- 把难学变量替换为真实分布采样
- 观察整体 KS 降到的“上限”
意义:
- 如果 KS 仍高 → 说明模型整体分布学得差
- 如果 KS 明显降 → 说明瓶颈集中在少数变量
---
## 3.12 评估流程的完整逻辑
评估流程包含:
1) 生成数据generated.csv
2) 与真实数据对比,计算 KS/JSD/lag1
3) 输出 eval.json
4) 额外诊断CDF/Rank/Filtered
5) 若启用后处理,再评估 eval_post.json
---
## 3.13 小结
本部分说明:
- 为什么必须用 KS/JSD/lag1 评估
- 为什么要做 perfeature 诊断
- 为什么引入 Typewise 分治评估
下一部分将讨论实验观察、局限与未来方向。
---
# Part 4 / 4 — 实验观察、局限与未来方向(约 5k
> 本部分重点:总结实验现象,解释为什么会出现这些现象,并给出未来工作的方向。
## 4.1 典型实验现象回顾
在大量实验中,我们观察到几个稳定现象:
1) **KS 可以明显下降,但 lag1 可能变差**
- 当加强分布对齐quantile loss、校准分布更好但时序一致性下降
2) **离散 JSD 相对稳定**
- 离散 mask diffusion 保证 token 合法性
- JSD 通常不会像 KS 那样剧烈波动
3) **少数变量主导 KS**
- Type1/2/3 是 KS 的主要来源
- 说明整体分布其实已经合理,问题集中在少数难学变量
---
## 4.2 为什么 Type1/2/3 变量难学
**Type1setpoint/demand**
- 本质是外部程序驱动,而非系统响应
- 呈现长时间常数 + 突然阶跃
- 扩散模型更擅长连续变化,难以准确复现这种跳变
**Type2controller output**
- 受控制算法约束PID
- 值域常常饱和于 0 或 100
- 分布极端尖峰
**Type3actuator positions**
- 常有停留、饱和和离散档位
- 实际变化规律与简单连续噪声不同
这些特性说明:必须用专门的模型去建模,而不是依靠通用 DDPM。
---
## 4.3 KSonly baseline 的意义与局限
KSonly baseline经验重采样告诉我们
- **理论上 KS 能到多低**
- 确认瓶颈是否在少数变量
但它的局限也非常明显:
- 破坏变量之间的依赖关系
- 无法保证联合分布一致
- 只能作为诊断工具,而非最终生成器
---
## 4.4 时序 vs 分布的理论矛盾
在本项目中,时序与分布的矛盾非常典型:
- 如果只关注分布:序列会失去惯性,变成“随机抽样”
- 如果只关注时序:序列会变平滑,失去重尾或多模态特征
两阶段架构正是为了缓解这种矛盾,但仍无法彻底消除。
---
## 4.5 为什么需要条件建模Conditioning
真实工业数据往往依赖于“工况/模式”。
例如:
- 不同 setpoint 会导致不同 PV 分布
- 不同状态会导致执行器行为差异
因此,未来需要在模型中加入条件:
\[
P(X|C)\quad \text{而不是}\quad P(X)
\]
这种条件建模可以显著减少分布误差。
---
## 4.6 未来方向(具体可操作的路线)
### 方向 1Type1 程序生成器
- 用 HMM 或 changepoint 模型生成 setpoint/demand
- 再作为条件输入扩散模型
### 方向 2Type2 控制器模拟器
- 训练一个小型控制器网络
- 根据 setpoint + PV 输出控制量
### 方向 3Type3 执行器动力学模型
- 用“状态 + 停留 + 速率”建模
- 比纯重采样更真实
### 方向 4Type4 PV 的条件扩散
- 加入工况 embedding
- 在不同 regime 下分布更一致
---
## 4.7 实验写作建议(论文表达角度)
在写论文时,可以这样组织:
1) 展示 KS/JSD/lag1 的全局指标
2) 展示 perfeature KS 排序
3) 强调“少数变量主导错误”
4) 提出 Typeaware 分治策略
5) 用 KSonly baseline 作为诊断上界
这样能显得方法合理且有深度。
---
## 4.8 结论总结
本项目提供了一条清晰路径:
- 先解耦时序与分布(两阶段)
- 再解决连续与离散(混合扩散)
- 最后用 Typeaware 分治处理难变量
因此,它不仅是一个生成模型,更是一套“如何诊断、如何改进”的系统性方法。
---
# 全文总结
maskddpm 的核心贡献在于 **结构性拆解问题**
- 时序结构与分布对齐分开建模
- 连续与离散分开扩散
- 难变量类型单独处理
通过这些结构化手段,本项目为工业时序生成提供了一个可解释、可扩展的方案。它不是单纯追求指标最优,而是提供了一套完整的研究路径。