神经架构搜索

Neural Architecture Search

神经架构搜索

简介

ResNet、Inception、DenseNet 自动设计神经网络的技术,通过算法根据样本集自动设计出高性能的网络结构 有效降低神经网络的使用和实现成本

原理

搜索空间、搜索策略、性能评估策略
给定一个称为搜索空间的候选神经网络结构集合。
搜索空间,搜索策略,性能评估策略是NAS算法的核心要素。

搜索空间

可以搜索的神经网络结构的集合,即解的空间

搜索策略

如何在搜索空间中寻找最优网络结构

性能评估策略

如何评估搜索出的网络结构的性能

搜索空间

搜索空间定义了NAS算法可以搜索的神经网络的类型,及如何描述神经网络结构。

  • 网络的拓扑结构
  • 每个层类型 · 每个层内部的超参数:卷积核数量、通道数、高度、宽度、水平方向步长、垂直方向步长
层/运算 超参数
卷积 卷积核数量
卷积核通道数
卷积核宽度
卷积核高度
水平方向步长
垂直方向步长
池化 池化核高度
池化核宽度
水平方向步长
垂直方向步长
全连接 神经元数量
激活 激活
相加
拼接

搜索空间进行限定或简化:

  • 在某些NAS实现中会把网络切分成基本单元(cell,或block),通过这些单元的堆叠形成更复杂的网络
  • 基本单元由多个节点(神经网络的层)组成,在整个网络中重复出现多次

网络结构搜索是一个离散优化问题,定义结构的参数数量一般比较大,因此属于高维优化问题。

搜索策略

如何找到最优的网络结构,是一个迭代优化过程,本质是超参数优化问题
随机搜索、贝叶斯优化、遗传算法、强化学习、基于梯度的算法

强化学习

称为控制器的循环神经网络生成描述子网络结构的串,确定子网络;训练集上训练子网络,验证集计算其精度值。以精度值作为反馈信号,采用策略梯度算法更新控制器网络的参数。迭代时,控制器会以给予更高精度值的神经网络以更高的概率值,确保策略函数能够输出最优网络结构。
控制器每一时刻输出包括:卷积核数量、卷积核高度、卷积核宽度、卷积操作水平方向步长、垂直方向步长。
卷积核数量:[24, 36, 48, 64]
卷积核高度核宽度:[1, 3, 5, 7]
卷积步长:可以固定为1,或按照[1, 2, 3]取值

NASNet:预测出基本块(building block);控制器预测的是基本两种网络单元,为普通单元(Normal Cell)和简约单元(Reduction Cell)。前者不改变输入图像的尺寸,后者将图像的高度和宽度减半。搜索整个神经网络的任务被简化为搜索最优基本块结构。
ENAS(Efficient Neural Architecture Search)的算法,通过各个网络之间共享权重来减少计算量。由于各个子网络共享权重,因此每个子网络不需要从头开始训练,极大提高搜索速度。
ENAS将NAS看做是寻找最优子图的问题。

遗传算法

初始化、选择、变异

过程

AutoML

基于强化学习的方法(比如NAS)和基于可微分神经网络结构搜索的方法(如DARTS),前者效果更好,但需要更大的规模的计算资源。

NAS结构

RNN控制器,控制器采样得到某一个神经网络结构A,在该神经网络结构下训练数据并得到相应的验证集上的准确率R,使用该准确率表征本次搜索得到的神经网络结构的好坏,进而将此作为信号来训练RNN控制器。

生成深度卷积神经网络结构

RNN控制器每五步输出对应一层卷积神经网络;当生成神经网络的深度超过预先设置的值之后就停止输出。接下来用生成的神经网络结构训练神经网络,记录该神经网络在验证集上的误差。利用误差更新RNN控制器的权重。

用强化学习来训练控制器

权重更新方法:RNN控制器每一步吐出的结果看作是强化学习的行动,对应的状态就是控制器到第t步为止生成的网络结构。在一个轨迹结束之后会给出一个sparse reward/cost,即神经网络结果对应的验证集上损失,这样就可以使用强化学习更新RNN控制器权重。

异步并行训练

策略梯度方法可以并行和异步更新网络权重从而加速训练(如A3C)

生成带有skip connection的卷积神经网络

把RNN的输出结构做了相应的规定,可以扩展生成learning rate、batchnorm、pooling等结构。

ENAS

efficiency neural architecture search
把整个网络用固定个节点(包含神经网络参数)和相应的连边(包含相应的非线性函数种类)表示,RNN控制器输出一个DAG(有向无环图)和相应的连边性质,从而构成相应的神经网络结构。
同时学习子模型权重,不需要每次产生一个新的神经网络权重之后去重新训练一下整体的神经网络权重。
每轮迭代分为两个步骤:训练各个子模型权重、训练控制器
子模型权重的训练是根据当前控制器,采样得到一个网络结构,利用该网络结构在数据集上的梯度,更新自己的权重。

你可能感兴趣的:(深度学习,深度学习)