DARTS论文和算法解析
DARTS,论文的全名是Differentiable Architecture Search,即可微分的架构搜索。
综合之前的一些NAS论文方法可以看出,不管是强化学习、进化算法还是SMBO,这些都无法通过像传统深度学习那样由Loss的梯度来更新网络架构,只能间接去优化生成子网络模型的控制器(Controller RNN,Predictor)或方法(进化算法)。
DARTS论文第一次把网络模型以可微分参数化的形式实现,网络模型和网络架构整合在一起,通过数据的训练集和验证集交替优化。在训练结束后,再从网络架构参数中解析出搜索出来的子网络。
DARTS论文的基本设计思想:
- 采用NASNet里的Cell和Block的设计方法;
- 对Cell里的所有Block的可能性架构参数化;
- DARTS搜索阶段训练的Cell架构是所有可能性的集合;
- 在验证集上对Cell的架构参数求导优化。
前面两点比较好理解,第3点怎么理解所有可能性的集合呢?
从之前的研究方法我们可以看出,每次都是先挑选出子网络后,再进行训练,要么是从头训练(大部分方法),要么在之前训练的基础上(ENAS)。DARTS避免了挑选子网络的过程,它将Cell里面所有的可能性以参数化的形式表示,在训练时,Cell里面所有的可能性连接和操作都会进行前向计算和反向推理,所有操作的模型参数均会进行更新,只是可能性更大的参数有更大的梯度更新。
DARTS的Cell结构图如下图所示。
图1. DARTS的Cell架构图
图1中的每一个小矩形(称为Node)表示的是特征图,第1个Node是Cell的输入,最后一个Node是Cell的输出。特征图之间的颜色线表示的是operation(操作),图中假设特征图之间只有三种operation可选空间(分别用红绿蓝表示)。图表示的是搜索问题,即两两特征图之间要用哪一种operation;图表示的是Cell中所有operation的集合;图表示经过训练后,各个operation的权重(表示选择可能性)变化值,越粗的表示参数权重越大;图表示最终选出的Cell架构,可以看出挑选的是当前Node跟前继Node中可能性最大的一条线(除了最后一个Node,与前继Node都挑选出最大可能性的线)。
图1中颜色线在DARTS中叫做架构参数,Node表示的特征图为,表示操作。那么中间任意一个Node可以用公式表示为:
其中,和表示Node序号,公式的意思是中间Node是所有前继Node经过操作后之和。两个Node之间的操作可以表示为:
这个公式表示两个Node之间的操作是它们之间所有操作的softmax之和。
在训练的时候,需要交替对网络的模型参数和架构参数进行优化,优化的目标函数是:
训练的方法过程如下图所示:
图2. DARTS的搜索训练方法
大致的步骤只有两个,而且是交替进行:
- 固定架构参数,用训练数据集训练模型参数;
- 固定模型参数,用验证数据集训练架构参数。
训练结束后,选择子网络的方式:对于中间Node,每个Node会挑选出前继Node中可能性最大的两个作为连接对象,两个Node之间最多只有一条线(operation)可以连接,所以中间Node只有两个输入来源和对应的operation;最后的Node是所有前继Node(除了输入)按照channel维度concat起来的结果。
由于要同时训练所有的架构,所以Cell叠加的个数不能太大,也不能在大的数据集上进行搜索。作者在Cifar-10小数据集上进行搜索,叠加8个Cell,第一个Cell的输出通道为16,使用1个GPU(GTX 1080Ti)训练50个epoch,耗时1天。
搜索完成后,解析架构参数确定最佳子网络,将Cell个数扩充,并进行正式训练。DARTS搜索出来的网络在Cifar-10和ImageNet上的实验结果如下两图所示。
图3. DARTS在Cifar-10上的实验性能和对比
图4. DARTS在ImageNet上的实验性能和对比
从Cifar-10的实验可以看出,二阶梯度方法的DARTS精度只比NASNet和AmoebaNet-B的方法差,但是在训练的计算资源和耗时上要远远小于它们。DARTS的搜索时间比ENAS长,但是精度比它高。
在ImageNet的实验上我们可以看到,DARTS的精度也能接近之前的NAS方法,同等参数量条件下与NASNet相当,比AmoebaNet和PNASNet差一些,但是在搜索消耗的GPU时长上,DARTS方法具有明显的优势。
本文地址:https://blog.csdn.net/saturdaysunset/article/details/107292158
上一篇: 大数据预言