EfficientAI Lab3: Neural Architecture Seach

介绍

长久以来,人类专家需要负责设计网络架构,但是网络的架构设计通常包括 #网络层数 #通道宽度 #分支 #Kernel大小以及输入尺寸。因此,调试这些design knobs非常的困难,并且无法保证是最优的设计。

Neural Architecture Ssearch(NAS) 可以帮助研究人员自动调试这些Knobs

早期的NAS方法试图使用基于RNN的控制器结合强化学习设计网络,相关工作包括Neural Architecture Search with Reinforcement Learning, NASNet和MNASNet。这些方法的问题在于非常的computationally expensive, 因为每个网络需要从头开始训练,从而让控制器获取奖励信号。

然后,研究人员发展了differentiable NAS方法,比如DARTS,ProxylessNAS以及FBNet。其中,DARTS将每一层的输出转换为不同层的输出的平均权重。ProxylessNAS进一步减少DARTS的memory cost,通过在内存中保留两条path,而不是全部路径。接下来,Single Path One Shot进一步发现可以在训练结果只保留一条路径。

尽管如此,differentiable NAS仍然需要进行完整的训练,因此带来很大的时间消耗。

 

在本次lab中,我们将参考Once for all,一种可以大大减少在不同硬件部署模型成本的方法。

此外,OFA介绍了精度预测器和效率预测器去进一步减少架构搜索的开销。

Getting Started

我们基于MCUNetV2开始实验,它包含了design space中的所有candidate subnet。

MCUNetV2是基于MCUNet的改进。

我们首先来可视化VWW数据集,它是一个图像binary分类数据集,描述图像有没有人。

数据集可视化效果如下图所示。

而OFAMCUNETS可以调整inverted mobilenet block(不同的kernel大小,扩展率)以及可调节的深度,并且支持global channel scaling。

作者提供了函数evaluate_sub_network用于评估网络性能(macs,accuracy),visualize_subnet用于可视化网络效果。

Part 1. Predictors

对于每一个模型,我们希望评估它的性能和速度,如果采用传统的训练模型,在检测精度和速度的方式,会比较低效,因此,更好的方式是让预测器去执行任务。

我们设计了一个类AnalyticalEfficientyPredictor来执行这个任务。 get_efficiency可以获取模型的MACs和Peak memory consumption。

上面的关于效率的评估,而关于精度的评估,我们寻兰了一个MLP网络用于估计网络的精度。基于模型的架构作为输入,我们可以获取模型的精度。我们定义了一个三层的MLP模型,并且基于architecture作为输入,accuracy作为输出进行训练。我们采用one-hot representation来表达各种架构的可能性,比如kernel_size=[3,5,7],三种选择,我们可以使用[1,0,0] [0,1,0] [0,0,1]分别表达。

接下来,我们将进行accuracy predictor的训练和验证。这里可以理解为一个MLP的训练,在迭代的过程中,记得进行 

optimizer.zero_grad()

的操作。

然后,基于验证集,我们观察精度的预测效果和真值的差别。

Part 2. Neural Architecture Search

random search

我们获取了模型的精度和性能预测器,接下来,我们希望获取最优的模型架构。

NAS这里使用了两种搜索策略,一种是random search,一种是evoluationary search。

random search的策略较简单,随机选择架构,然后判断是否满足efficiency的要求。然后选择精度最高的模型。最后基于val数据集验证。

Evolutionary search

这里的介绍比较抽象。因为我并不了解evoluation algorithm是什么。查了一下wiki

 下面是通过evoluation search获取的模型效果,在MACs<30M时,精度只有89,而MACs<60M时,精度有92。会不会有潜在的bug呢?

总结

OFA这个方法从方案介绍上来说,似乎相比与之前(2020)的方法效率明显提升。

而就我的使用来说,我对于NAS使用的两种方法,尤其时evoluation search,没有真正理解,从而影响了我对于它的评价。而关于它的accuracy predictor,我的质疑的地方在于,这样的accuracy predictor数据集的获取成本是不是也很高。

此外,这个策略据说可以推广到各类网络中,但是真的在推广后,能够展现比较好的性能吗?

TODO

1. 基于论文理解accuracy predictor的数据集该如何获取。

2. 理解evolutionary search的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值