神经架构搜索Neural Architecture Search综述
引言
什么是神经架构搜索
神经网络里面很多parameters参数,也叫做weights权重,比如全连接层中的权重矩阵,卷积中的卷积核,都是网络需要训练的参数,而超参数是在网络训练前就提前设置好的参数,神经网络的参数显然依赖于于训练数据和超参数,超参数一般有两种,一种是网络结构参数,一种是优化算法,比如sgd还是adam,lr,batch 大小啊,而我们去训练一个模型,就是期望在用训练数据和优选超参数去迭代更新网络的权重,最后得到更高的测试精度的这样一个过程,如下图所示:
网络结构参数
网络的结构参数包括啥,以下图这个resnet50的结果为例,结构参数可以是,k,channel,layer,分别代表是kernel size的大小、channel数,以及层数。
而实际上,现在市面上常用的模型结构如resnet、transformer、mobilenet都是人工设计的结构,不同的结构有不同的偏好。倘若面对一个新的任务,想手工去调整模型结构来获得更高的增益,是非常困难和不划算的事情,因为这样的调整往往仅仅针对特定数据集,特定硬件,下次一个新的场景,可能就完全不适用。并且微调模型结构非常消耗资源,也非常需要专业知识,更重要的是,不是每次都行。
神经架构搜索三要素
神经架构搜索的执行流程如下图所示:
搜索空间
简单地说,对于搜索空间的定义就是,所有可能被找到的模型结构的集合。举个例子,如下表所示,假定channel的选项有4种,kernel size的选项也有3种,假定模型有50层,那么搜索空间的大小就是(4*3)^50,堪称巨大,要想在这么大的空间寻找一个最优解,是非常困难的事情。
例子1 - Random Search
最简单的神经架构搜索方法估计就是random search了,想法很简单,随机挑选一组结构超参,训练至完备,看看精度,然后再随机挑选另一组结构超参,训练至完备,如此循环反复一定次数后,选取精度最高的那组结构超参输出,流程如下图所示,是不是和大家在做调参的过程非常相似。
但是这样的搜索方式也有非常致命的缺点:
1、每一次训练的极度耗时间
2、空间太大了,想要更优秀的模型结果非常难穷尽
有此引出一个概念,搜索策略。
搜索策略
可以看到模型集合太大、搜索空间太大,如果用最朴素的想法,一个个模型去验证性能,选最好的模型出来,穷尽毕生之力也穷不尽,所以我们定义一个搜索策略,帮助我们更加聪明的找到一个好的模型架构,常用的搜索有,强化学习,遗传算法等等,当然随机搜索如例子1,也是搜索策略之一。
我用最简单的例子1,随机搜索方案给大家讲解一下整个nas流程就是,采样出一个模型结构,训练,验证,然后再采样,训练,验证,迭代一定次数后,给出最优。而若是是采用,遗传算法,也是一样,采样,训练,验证,选出好的模型,进行遗传变异,变异出来的再去训练,验证,迭代一定次数后,优胜劣汰,给出最优。
那这套方法大概需要花费多少时间呢,回顾这个流程,大家都是知道把一个模型训练充分是非常需要时间,何况是每次迭代都需要训练一批模型,并且当想要获得一个更好的性能,就意味要探索一个更加广泛的模型空间,迭代更多的次数,而这样的方法的缺点在于随着探索的增加,不可避免的所需要的时间或者说探索的成本也在线性增加,这是难以承受的,时间成本可见下图:
那看到这里大家也会说,今年都20222222年了,这样也很慢怎么办,能不能快点,这就带来一个思考,怎么样探索更加广泛空间又不提升探索成本呢?后续继续补。。。
- 点赞
- 收藏
- 关注作者
评论(0)