paper: ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware
code: https://github.com/MIT-HAN-LAB/ProxylessNAS
1 动机
传统的NAS算法非常耗费GPU 计算资源, 因此通常无法直接在大型的目标任务上直接进行搜索, 一般都是在小型的代理任务上进行搜索, 搜索的结果直接迁移到目标任务上。但这种迁移无法保证在目标任务上是最优的。
代理任务一般包括:
- 1)在更小的数据集上训练
- 2)只训练个别block
- 3)只训练少量epoch
2 方法
核心是: 训练时路径二值化
其实这篇文章的做法比较类似于One-shot 和Darts的方法, 只不过这2中方法在得到输出的时候需要用到所有的通路, 导致内存使用量相比单个模型极大增加 , 因此一般也只能在小的代理任务上训练。 而proxyless NAS 最主要的赶紧是训练时路径的二值化, 每次只激活其中一条路径, 解决了内存的问题, 因此可以直接在大型的任务上直接进行搜索训练。
3 结果
4 总结
通过proxyless NAS的方法, 可以直接在目标任务上进行搜索, 不仅提高了效率, 而且最终能得到更优的结果。
一些有意思的发现:
网络设计的一些insights:
- GPU prefers shallow and wide model with early pooling;
- CPU prefers deep and narrow model with late pooling
- Pooling layers prefer large and wide kernel
- Early layers prefer small kernel
- Late layers prefer large kernel