aleximmer/Laplace
Laplace approximations for Deep Learning.
什么是 Laplace?
Laplace 是一个 Python 库,为任何 PyTorch 神经网络带来贝叶斯不确定性感知推断。它实现了 Laplace 近似 —— 一种通过在网络参数周围拟合高斯分布,将训练好的确定性模型转变为概率模型的方法。使用此库,您可以:
- 对所有权重、选定的子网络或仅最后一层进行后验近似。
- 估计边际概似(用于模型比较)。
- 为分类或回归产生预测分布,提供校准过的不确定性估计。
此套件与研究论文 Laplace Redux – Effortless Bayesian Deep Learning (NeurIPS 2021) 相关,作者并提供了另一个仓库来存放该论文的实验代码。
如何使用?
- 安装 – 核心套件位于 PyPI,名称为
laplace-torch:
(可通过第二个pip install laplace-torchpip install指令加入选用的后端。) - 封装训练好的模型 – 拥有 PyTorch 模型后,创建一个
Laplace对象:
您需告知类您正在解决的任务、要以概率方式处理的参数,以及如何近似 Hessian(例如对角线)。from laplace import Laplace la = Laplace(model, "classification", subset_of_weights="all", hessian_structure="diag") - 拟合近似 – 使用您的训练数据加载器调用
fit。库会计算 MAP 点处损失函数的(近似)Hessian。 - 调整先验 – 高斯先验的精确度是一个超参数。Laplace 提供了一些自动化方案,例如网格搜索交叉验证:
la.optimize_prior_precision(method="gridsearch", pred_type="glm", link_approx="probit", val_loader=val_loader) - 进行不确定性预测 – 拟合完成后,您可以使用选定的预测近似方法获得预测概率(或回归的平均值/方差):
结果是一个分布而非单一点估计,可用于校准信心、分布外检测、模型选择等。pred = la(x, pred_type="glm", link_approx="probit")
README 指向了详尽的文档与开发者指南,以进行更深入的自定义。
谁会觉得这很有用?
- 研究人员:探索贝叶斯深度学习、模型选择或持续学习场景,且需要现成、经过良好测试的 Laplace 实现。
- 从业人员:已经拥有 PyTorch 模型,想要在不重新训练完整贝叶斯神经网络的情况下增加不确定性量化。
- 学生:学习后验近似;库的 API 反映了数学步骤(拟合 → 优化先验 → 预测),使实验变得简单直接。
限制与实务注意事项
- 近似并非完全自动 – 您需要选择 Hessian 结构(diag, kron, full 等)、先验精确度优化方法以及预测近似(GLM, MC 等)。README 警告性能会因这些选择而有很大差异。
- 计算完整的 Hessian 代价高昂;大多数用户依赖对角线或 Kronecker 分解近似。
- 该库目前仅针对 PyTorch;其他框架未开箱即用支持。
快速入门检查清单
pip install laplace-torch- 训练或加载一个 PyTorch 模型。
- 使用
Laplace(...)封装它,指定任务与 Hessian 风格。 - 调用
fit(train_loader)。 - 使用
optimize_prior_precision调整先验(gridsearch 是安全的默认值)。 - 使用
la(x, ...)取得预测分布。
哪里可以了解更多?
- 文档与 API 参考:https://aleximmer.github.io/Laplace
- 论文:Laplace Redux – Effortless Bayesian Deep Learning (NeurIPS 2021) – 提供理论与实证结果。
- 实验代码:https://github.com/runame/laplace-redux (重现论文实验)。
- 开发者指南:https://aleximmer.github.io/Laplace/devs_guide (贡献、扩展后端等)
相关
- 项目
- 项目
- 项目
- 项目