aleximmer/Laplace

Laplace approximations for Deep Learning.

什么是 Laplace?

Laplace 是一个 Python 库,为任何 PyTorch 神经网络带来贝叶斯不确定性感知推断。它实现了 Laplace 近似 —— 一种通过在网络参数周围拟合高斯分布,将训练好的确定性模型转变为概率模型的方法。使用此库,您可以:

  • 对所有权重、选定的子网络或仅最后一层进行后验近似。
  • 估计边际概似(用于模型比较)。
  • 为分类或回归产生预测分布,提供校准过的不确定性估计。

此套件与研究论文 Laplace Redux – Effortless Bayesian Deep Learning (NeurIPS 2021) 相关,作者并提供了另一个仓库来存放该论文的实验代码。


如何使用?

  1. 安装 – 核心套件位于 PyPI,名称为 laplace-torch:
    pip install laplace-torch
    
    (可通过第二个 pip install 指令加入选用的后端。)
  2. 封装训练好的模型 – 拥有 PyTorch 模型后,创建一个 Laplace 对象:
    from laplace import Laplace
    la = Laplace(model, "classification",
                 subset_of_weights="all",
                 hessian_structure="diag")
    
    您需告知类您正在解决的任务、要以概率方式处理的参数,以及如何近似 Hessian(例如对角线)。
  3. 拟合近似 – 使用您的训练数据加载器调用 fit。库会计算 MAP 点处损失函数的(近似)Hessian。
  4. 调整先验 – 高斯先验的精确度是一个超参数。Laplace 提供了一些自动化方案,例如网格搜索交叉验证:
    la.optimize_prior_precision(method="gridsearch",
                                pred_type="glm",
                                link_approx="probit",
                                val_loader=val_loader)
    
  5. 进行不确定性预测 – 拟合完成后,您可以使用选定的预测近似方法获得预测概率(或回归的平均值/方差):
    pred = la(x, pred_type="glm", link_approx="probit")
    
    结果是一个分布而非单一点估计,可用于校准信心、分布外检测、模型选择等。

README 指向了详尽的文档与开发者指南,以进行更深入的自定义。


谁会觉得这很有用?

  • 研究人员:探索贝叶斯深度学习、模型选择或持续学习场景,且需要现成、经过良好测试的 Laplace 实现。
  • 从业人员:已经拥有 PyTorch 模型,想要在不重新训练完整贝叶斯神经网络的情况下增加不确定性量化。
  • 学生:学习后验近似;库的 API 反映了数学步骤(拟合 → 优化先验 → 预测),使实验变得简单直接。

限制与实务注意事项

  • 近似并非完全自动 – 您需要选择 Hessian 结构(diag, kron, full 等)、先验精确度优化方法以及预测近似(GLM, MC 等)。README 警告性能会因这些选择而有很大差异。
  • 计算完整的 Hessian 代价高昂;大多数用户依赖对角线或 Kronecker 分解近似。
  • 该库目前仅针对 PyTorch;其他框架未开箱即用支持。

快速入门检查清单

  1. pip install laplace-torch
  2. 训练或加载一个 PyTorch 模型。
  3. 使用 Laplace(...) 封装它,指定任务与 Hessian 风格。
  4. 调用 fit(train_loader)。
  5. 使用 optimize_prior_precision 调整先验(gridsearch 是安全的默认值)。
  6. 使用 la(x, ...) 取得预测分布。

哪里可以了解更多?

相关

  • 项目
  • 项目
  • 项目
  • 项目