当前位置: 首页 > news >正文

轻量级模型解读——基于神经网络架构搜索(NAS)系列

基于神经网络架构搜索比较经典的轻量型模型主要有谷歌大脑在2017年提出的NASNet、2018年的MnasNet和2019提出的MixConv,当然还有其他系列的轻量型模型也是通过架构搜索得到,比如:MobileNetv3和MobileNetv4,EfficientNet-B0,GhostNetv3等,这里不再赘述。

文章目录

  • 1、NAS
  • 2、NASNet
  • 3、MnasNet
  • 4、MixNet


1、NAS

NASNet和MnasNet是比较早期利用神经网络架构搜索方式尝试得到高效模型结构的算法,解读这两个算法,先了解下谷歌大脑在2016年发布的神经网络架构搜索(Neural Architecture Search,NAS)论文,论文地址:NEURAL ARCHITECTURE SEARCH WITH REINFORCEMENT LEARNING

在NAS论文中,作者定义一个controller RNN网络来预测一个子网络,通过用CIFAR-10小数据集训练子网络得到该子网络的accuracy,利用accuracy更新controller RNN的参数,由于accuracy对于controller RNN的参数不直接可导,作者提出利用强化学习的方法,根据controller RNN生成多个不同子网络的样本,将这些样本的准确率作为奖励,计算controller RNN参数的奖励梯度,并由此更新参数,直至得到最优controller RNN参数,这个最优参数对应得到最优子网络(搜索出来的神经网络结构)。该文最大的创新点是将神经网络结构通过一个一个参数来定义,比如:每层卷积核个数,卷积核宽高,stride的宽高等等,将这些参数用作RNN的参数,通过强化学习方式来更新优化RNN的参数,最终得到最优神经网络架构。如下图是整体搜索更新框架图:
在这里插入图片描述
若只需搜索包含卷积层的网络结构,可定义的controller RNN结构如下:
在这里插入图片描述
如图,红框部分的controller RNN参数定义了搜索卷积神经网络的第N个卷积层的搜索参数。

下表是NASNet、MnasNet与MixNet之间的参数量及ImageNet数据集上top1比较:
在这里插入图片描述


2、NASNet

下面来看NASNet,NASNet提出,先在小数据CIFAR-10上搜出最佳卷积block,然后通过堆叠block的方式再迁移到大数据集上应用。论文地址:http://arxiv.org/abs/1707.07012

论文还是延续了NAS论文的思想,通过一个controller RNN(单层LSTM结构)去预测网络结构,具体训练更新RNN的方式见上面对NAS论文的解读。由于NAS论文是直接搜索的整个网络结构,且实验也全在小数据集CIFAR-10上,若想扩展到ImageNet这种大数据集上是不现实的,因为一个子网络用ImageNet训练得到accuracy是需要很长时间的,所以作者借鉴了目前主流优秀的网络结构(如ResNet和GoogleNet)的重复堆叠思想提出了搜索子模块,若子模块在CIFAR-10上得到最佳性能,通过简单堆叠便可迁移到大数据集ImageNet上也能达到最优。

为了生成可扩展的网络结构并且能够接受任意尺寸输入的图像,基于此论文设计的convlolution cell主要包含两种:
Normal Cell:不改变输入feature map的大小的卷积;
Reduction Cell:将输入feature map的长宽各减少为原来的一半的卷积,是通过增加stride的大小来降低size。
最后RNN控制器用来预测这两种模块。
在这里插入图片描述
可以看到,对于不同规模的数据集,通过控制两种Cell的堆叠数量就可以达到不同规模的网络结构。对于ImageNet这种大型数据集,堆叠次数只是多重复几次而已。

上面所说的convolution cell具体是什么,论文中给出了和NAS一样的RNN结构图,不同的是,NAS论文中RNN参数是整个网络的参数,而这里的RNN是每个convolution cell模块的参数,对于每个block来说RNN控制器有5个预测步骤也有5个输出的预测值。如下图:
在这里插入图片描述
图中的预测步骤分为5步:
1、 从hi、hi−1或之前块中创建的隐藏状态集合中选择一个隐藏状态。
2、 从步骤1中相同的选项中选择第二个隐藏状态。
3、 选择应用于步骤1中选择的隐藏状态的操作。
4、 选择应用于步骤2中选择的隐藏状态的操作。
5、 选择一个方法来组合步骤3和4的输出,以创建一个新的隐藏状态。
其中,在步骤3和4中,控制器RNN选择一个操作应用于隐藏状态。这些操作的选择集合有:
在这里插入图片描述
而第5步中,是组合两个隐藏状态的输出,一种是将两个隐藏状态之间的元素相加,一种是concat两个隐藏状态的输出。

