原文链接:https://arxiv.org/pdf/1806.09055.pdf 发表:ICLR 2019
编辑:牛涛
code:https://github.com/quark0/darts
终于到大名鼎鼎的DARTS了。作者argue到,之前的NAS,基于RL也好,缩小搜索空间也好,甚至包括性能预测和权值共享;都是在离散域搜索,这样的黑盒优化问题无论用何种解法都是很低效的。(因为需要不断在验证集上完整验证才知道结构好坏,非常耗时)
因此本文提出一种化离散为连续的方法,可以根据validation set的损失利用梯度下降更新结构,更为高效。
类似于之前的NAS,本文搜索cell的结构并堆叠起来。对于一个cell而言,前两个node为输入,最后的node为输出,其余的是中间节点。输入节点为前两个cell的输出,输出节点为中间节点的concat,中间节点的计算则是与所有标号小于当前节点的节点进行操作并加和,如下
上式的本质是,每两个节点间只选择一个固定操作来计算。为了使得操作的选择是连续的,同时考虑每个操作被选择的概率。具体的,每个节点对设置了一组可学习参数向量,其过softmax后转化为概率分布,可以得到改进后的mix-operation如下
可以看出,现在节点i与节点j之间的操作变成了一组概率加权。在前向传播的时候,操作就不再是采样而是加权了,就可以传递梯度了。用图来表明的话就是下面这个
任意俩节点间一开始连线是同样粗细的,随着优化进行,有一个会比较粗,当收敛后我们只保留最粗的那个,其他的丢掉。
网络参数与结构参数的更新实际上是一个二级优化问题,定义如下:.
然而内层循环若想寻求最优,需要一直更新w直到收敛,这将非常耗时。因此作者提出了一种对于梯度的近似,如下
这个方法是meta-learning学来的,通过计算w在trainset上的梯度,可以不用求解内层循环就直接更新α。虽然没有收敛性的论证,但是实际效果是尚可的。
实验中对于复合函数求导给出了一些近似优化,这篇blog写得很好可以参考下https://zhuanlan.zhihu.com/p/156832334
当网络收敛后我们就要开始得到最终结构了,首先对于节点间操作我们去argmax保留最大的,然后我们根据概率分布的数值大小,从N-1个中只保留2个。(N表示第几个节点)
文章的伪代码如下