NAS基准与评估方法

1. 概述

NAS基准(Benchmark)为神经架构搜索方法提供了统一的评估平台1。高质量的基准对于:

  • 比较不同NAS方法的性能
  • 验证新方法的效能
  • 加速NAS研究迭代

2. NAS-Bench-101

2.1 基准概述

论文: Dong & Yang, “NAS-Bench-101: Towards Reproducible Neural Architecture Search” (ICML 2019)

特点: 首个大规模NAS基准,包含423,624个独特架构。

2.2 搜索空间定义

Cell结构:

  • 最多7个节点
  • 每个节点与之前的节点全连接
  • 5种操作类型

图结构表示:

2.3 评估协议

三个训练配置:

配置训练周期学习率参数
Config-A120.1CIFAR-10
Config-B1080.1CIFAR-10
Config-C1080.02CIFAR-10

指标:

  • 训练/验证/测试准确率
  • 参数量
  • FLOPs
  • 训练时间

2.4 使用示例

from nas_bench_101 import NASBench101
 
nasbench = NASBench101()
 
# 查询架构性能
arch_spec = {
    'adjacency': [[0, 1, 0, 0],
                  [0, 0, 1, 1],
                  [0, 0, 0, 1],
                  [0, 0, 0, 0]],
    'operations': ['input', 'conv3x3-bn-relu', 'conv3x3-bn-relu', 'maxpool3x3', 'output']
}
 
metrics = nasbench.query(arch_spec, 'config-b')
print(f"Test accuracy: {metrics['test_accuracy']}")
print(f"Params: {metrics['params']}")

3. NAS-Bench-201

3.1 基准概述

论文: Dong & Yang, “NAS-Bench-201: Extending the Benchmarking Scope” (ICLR 2020)

特点: 固定Cell结构,跨数据集评估,简化比较。

3.2 搜索空间

固定Cell结构:

  • 4个中间节点
  • 5种操作

操作集:

ID操作描述
0none无连接
1skip_connect恒等映射
2conv_1x11x1卷积
3conv_3x33x3深度可分离卷积
4avg_pool_3x3平均池化

3.3 数据集支持

数据集类别数图像大小
CIFAR-101032x32
CIFAR-10010032x32
ImageNet-16-12012016x16

3.4 评估指标

from nas_bench_201 import NASBench201API
 
api = NASBench201API('NAS-Bench-201-v1_1.pkl')
 
# 获取最优架构
info = api.query_by_index(0)  # 索引0的架构
print(f"CIFAR-10 accuracy: {info.get_metrics('cifar10', 'val')}")
print(f"ImageNet-16-120 accuracy: {info.get_metrics('ImageNet16-120', 'val')}")

4. NAS-Bench-301

4.1 基准概述

论文: Zela et al., “NAS-Bench-301 and the Case for Surrogate Benchmarks for NAS” (ICML 2020)

创新: 使用代理模型加速架构评估,覆盖更大搜索空间。

4.2 基于DARTS的搜索空间

搜索空间规模: 个架构

代理模型训练:

  • 训练集:10,000个随机采样的架构
  • 目标:预测完整训练后的性能

Surrogate模型架构:

class ArchPredictor(nn.Module):
    def __init__(self, num_ops, num_nodes):
        super().__init__()
        self.edge_embed = nn.Embedding(num_ops, 64)
        self.node_embed = nn.Linear(64 * num_nodes, 256)
        self.predictor = nn.Sequential(
            nn.Linear(256, 128),
            nn.ReLU(),
            nn.Linear(128, 1)
        )
    
    def forward(self, arch):
        # arch: [num_edges, num_ops] one-hot
        edge_feat = self.edge_embed(arch.argmax(dim=-1))
        node_feat = edge_feat.flatten()
        return self.predictor(self.node_embed(node_feat))

5. NAS-Bench-360

5.1 多模态基准

论文: Chauhan et al., “NAS-Bench-360: Benchmarking NAS Methods” (NeurIPS 2022)

创新: 超越图像分类,评估跨任务泛化能力。

5.2 任务列表

任务类型说明
CIFAR-10图像分类基准图像任务
ImageNet图像分类大规模图像
Penn Treebank语言建模文本任务
WikiText-2语言建模长文本
OGBG-MolHIV图分类分子性质预测
ESC-50音频分类环境声音
dSprites因子分解视觉概念学习

