NAS-ReID系列二___DARTS实现的个人理解

NAS简单介绍

NAS(neural architecture serach):神经网络架构搜索,它的目标就是找到一种能够达到最好的验证准确率的网络架构,input:搜索空间,output:搜索结果拼接起来的神经网络架构(一种有向无环图)。因为NAS的挑战有计算耗时、成本高以及搜索空间过大等问题,所以NAS的评价指标主要就是从计算量(网络参数量)和准确率两个方面考虑。前面讲到了NAS中由搜索空间、搜索策略和性能评估策略组成,接下来讲一下搜索策略。

NAS搜索策略

random search

指的是在候选集(搜素空间)中随机对参数(网络结构)进行组合,得到组合后的神经网络进行训练,最后在验证集上进行验证,最后选择validation accuracy最大的组合构成的神经架构。random search常作为baseline。这里对random search不做过多的介绍,可以搜索其他的博客了解。

DARTS

DARTS:differentiable neural architecture search,也就是可微分神经网络架构搜索。通过指定候选模块、网络层数,得到搜索空间,在得到搜索空间之后,这个时候DARTS中就使用到了super-net这种网络结构得到最优的神经网络架构。接下来就会对super-net进行详细的介绍,明白了super-net的原理,对DARTS就更加容易理解,对NAS-ReID结合方面的论文理解起来就会相对容易很多。

super-net的运作的流程:

1)super-net在每层网络中将所有的候选块进行展开,得到一个非常庞大的网

2)对每层的权重进行计算(一个层中所有权重之和为1)。也就是训练模型,更新参数,优化模型,使loss最小

3)在当loss达到最小时得到的图中,保留每层中权重参数最大的那个块,其余块删除,最后形成一条通路,也就是最后搜索的结果

举一个栗子

指定网络层数9层,搜索空间中有20个候选模块。按照上面的流程中第一步,就可以得到一个巨大的网络结构,如下所示:

NAS-ReID系列二___DARTS实现的个人理解_第1张图片

 其中具体到每一层的网络结构如下:

NAS-ReID系列二___DARTS实现的个人理解_第2张图片

 对于每一层而言,output就是每个块与对应的参数求和的结果,前一层的output作为下一层的input,即进行上面流程中的第二步。之后进行上面流程的第三步,得到最终的结果。

总结

可能对DARTS这里说得不是很明白,但是只要明白普通网络的训练过程,我觉得总的来说,super-net还是很好理解的。如果还是不明白,可以看看参考的视频。我当时是对NAS很不了解的人,直接看论文的时候,人都懵了,但是看了这个视频之后,再结合看论文,觉得好像也不是那么难了。还有就是在基于看NAS方向论文比较少的前提下,个人感觉DARTS在NAS中应用很多,感觉很多地方都在借用这个结构,我看了的NAS-ReID结合的论文中,都是用了DARTS。可能有些地方写得有问题,欢迎大家指正,还有就是自己语言表达不是很好,借这个机会锻炼一下自己的语言组织能力。

参考:

神经网络结构搜索 (3/3): 可微方法 Differentiable Neural Architecture Search_哔哩哔哩_bilibili

你可能感兴趣的:(计算机视觉,深度学习,python)