from:https://blog.csdn.net/xjz18298268521/article/details/79079008

NASNet总结

论文:《Learning Transferable Architectures for Scalable Image Recognition》

  先啥都不说,看看论文的实验结果,图1和图2是NASNet与其他主流的网络在ImageNet上测试的结果的对比,图3是NASNet迁移到目标检测任务上的检测结果,从这图瞬间感觉论文的厉害之处了,值得阅读好几篇。

                        图1ImageNet数据集上的比较

                        图2 NASNet与目前最好的网络的比较
     
                        图3 NASNet目标检测的效果

1. 概述

  此论文是一开始发表于ICLR2017,后来转投与CVPR2017,又是Google
Brain的一篇著作,其开源了源代码,目前还没有找到caffe版本的实现。论文是在之前的一篇论文NAS–Neural Architecture
Search With Reinforcement
Learning的基础做了突破性的改进,使得能让机器在小数据集(CIFAR-10数据集)上自动设计出CNN网络,并利用迁移学习技术使得设计的网络能够被很好的迁移到大数据集(ImageNet数据集),同时也可以迁移到其他的计算机视觉任务上(如目标检测)。

自我总结

  看了论文一遍后发现真是云里雾里,真是硬着头皮看完了一遍,发现是论文许多核心的点都是基于NAS做的,在论文中只是几句带过,所以看完一篇论文后我不得不先去下载NAS论文看,看完NAS论文后回头再重新看这篇论理解起来就简单多了,极力推荐先看NAS论文(也是一篇很好的论文)再看此篇论文。

2. 论文核心

  看完NAS论文和此篇论文,我将从以下几点描述论文的核心点。
   核心一:延续NAS论文的核心机制使得能够自动产生网络结构;
   核心二:采用resnet和Inception重复使用block结构思想;
   核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。

核心一

  
论文是采用了NAS的核心机制来自动生成网络,还是利用RNN控制器去预测一个网络结构,接着训练这个网络直到收敛,去验证集上测试得到一个准确率R,将这个R作为回报信号反馈给RNN控制器去更新RNN控制器的参数,从而产生更好的网络结构。只不过原来NAS中优化的算法是policy梯度,而论文中采用
Proximal Policy Optimization
(PPO)算法。整个的流程还是使用强化学习机制,具体的细节在NAS论文中有阐述,这里就不详细阐述了。
  
                        图4 生成网络的机制
  NAS那篇论文中的实验都是在CIFAR-10上做的,所以那种搜索方式可以在能接受的时间范围内达到目的,但是如果想要在ImageNet数据集应用就不大行,因此就有了这篇文章,核二和核心三也是基于此提出的,也就是设计一个合适的new
search
space,使得在CIFAR-10上得到的最好的网络结构可以方便地迁移到ImageNet这样的图像尺寸大且数量也多的数据集上,因此这篇文章可以看做的ICLR2017那篇NAS文章的升级版,搜索速度比之前快了7倍左右。

核心二

  论文借鉴了目前主流优秀的网络结构(如ResNet和GoogleNet)的重复堆叠思想,使得RNN控制器学习得到也是基本单元convolutional
cell,这是和原来的NAS很不一样的地方。论文通过堆叠convolution
cell从而构建整个网络结构,如图5所示就是基于这两种cell在不同数据集上构建的网络结构。
  为了生成可扩展的网络结构并且能够结构任意size的图像,基于此论文设计的convlolution cell主要包含两种:
  Normal Cell:不改变输入feature map的大小的卷积;
  Reduction Cell:将输入feature map的长宽各减少为原来的一半的卷积,是通过增加stride的大小来降低size。
  最后RNN控制器用来预测这两种Cell。
        
                  图5 Normal Cell和Reduction Cell构建网络结构

核心三

  核心三也是论文一大改进,也是论文的核心所在,对于RNN控制器预测的输出和NAS不一样了。上述所描述的convolution
cell到底是什么呢?论文的解释是一个convolution
cell由B个block组成,那么一个block又是什么呢,看看图6就一目了然,对于每个block来说RNN控制器有5个预测步骤也有5个输出的预测值。每个block的输入是前面的两个block的最后的输出。


                 图6 RNN控制器预测每个convolution cell中的每个block结构图
图中的预测步骤一共是5个步骤:
  Step1:从hidden states(前面block中产生的)中选择一个hidden state—hi-1;
  Step2:重复step的操作,选择一个hidden state—hi;
  Step3:为step1中选择的hidden state选择一个操作;
  Step4:为step2中选择的hidden state选择一个操作;
  Step5:选择一个方法去连接step3和step4中的输出从而产生一个new hidden state,并将其添加到hidden states中。
说明
   考虑到计算资源的限制,论文限制了search space,设置B=5。
   Step3和step4中选择的操作可以下面的这些选项选择

  Step5中的连接方式一般有两种选择
  (1)element-wise addition between two hidden states
  (2)concatenation between two hidden states along the filter dimension
  上述的5个step就是此论文的核心了,也就是作者设计的new search
