Neural Architecture Search with Reinforcement Learning论文总结

Neural Architecture Search with Reinforcement Learning论文总结

论文:《Neural Architecture Search with Reinforcement Learning》
网站链接(开源代码):https://github.com/tensorflow/models

1. 概述

  此论文出自google Brain并发表与ICLR2017,看这篇论文主要是google Brain在cvpr2017上发表了一篇NASnet论文(论文厉害之处是自动生成CNN结构并利用迁移学习可用于大规模图像分类和物体检测,并取得目前最好的效果),NASNet论文中的核心是延续了本篇论核心思想,我一开始看NASNet论文时还是有很多困惑和不理解,所以很有必要看看本篇论文。
  此篇论文中的核心是:利用Reinforcement Learning(强化学习)机制训练一个RNN(循环神经网路)controller(控制器)去自动产生一个神经网络,无需人为手动设计网络,设计出的网络在相关有权威的数据集上都取得了很好的成绩。看完论文后发现没有硬件资源根本是无法使得训练跑起来的,有钱就是任性,论文用了800个GPU跑起来的。

2. 预备知识

  由于一直在研究CNN很少接触过RNN,所以第一遍看论文看的很吃力,不理解里面好多原理,所以查了RNN的一些基本理论知识,这里也介绍一下RNN的理论知识方便对于论文后续的理解。
RNN: Recurrent Neural Networks—循环神经网络
  作为深度学习的两大(RNN,CNN)分支之一,RNN最近几年已经在自然语言处理和语音处理中取得了巨大成功以及广泛应用。先贴出一个RNN的网络结构图如图1所示。
Neural Architecture Search with Reinforcement Learning论文总结_第1张图片
                        图1 RNN网络结构
  图1左侧是RNN的原始结构,如果先抛弃中间那个闭环,其实就是简单“输入层=>隐藏层=>输出层”的三层结构,这种结构是多层感知器的最常见的结构。然而多了一个的闭环,也就是说输入到隐藏层之后,隐藏层还会给自己也来一发,环环相扣,比较复杂。一旦有了环,就会陷入“先有蛋还是先有鸡”的逻辑困境,为了跳出困境人为定义一个起始点,按照一定的时间序列规定好计算顺序,做到有条不紊,于是实际上会将这样带环的结构展开成一个序列网络,也就是上图右侧被“unfold”之后的结构。
这里先介绍这样的序列化网络结构包含的参数记号的含义:
Neural Architecture Search with Reinforcement Learning论文总结_第2张图片
RNN的Forward阶段

Neural Architecture Search with Reinforcement Learning论文总结_第3张图片Neural Architecture Search with Reinforcement Learning论文总结_第4张图片
Neural Architecture Search with Reinforcement Learning论文总结_第5张图片
3. 论文核心

  先看看论文核心思想的一个图解如图2所示,这个就是利用了Reinforcement Learning(强化学习)思量:controller控制器给出个action,action去环境中做出动作并得到一个结果result,最后将result作为反馈信号反馈给controller控制器,controller控制器根据反馈值进行修改,然后一直迭代这个过程直到到达目标。
  本论文的思想是:通过一个controllerRNN在搜索空间(search space)中得到一个网络结构(论文中称为child network),然后用这个网络结构在数据集上训练,在验证集上测试得到准确率R,再将这个准确率回传给controller,controller继续优化得到另一个网络结构,如此反复进行直到得到最佳的结果,整个过程称为Neural Architecture Search。后面讲详细介绍整个流程,本总结主要是围绕生成CNN来介绍,论文中也可以生成RNN(这里就不叙述了)。
   Neural Architecture Search with Reinforcement Learning论文总结_第6张图片
                  图2 Neural Architecture Search的流程图
3.1 如何生成模型

  论文是利用RNN作为controller生成child network结构并训练网络,那为什么要使用RNN结构?
  论文有解释这一点:
  Our work is based on the observation that the structure and connectivity of a neural network can be typically specified by a variable-length string. It is therefore possible to use a recurrent network – the controller – to generate such string
  个人理解是:通过观察发现目前的神经网络的结构和内部连接是一个可变的长度string来指定的,所以可以使用RNN去产生如此的可变长度的网络结构。
  首先看看论文的第二个核心图如图2所示,图中预测的网络只包含conv层,使用RNN去预测生成conv层的超参数,这些超参数如图2所示,包括:卷积核的Height、卷积核的Width、卷积核滑动stride的Height、卷积核滑动stride的Width、卷积核数量(cnn中的channel)。如图2所示RNN中每一softmax预测的输出作为下一个的输入。
Controller生成一个网络结构后,用训练数据进行训练直到收敛,然后在验证集上进行测试得到一个准确率。论文中提到生成网络结构的终止条件是当网络层数达到一个值时就会停止。
Neural Architecture Search with Reinforcement Learning论文总结_第7张图片
Neural Architecture Search with Reinforcement Learning论文总结_第8张图片
Neural Architecture Search with Reinforcement Learning论文总结_第9张图片

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