DARTS:用概率模型使网络架构搜索变得可导

数学就是知识,这是对DARTS最形象的概述。

不知道其他看官有没有这种感觉,深度学习在经过冗长的一段试错法发展(从AlexNet到DenseNet,其间催生了无数修改模型-有效-尝试解释-发文的臆测型模型修改水文)后,终于在AutoDL下成为了一种优化可解的方法。最近读到的很多方法,都使用了概率论相关的知识,不禁感慨:数学就是算法的根。

闲话少说,开始DARTS!

DARTS:可微分神经架构搜索

首先先放一个DARTS的代码链接

对于DARTS做了什么,其实可以用一句话高度概括:

将离散的架构搜索转变为连续的架构权值搜索。

图(a)是我们想要搜索的架构,我们希望知道Node间使用了何种操作(卷积、池化、归一化等)。

图(b)是DARTS中使用的方法。既然用不同组合去训练这个架构看效果需要指数级的计算资源,不如我们将架构中的每条连接用SoftMax加权表示出来。具体来说,个人认为可以理解为节点间使用了所有的操作(卷积、池化、归一化等,通过Padding等保证操作前后特征数不变),这些操作的结果最后通过加权相加获得最终的结果。如此一来,我们无需考虑“换一种操作会不会更好”这样的问题,因为每一种操作的权值都会进入训练的过程,而不好的操作会在训练过程中自然的被赋予更小的权值。

图(c)中,当我们的模型训练的差不多了,就可以开始优胜劣汰了:根据最终的权值,在节点间保留最优的操作(当然,权值提升到1)并剔除其他操作,随后继续训练网络,从而获得最后的模型,也即图(d)。

简单概括一下就是:小孩子才做选择,我全都要!

好了,思想介绍的差不多了,但是光有思想可做不出东西。对于这样一个网络,我们不仅要优化网络各操作自己的权值(卷积核等,权值w),还需要优化操作间的权值(权值α)。这种方法在数学上被称为双层优化问题(bilevel optimization problem)。其形式如下:

直接对其求解是不现实的(prohibitive),因此DARTS中使用了两步法:求一步w,接着求一步α,如此循环直至收敛。具体操作如下图:

这种近似方法能保证基本的精度并极大地减少计算量。不过还有一个问题:对下面这个损失函数求导后会出来这么个玩意儿:

一个大大的矩阵还要求二阶导?这算起来可太麻烦了。怎么办?接着近似咯(finite difference approximation):

看着公式是不是觉得很熟悉:这不就是差分求导吗?!

当然,还有一种方法,就是直接抛弃这个二街项:把二阶项的系数直接置0!去除二阶项虽然能提速,但也会导致精度的下降,具体请参考原文中的CIFAR-10实验结果:

比起老大哥们,DARTS还是实现了足够可观的效果滴~

总的来说,DARTS提速的关键有二:

1.基于权值的架构搜索,省去每个模型从头训练的时间。

2.确定架构后直接进行迁移学习,同样省去从头训练时间。

以上~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章