上述5个步骤就是NASNet的创新点了,相对于NAS的思想,NASNet的作者重新设计了搜索空间(NASNet search space),使得大大降低了搜索难度,搜索效率比NAS高效7倍左右(这里要说明一下,架构搜索真不是一般公司能玩得起的,NAS用了800个Nvidia K40 GPU搜索了28天,而NASNet用了500个Nvidia P100s GPU搜索了4天)。最终基于CIFAR-10数据集搜索出的最佳convolutional cell的两种子结构Normal Cell和Reducation Cell如下:
在这里插入图片描述

NASNet与其他轻量化模型在ImageNet数据集上性能对比:
在这里插入图片描述


3、MnasNet

由于MnasNet是专门针对移动端/嵌入式端设计的搜索网络结构方式,所以MnasNet与NASNet不同的是,在搜索空间中加入了模型的实际推理延时作为搜索目标,而且作者不是用模型的FLOPS数作为延迟的指标,而是通过在手机设备上直接运行模型得到的实际推理延迟作为判别标准。(因为作者发现用FLOPS数量衡量延时不准确,比如MobileNet和NASNet-A拥有相似的FLOPS数量,前者575M,后者564M,但是实际推理延时却差距很大,前者113ms,后者183ms)。为了进一步在灵活性和搜索空间大小之间取得适当的平衡,作者提出了一种新的分层搜索空间,它鼓励整个网络中的层多样性。
论文地址:https://arxiv.org/abs/1807.11626
代码地址:https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet

下图给出了MnasNet的整体搜索框架图,相对于NASNet,它在Controller的强化学习输入的reward中融入了模型在Mobile phones的推理延时(红圈部分)。
在这里插入图片描述

分解层次搜索空间
定义良好的搜索空间对于神经结构搜索非常重要。然而,NASNet只搜索少数复杂的convolution cell,然后重复堆叠相同的cell。这些方法不允许层多样性,而这对于实现高精度和低延迟至关重要。于是,作者提出一种新的搜索空间,分解层数搜索空间,作者将CNN模型分解成独特的块(block),然后分别搜索每个块的操作和连接,从而允许在不同的块中使用不同的层架构。
在这里插入图片描述
如上图,可在每个Block中搜索,最终7个Block中可得到不同的层结构。每个Block中的搜索空间定义为:
卷积操作OP有:常规卷积(conv)、深度可分离卷积(Dconv)和移动倒置瓶颈卷积;
卷积核的kernel size:3x3,5x5;
Squeeze-and-Excitation ratio SE ratio:0,0.25;
Skip操作SkipOp:池化,恒等残差块、no skip;
输出的filtersize:Fi;
每个Block包含的层数:Ni
其中ConvOp,KernelSize,SERatio,SkipOp,Fi决定了一个层的结构,Ni决定了第i个Block内层重复的数量。
分解式层次搜索空间有一个直接优势,就是可以平衡层的多样性和整个搜索空间的尺寸。
最终作者还是采用强化学习的方式来更新Controller 的参数,因为它很方便简洁而且reward易于定制,可以在reward中直接按照下面公式加入模型推理延时的影响因素即可。
在这里插入图片描述
其中LAT(m)代表模型m的推理延时,w代表延时所占的权重,用于控制和模型精度ACC两者的平衡。

MnasNet与其他轻量模型在ImageNet数据集上比较如下表:
在这里插入图片描述


4、MixNet

2019年谷歌大脑又提出新的利用架构搜索得到的轻量级网络结构MixNet,这次工作的重点主要在于探索不同大小的卷积核对模型性能的影响。这是因为小卷积核感受野小,参数少,但是准确率不高,大卷积核感受野大,准确率相对较高,但参数量比较大。作者想通过搜索的方式,让参数量与模型性能达到一个比较好的平衡。
论文地址:https://arxiv.org/abs/1907.09595
代码地址:https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet

