nas神经网络架构搜索(神经网络搜索 nas)
本篇文章给大家谈谈nas神经网络架构搜索,以及神经网络搜索 nas对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、ENAS:首个权值共享的神经网络搜索方法,千倍加速 | ICML 2018
- 2、NAS 新方法:用 Petridish 自动搜索最佳神经网络结构
- 3、神经网络架构搜索——可微分二值搜索(BATS)
ENAS:首个权值共享的神经网络搜索方法,千倍加速 | ICML 2018
论文: Efficient Neural Architecture Search via Parameter Sharing
神经网络结构搜索(NAS)目前在图像分类的模型结构设计上有很大的成果,但十分耗时,主要花在搜索到的网络(child model)的训练。论文的主要工作是提出 Efficient Neural Architecture Search (ENAS),强制所有的child model进行权重共享,避免从零开始训练,从而达到提高效率的目的。虽然不同的模型使用不同的权重,但从迁移学习和多任务学习的研究结果来看,将当前任务的模型A学习到的参数应用于别的任务的模型B是可行的。从实验看来,不仅共享参数是可行的,而且能带来很强的表现,实验仅用单张1080Ti,相对与NAS有1000x倍加速
NAS的搜索结果可以看作是大图中的子图,可以用单向无环图(DAG)来表示搜索空间,每个搜索的结构可以认为是图2的DAG一个子网。ENAS定义的DAG为所有子网的叠加,其中每个节点的每种计算类型都有自己的参数,当特定的计算方法激活时,参数才使用。因此,ENAS的设计允许子网进行参数共享,下面会介绍具体细节
为了设计循环单元(recurrent cell),***用 节点的DAG,节点代表计算类型,边代表信息流向,ENAS的controller也是RNN,主要定义:1) 激活的边 2) 每个节点的计算类型。在NAS(Zoph 2017),循环单元的搜索空间在预先定义结构的拓扑结构(二叉树)上,仅学习每个节点的计算类型,而NAS则同时学习拓扑结构和计算类型,更灵活
为了创建循环单元,the controller RNN首先***样 个block的结果,取 , 为当前单元输入信息(例如word embedding), 为前一个time step的隐藏层输出,具体步骤如下:
注意到每对节点( )都有独立的参数 ,根据选择的索引决定使用哪个参数,因此,ENAS的所有循环单元能同一个共享参数集合。论文的搜索空间包含指数数量的配置,***设有N个节点和4种激活函数,则共有 种配置
ENAS的controller为100个隐藏单元的LSTM,通过softmax分类器以自回归(autoregressive fashion)的方式进行选择的决定,上一个step的输出作为下一个step的输入embedding,controller的第一个step则接受空embedding输入。学习的参数主要有controller LSTM的参数 和子网的共享权重 ,ENAS的训练分两个交叉的阶段,第一阶段在完整的训练集上进行共享权重 学习,第二阶段训练controller LSTM的参数
固定controller的策略 ,然后进行 进行随机梯度下降(SGD)来最小化交叉熵损失函数的期望 , 为模型 在mini-batch上的交叉熵损失,模型 从 ***样而来
梯度的计算如公式1, 上从 ***样来的,集合所有模型的梯度进行更新。公式1是梯度的无偏估计,但有一个很高的方差(跟NAS一样,***样的模型性能差异),而论文发现,当 时,训练的效果还行
固定 然后更新策略参数 ,目标是最大化期望奖励 ,使用Adam优化器,梯度计算使用Williams的REINFORCE方法,加上指数滑动平均来降低方差, 的计算在独立的验证集上进行,整体基本跟Zoph的NAS一样
训练好的ENAS进行新模型构造,首先从训练的策略 ***样几个新的结构,对于每个***样的模型,计算其在验证集的minibatch上的准确率,取准确率最高的模型进行从零开始的重新训练,可以对所有***样的网络进行从零训练,但是论文的方法准确率差不多,经济效益更大
对于创建卷积网络,the controller每个decision block进行两个决定,这些决定构成卷积网络的一层:
做 次选择产生 层的网络,共 种网络,在实验中,L取12
NASNet提出设计小的模块,然后堆叠成完整的网络,主要设计convolutional cell和reduction cell
使用ENAS生成convolutional cell,构建B节点的DAG来代表单元内的计算,其中node 1和node 2代表单元输入,为完整网络中前两个单元的输出,剩余的 个节点,预测两个选择:1) 选择两个之前的节点作为当前节点输入 2) 选择用于两个输入的计算类型,共5种算子:identity, separable convolution with kernel size 3 × 3 and 5 × 5, and ***erage pooling and max pooling with kernel size 3×3,然后将算子结果相加。对于 ,搜索过程如下:
对于reduction cell,可以同样地使用上面的搜索空间生成: 1) 如图5***样一个计算图 2) 将所有计算的stride改为2。这样reduction cell就能将输入缩小为1/2,controller共预测 blocks
最后计算下搜索空间的复杂度,对于node i ,troller选择前 个节点中的两个,然后选择五种算子的两种,共 种坑的单元。因为两种单元是独立的,所以搜索空间的大小最终为 ,对于 ,大约 种网络
节点的计算做了一点修改,增加highway connections,例如 修改为 ,其中 , 为elementwise乘法。搜索到的结果如图6所示,有意思的是:1) 激活方法全部为tanh或ReLU 2) 结构可能为局部最优,随机替换节点的激活函数都会造成大幅的性能下降 3) 搜索的输出是6个node的平均,与mixture of contexts(MoC)类似
单1080Ti训练了10小时,Penn Treebank上的结果如表1所示,PPL越低则性能越好,可以看到ENAS不准复杂度低,参数量也很少
表2的第一块为最好的分类网络DenseNet的结构,第二块为ENAS设计整个卷积网络的结果(感觉这里不应有micro search space),第三块为设计单元的结果
全网络搜索的最优结构如图7所示,达到4.23%错误率,比NAS的效果要好,大概单卡搜索7小时,相对NAS有50000x倍加速
单元搜索的结构如图8所示,单卡搜索11.5小时, ,错误率为3.54%,加上CutOut增强后比NASNet要好。论文发现ENAS搜索的结构都是局部最优的,修改都会带来性能的降低,而ENAS不***样多个网络进行训练,这个给NAS带来很大性能的提升
NAS是自动设计网络结构的重要方法,但需要耗费巨大的***,导致不能广泛地应用,而论文提出的 Efficient Neural Architecture Search (ENAS),在搜索时对子网的参数进行共享,相对于NAS有超过1000x倍加速,单卡搜索不到半天,而且性能并没有降低,十分值得参考
NAS 新方法:用 Petridish 自动搜索最佳神经网络结构
更多信息请查看原文:
神经架构搜索(NAS)是现代深度学习技术中最热门的趋势之一。从概念上讲,NAS方法专注于为给定问题和数据集找到合适的神经网络体系结构。可以将其视为使机器学习架构本身成为机器学习问题。近年来,NAS技术的数量激增,正在侵入主流的深度学习框架和平台。但是,第一代NAS模型在将经过一个域测试的神经网络改编为另一个域时遇到了许多挑战。因此,寻找新的NAS技术可能会继续推动该领域的新创新。最近, Microsoft Research推出了Petridish ,这是一种NAS算法,用于优化神经网络体系结构的选择。
之所以存在NAS,是因为设计神经网络的过程非常消耗***。在当前的深度学习生态系统中,依赖于知名的,性能最高的网络,在您的数据集看起来可能与之前已证明的网络所遇到的一切完全不同的空间中,提供的保证很少。在许多情况下,NAS方法通常需要数百个GPU天才能找到好的架构,并且几乎比随机搜索更好。机器学习中还有一个类似于NAS技术挑战的问题:特征选择。
就像NAS方法一样,特征选择算法需要为给定特定数据集的模型提取相关特征。显然,选择特征比神经网络体系结构要简单得多,但是特征选择技术的许多原理为Petridish团队提供了灵感。
NAS简史
鉴于NAS方法最近很流行,许多人可能认为NAS是一门新兴学科。毫无疑问,自2016年以来,NAS经历了复兴, 谷歌发表了有关强化学习的著名NAS论文 。但是,其许多起源可以追溯到1980年代后期。 NAS最早的论文之一是1988年的“ 用于识别问题的自组织神经网络 ”。从那里开始,这个领域看到了一些出版物,概述了有趣的技术,但是直到Google推动NAS引起了主流机器学习社区的关注。如果您对NAS方法的发布历史感兴趣, AutoML Freiburg-Hannover网站 将提供迄今为止最完整的汇编之一。
NAS的两种类型:前向搜索与后向搜索
探索NAS空间时,有两种基本类型的技术:向后搜索和正向搜索。向后搜索方法是实现NAS方法的最常用方法。从概念上讲,向后搜索NAS方法从一个超级图开始,该图是所有可能架构的结合,并学会通过梯度下降或强化学习逐步降低不必要的边缘的权重。尽管此类方法极大地减少了NAS的搜索时间,但它们在首先需要创建人名图需要人员领域知识的情况下具有主要局限性。
前向搜索NAS方法试图将神经网络体系结构从小型扩展到大型。这种方法类似于深度学习模型***征选择算法的许多原理。与后向方法不同,前向方法不需要预先指定有限的搜索空间,因此在从现有模型中进行热启动以及进行终生学习时,前向方法更加通用并且更易于使用。
培养皿
Petridish是一种前向搜索NAS方法,受特征选择和梯度增强技术的启发。该算法的工作原理是创建一个模型库以供选择,作为其搜索输出,然后合并停止前进和停止梯度层以更有效地识别用于构建该画廊的有益候选者,并使用异步训练。
Petridish算法可以分为三个基本阶段:
阶段0:Petridish从某些父模型开始,这是一个很小的人为编写的具有一到两层的模型,或者是领域专家已经在数据集中找到的模型。
阶段1:Petridish使用停止梯度层和停止向前层将候选层连接到父模型,并对其进行部分训练。候选层可以是搜索空间中的任何操作包。使用停止梯度层和停止向前层可以在不影响模型的正向激活和反向梯度的情况下累积相对于候选对象的梯度。如果没有停止梯度层和停止向前层,将很难确定哪些候选层对父模型的性能有所贡献,并且如果您想查看它们各自的贡献,则会需要单独的培训,从而增加了成本。
阶段2:如果发现某个特定候选者或一组候选者对该模型有利,那么我们将移除停止梯度和停止前进层以及其他候选者,并训练模型收敛。训练结果被添加到散点图中,自然而然地产生了帕累托边界的估计。
帕累托边界的合并是对Petridish的有趣补充,它使研究人员可以更轻松地确定实现特定任务最佳性能组合的体系结构。 帕累托边界的估计使我们更容易看到准确性,FLOPS,内存,延迟和其他条件之间的折衷。 在下图中,沿着Pareto边界(红线)的模型构成了搜索输出,这是一个模型库,研究人员和工程师可以从中选择。
Microsoft Research在不同的NAS基准测试中评估了Petridish。 具体而言,使用CIFAR-10数据集对Petridish进行了图像分类模型测试,然后将结果传输到ImageNet。 在CIFAR-10上,Petridish的平均测试错误率为2.75±0.21%,最佳结果为2.51%,仅在流行的单元格搜索空间上使用3.2M参数和5天的GPU搜索时间即可获得最佳测试结果。 将CIFAR-10上找到的模型转移到ImageNet时,Petridish仅在宏搜索空间上使用4.3M参数即可达到28.7±0.15%的top-1测试错误,最佳结果为28.5%。 初始测试能够胜过现有的NAS方法,同时保持可行的计算成本水平。
Petridish是NAS技术快速发展的生态系统中有趣的补充。 Petridis依赖于前向搜索模型这一事实使它更加引人入胜,因为大多数流行的NAS方法都依赖于向后搜索技术。 微软已经将NAS模型作为其Azure ML平台的一部分,因此有趣的是Petridish成为了该堆栈的一部分。
神经网络架构搜索——可微分二值搜索(BATS)
本文提出了二进制架构搜索(BATS),这是一个通过神经架构搜索(NAS)大幅缩小二进制神经网络与其实值对应的精度差距的框架。实验表明,直接将NAS 应用于二进制领域的结果非常糟糕。为了缓解这种情况,本文描述了将 NAS 成功应用于二进制领域的 3 个关键要素:
实验重新结果证明了所提出的方法的有效性和直接在二进制空间中搜索的必要性。并且,在CIFAR10、CIFAR100 和 ImageNet 数据集上设计了 SOTA 的二元神经网络架构。
标准 DARTS 搜索空间下搜索得到的网络结构二值化训练是无法收敛的 ,原因如下:
二值神经网络搜索空间与标准 DARTS 搜索空间对比如下图所示:
主要存在以下几方面的修改:
尽管 DARTS 取得了成功,但根据随机***的不同,DARTS 的精度在运行之间可能会有很大的差异。事实上,在有些情况下,随机搜索获得的架构甚至比搜索得到的架构通过表现的更好。此外,特别是当训练时间较长或在较大的数据集上进行搜索时,DARTS可能会出现 Skip-Connect 富集的问题。常用的解决方法包括:
但是,这种机制仍然会导致大量的随机性,而且并不总是有效的:例如,它可能会用池化层(没有学习能力)取代跳过连接,或者搜索的架构跳连包含的太少。当搜索是在二进制域中直截了当地进行时,这样的问题就更加明显了。鉴于在搜索过程中,节点 j 的输入是通过对所有输入边的加权和来获得的,为了最大限度地提高信息流,架构参数 α 倾向于收敛到相同的值,使得最终架构的选择存在问题,并且容易受到噪声的影响,导致拓扑结构的性能可能比随机选择更差。此外,搜索高度偏向于实值操作(池化和跳连),使得搜索在早期阶段可以提供更大的收益。
为了缓解上述问题,并使得搜索程序更具辨别力,迫使其做出 "harder" 的决策,本文借鉴知识蒸馏的思路,建议使用温度因子 T1 的正则策略,定义从节点i到j的流程如下公式所示:
***用温度正则方法可以 使架构参数的分布不那么均匀,更加尖锐(即更有辨别力) 。在搜索过程中,由于信息流是使用加权进行聚合的,所以网络不能从所有信息流中提取信息,来平等地(或接近平等地)依赖所有可能的操作。相反,为了确保收敛到一个满意的解决方案,它必须将最高的概率分配给一个非0操作的路径,由一个次元温度(T 1)强制执行。这种行为也更接近评估过程,从而减少搜索(网络从所有路径中提取信息)和评估之间的性能差异。
上图中,图1描述了给定单元在不同温度下的架构参数分布。对于低温(T=0.2),网络被迫做出更多的判别性决策,这反过来又使它减少了对 Skip-Connect 的依赖。图2 进一步证实了这一点,它描述了在不同温度下搜索过程结束时,在 Normal Cell 中各操作被选择的概率。
尽管二值网络具有加速和节省空间的特点,但与实值网络相比,二值网络的训练仍然比较困难,其方法通常需要一个预训练阶段或仔细调整超参数和优化器。对于搜索二值网络的情况,直接实现二值权重和激活的架构搜索,在大多数尝试中,要么导致退化的拓扑结构,要么训练简单地收敛到极低的精度值。此外,直接在实域中执行搜索,然后对网络进行二值化是次优的。
为了缓解这个问题,本文提出了一个两阶段的优化过程, 在搜索过程中,激活是二值化的,而权重是实值化的,一旦发现了最佳架构,我们在评估阶段也要对权重进行二值化 。【更具体地说,在评估过程中,首先从头开始训练一个具有二值激活和实值权重的新网络,然后对权重进行二值化。最后,在测试集上对完全二值化的网络进行评估。】这是因为实值网络的权重通常可以被二值化,而不会显著降低精度,但激活的二值化就不一样了,由于可能的状态数量有限,网络内部的信息流急剧下降。因此,本文提出将问题有效地分成两个子问题:权重和特征二值化,在搜索过程中,尝试解决最难的一个问题,即激活的二值化。一旦完成了这一点,权重的二值化以下总是会导致精度的小幅下降(~1%)。
关于nas神经网络架构搜索和神经网络搜索 nas的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。