enas算法讲解(通俗版)

enas全称是Efficient Neural Architecture Search

解决了之前nas常规算法十分耗算力的瓶颈,具体主要是使用了权重共享,具体后面可以观察到。

论文链接:https://arxiv.org/abs/1802.03268

看论文,对enas算法的理解还是较为晦涩,于是打算写一下通俗的理解,方便认识enas

其实说起来也很简单,看一下下面的流程图:

注:下图的子网络我是随意画的,不一定能够构成网络。

 nas需要做的是对子网络进行选择,选出一个效果最好的子网络

那怎么进行选择子网络的呢?

假设我们有N个待定选择的子网络,就是上面那个Child net1、Child net2.....

然后我们使用预设置好的权重给这些网络,然后就构成了N个可以进行推理的深度学习网络了,然后将这N个网络对数据集进行评估,就能得到需要的loss

扫描二维码关注公众号,回复: 12694573 查看本文章

然后我们就选择效果最好的一个网络结构,我们拿来训练,训练完成以后,就获得新的权重数值,这个权重值又给目标的网络,以此类推就可以进迭代。

当然需要说明的是,每一次迭代使用待定的子网络(Child net1、Child net2.....)是不同的结构,具体这个就是进行优化的方向,优化方式很多,论文里面使用的强化学习的方式进行优化,优化不一定非得使用强化学习,其他的优化方式也是ok的。

至于为啥需要将深度学习里面的layer改成了node,可以想成图论里面的结构,这样我们的一个权重才能给不同的网络结构,这就为啥只需要训练一次就能将其加载进不同的结构进行推理。

说到这里,共享权重的优势就提现出来了,按照常规的思路,我们岂不是有多少个子网络,我们就得训练多少次,然后进行对比,现在这样我们可以每一轮只需要训练一次,然后将权重值加载给不同的网络结构

大大减少了计算量,因此以前需要几百块gpu训练的nas,现在只需要单卡gpu就能训练。

为啥需要使用强化学习这样的方式进行优化,而不进行遍历枚举所有的可能性,答案是可能性太多,只能通过最优化的方式进行寻优。

具体我们看一下使用nni进行训练的结果:

这是强化学习寻优的效果:

我们可以看到loss越大,准确率越大,强化学习里面奖罚机制,负数分数说明,效果很差的,分数是正数说明做的很好,给了足够的奖励。

我们再看一下拿到最优的结构后训练效果:

可以看到就是正常dnn的训练

还有一个问题,就是首次推理的时候,那个时候还未进行训练,那么哪来的权重作为推理,答案是权重初始化,具体使用的是kaiming初始化方式:

至此,对enas就有了一个大致的了解了。

猜你喜欢

转载自blog.csdn.net/zhou_438/article/details/114173951