作者根据MobileNetv1/v2研究了卷积核大小对模型性能的影响,如下图所示:
在这里插入图片描述
结果显示,并不是卷积核越大,模型性能越好,单一核大小具有局限性,我们需要多种不同的核大小来提取不同分辨率下的特征。
因此,作者提出了一种混合深度卷积(MixConv),它将不同的核大小混合在一个卷积运算中,这样就可以很容易地捕获不同分辨率的模式。下图显示了MixConv的结构,它将通道划分为多个组,并对每组通道应用不同的核大小。
在这里插入图片描述
上图(a)为常规的深度卷积,对于M个channel的输入,它对每个channel应用同样大小的卷积核进行卷积。而右边的图(b)为混合深度卷积(MixConv),它将M个输入通道分成C组,每组应用不同大小的卷积核计算。

关于MixConv的设计
MixConv的主要思想是在一个深度卷积操作中混合多个不同大小的内核,这样它就可以很容易地从输入的图像中捕获不同类型的模式。

  • Group Size: 决定一个输入张量使用多少种不同类型的卷积核。在g=1的极端情况下,MixConv等价于普通的深度卷积。作者在实验中发现g=4通常是MobileNets的一个安全选择,但在NAS的方式下,发现从1到5的各种组大小可以进一步提高模型的效率和准确性。
  • Kernel Size Per Group: 理论上,每个组可以有任意的核大小。但是,如果两个组具有相同的内核大小,那么就相当于将这两个组合并成一个组,因此限制每个组具有不同的核大小。此外,由于小的卷积核大小通常具有更少的参数和FLOPs,限制核大小总是从3×3开始,后面是奇数增加,在group等于4的情况下,设置为{3x3,5x5,7x7,9x9}。
  • Channel Size Per Group: 即每个分组中通道数量,有两种情况,每组通道数量相同;另外一种是根据组号指数衰减,即第i组将拥有总通道的约2-i部分。
  • Dilated Convolution: 大的卷积核意味着参数更多,因此可以用Dilated Conv来代替,这样更少的参数也能获得同样的感受野。

将MobileNetv1/v2中的常规深度可分离卷积替换成MixConv,改变后的MobileNetv1/v2更小、更快,而且精度更高了,如下图所示:
在这里插入图片描述

MixNet架构搜索
作者为了进一步证明MixConv的有效性,利用神经网络架构搜索来开发一个新的基于MixConv的模型家族,称为MixNets。和之前的MnasNet,FBNet类似,搜索空间包含核的数量,SERatio,通道数量等,这篇论文还包括swish激活函数,SE模块,1x1的组卷积,特别的,这里用了MixConv作为了基本卷积操作作为搜索空间(之前的工作是用depthwise conv作为基本卷积选项)。搜索出来的MixNet-S和MixNet-M结构如下:
在这里插入图片描述

MixNets与其他轻量模型在ImageNet数据集上表现对比情况如下:
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 开放式耳机有哪些值得推荐?十大口碑最好开放式蓝牙耳机!
  • 科技与艺术完美融合的LED异形创意圆形(饼/盘)显示屏横空出世
  • 开放式蓝牙耳机推荐?五款高评分爆款机型汇总!
  • 设计模式---中介者模式
  • C++标准的一些特性记录:C++11的constexpr
  • 4G工业路由器:SR700的智能连接解决方案
  • EasyExcel拿表头(二级表头)爬坑,invokeHeadMap方法
  • 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件
  • 如何利用 CSS 渐变实现多样化背景效果
  • 【C++11 —— 包装器】
  • 信息安全工程师(1)计算机网络分类
  • ubuntu下手工编译安装 6.* 最新内核
  • leetcode 146.LRU缓存
  • Encountered error while trying to install package.> lxml
  • VS Code 配置 Rust-Analyzer 报错
  • ES6指北【2】—— 箭头函数
  • [译]前端离线指南(上)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • angular2 简述
  • echarts花样作死的坑
  • Golang-长连接-状态推送
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaWeb(学习笔记二)
  • Java知识点总结(JavaIO-打印流)
  • Quartz初级教程
  • React 快速上手 - 07 前端路由 react-router
  • sessionStorage和localStorage
  • vue-router的history模式发布配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 开发基于以太坊智能合约的DApp
  • 十年未变!安全,谁之责?(下)
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 用jQuery怎么做到前后端分离
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)(1.13) SiK无线电高级配置(五)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (javaweb)Http协议
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (规划)24届春招和25届暑假实习路线准备规划
  • (黑马点评)二、短信登录功能实现
  • (七)c52学习之旅-中断
  • (三)c52学习之旅-点亮LED灯
  • (一)Neo4j下载安装以及初次使用
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .net专家(张羿专栏)
  • .sh
  • @Async注解的坑,小心