扩散模型几何相变实验框架 — 研究不同环境维度
固定数据的有效流形维度
-
泛化状态
$M_{gen}$ :模型学会了流形结构,能生成新颖样本 -
记忆状态
$M_{mem}$ :模型背诵了训练集,发生模式坍塌 - 相变几何:通过余弦相似度场、记忆比例等指标刻画相变的发生时机和几何性质
DiffusionGeometryLab/
│
├── configs/ # 配置文件
│ ├── default.yaml # 全局默认配置(CelebA)
│ ├── toy_test.yaml # 合成数据快速测试配置
│ ├── data/
│ │ ├── celeba_4096.yaml # d=4096 覆盖
│ │ └── celeba_16384.yaml # d=16384 覆盖
│ └── scheduler/
│ ├── vp.yaml # VP 调度参数
│ ├── ve.yaml # VE 调度参数
│ └── of.yaml # OF 调度参数
│
├── src/ # 核心源码
│ ├── data/ # 数据管线
│ │ ├── parquet_loader.py # Parquet 加载
│ │ ├── preprocessing.py # 灰度化 + resize
│ │ ├── zero_padding.py # 零填充(核心维度控制)
│ │ ├── dataset.py # Dataset/DataLoader
│ │ ├── synthetic.py # 合成数据生成(圆环等)
│ │ └── semantic_pairs.py # 语义配对构建
│ │
│ ├── models/ # 模型定义
│ │ ├── unet.py # 自适应维度 UNet
│ │ └── score_network.py # 得分网络封装
│ │
│ ├── schedulers/ # 噪声调度器
│ │ ├── base_scheduler.py # 抽象基类
│ │ ├── vp_scheduler.py # VP (Variance Preserving)
│ │ ├── ve_scheduler.py # VE (Variance Exploding)
│ │ └── of_scheduler.py # OF (Optimal Flow)
│ │
│ ├── training/ # 训练引擎
│ │ ├── trainer.py # 核心训练循环
│ │ ├── checkpoint_manager.py # Checkpoint 管理
│ │ └── phase_detector.py # M_gen/M_mem 自动检测
│ │
│ ├── sampling/ # 采样引擎
│ │ ├── reverse_sampler.py # DDIM/Euler/Heun 采样器
│ │ └── trajectory_store.py # 轨迹存储
│ │
│ ├── metrics/ # 评估指标
│ │ ├── cosine_field.py # 余弦相似度场(3种)
│ │ ├── fid_evaluator.py # FID + 轨迹FID
│ │ ├── memory_ratio.py # 动态记忆比例 f_mem(t)
│ │ ├── reconstruction_gap.py # 重建误差差距
│ │ ├── lpips_ssim.py # LPIPS + SSIM
│ │ ├── nn_search.py # Faiss 最近邻
│ │ └── evaluator.py # 统一评估门面
│ │
│ ├── logging/ # 日志与可视化
│ │ ├── experiment_logger.py # WandB/TensorBoard 抽象层
│ │ └── plot_utils.py # 绘图工具
│ │
│ └── utils/ # 工具模块
│ ├── config.py # 配置加载与验证
│ ├── seed.py # 随机种子管理
│ ├── device.py # GPU/CPU 设备管理
│ └── math_ops.py # 批量数学运算
│
├── scripts/ # 运行脚本
│ ├── toy_full_pipeline.py # ★ 合成数据端到端测试
│ ├── toy_circle_demo.py # 2D 圆环可视化 demo
│ ├── train.py # 正式训练入口
│ ├── evaluate.py # 全指标评估入口
│ ├── sweep_dimensions.py # 多维度批量实验
│ ├── visualize_trajectories.py # 轨迹可视化
│ └── verify_pipeline.py # 管线单元验证
│
├── tests/ # 测试
├── notebooks/ # Jupyter notebooks
├── setup.py # 安装配置
├── requirements.txt # 依赖
└── README.md # 本文件
# 克隆项目
cd /your/project/path
# 安装依赖
pip install torch torchvision omegaconf matplotlib numpy faiss-cpu
# 可选依赖(完整功能)
pip install wandb tensorboard torchmetrics lpips h5py pandas pyarrow
# 安装项目(开发模式)
pip install -e .# 用圆环数据走通完整管线(~3-5分钟)
python scripts/toy_full_pipeline.py
# 查看结果
ls outputs/toy_circle_test/
# → 01_synthetic_data.png 02_trajectory.png 03_reconstruction_gap.png
# 04_cosine_fields.png 05_memory_ratio.png 06_dimension_comparison.png
# report.txt checkpoints/# 纯 2D 扩散过程可视化(无需 UNet)
python scripts/toy_circle_demo.py
ls outputs/toy_circle_demo/
# → forward_process.png score_field.png reverse_process.png
# generation_quality.png dimension_experiment.png# 默认配置(d=4096)
python scripts/train.py --config configs/default.yaml
# 自定义维度
python scripts/train.py --config configs/default.yaml \
--overrides data.target_dim=16384 data.target_resolution=128
# 多维度批量实验
python scripts/sweep_dimensions.py --dimensions 4096 16384
# 评估(需要训练完成后的 checkpoint)
python scripts/evaluate.py \
--config configs/default.yaml \
--ckpt_dir outputs/phase_transition_d4096/.../checkpoints| 指标 | 定义 | 物理意义 |
|---|---|---|
| 同一 |
泛化与记忆模型的决策差异 | |
| $S_{cos}(\hat{s}\theta, M{emp})$ | 模型预测 vs 指向训练样本的理想方向 | 过拟合程度 |
| 语义相似对注入相同噪声后的输出对齐度 | 局部曲率崩溃检测 |
| 指标 | 定义 |
|---|---|
| 轨迹 FID | 反向采样中间态 |
|
|
|
| 重建差距 |
基于 OmegaConf 的分层配置:
# 基础配置 + 维度覆盖 + CLI 覆盖
# 优先级: CLI > overlay > default
python scripts/train.py \
--config configs/default.yaml \
--overrides
```markdown
--overrides \
data.target_dim=16384 \
scheduler.type=ve \
training.max_steps=100000 \
training.batch_size=32| 配置路径 | 说明 | 默认值 |
|---|---|---|
data.grayscale_size |
灰度图边长(决定 |
32 |
data.target_dim |
环境维度 |
4096 |
scheduler.type |
噪声调度:vp / ve / of
|
vp |
model.output_type |
输出模式:noise / score / velocity
|
noise |
training.max_steps |
最大训练步数 | 500000 |
training.phase_detection.enabled |
是否启用相变自动检测 | true |
| 调度器 | 数学定义 | 推荐搭配 |
|---|---|---|
| VP | output_type=noise |
|
| VE | output_type=score |
|
| OF | output_type=velocity |
训练过程中自动监控并保存两个关键 checkpoint:
- 触发条件: FID 达到全局最低后连续
fid_patience次未改善 - 保存文件:
checkpoints/model_gen.pt - 物理意义: 学会了流形结构,能生成新颖样本
-
触发条件: 满足以下任一:
- 重建误差差距 >
recon_gap_threshold(默认 0.3) - LPIPS <
lpips_threshold(默认 0.05) - 且训练步数 >
mem_step_multiplier×$\tau_{gen}$
- 重建误差差距 >
-
保存文件:
checkpoints/model_mem.pt - 物理意义: 背诵了训练集,发生模式坍塌
固定 m = 1024(32×32 灰度图)
d = 4096 (64×64) → d/m = 4
d = 16384 (128×128) → d/m = 16
d = 65536 (256×256) → d/m = 64
观察:
1. τ_gen 和 τ_mem 如何随 d/m 变化?
2. 余弦场曲线的形状变化?
3. f_mem(t) 的崩溃点如何移动?
使用圆环等低维流形嵌入高维空间,在可控环境下验证:
# 修改 configs/toy_test.yaml 中的参数
python scripts/toy_full_pipeline.py支持的合成数据类型(configs/toy_test.yaml 中设置):
-
circle: 单位圆($m=1$) -
swiss_roll: Swiss Roll($m=2$) -
two_moons: 双月形($m=1$)
outputs/toy_circle_test/
├── 01_synthetic_data.png # 原始数据 + 编码后图像
├── 02_trajectory.png # 反向采样轨迹
├── 03_reconstruction_gap.png # 训练/测试重建差距
├── 04_cosine_fields.png # 余弦相似度场
├── 05_memory_ratio.png # 动态记忆比例
├── 06_dimension_comparison.png # 多维度 FID 对比
├── report.txt # 文本摘要报告
├── raw_points.pt # 原始 2D 点数据
└── checkpoints/
├── latest.pt # 最新 checkpoint
└── final.pt # 最终 checkpoint
outputs/phase_transition_d4096/
├── checkpoints/
│ ├── model_gen.pt # ★ 泛化状态 checkpoint
│ ├── model_mem.pt # ★ 记忆状态 checkpoint
│ ├── latest.pt
│ └── step_*.pt
├── evaluation/
│ ├── cosine_fields.png # 三种余弦场对比
│ ├── cosine_train_test.png # Train-Test 余弦场
│ └── recon_gap_*.png # Gen/Mem 重建差距
├── tb_logs/ # TensorBoard 日志
└── experiment.log # 训练日志