神经网络结构搜索

深度神经网络和深度学习算法因为在科研工作与工程任务中都取得了显著的效果从而大受欢迎。它取代了传统的手动提取特征方法,够端到端地自动提取和学习特征。
而其中取得显著成功的深度神经网络通常是由于它们成功的架构设计,针对不同的任务和不同需求需要设定特定的结构,但是以试错的方式设计这些网络是一项耗时且乏味的任务,不仅需要架构技能还需要专业领域的知识。一般的情况下,专家们会利用他们过去的经验或技术知识来创建和设计神经网络,可以说后期研究的工作重心从提取特征转移到了寻找、涉及最优架构上。通常来说,模型的容量越大网络的性能就越好,能够拟合任意函数。因此为了提升网络性能,网络结构被设计的越来越复杂。例如,VGG-16 约有1.4亿浮点数参数,整个网络占用超过500兆存储空间,需要153亿次浮点操作来处理一个 224 × 224 224\times224 224×224大小的图像。虽然更深的网络层次和复杂的拓扑结构能够更有效地学习特征,但是网络规模的增大意味着人工设计网络时需要花费更多时间来反复试验,即使是专家也需要大量的资源和时间来创建性能良好的模型。
在这里插入图片描述

NAS(2017)

论文

NEURAL ARCHITECTURE SEARCH WITH REINFORCEMENT :https://arxiv.org/pdf/1611.01578.pdf

介绍

正如蒸汽机逐渐被电机取代一般,神经网络结构的设计,正在从手工设计转型为机器自动设计。这一进程的标志事件发生在2016年,Google发表论文Neural Architecture Search with Reinforcement Learning。
神经网络架构搜索(NAS)是一种自动化学习网络结构的新方法,用于减少繁重的网络设计成本。目前为止,NAS方法设计的网络在识别任务上的表现已经超过了人工设计的架构。NAS可以视作自动机器学习(AutoML)的子领域,与超参数优化和元学习有明显的重叠。不同的NAS方法的区别主要在于三个维度:搜索空间、搜索策略和性能评估,我们对此分别进行了调研。

    a.搜索空间:搜索空间定义了网络的所有可选结构和操作,通常指数级大,甚至无界。在设计搜索空间时结合先验知识,即参考现有的针对当前任务的先进结构设计知识,能够有效减小搜索空间并简化搜索。但这也会引入偏好,从而限制网络学习到超越当前人类知识的结构。

    b.搜索策略:定义搜索空间后,搜索策略引导寻找高性能的模型架构,其中的难点是保证探索和利用的平衡。一方面,希望快速找到性能良好的架构,另一方面,需要避免过早收敛到次优的架构。
    如何找到最优的网络结构,是一个迭代优化过程,本质是超参数优化问题。随机搜索、贝叶斯优化、遗传算法、强化学习、基于梯度的算法

    c.性能评估:NSA的目的是找到一个在未知数据上具有良好泛化性能的架构,一旦模型生成,就需要对其性能进行评估。直观的方法是在训练集上训练收敛,并在验证集上得到其性能,但是这种方法会耗费巨大的算力,从而限制了可探索的网络结构。一些先进的方法关注于减小性能评估时的计算代价,但会引入误差。因此,平衡评价的效率和效果是一个需要研究的问题。

