Skip to content

aybeering/energy-based-models-tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔥 Energy-Based Models (EBM) 完整学习项目

Python 3.8+ PyTorch License: MIT

一个从零开始学习和实现Energy-Based Models的完整教育项目。通过理论讲解、代码实现和实际应用,帮助我们深入理解这一强大的生成建模技术。

适用人群:机器学习研究者、深度学习爱好者、以及希望了解生成模型的同学们

✨ 项目特色

  • 📚 系统性学习路径:从基础概念到高级应用
  • 💻 完整代码实现:包含训练、采样、评估等全流程
  • 🎯 实际应用案例:图像去噪、生成建模等
  • 📊 丰富可视化:能量景观、训练过程、结果分析
  • 🧪 交互式学习:Jupyter notebooks支持实验探索

🚀 快速开始

1. 环境配置

# 克隆项目
git clone https://github.com/yiozeeyoung/energy-based-models-tutorial.git
cd energy-based-models-tutorial

# 安装依赖
pip install -r requirements.txt

2. 开始学习

# 启动Jupyter Notebook
jupyter notebook

# 打开第一个教程
# 浏览器中打开: notebooks/01_ebm_basics.ipynb

3. 运行示例

# 运行简单1D EBM示例
python -m src.examples.simple_1d_example

📚 学习路径

🎓 理论基础

💻 实践教程

教程 内容 难度
01_ebm_basics.ipynb EBM基础概念和简单实现
02_simple_ebm.ipynb 多维数据和改进架构 ⭐⭐
03_contrastive_divergence.ipynb 对比散度算法深入 ⭐⭐⭐
04_denoising_example.ipynb 图像去噪应用 ⭐⭐⭐
05_generative_modeling.ipynb 高质量生成建模 ⭐⭐⭐⭐

🏗️ 项目架构

📦 项目根目录
├── 📁 notebooks/          # 🎓 交互式学习教程
├── 📁 src/               # 💻 核心源代码
│   ├── 📁 models/        #   🧠 EBM模型实现
│   ├── 📁 training/      #   🎯 训练算法
│   ├── 📁 utils/         #   🛠️ 工具函数
│   └── 📁 examples/      #   🎨 应用示例
├── 📁 docs/              # 📖 文档和理论
├── 📁 experiments/       # 🧪 实验结果
├── 📁 data/              # 📊 数据文件
└── 📁 .vscode/           # 🔧 开发配置

🧠 核心概念

Energy-Based Models 基础

EBM通过学习能量函数 $E_\theta(x)$ 来建模数据分布:

$$p_\theta(x) = \frac{e^{-E_\theta(x)}}{Z_\theta}$$

  • 🔥 低能量 → 高概率(真实数据)
  • ❄️ 高能量 → 低概率(噪声数据)

训练算法

  • 对比散度 (CD): 近似极大似然估计
  • 分数匹配: 避免配分函数计算
  • Langevin动力学: MCMC采样方法

🛠️ 使用示例

创建和训练EBM

from src.models.simple_ebm import SimpleEBM
from src.training.contrastive_divergence import train_ebm_cd
from src.utils.data_utils import generate_toy_data

# 创建模型
model = SimpleEBM(input_dim=2, hidden_dims=[128, 64])

# 生成训练数据
data = generate_toy_data('moons', n_samples=1000)

# 训练模型
history = train_ebm_cd(model, data, n_epochs=100)

# 从模型采样
samples = model.sample(n_samples=500)

可视化结果

from src.utils.visualization import plot_energy_landscape, plot_samples_comparison

# 绘制能量景观
plot_energy_landscape(model, x_range=(-3, 3), y_range=(-3, 3))

# 比较真实数据和生成数据
plot_samples_comparison(real_data, generated_data)

📊 项目成果展示

运行notebook后,我们将看到:

  • 🎨 能量景观可视化:理解模型如何分配能量
  • 📈 训练过程监控:损失函数和能量变化
  • 🎲 采样结果对比:真实数据 vs 生成数据
  • 📊 定量评估指标:Wasserstein距离、KS检验等

学习路径

1. 理论基础 (notebooks/01_ebm_basics.ipynb)

  • 什么是Energy-Based Models
  • 能量函数的概念
  • 概率分布与能量的关系
  • EBM vs 其他生成模型

2. 简单实现 (notebooks/02_simple_ebm.ipynb)

  • 实现基础的EBM
  • 理解参数化能量函数
  • 简单的训练过程

3. 对比散度算法 (notebooks/03_contrastive_divergence.ipynb)

  • CD算法原理
  • 实现CD训练
  • 理解正负相的概念

4. 实际应用 (notebooks/04-05)

  • 图像去噪
  • 生成新样本
  • 异常检测

主要特性

  • 📚 完整的理论解释:从数学原理到直观理解
  • 💻 渐进式代码实现:从简单到复杂的EBM实现
  • 🎯 实际应用示例:图像处理、生成建模等
  • 📊 可视化工具:帮助理解训练过程和结果
  • 🧪 交互式学习:Jupyter notebooks支持实验和探索

依赖项

  • Python 3.8+
  • PyTorch
  • NumPy
  • Matplotlib
  • Jupyter
  • Scikit-learn
  • PIL (Pillow)

贡献指南

我们欢迎所有形式的贡献!请参考以下方式:

  • 🐛 报告Bug:在Issues中描述遇到的问题
  • 💡 功能建议:提出新的想法和改进建议
  • 📝 文档改进:完善教程和说明文档
  • 🔧 代码贡献:提交Pull Request改进代码

请确保:

  • 代码遵循项目的编码规范
  • 添加适当的测试和文档
  • 提交前运行所有测试用例

致谢

感谢以下资源和研究为本项目提供的灵感:

  • Yann LeCun关于Energy-Based Models的经典教程
  • Geoffrey Hinton的对比散度算法论文
  • 深度学习社区的开源贡献者们

许可证

本项目采用MIT许可证 - 详见 LICENSE 文件

引用

如果这个项目对您的研究有帮助,请考虑引用:

@misc{ebm-learning-project,
  title={Energy-Based Models: A Complete Learning Project},
  author={},
  year={2025},
  url={https://github.com/yiozeeyoung/energy-based-models-tutorial}
}

开始我们的Energy-Based Models学习之旅吧!🚀

About

基于能量模型的教程

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published