通过参数共享实现高效的神经架构搜索
Efficient Neural Architecture Search via Parameter Sharing—2018
摘要
- 在ENAS中,控制器controller通过在大型计算图中搜索最佳子图来发现神经网络架构。
- 使用策略梯度policy gradient训练控制器,在验证集上,选择最大化预期奖励 的子图。
- 训练所选子图的模型,最小化规范的交叉熵损失。
- 在子模型间共享权重,使ENAS效果显著提升(比标准的神经网络体系结构搜索standard Neural Architecture Search便宜1000倍)
引言
- 循环训练RNN控制器,首先采样备选结构,如,子模型;随后训练至收敛,计算其性能;计算结果作为指导信号,多次迭代优化性能。
- 缺点:成本大,时间长。(用450个GPU来训练,找到一个优秀的架构也需要训练3到4天。也就是说,对于除了Google之外的普通贫民用户们,这种方法还是门槛太高、效率太低。)
- NAS计算瓶颈:训练每一个子模型至其收敛,只计算其准确性同时丢弃全部训练权重
- 主要贡献:强制子模型权重共享,避免每次从头训练模型。
- 方法思想基于迁移学习和多任务学习:特定任务模型参数可用于其他任务模型,几乎不需改进参数。
方法
-
ENAS的核心思想是观察到NAS最终遍历的所有图都可以看作是更大图的子图。换句话说,我们可以使用一个有向无环图(DAG)来表示NAS的搜索空间。
-
设计递归单元
(1)利用N个节点的有向无环图(DAG),其中节点表示局部计算,边界表示节点间的信息流。
(2)ENAS’s controller is an RNN。决定:1)哪一条边被激活;2)每个节点的哪个计算被执行。
(3)文章中的搜索空间允许ENAS设计,拓扑结构和RNN单元的运算。
(4)搜索空间:如果有N个节点,且允许使用4个激活函数(tanh, ReLU, identity, and sigmoid),那么,搜索空间将有4N × N!个配置。N!表示N个节点的排列组合,4N表示每个节点有4种激活函数的选择。 -
训练ENAS并派生体系结构
(1)ENAS有2个可训练参数:controller参数θ和子模型共享参数ω。训练有两个交叉过程:1)训练共享参数ω,将训练数据集分成多个64/128的minibatch计算,梯度∇ω应用BP算法;2)训练θ,通常固定训练步骤2000。
(2)在训练数据集的minibatch上,应用随机梯度下降SGD法最小化损失函数(标准交叉熵损失),等号左边为梯度的无偏估计,计算为蒙特卡洛估计。
(3)利用adam优化器,最大化期望奖励Em∼π(m;θ) [R(m,ω)]. 奖励R(m,ω)在验证集上进行计算。
(4)获得网络结构:首先从训练好的policy π(m,θ)中采样多个模型,在验证集的单个minibatch上计算其奖励,然后取得分最高的模型从头再训练,得到验证集上最高得分模型。 -
决定连接哪个点,用哪个激活方程,正是这些decision确定了卷积模型的每一层网络结构,连接点的选择使得模型存在跳跃连接。
-
A reduction cell可理解为来自搜索空间:1)从搜索空间采样的计算图;2)以2的步长应用所有操作(这样就缩小了输入空间的2倍)。