NASNet论文详解

2023-10-31 20:38
文章标签 详解 论文 nasnet

本文主要是介绍NASNet论文详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NASNet,论文的全名叫做Learning Transferable Architectures for Scalable Image Recognition.

这一篇论文是对神经网络架构搜索开篇之作NAS的集成和发展,也是由谷歌的Zoph等人提出来的,针对NAS论文中的缺点进行改进,在分类精度和训练资源、时间上,都优于前者。

NASNet论文的基本设计思想是:

  1. 和NAS论文一样,采用controller RNN来预测子网络参数
  2. 第一次提出了Cell和Block的概念
  3. controller RNN不再用来预测每一层的网络参数,而是用来预测Cell里面的Block参数

首先介绍一下什么是Cell和Block。Cell可以看做是整体网络架构里面的一个单元块,类似ResNet架构的残差块或者MobileNet V2的bottleneck,整个网络就是由这些单元块堆叠连接而成。

Cell分两种:Normal和Reduction。当输入特征和输出特征的分辨率是一致时,采用Normal Cell,当输入特征的分辨率是输入特征的一半时,采用Reduction Cell。Reduction Cell的设计方法Normal Cell基本一样,只是在输入特征上添加了一个stride=2的卷积操作,降低分辨率。在整体网络架构中,Normal Cell和Reduction Cell的设计原则是每N个Normal Cell中插入一个Reduction Cell,如下图所示。
在这里插入图片描述
图1. Cifar-10和ImageNet上的NASNet网络架构

Block是Cell里面的基本单元,共有B个(论文取5)。每个Block有两个输入,分别经过各自的operation之后再结合(相加或者衔接)作为输出,Block的输出称为隐状态。对于第 i i i个Block,输入的候选范围包括前面 i − 1 i-1 i1个Block的隐状态以及前两个Cell的输出,Block的操作的候选空间如下图所示。
在这里插入图片描述
图2. Block操作的候选空间

与NAS论文里controller RNN预测每一个layer的操作参数不同,NASNet的controller RNN是用来预测Cell里面每一个Block的参数。具体如下图所示。
在这里插入图片描述
图3. NASNet的controller RNN

Block的参数预测步骤有:

  1. 从输入候选范围内选择两个隐状态作为Block的两个输入
  2. 从操作候选空间选择operation作为步骤1中两个输入的操作
  3. 选择一个操作用来结合步骤2中的两个输出

预测步骤总共会循环B次,直至预测出Cell所有Block结构为止。

Controller RNN的训练方法和NAS论文中一样,也是通过验证集的精度作为reward来优化controller的参数,采用的强化学习中的PPO(Proximal Policy Optimization)算法。

在训练的时候,只选择一种Normal和Reduction Cell,同一个网络中相同类型的Cell结构是共享的,所以controller RNN只需要预测一个Cell的结构即可。从搜索空间的复杂度来看,这种方法设计极大地减小了搜索的次数和范围,这种思想被后来的其他NAS论文广泛引用,后面的博客介绍的其他方法会持续提到。

作者在训练的过程还加了一种额外的技巧,即先在小的数据集上(如Cifar-10)搜索Cell结构,等搜索结果出来后,再堆叠更多的Cell,应用在大数据集上(如ImageNet)。这样在搜索的过程中,子网络模型训练的时间便大幅减小,提高搜索的效率。

在Cifar-10数据上,论文使用了500个GPU,搜索了4天的时间。相比NAS论文的实验,搜索效率提升了7倍。在训练子网络时,采用Scheduled DropPath的方法,以一定的概率(随着迭代的次数线性增加)随机扔掉Cell里的某些路径。下图是NASNet搜索出来的Normal和Reduction Cell的结构。
在这里插入图片描述
图5. 搜索出来的Normal和Reduction Cell结构图

论文把cifar-10上搜索出来的Cell结构迁移到ImageNet数据集上,表现出了很好的泛化能力。

以下两张图是NASNet搜索出来的Cell按照图1里的方式叠加成网络后训练出来的结果。可以看出,在同一参数量等级的模型上,NASNet比手工设计的网络模型精度更好,也比NAS论文的实验结果更优。
在这里插入图片描述
图6. Cifar-10实验结果和对比

在这里插入图片描述
图7. ImageNet实验结果和对比

这篇关于NASNet论文详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/317973

相关文章

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