大致的算法流程如下:

  1. 首先定义一个 Building Blocks 的集合,集合中元素代表的是可能用于神经网络搜索的基本单元。比如说 NASNet 中提出了以下 Building Block。
    在这里插入图片描述
    在 NAS 算法中,控制器 RNN 会从这些 Building Blocks 中采样,将他们拼接起来构建一个端到端的网络架构。RNN控制器用于生成神经网络的结构超参数,如下图中,控制器用于生成一个卷积神经网络,控制器预测滤波器高度、滤波器宽度和步长,预测由 softmax 分类器执行,然后作为输入,输入到下一个时间步,一旦控制器完成了生成结构的过程,带有这个结构的神经网络就会建立起来,并用它进行训练。
    在这里插入图片描述s生成的网络构通常与 SOTA 网络的架构相同,如 ResNet、DenseNet,但是使用的模块组合和配置有较大的区别。
  2. 对新产生的网络架构进行训练,使其收敛,并在验证集上进行测试得到准确率。产生的准确率可以用于更新控制器,以便于控制器能够生成更好的网络结构。控制器的权重使用的是策略梯度进行更新的。整个端到端的设置如下图所示:
    在这里插入图片描述
    简单来说,让算法从不同的 block 之中采样,然后将这些模块组合起来构建新的网络。然后训练并测试该网络,根据获得的结果,调整使用的 block 模块以及各个 block 之间的连接方式。

类似以上结构的一些经典NAS算法如下:

  • NAS-RL: 将神经网络的结构用一个变长字符串来描述,这样的话就可以使用RNN来作为一个控制器生成一个这样的字符串,然后使用RL来优化控制器

  • MetaQNN: 将NAS过程看作马尔可夫决策过程,用Q-learning来记录得到的奖励

  • GeNet、Large-scale Evolution: 通过随机初始化一组个体,使用预选定义好的基因操作(也就是搜索空间中的操作)来修改二进制串进而产生新的个体

这些算法最大的不足就是烧卡耗财:

  • 每个算法的都是暴力的在整个搜索空间中找到最优结构,计算代价非常大。
  • 要么采用随机方式,要么采用网格搜索在离散的搜索空间进行迭代。无法利用深度学习中的梯度方向去指定优化路径
  • 每次搜索都是独立进行的,不能对其他搜索结构有帮助,每次都必须从0开始训练。可以通过基于上一步或者人工先验的网络架构作为下一次搜索的起点例如Network Transform或者Knowledge Transform
  • 最好的情况下是NAS 设计的网络在较小的数据集上进行训练和测试。因为在类 ImageNet 这样大型数据集上训练花费时间代价很大。并且经验表示在比较小但是结构相似的数据集上表现较好的网络,在更大更复杂的数据集上也应该表现更好

NASNet(2017)

论文

Learning Transferable Architectures for Scalable Image Recognition:https://arxiv.org/pdf/1707.07012.pdf

介绍

除了财大气粗的Google之外大家都很难实现,Google使用了 450 个 GPU,花费了 3 天多时间的才找到一个优秀的网络架构,因此,NAS 方面很多的研究都集中于如何提高搜索效率上。
在本文中,作者在一个小数据集上搜索结构上的一个组成模块,然后将该模块再转换到一个大数据集上。这是因为直接使用大型数据集将非常麻烦和耗时。
作者在 CIFAR-10 数据集上寻找最佳卷积层,并将其应用于 ImageNet 数据集。具体做法是将该层的更多副本堆叠在一起来实现的。每一层都有自己的参数,用于设计卷积架构。作者将这种体系结构称为 NASNet 架构。
他们还引入了正则化技术——ScheduledDropPath——来改进 NASNet 模型中的泛化性能。该方法的错误率为 2.4%。最大的 NASNet 模型平均精度达到 43.1%。
本文也使用了神经体系结构搜索 (NAS) 框架。本文的方案中,卷积网络的总体结构是人工预置好的。它们由重复几次的卷积单元组成。每个卷积层具有相同的结构,但权重不同。
该网络减少了搜索空间,有两种类型的单元:返回相同维度特征图的卷积单元(Normal Cell),以及返回特征图的卷积单元(Reduction Cell)。后者特征图的高度和宽度在卷积输出时减少了一半。
在这里插入图片描述

PNAS(2018)

论文

Progressive Neural Architecture Search:https://arxiv.org/pdf/1712.00559.pdf

介绍

