ICCV 2021 | BN-NAS: 只训练BN层来自动搜索模型
论文链接:BN-NAS: Neural Architecture Search with Batch Normalization
1. Motivation
之前的One-shot NAS工作在搜索过程中有两个特点:
- 训练所有模块的参数
- 使用在验证集上的准确率作为评价指标来评估模型的好坏
很明显这两个步骤都非常耗时,所以这篇论文打起了 batch-normalization (BN) 的主义,即
- 只训练BN的参数
- 使用BN的参数作为评价指标
实验结果表明,这样做不仅训练速度加快,而且最终模型性能也得到了保证
下面详细介绍一下算法细节
2. Methodology
如下图示,整个算法包含三个步骤:
- Supernet training
- subnet searching
- subnet retraining
2.1 Supernet Training
第一步是训练Supernet。不同于以往训练所有参数,BNNAS采取的策略是
- 随机初始化Supernet参数
- 只训练BN的参数,即Conv和Linear等有参数的层都frozen。
这样一来需要训练的参数量就极大地减少了。
作者选取了SPOS和FairNAS两篇论文作为baseline,他们supernet分别训练了100和150个epoch。作为对比,作者只训练BN,基于SPOS和FairNAS分别只训练了10和15个epoch。
题外话:我很好奇只训练BN的话,模型能收敛吗,或者模型的train acc能有多高?如果根本学不到东西,那BN参数指标真的有意义吗?
2.2 Subnet Searching
论文中的搜索空间长这样,可以看到是类似MobileNet的结构。模型由多个layer组成,每个layer有 \(N\) 个candidate operation,每个operation由多个conv+BN+relu组成,区别就是这些conv的卷积核和通道数(expand ratio)不一样 。
需要注意的是每个operation最后都是BN,如上图中的红框所示,所以作者就用这个BN的参数来作为评价指标,具体的方法如下图所示
我们以 \(Layer_L\) 的Op2为例,它的指标值 \(S_{o\_{2,L}}\) 是其最后的BN层所有 \(\gamma\) 的平均值。
这个只是某一层的BN-based指标值,那么一个子模型的指标值就是所有层的总和,计算如下:
那么优化目标函数可以表示如下:
2.3 Subnet Retraining
根据优化目标函数公式(5)可以通过不断优化找到最优的子模型结构 \(a^\*\),之后对这个子模型做retrain。
3. 实验分析
3.1 相关性比较
前面介绍过了每一层的N个operations都会根据公式(3)计算得到对应的BN-based value,那么整个Supernet可以有一个 \(N\*L\) 的矩阵表示。
下图中(a)表示训练所有参数的结果,(b)表示只训练BN参数的结果。横纵坐标都表示epoch数,具体的值就是不同epoch之间的相似度,这个相似度就是根据计算上面提到的 \(N\*L\) 的矩阵 \(L\_2\) 距离得到的。
文中对下图的分析师(a)是在30个epoch的时候,不同epoch之间的相似度变得差不多了,而(b)在第10个epoch就很相似了。只能说有点牵强。。。明明还有那么多白色区域
3.2 Results on ImageNet