一个从零开始学习和实现Energy-Based Models的完整教育项目。通过理论讲解、代码实现和实际应用,帮助我们深入理解这一强大的生成建模技术。
适用人群:机器学习研究者、深度学习爱好者、以及希望了解生成模型的同学们
- 📚 系统性学习路径:从基础概念到高级应用
- 💻 完整代码实现:包含训练、采样、评估等全流程
- 🎯 实际应用案例:图像去噪、生成建模等
- 📊 丰富可视化:能量景观、训练过程、结果分析
- 🧪 交互式学习:Jupyter notebooks支持实验探索
# 克隆项目
git clone https://github.com/yiozeeyoung/energy-based-models-tutorial.git
cd energy-based-models-tutorial
# 安装依赖
pip install -r requirements.txt# 启动Jupyter Notebook
jupyter notebook
# 打开第一个教程
# 浏览器中打开: notebooks/01_ebm_basics.ipynb# 运行简单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/ # 🔧 开发配置
EBM通过学习能量函数
- 🔥 低能量 → 高概率(真实数据)
- ❄️ 高能量 → 低概率(噪声数据)
- 对比散度 (CD): 近似极大似然估计
- 分数匹配: 避免配分函数计算
- Langevin动力学: MCMC采样方法
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检验等
- 什么是Energy-Based Models
- 能量函数的概念
- 概率分布与能量的关系
- EBM vs 其他生成模型
- 实现基础的EBM
- 理解参数化能量函数
- 简单的训练过程
- CD算法原理
- 实现CD训练
- 理解正负相的概念
- 图像去噪
- 生成新样本
- 异常检测
- 📚 完整的理论解释:从数学原理到直观理解
- 💻 渐进式代码实现:从简单到复杂的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学习之旅吧!🚀