space,这是和ICLR2017那篇NAS文章最不一样的地方,NAS那篇文章中的search
space包含了filter的size,stride等等,而这篇文章则通过构造convolution
cell的方式大大降低了search的难度。
图6中左右两个图都是一个block的示意图,且是相互对应的,比如左图中的两个灰色框对应右图中的最底下两个虚线框,左图中的两个黄色框对应右图中的3*3
conv和 2*2 maxpool,左图中的绿色框对应右图中的add操作。
  图7就是作者通过实验得到的表现最好的Normal Cell和Reduction Cell结构。每个convolution
cell(比如Fiugre4中的Normal Cell和Reduction
Cell)都是B个block的结果,在Figure4中,B=5,所以可以看到不管在Normal Cell还是Reduction
Cell中都有5个add操作。注意图6展示的是论文称为NASNet-A的Cell结构,论文中的其他两种基于不同的search
spaces得到的NASNet-B和NASNet-C的Cell结构可以看论文中最后的附录部分。可以看出虽然作者没有设计类似ResNet那样的residual
connection结构(或者叫skip connection),但是这些Cell在训练过程中自己学会了这种skip
connection(图7中的虚线连接),这个学习的过程就是图6中前面两个灰色矩形框的select过程(可以和ICLR2017的NAS中设计的skip
connection结构对比,在那篇文章中采用的sigmoid结构表达层与层之间的连接关系),而且作者发现当手动插入residual
connection时并没能提高模型的效果。

                          图7 NASNet-A的Cell结构示意图

NASNet学习笔记——   核心一:延续NAS论文的核心机制使得能够自动产生网络结构;    核心二:采用resnet和Inception重复使用block结构思想;    核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。的更多相关文章

  1. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...

  2. 深度学习笔记(七)SSD 论文阅读笔记简化

    一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...

  3. 深度学习笔记(七)SSD 论文阅读笔记

    一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...

  4. 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...

  5. [原创]java WEB学习笔记31:会话与状态管理 session机制 概述(定义,session机制,session的声明周期,保存session的方式,Session的创建与删除)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Redis 学习笔记(四)RDB 和 AOF 持久化机制

    一.Redis 持久化简介 Redis 的持久化功能是区别于 Memcached 显著特性,数据持久化可以保证系统在发生宕机和重启后数据不会丢失,对于 redis 这种存储在内存中的数据库显得尤为重要 ...

  8. JS学习笔记:(一)浏览器页面渲染机制

    浏览器的内核主要分为渲染引擎和JS引擎.目前市面上常见的浏览器内核可以分为这四种:Trident(IE).Gecko(火狐).Blink(Chrome.Opera).Webkit(Safari).这里 ...

  9. Spring 学习笔记(五)—— Bean之间的关系、作用域、自动装配

    继承 Spring提供了配置信息的继承机制,可以通过为<bean>元素指定parent值重用已有的<bean>元素的配置信息. <?xml version="1 ...

随机推荐

  1. Iptables实现公网IP DNAT/SNAT

    Iptables实现NAT是最基本的功能,大部分家用路由都是基于其SNAT方式上网,使用Iptables实现外网DNAT也很简单,不过经常会出现不能正常NAT的现象.以下命令将客户端访问1.1.1.1 ...

  2. 封装GetQueryString()方法来获取URL的value值

    首先测试URL:http://192.168.1.82:8020/juzhong/daojishi.html?name=xiangruding&sex=nuuu&age=90 代码如下 ...

  3. Java下HttpUnit和Jsoup的Http抓取

    简单记录下:搜集信息-分析问题-解决问题 关于html文档的操作现成库有: HttpUnit 很老了,不更了 http://www.httpunit.org/  20 May 2008 HttpUni ...

  4. Java 8 Collectors to Map

    1. 介绍 在本教程中,我们将讨论Collectors类的toMap()方法.我们使用它将流收集到一个Map实例中. 对于本教程中涉及的所有示例,我们将使用图书列表作为数据源,并将其转换为不同的Map ...

  5. HTML5 2D平台游戏开发#4状态机

    在实现了<HTML5 2D平台游戏开发——角色动作篇之冲刺>之后,我发现随着角色动作的增加,代码中的逻辑判断越来越多,铺天盖地的if() else()语句实在让我捉襟见肘: 这还仅仅是角色 ...

  6. Spark Streaming和Kafka整合开发指南(一)

    Apache Kafka是一个分布式的消息发布-订阅系统.可以说,任何实时大数据处理工具缺少与Kafka整合都是不完整的.本文将介绍如何使用Spark Streaming从Kafka中接收数据,这里将 ...

  7. pooler 连接池中报错" error_no_members"

    连接池驱动,pooler 在使用中会报错" error_no_members" 分析:可能有以下3个地方对其有影响:    1)member 可能没回收: 2)wait_for_p ...

  8. Echache整合Spring缓存实例解说

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要介绍了EhCache,并通过整合Spring给出了一个使用实例. 一.EhCac ...

  9. Android 实现的EditText响应drawableRight的点击事件

    1.自定义Edittext 实现右侧图标点击清空 package com.dxw.live.view; import android.content.Context; import android.g ...

  10. 2017-2018-1 20179209《Linux内核原理与分析》第三周作业

    一.函数调用堆栈 存储程序.函数调用堆栈(高级语言起点)和中断机制是计算机工作的三大法宝.其中函数调用堆栈是本次学习的重点.先介绍一些基本的知识点: 1.ebp 在C语言中用作记录当前函数调用的基址: ...