像NASNet一样,PNAS也是一个从搜索空间优化的方法,作者提出使用一种基于顺序模型的优化策略 (SMBO: Sequiential Model-Based Optimisation)。与 NASNet 使用的RL方法不同,SMBO 不是随机的从 Block 集合中抓取和尝试,而是对 block 进行测试,并按照复杂性增加的顺序搜索网络架构。这种方法虽然不会缩小搜索空间,但是可以early stop。SMBO 简单来说是:从复杂度降低的方案开始,而不是立即尝试所有可能。PNAS 这种方法的效率是 NAS 的 8 倍。

Early Stop 值得一提的是为了分析当前模型的有效性,人们可以根据loss曲线来判断当前模型是否有继续训练下去的价值。如果认为没有继续训练的价值,就应该及早终止,尽可能节约计算资源和减少训练时间。因此PNAS还提出了early stop的性能预测,使用预测器来评估所有的候选模型,选择topk个模型。到达一定训练阶段时,预测器可以预测网络随后的状态,得到预测的学习曲线,如果不符合要求则立即停止。

Hierarchical Representations for Efficient Architecture Search(2018)

论文

https://arxiv.org/pdf/1711.00436.pdf

介绍

提出了一种层次化的神经网络搜索空间,并通过进化算法进行搜索,在CIFAR-10上的top-1错误率为3.6%,将发现的网络架构迁移至ImageNet后,得到的top-1准确率为20.3%,如果在定义的搜索空间中使用随机搜索,则在CIFAR-10和ImageNet上的top-1准确率分别下降了0.3%和0.1%,由此证明了搜索空间的定义是良好的

优点摘要:
1)通过分层图学习的方法,大大减少了冗余的搜索空间 2)引入分层表示来描述神经网络体系结构。
2)通过堆叠简单的基元(比如conv,maxpooling),实现了复杂的结构,使用简单的随机搜索,也可以获得用于图像分类的竞争架构,这体现了
搜索空间构建的重要性。
3)可以通过跳跃链接实现resnet,densenet等深层次的网络(为resnet引用都快破万了,你现在用不上残差块的思想你好意思发论文吗……)。

NASBOT(2019)

论文

Neural Architecture Search with Bayesian Optimisation and Optimal Transport:https://arxiv.org/pdf/1802.07191.pdf

介绍

这篇论文提出了一种基于高斯过程 (贝叶斯优化,即 BO) 的神经结构搜索框架 NASBOT。这是通过在神经网络体系结构的空间中开发一个距离度量来实现的,该距离度量可以通过最优传输程序来计算。
作者提出了一种神经网络结构的 (伪) 距离,称为 OTMANN(神经网络结构的最优传输度量),可以通过最优传输程序进行快速计算。他们还开发了一个 BO 框架来优化神经网络结构上的函数,称为 NASBOT(使用贝叶斯优化和最优传输的神经结构搜索)。
为了实现 BO 方案,本文提出了一种神经网络结构的核函数,并给出了一种优化神经网络结构获取函数的方法,它采用进化算法对获取函数进行优化。
这个方法有一个初始的网络池,并计算这些网络上的获取函数。然后该网络池的一组 Nmut 个突变被生成出来。首先要做的就是从被评估的网络集合中随机选择 Nmut 个候选对象,这样那些具有较高的函数值的网络更有可能被选中。然后对每个候选对象进行修改,以生成一个新的体系结构。
可以通过增加或减少一个层中的计算单元数量、添加或删除层,或更改现有层的连接结构来更改体系结构。
最后一步是评估这些 Nmut 突变的获取函数,将其添加到初始池中,并重复指定的次数。在实验中,作者使用 NASBOT 来优化获取。通过实验,他们得出结论,NASBOT 的性能优于用于优化采集的进化算法。

SNAS (2019)

论文

SNAS: Stochastic Neural Architecture Search:SNAS: Stochastic Neural Architecture Search

介绍

