DiffAI 项目教程
1. 项目介绍
DiffAI 是一个用于训练神经网络以实现可证明鲁棒性的系统,并能够证明这些网络的鲁棒性。该项目由 ETH Zurich 的 SRI 实验室开发,主要用于 2018 年 ICML 论文和 2019 年 ArXiV 论文的研究。
背景
神经网络在实际应用中可能会受到对抗性攻击的影响,例如,一个具有高分类准确率的网络可能会将一张熊猫图片正确分类,但将一张看似相同的攻击图片错误分类。尽管已经提出了许多防御措施,但很少有方法能够生成可以证明预测安全性的网络。
DiffAI 通过使用抽象解释技术,对神经网络的行为进行可靠的过度近似,从而验证其属性。该系统使用 PyTorch 编程,使其可微分并在 GPU 上运行,同时设计了一个损失函数,使得低值对应于可以证明安全的输入(鲁棒)。
主要功能
- 抽象网络:可以自定义每层的域处理方式。
- 训练 DSL:提供了一个 DSL 来允许自定义训练方案,支持复杂的参数调度。
- 交叉损失:默认使用交叉熵风格的损失函数。
- 转换为 Onyx:支持导出到 Onyx 格式,以便在 TensorFlow 中运行抽象分析或训练。
2. 项目快速启动
环境准备
确保你已经安装了以下软件:
- Python 3.6 或 3.7
- virtualenv
- PyTorch 0.4.1
安装步骤
-
克隆项目仓库:
git clone https://github.com/eth-sri/DiffAI.git cd DiffAI
-
创建并激活虚拟环境:
virtualenv pytorch --python python3.6 source pytorch/bin/activate
-
安装依赖:
pip install -r requirements.txt
快速启动示例
以下是一个简单的示例,使用 DiffAI 训练一个简单的全连接网络,并在 MNIST 数据集上进行测试:
python __main__.py -d "Point()" -d "Box()" -t "PGD()" -t "ZSwitch()" -n ffnn
该命令将使用 Point
和 Box
域进行训练,并使用 PGD
和 ZSwitch
域进行测试。训练结果将默认保存到 out/
目录中。
3. 应用案例和最佳实践
应用案例
DiffAI 可以应用于各种需要高鲁棒性的神经网络场景,例如:
- 金融欺诈检测:确保模型在面对对抗性攻击时仍能准确识别欺诈行为。
- 医疗诊断:保证模型在处理医学图像时不会因微小的扰动而产生错误的诊断结果。
最佳实践
- 自定义训练域:使用 DiffAI 提供的 DSL 自定义训练域,以适应不同的应用场景。
- 多域训练:结合多个抽象域进行训练,以提高模型的鲁棒性。
- 导出到 Onyx:将训练好的模型导出到 Onyx 格式,以便在 TensorFlow 中进行进一步的分析和应用。
4. 典型生态项目
- PyTorch:DiffAI 的核心框架,提供了强大的神经网络训练和推理能力。
- TensorFlow:通过导出到 Onyx 格式,可以在 TensorFlow 中进行进一步的抽象分析和训练。
- MNIST 数据集:作为经典的图像分类数据集,常用于测试和验证 DiffAI 的鲁棒性训练效果。
通过以上模块的介绍,您应该能够快速上手并深入了解 DiffAI 项目。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考