NASLib
弗莱堡大学AutoML团队出品的模块化神经架构搜索框架,集9种搜索空间+7种优化器+零成本评估器于一
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
弗莱堡大学AutoML团队出品的模块化神经架构搜索框架,集9种搜索空间+7种优化器+零成本评估器于一
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:NASLib 项目标识
想象一个场景:你要建一座房子,但不需要自己画图纸——一个AI系统会根据你的需求(面积、预算、功能)自动生成最优的建筑设计蓝图。这就是 Neural Architecture Search(NAS,神经架构搜索) 正在做的事情:让算法自动搜索出最优的神经网络结构。
NAS 领域有个著名的"NAS不好用"问题:每次搜索最优架构都需要训练成百上千个候选网络,算力成本极高,普通研究团队根本承受不起。这导致NAS研究门槛极高——要么有大厂GPU集群,要么就别玩。
NASLib(Neural Architecture Search Library)正是在这个痛点下诞生的。它由德国弗莱堡大学 AutoML Freiburg 团队 开发,核心理念是为NAS研究提供统一代码基座,让研究者可以专注创新而不是重复造轮子。就像软件工程中的"设计模式"——前人搭好框架,后人只需实现具体策略。
图2:NASLib 整体架构,搜索空间、优化器和评估器三层解耦
NASLib 的架构哲学可以用一个类比来解释:乐高积木。一个完整的NAS流程由三个核心组件构成:
| 组件 | 乐高类比 | NASLib 中的角色 |
|---|---|---|
| Search Space(搜索空间) | 积木的形状和颜色种类 | 定义神经网络可以长成什么样子(节点数、连接方式、算子类型) |
| Optimizer(优化器) | 搭建积木的策略(随机摆/遗传算法/强化学习) | 决定如何从海量候选中高效找到最优架构 |
| Evaluator(评估器) | 搭建完成后的质量检验 | 衡量候选架构的最终性能 |
关键创新:三个模块完全解耦。研究者可以自由组合——换一个新搜索空间,不需要重写优化器代码;提出新搜索策略,可以直接复用于所有已有搜索空间。这打破了传统NAS代码"强耦合、难复用"的困境。
NASLib 内置了9种经过学术界验证的搜索空间,每个都对应一篇重要论文:
| 优化器 | 类型 | 核心思想 |
|---|---|---|
| DARTSOptimizer | 可微搜索 | 放松离散搜索为连续优化,权重共享 |
| GDASOptimizer | 可微搜索(Gumbel-Softmax) | 改进DARTS的过拟合问题 |
| DrNASOptimizer | 可微搜索(强化学习辅助) | 动态松弛 |
| RandomSearch | 随机搜索 | 基线方法 |
| RegularizedEvolution | 进化算法 | 锦标赛选择 |
| LocalSearch | 局部搜索 | 邻居探索 |
| Bananas | 基于预测器的搜索 | 用性能预测模型引导搜索 |
NASLib 包含一个专门针对性能预测器的研究模块。2021年论文《How Powerful are Performance Predictors in Neural Architecture Search?》在NASLib上系统评估了31种不同的性能预测器,这是目前最全面的预测器对比研究。
图3:31种性能预测器在NAS-Bench-201上的对比(来源:NASLib论文)
预测器的核心思想很朴素:训练一个模型来预测候选架构的最终性能,而不必真正训练完整个架构。这可以大幅节省计算资源。NASLib内置的预测器包括:
NASLib 对环境要求较为严格:仅支持 Python 3.7/3.8/3.9,不兼容 Python 3.10+。这是因为 setup.py 中的依赖(如 nasbench301、nasbench-pytorch)尚未适配新版 Python。
安装过程通过 pip install -e . 自动处理核心依赖,额外的数据集文件(NAS-Bench-101/201/301等)需要手动从 Google Drive / Figshare 下载放置到 naslib/data/ 目录。这带来了第一个门槛:数据集下载可能需要科学上网。
三行代码即可启动一次NAS实验:
from naslib.search_spaces import SimpleCellSearchSpace
from naslib.optimizers import DARTSOptimizer
from naslib.defaults.trainer import Trainer
search_space = SimpleCellSearchSpace()
optimizer = DARTSOptimizer(config)
optimizer.adapt_search_space(search_space)
trainer = Trainer(optimizer, config)
trainer.search() # 搜索最优架构
trainer.evaluate() # 评估最优架构
配置通过 YAML 文件管理,scripts/ 目录提供了 SLURM 集群的批量实验脚本。
NASLib 不仅是代码库,更是NAS学术研究的基础设施。最重要的两篇引用论文:
NASLib 被广泛用于 AutoML 竞赛(如 Zero-Cost NAS Competition),研究团队也用它来对比自己的新算法与SOTA。
NASLib 的价值在于降低NAS研究的工程门槛——把NAS领域最常用、最重要的搜索空间、优化器、评估器和预测器全部整合到一个模块化框架中。研究者可以站在前人工作的基础上,专注于算法创新本身,而不是重新实现各种基准。
对于有兴趣入门NAS的开发者,NASLib 是一个极好的起点:通过 Jupyter Notebook 教程(examples/naslib_tutorial.ipynb)和基准测试脚本,可以快速理解NAS的核心概念和工作流程。