这篇论文的作者提出了随机神经结构搜索 (SNAS)。SNAS 是 NAS 的端到端解决方案,在同一轮的反向传播中同时训练神经算子参数和体系结构分布参数。在此过程中,它维护了 NAS 流程的完整性和可微性。
作者将 NAS 重新表述为单元中搜索空间的联合分布参数的优化问题。搜索梯度被用于,利用梯度信息进行泛化的可微损失的体系结构搜索。这种搜索梯度与基于增强学习的 NAS 优化了相同的目标,但为结构决策分配分数时效率更高。
如下所示,搜索空间使用一个有向无环图 (DAG) 表示,称为父图。在图中,节点 xi 代表隐式表示。边 (i, j) 表示要在节点之间选择的信息流和操作。
在这里插入图片描述

DARTS(2019)

论文

DARTS: Differentiable Architecture Search:https://arxiv.org/pdf/1806.09055.pdf

介绍

作者将离散的网络架构空间变为连续可微分的搜索空间,通过梯度下降来搜索网络架构。主要集中于搜索卷积层的超参数如:核大小,channels。
因此,可以通过梯度下降,对体系结构的验证集性能进行优化。基于梯度优化的数据效率提升,使得 DARTS 能够使用更少的计算资源获得出色的性能。该模型的性能也优于 ENAS。DARTS 既适用于卷积网络,也适用于递归网络。
作者寻找一种计算单元作为最终架构的构建模块。通过递归连接,学习单元可以被堆叠成卷积网络或递归网络。一个单元是由 N 个节点的有序序列组成的有向无环图。每个节点都是一个隐式的表示——例如一个特征图——并且每条有向边都与转换节点的一些操作相关联。一个单元格被假定为有两个输入节点和一个输出节点。卷积单元的输入节点定义为前两层的单元输出。最近文献里提到的卷积单元里,它们的输入节点被定义为当前步骤的输入和上一步所携带的状态。对所有中间节点应用缩减操作(例如 concatenation 操作)来生成输出单元。
在这里插入图片描述

目前主流的One-Shot NAS方法

先介绍一下One-Shot

最开始关于NAS思路是利用将神经网络模型结构抽象化,从小网络或者各个独立模块开始,进行堆叠添加最终得到一个完整的模型,自底向上。
One-Shot则是自顶向下,先训练一次 超网Supernet,随后针对各种计算资源,得到多种不同的 sub-network。且一般分成两个阶段,分别是 training stage 和 searching stage

ENAS(2018)

论文

Efficient Neural Architecture Search via Parameter Sharing:https://arxiv.org/pdf/1802.03268.pdf

介绍

本文强制所有子模型共享权值,以避免从零开始训练每个子模型达到收敛,从而提高了 NAS 的效率1000倍,在 CIFAR-10 测试中,ENAS 的错误率为 2.89%,神经结构搜索 (NASNet) 的错误率为 2.65%。
本文用单个有向无环图(DAG)表示 NAS 的搜索空间。通过引入一个具有 N 个节点的 DAG,设计出了递归单元,该单元表示局部计算,图中的边表示 N 个节点之间的信息流。
ENAS 的控制器是一个 RNN,它决定在 DAG 中的每个节点上执行哪些计算以及激活哪些边。控制器网络是一个包含 100 个隐藏单元的 LSTM。
在这里插入图片描述
在 ENAS 中,需要学习两组参数:控制器 LSTM 的参数和子模型的共享参数。在训练的第一阶段,对子模型的共享参数进行训练。在第二阶段,对控制器 LSTM 的参数进行训练。这两个阶段在 ENAS 的训练期间交替进行。
在这里插入图片描述
ENAS任务NAS中的候选网络可以被认为是一个从超网络结构中抽取得到的有向无环子图,超网保证节点直接都进行连接,从超网中采样就能得到的一个单向无环图,这样ENAS就可以让所有子网络都共享相同的参数。然后ENAS使用LSTM作为控制器在超网络结构中找到最优子网络结构。因此可以避免让每个子网络从头开始训练,可以更好地提高网络的搜索效率。

