auto_LiRPA
神经网络形式化验证核心库,为AI模型提供数学可证明的鲁棒性保证,连续5年蝉联VNN-COMP竞赛冠军
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
神经网络形式化验证核心库,为AI模型提供数学可证明的鲁棒性保证,连续5年蝉联VNN-COMP竞赛冠军
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:auto_LiRPA 与 α,β-CROWN 在 VNN-COMP 竞赛中的架构概览
想象这样一个场景:你训练了一个准确率 99% 的图像分类模型,自信满满地部署上线。然而,一个在人类看来完全相同的图片——只是在像素上做了极其细微、人眼几乎无法察觉的调整——就能让模型瞬间「失明」,输出完全错误的分类结果。这就是著名的**对抗样本(Adversarial Example)**问题,由 Christian Szegedy 等人在 2013 年首次提出。
对于安全至关重要的应用场景——自动驾驶、医疗影像诊断、金融风控——模型被对抗样本欺骗的代价是不可接受的。传统的对抗训练方法只能「尽力防御」,却无法给出数学上的安全性证明。换句话说,你无法回答这样一个问题:「在这个扰动范围内,这个模型是否绝对安全?」
auto_LiRPA(Automatic Linear Relaxation based Perturbation Analysis)正是为了回答这个问题而生的。它是一套完整的**神经网络形式化验证(Formal Verification)**框架,能够在数学上证明:在某个扰动幅度 ε(如 L_∞ 范数下像素值变化不超过 0.01)内,神经网络的输出不会发生错误。这种「证明」比概率性的实验测试强了无数个量级,因为它对网络中的每一条计算路径都进行了严格的数学推导。
auto_LiRPA 起源于伊利诺伊大学厄巴纳-香槟分校(UIUC)Huan Zhang 副教授课题组的学术研究。Huan Zhang 是神经网络鲁棒性验证领域的知名学者,其参与的 α,β-CROWN 团队自 2021 年起连续多年在**VNN-COMP(神经网络验证国际竞赛)**中夺魁。2025 年,α,β-CROWN 更是在所有评分基准中均排名第一,确立了其在工业级神经网络验证工具中的领先地位。
项目的核心创新在于:将线性松弛(Linear Relaxation)技术自动化。传统上,研究者需要手动推导每一种新型神经网络算子(如注意力机制、归一化层)的验证边界,门槛极高。auto_LiRPA 通过 PyTorch 的计算图自动微分机制,自动遍历任意自定义的计算图结构,为图中的每一个节点推导验证边界。用户只需像正常使用 PyTorch 那样定义前向计算,BoundedModule 会自动完成所有边界推导工作——使用体验与训练普通 PyTorch 模型几乎一致。
auto_LiRPA 实现了当前业界最全面的神经网络验证算法族,包括:
这些算法覆盖了从快速近似估计到精确完全验证的完整光谱,用户可以根据精度需求和计算资源灵活选择。
auto_LiRPA 的使用分为两步:(1)定义计算图;(2)自动计算验证边界。 典型用法如下:
import torch
from auto_LiRPA import BoundedModule, BoundedTensor
# 第一步:用 BoundedModule 包装原始 PyTorch 模型
model = ... # 任意 PyTorch nn.Module
wrapped_model = BoundedModule(model, global_input=(torch.randn(1, 3, 32, 32),))
# 第二步:定义扰动(如 L_infinity 扰动,epsilon=0.031)
ptb = PerturbationLpNorm(norm=float('inf'), eps=0.031)
x = BoundedTensor(torch.randn(1, 3, 32, 32), ptb)
# 第三步:自动推导上界(自动遍历整个计算图)
lb, ub = wrapped_model.compute_bounds(x, method='CROWN-IBP')
这种「自动微分式」的验证边界推导是 auto_LiRPA 最核心的技术突破——它使得非形式化验证领域的专家也能轻松使用复杂验证算法。
对于 PyTorch 标准算子之外的层(如自定义激活函数、循环神经网络),auto_LiRPA 提供了 Bound 基类供用户继承实现:
from auto_LiRPA.bound_ops import Bound
class BoundMyCustomOp(Bound):
def forward(self, x):
return my_custom_function(x)
def bound_backward(self, last_layer, *inputs):
# 定义该算子的线性松弛上/下界
return lower, upper
# 注册自定义算子
register_custom_op('my_custom_op', BoundMyCustomOp, 'aten')
auto_LiRPA 的另一个独门绝技是可微分验证(Differentiable Verification)。传统的验证边界计算是不可微的,但 INVPROP 算法将其转化为可微分操作,使得边界可以作为损失函数进行反向传播。这开启了全新的研究方向:直接优化验证边界本身,而非仅仅通过对抗训练间接改善鲁棒性。这在形式化对抗防御(Certified Defense)领域具有里程碑意义。
auto_LiRPA 的代码组织围绕以下几个核心模块展开:
| 模块 | 文件 | 功能 |
|---|---|---|
bound_general.py | 71887 bytes | 核心引擎:BoundedModule 类,计算图解析与边界自动推导 |
optimized_bounds.py | 49523 bytes | 各种优化边界计算算法(CROWN、IBP 等)的实现 |
backward_bound.py | 48873 bytes | 后向传播式边界推导,核心算法逻辑 |
forward_bound.py | 13950 bytes | 前向传播式边界推导 |
concretize_func.py | 37374 bytes | 具体化函数(Max、Min 等)的边界处理 |
perturbations.py | 36485 bytes | 扰动定义:支持 L_p 范数、同义词替换等扰动类型 |
patches.py | 36434 bytes | 图像稀疏化补丁:用于降低验证复杂度 |
bound_ops.py | ~30000 bytes | 各种 PyTorch 算子的 Bound 子类实现(ReLU、Conv2d、Linear 等) |
值得注意的是,BoundedModule 在初始化时会调用 parse_graph 遍历原始 nn.Module 的子模块树,将每一个子模块替换为对应的 Bound 算子类,形成一棵等价但支持边界推导的计算图。这一设计使得 auto_LiRPA 对用户完全透明——用户无需修改任何模型代码,只需做一层包装。
# 方式1:PyPI 直接安装(推荐)
pip install auto-lirpa
# 方式2:从源码安装
pip install git+https://github.com/Verified-Intelligence/auto_LiRPA.git
项目提供了 Google Colab 在线体验版本,无需本地安装 GPU,打开浏览器即可运行基础验证示例。这对于快速评估该库是否适合自己的研究场景非常友好。
对于需要 GPU 运行的正式验证任务,建议在 Linux 服务器上使用 conda 创建独立环境,避免依赖冲突:
conda create -n auto-lirpa python=3.11
conda activate auto-lirpa
pip install auto-lirpa
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
auto_LiRPA 并非银弹,其存在以下局限性:
1. 扩展性问题(Scalability):神经网络验证的本质是 NP 完全问题。当前最好的验证算法在 ImageNet 规模的模型上仍难以在合理时间内完成完全验证。auto_LiRPA 对大规模网络通常只能给出较松的近似界。
2. GPU 内存占用:精确验证方法(如分支定界)需要枚举大量子问题,在 GPU 上内存占用随网络规模指数级增长,限制了可验证的网络大小。
3. 算子覆盖不完整:虽然支持主流 PyTorch 算子,但某些自定义或新型算子(如 FlashAttention 的某些变体)仍需要用户手动实现边界类,有一定学习曲线。
4. 与生产级工具的差距:作为研究导向的库,auto_LiRPA 在错误处理、API 稳定性、可观测性等工程实践方面不如商业级工具完善。对于真正需要部署到生产环境的鲁棒性验证系统,建议同时参考 α,β-CROWN 的完整集成方案。
auto_LiRPA 不仅是学术研究的工具,更是工业界应对 AI 安全合规要求的重要基础设施。随着欧盟 AI Act 和各国 AI 监管法规的推进,对高风险 AI 系统(自动驾驶、医疗设备、金融风控)进行形式化安全性证明将成为合规要求。auto_LiRPA 及其上层应用 α,β-CROWN 为这一趋势提供了可行的技术路径。
项目自 2020 年发布以来持续活跃维护,最新版本 0.7.2(2026 年 6 月),截至 2026 年中已有超过 346 个 GitHub stars 和 105 个 forks,是神经网络验证领域最具影响力的开源项目之一。α,β-CROWN 团队连续多年在国际竞赛中夺冠,也持续为 auto_LiRPA 带来技术迭代的动力和行业影响力。
对于 AI 研究者和工程师而言,掌握 auto_LiRPA 意味着拥有了评估模型鲁棒性的「金标准」工具;对于安全工程师来说,它是满足 AI 法规合规要求的必备技术栈;对于 AI 爱好者,它是理解神经网络形式化验证这一前沿领域的最佳实践入口。