Bayesian Neural Networks 项目介绍
项目概述
Bayesian-Neural-Networks 是一个利用 PyTorch 实现多种近似推断方法的项目。这些方法主要用于人工神经网络中的贝叶斯推理,帮助提升模型在不确定性评估、准确性提升等方面的表现。这些推断方法包括:
- 反向传播贝叶斯(Bayes by Backprop)
- 反向传播贝叶斯结合局部重参数化技巧
- MC dropout
- 随机梯度Langevin动力学(SGLD)
- 预条件SGLD
- 克罗内克因子分解拉普拉斯近似
- 带有规模自适应的随机梯度哈密尔顿蒙特卡洛
此外,项目还提供了自助MAP集合(Bootstrap MAP Ensemble)的代码实现。
环境要求
项目是用 Python 2.7 和 PyTorch 1.0.1 书写的,要求以下环境支持:
- PyTorch
- Numpy
- Matplotlib
如果有 CUDA 环境,程序会自动利用加速;模型也可以在 CPU 上运行。
使用说明
基本结构
项目执行中包括多个实验:
- 回归实验:在自定义以及 UCI 数据集上进行同质和异质回归测试。
- MNIST 分类实验:在 MNIST 数据集上训练模型并评估模型性能,包括不确定性实验、权重分布绘图和权重修剪。
项目中的 Jupyter Notebooks 和 Python 脚本提供了实验过程示范和结果可视化。
具体方法介绍
反向传播贝叶斯(Bayes by Backprop)
此方法使用贝叶斯推断通过反向传播更新神经网络参数。用户可以在 MNIST 数据集上训练和测试模型。
MC Dropout
MC Dropout 利用在训练和推断过程中使用固定的 dropout 来进行模型不确定性评估。提供对 MNIST 和其他回归数据集的测试。
随机梯度 Langevin 动力学(SGLD)
这个方法通过增加随机噪声来适应网络的权重以近似后验分布。此方法支持与 MNIST 数据集一同使用。
克罗内克因子分解拉普拉斯近似
通过计算与后验分布模式的二阶泰勒级数逼近,来实现对 Hessian 矩阵的近似,并适用于 MNIST 数据集。
不确定性与结果分析
项目提供了全面的实验结果,包括:
- 回归任务:包含同质和异质回归测试结果示例。
- MNIST 分类和不确定性测试:使用多种模型和方法进行准确性及不确定性评估,提供详细的对比分析。
- 对抗攻击鲁棒性:在面对对抗性样本时模型的表现。
- 权重分布与修剪:用于评估不同模型在 MNIST 数据上的权重变化和剪枝效果。
结论
Bayesian-Neural-Networks 项目通过多种方法的实现和实验分析,展示了在不同场景下的模型推断能力,为进一步的贝叶斯神经网络研究提供了便利和支持。该项目通过提供不同方法的代码和实验例子,帮助研究人员更好地理解在机器学习模型中应用贝叶斯推断的可能性和挑战。