Slimmable Neural Networks(2018)

论文

https://arxiv.org/pdf/1812.08928.pdf

介绍

对于NAS的工程性也是不可忽略的一个问题,也就是是说如何在一定的计算资源(内存,算力和latency)下运行的模型。以往的工程师的做法一般是针对目前的计算设备重新设计并训练一个模型,得到合适的网络。如此是费时费力

Slimmable neural networks作者希望能够训练一个宽度可变的模型,在部署时,工程师能够根据计算资源限制来选择特定的宽,因此作者直接在一个权重共享的网络上面对于不同宽度进行训练,不过这样会导致无法收敛。作者分析是因为feature map的channel不同,导致channel的mean和varience不同。随后给每个网络设置了独立的BN解决.
在这里插入图片描述

BigNAS(2020)一次学习,各种尺寸小模型应有尽有

论文

BigNAS: Scaling Up Neural Architecture Search with Big Single-Stage Models:https://arxiv.org/pdf/2003.11142.pdf

介绍

在One-Shot NAS被提出后大家倾向于直接训练一个总模型,比如之前提到的的DARTS,ENAS。然后再从总模型上采样得到符合条件的最优子模型进行重新训练、微调得到特定模型。但是在得到总模型后,后续生成子模型后的处理比较耗时,给整个流程增加了额外的计算量和复杂度。因此BigNAS的致力于解决这一问题,使得在大模型训练完成后,可以不用后续处理,直接生成各种尺寸的子模型就能达到最优的效果。
想法是非常好的,但是如何实现呢,训练超网会遇到以下难题:

1.初始化:如果正确的初始化以适应大小模型。
2.收敛情况不一致:大小模型不能同时收敛,且大模型更容易过拟合。
3.如何解决不同channel模型大小的正则化

文中对应问题解决的trick也非常扎实,文中每个单独段落列出了以下tricks

1.SandwichRule 训练中首先采样空间中的最小最大模型,随后中间尺寸的模型随机采样n个,累计梯度一次更新。直观上来说也是合理的如此做可同时提升搜索空间中的所有子模型
2.InplaceDistillation 使用最大模型的输出作为其他模型的soft label,同样也是类似的蒸馏的办法,并且减少了计算量,不用重复计算模型输出
3.Initialization 同样也是使用到了之前提到的trick,设定每个残差块中最后一项BN的缩放参数γ为0,稳定训练
4.Convergence Behavior 针对大小模型拟合问题使用指数衰减的方法降低学习率,在学习率达到初始设定值5%时,将学习率保持恒定。这样使用稍大一点的学习率可以让小模型学的更快,在大模型达到精度峰值时使用恒定的学习率会使梯度震荡不陷入局部最优从而缓解过拟合现象
5.Regularization 只对最大的模型进行正则化(weight decay + dropout),因为只有最大的模型能够直接接触标签
6.Batch Norm Calibration 由于训练阶段是多模型训练,所以这些BN统计值的定义有问题。在模型训练结束后,作者直接重新对BN的统计量做校准参考了 https://arxiv.org/abs/1903.05134。作者没有细说,slim中直接一个子网重新统计BN的mean和varience,不去计算梯度,batchsize可以很大,计算也较快且最终实验使用的统计方法是Exact Average而不是滑动平均

single-staged NAS

Once-for-All: Train One Network and Specialize it for Efficient Deployment

论文

https://arxiv.org/pdf/1908.09791.pdf

介绍

为了解决在不同设备和限制条件下神经网络高效推理的问题,一般会使用Hardware aware的NAS。作者提出使用一个once-for-all的网络,能够解耦训练和搜索过程,通过一次训练一个超大网络,再从中搜索子网络来得到限制条件下最高的性能

参考:https://zhuanlan.zhihu.com/p/502970230
https://www.cnblogs.com/think90/p/11739496.html
https://zhuanlan.zhihu.com/p/306652851

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值