摘要
之前的NAS方法很少有能够搜索网络宽度的方法(卷积核的数量或者通道数)。NAS一般需要很强的专家经验来设计中间block的channel数以及何时进行downsampling,故人工设定的可能不是最优的,DenseNAS做的就是让网络通过搜索自行决定渐进的block的宽度及何时downsampling(同时为每个Block搜索宽度和空间分辨率)。通过设计一个密集连接的搜索空间来解决,因此命名为DenseNAS。不同宽度和不同分辨率的Blocks彼此之间密集连接。通过优化块之间的转移概率来选择超级网络中的最佳路径。在ImageNet上实现75.9%的top-1准确率和24.3毫秒的延迟(single TITAN-XP),搜索时间在4块GPU上为23小时。
介绍
解决宽度搜索问题:构建一个新的密集连接的搜索空间,并设计一个超级网络作为搜索空间的连续表示。
模块的宽度以固定步长逐渐增长,每个块连接到几个后续块中。在一个空间分辨率下,有多个具有不同宽度的块。在超级网络中搜索宽度增长路径,并且同时确定降低空间分辨率的位置。
方法
本文使用可微的神经架构搜索方法。
密集连接的搜索空间
考虑到基于单元(cell-based)的搜索空间通常导致搜索到复杂的结构,对移动端不友好。因此基于移动倒置瓶颈卷积(MBConv,MobileNetV2)设计搜索空间。
在三个层次上定义搜索空间:1、网络的整体结构,表示为Block的密集连接,不同颜色的Block代表不同阶段。不同Block之间的每条路径都代表着一个候选结构。2、Block的结构,包含head layers和stacking layers,head layers以前面多个阶段的输出特征张量为输入,输出具有相同形状和通道数的张量,后面堆叠许多层。3、一层(Layer)表示为候选操作的集合。
层的结构
一层定义为所有候选操作的集合:MBConv层(卷积核大小3,5,7,扩张比例为3,6),skip connection(如果skip connection被选择,一位置相应的层在最后的网络结构中应该被移除)。
Block结构
每个Block包含head layers和stacking layers,对于一个Block固定宽度和空间分辨率,对于head layers,以多种不同通道数和不同空间分辨率的张量作为输入,将它们输出为具有预先设定的通道数和形状的张量,head layers不包含skip connection,因为它们是每个Block必须的。之前是一系列stacking layers(三个),不改变通道数和形状大小。
网络结构
在搜索空间中设计了更多具有不同宽度的块,并允许搜索到的网络结构仅包含块的子集,使搜索算法可以自由选择某些宽度的块,同时丢弃其他块。
定义结构包含个Blocks,,将网络氛围几个阶段(stage),每个阶段具有不同的宽度和固定的空间分辨率,超级网络从前到后,Block的宽度以以固定小步长逐渐增长,在网络的早期阶段,设定较小的宽度增长步幅,因为早期网络阶段的大宽度设置将导致巨大的计算成本,宽度增长步长将在后面的阶段逐渐变大。
超级网络中每个Block与之后的个Blocks相连接,定义Block与其后续块的连接为,的空间分辨率分别为,将连接限制在空间分辨率相差不超过两倍的块之间。因此,存在当且仅当
在本文中,不仅每个Block中的网络层数需要搜索,Block的宽度和Block的个数也需要搜索。同时确定执行空间下采样的层。 目标是在搜索空间中找到一条良好的路径,代表架构的最佳深度和宽度配置。
网络中前两层是固定的,剩下的层都需要搜索。可以使用损失函数来优化块的数量和搜索空间中的宽度分布。
将搜索空间放松至连续
在Layer上的放松:
定义候选操作集合为,为第层的操作分配一个结构参数,使Layer成为候选操作的加权和来放松Layer。操作的每个结构权重被计算为层中所有操作的结构参数的softmax。
Block上的放松:
令Block的输出张量为,为块的每个输出路径分配Block-level结构参数,对于之间的路径,其结构参数为。类似于如何计算上述每个操作的权重,同样使用softmax函数计算每个路径在两个块之间的所有路径上的概率。
对于Block,假设其输入张量个数为,,输入张量通道数和空间分辨率都不同,因此经过Block 转换为统一尺寸并加在一起。令表示中第个head layer对输入张量进行的变换操作。输入张量经过变换之后的和表示为:
值得注意的是,路径概率在块输出维度上归一化,但应用于块输入维度(更具体地说,在head layer上),head layer是候选操作的加权和混合,Layer中的结构参数控制着应该选取什么操作,Block中的结构参数控制着Block的连接路径。
搜索算法
在搜索的初始阶段,所有操作的权重都会被训练,收敛较快的结构或者操作会被加强,这将导致较浅的网络结构。训练初始阶段的结构参数的分布对于之后的训练有很大影响。因此,将搜索步骤分为两步,在第一阶段,在第一阶段,我们只对超级网络的权重训练足够的时期,以便对操作进行充分训练,直到模型的准确性不会太低,在第二阶段,进行网络结构的优化。通过梯度:
来优化权重,通过梯度
来优化结构。交替进行权重和架构的优化过程。
当结构搜索结束时,在Layer中,以确定采取什么操作。在网络层面,采用Viterbi算法选择路径。
多目标优化
考虑网络延时:
对于stacking layer,其操作延时为:
表示预先度量号的第层中的操作的延时。对于一个head layer,假设其输入张量为第个Block的输出,其延时被定义为:
整体上,网络延时为:
多目标优化的损失函数:
搜索加速
为了降低内存消耗和加速搜索,采用drop-path的训练策略。在本文中,在训练操作的权重参数时,根据每层的结构权重分布来选取一条候选操作路径,丢弃路径训练不仅加速了搜索,而且削弱了搜索空间中不同网络结构的操作权重之间的耦合效应。仿照ProxylessNAS,根据结构权重分布在每个层中对两个操作进行采样,以更新Layer中的结构参数。为了保持未采样的操作的结构权重不变,计算重新平衡偏差以调整被采样的和新更新的参数
表示被采样的操作,表示L层中原先采样的结构参数,表示更新之后的结构参数。