5.3 评估协议

from nas_bench_360 import NASBench360
 
nb360 = NASBench360()
 
# 评估架构在不同任务上的表现
results = {}
for task in ['cifar10', 'wikitext', 'ogbg-molhiv', 'esc50']:
    results[task] = nb360.evaluate(architecture, task)
 
# 计算跨任务一致性
consistency = compute_rank_correlation(results)

6. Zero-Shot NAS基准

6.1 NAS-Bench-Zero

评估协议: 在NAS-Bench-201基础上评估零代价代理质量。

代理指标列表:

代理简称数据依赖
Gradient-basedGrad
SynflowSyn
NASWOTNW
FisherFis
GraspGrasp

6.2 评估指标

Rank相关性:

其中是代理分数排名与真实性能排名的差值。

Top-K准确率:

6.3 基准结果示例

代理CIFAR-10 SpearmanImageNet SpearmanTop-5 Acc
Random0.000.005.0%
SNIP0.420.3815.2%
GraSP0.450.4118.7%
Synflow0.520.4822.1%
NASWOT0.480.4419.8%
NTK0.550.5124.3%

7. YOLO-NAS-Bench

7.1 目标检测基准

论文: 目标检测专用NAS基准

搜索空间: YOLO系列架构变体

评估指标:

  • mAP@0.5
  • mAP@0.5:0.95
  • 推理延迟
  • 参数量

7.2 自演进代理模型

创新: 使用NAS方法自动设计代理模型架构。

class EvolvingPredictor:
    def __init__(self, search_space):
        self.predictor = train_initial_predictor()
        self.search_space = search_space
    
    def evolve(self, n_iterations=100):
        for i in range(n_iterations):
            # 生成候选代理
            candidates = self.generate_candidates()
            
            # 评估
            scores = [self.predictor.predict(c) for c in candidates]
            
            # 选择
            best = candidates[argmax(scores)]
            
            # 更新代理
            self.predictor = self.update_predictor(best)
        
        return self.predictor

8. ParZC方法

8.1 参数化零代价代理

论文: “ParZC: Parametric Zero-Cost Proxies for NAS” (AAAI 2025)

核心创新: 引入可学习参数改进零代价代理。

8.2 方法原理

传统零代价代理:

其中是固定的标量函数。

参数化零代价代理:

其中是可学习的神经网络。

8.3 训练过程

class ParametricZeroCost:
    def __init__(self, hidden_dim=64):
        self.scoring_net = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, 1),
            nn.Sigmoid()
        )
    
    def train(self, train_archs, train_scores):
        optimizer = torch.optim.Adam(self.scoring_net.parameters())
        
        for epoch in range(num_epochs):
            pred_scores = self.scoring_net(train_archs)
            loss = F.mse_loss(pred_scores, train_scores)
            
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
    
    def predict(self, arch):
        return self.scoring_net(arch)

9. 评估协议最佳实践

9.1 完整评估流程

def comprehensive_nas_evaluation(nas_method, benchmark, num_repeats=3):
    results = []
    
    for repeat in range(num_repeats):
        # 搜索
        best_arch = nas_method.search()
        
        # 重新训练
        trained_model = train_from_scratch(best_arch)
        
        # 测试评估
        metrics = evaluate(trained_model, benchmark.test_set)
        
        results.append({
            'architecture': best_arch,
            'metrics': metrics,
            'search_time': nas_method.search_time
        })
    
    return aggregate_results(results)

9.2 评估指标选择

研究目标推荐指标理由
方法比较Spearman相关性评估排序能力
实际应用Top-K准确率直接反映可用性
效率评估搜索时间计算资源消耗
稳定性重复实验方差结果可复现性

9.3 基准使用注意事项

  1. 搜索空间一致性: 确保使用相同的搜索空间定义
  2. 训练配置: 严格按照基准规定的训练配置
  3. 数据划分: 使用固定的数据划分保证可比性
  4. 重复实验: NAS结果有方差,需要多次实验

10. 相关主题


参考文献

Footnotes

  1. Dong, X., & Yang, Y. (2019). NAS-Bench-101: Towards Reproducible Neural Architecture Search. ICML 2019.