S2DNAS最核心的点在于设计了丰富而简洁的搜索空间,从而能够使用常规的NAS方法即可进行动态推理网络的搜索,解决了动态推理网络的设计问题,可进行任意目标网络的转换



来源:晓飞的算法工程笔记 公众号

论文: S2DNAS: Transforming Static CNN Model for Dynamic Inference via Neural Architecture Search

Introduction


  最近,动态推理作为提升网络推理速度的有效方法,得到了大量关注。相对于剪枝、量化等静态操作,动态推理能够根据样本的难易程度选择合适的计算图,可以很好地平衡准确率和计算消耗,公众号之前也发过一篇相关的Resolution Adaptive Networks for Efficient Inference,有兴趣可以看看。为了实现动态推理,大多数的工作都需要专门的策略来动态地根据输入样本跳过某些计算操作。

  一种经典的方法上在常规卷积网络上添加中间预测层,如图a所示,当中间预测结果的置信度大于阈值,则提前退出。但早期的分类器没有利用深层的语义特征(低分辨率的高维特征),可能会导致明显的准确率下降。

  为了解决上述问题,MSDNet设计了二维(Layer-Scale)多阶段架构来获取各层的粗粒度特征和细粒度特征,如图b所示,每个预测层都能利用深层的语义特征,可达到较好的准确率。然而,MSDNet是精心设计的专用网络结构,若需要转换其它目标网络,则需要重新设计类似的范式。

  为了解决上述问题且不需要重新设计网络结构,论文提议将目标网络转换成channel-wise多阶段网络,如图c所示。该方法保持目标网络的结构,在channel层面将目标网络分成多个阶段,仅在最后的卷积层添加预测器。为了降低计算量,每个阶段的channel数都相对减少。基于图c的思想,论文提出通用结构S2DNAS,能够自动地将目标网络转换成图c架构的动态网络。

Overview of S2DNAS


  给定目标网络,S2DNAS的转换流程如图2所示,主要包含两个模块:

  • S2D(static-todynamic),生成目标网络特定的搜索空间,由目标网络通过预设的转换方法生成的多阶段网络组成。
  • NAS,在生成的搜索空间中使用强化学习搜索最优的模型,设计了能够反映准确率和资源消耗的回报函数。

The Details of S2D


  给定目标网络\(\mathbb{M}\),S2D生成包含由\(\mathbb{M}\)转换的多个网络的搜索空间\(\mathcal{Z}\),如图3所示,转换过程包含split操作和concat操作:

  • split操作在channel层面上将目标网络分割成多阶段子网,在每个阶段最后添加分类器。
  • concat操作是为了增加阶段间的特征交互,强制当前阶段的分类器复用前面阶段的某些特征。

Notation

  首先定义一些符号,\(X^{(k)}=\{ x^{(k)}_1, \cdots, x^{(k)}_C \}\)为第\(k\)层输入,\(C\)为输入维度,\(W^{k}=\{ w^{(k)}_1, \cdots, w^{(k)}_O \}\),\(O\)为输出维度,\(w^{(k)}_i\in \mathbb{R}^{k_c\times k_c\times C}\),转换操作的目标是将目标网络\(\mathbb{M}\)转换成多阶段网络\(a=\{ f_1,\cdots, f_s \}\),\(f_i\)为\(i\)阶段的分类器。

Split

  Split操作将输入维度的子集赋予不同阶段的分类器,假设阶段数为\(s\),直接的方法将输入维度分成\(s\)个子集,然后将\(i\)个子集赋予\(i\)个分类器,但这样会生成较大的搜索空间,阻碍后续的搜索效率。为了降低搜索空间的复杂度,论文先将输入维度分成多组,然后将组分成\(s\)个子集赋予不同的分类器。

  具体地,将输入维度分成\(G\)组,每组包含\(m=\frac{C}{G}\)维,以\(k\)层为例,分组为\(X^{(k)}=\{ x^{(k)}_1, \cdots, x^{(k)}_G \}\),\(X^{(k)}_i=\{ x^{(k)}_{(i-1)m+1}, \cdots, x^{(k)}_{im} \}\)。当分组完成后,使用分割点\((p^{(k)}_0, p^{(k)}_1, \cdots, p^{(k)}_{s-1}, p^{(k)}_s)\)标记分组的分配,\(p^{(k)}_0=0\)和\(p^{(k)}_s=G\)为两个特殊点,将维度分组\(\{ X^{(k)}_{p^{(k)}_{i-1}+1}, \cdots, X^{(k)}_{p^{(k)}_{i}}\}\)分给\(i\)阶段的分类器\(f_i\)。

Concat

  Concat操作用于增加阶段间的特征交互,使得分类器能够复用前面阶段的特征。指示矩阵\(\{ I^{(k)}\}^L_{k=1}\)用来表明不同位置的特征是否复用,\(k\)为层数,\(L\)为网络的深度,成员\(m^{(k)}_{ij} \in I^{(k)}\)表明是否在\(j\)阶段复用\(i\)阶段的\(k\)层特征。这里有两个限制,首先只能复用前面阶段的特征\(m^{(k)}_{ij}=0, j<i, \forall k < L\),其次\(L\)层必须复用前面所有阶段的特征。

Architecture Search Space

  基于上面的两种转换操作,S2D可以生成包含丰富多阶段网络的搜索空间。不同分割点和指示矩阵有不同的意义,调整分割点能够改变分组特征的分配方式,从而改变不同阶段分类器在准确率和资源消耗上的trade-off,而调整指示矩阵则伴随特征复用策略的改变。为了降低搜索空间的大小,在实验时规定目标网络中相同特征大小的层使用相同的分割点和指示矩阵。

The Details of NAS


  在生成搜索空间后,下一个步骤就是找到最优的动态网络结构,搜索过程将网络\(a\)表示为两种转换的设置,并标记\(\mathcal{Z}\)为包含不同设置的空间。论文采用NAS常用的policy gradient based强化学习方法进行搜索,该方法的目标是优化策略\(\pi\),进而通过策略\(\pi\)得到最优的网络结构,优化过程可公式化为嵌套的优化问题:

  \(\theta_a\)是网络\(a\)的权值,\(\pi\)是用来生成转换设置的策略,\(\mathcal{D_{val}}\)和\(\mathcal{D_{train}}\)标记验证集和训练集,\(R\)为验证多阶段网络性能的回报函数。为了解决公式1的优化问题,需要解决两个子问题,根据\(\theta^{*}_a\)优化策略\(\pi\)和优化网络\(a\)的\(\theta_{a}\)。

Optimization of the Transformation Settings

  与之前的NAS方法类似(公众号有很多NAS的论文解读,可以去看看),使用RNN生成目标网络每层的不同转换设置的分布,然后policy gradient based算法会优化RNN的参数来最大化回报函数:

  \(ACC(a, \theta_a, \mathcal{D})\)为准确率,\(COST(a, \theta_a, \mathcal{D})\)为动态推理的平均资源消耗。为了与其它动态推理研究比较,采用FLOPs表示计算消耗,\(w\)为平衡准确率和资源消耗的超参数。

Optimization of the Multi-stage CNN

  使用梯度下降来优化内层的优化问题,修改常规的分类损失函数来适应多阶段模型的训练情况:

  \(CE\)为交叉熵损失函数,公式3可认为是连续训练不同阶段的分类器,可使用SGD及其变种进行参数\(\theta\)的优化。为了缩短训练时间,仅用几个训练周期来接近\(\theta^{*}\),没有完整地训练网络到收敛。训练完成后,在测试集进行回报函数的测试,优化RNN。最后选择10个搜索过程中最优的网络结构进行完整地训练,选择性能最好的网络结构输出。

Dynamic Inference of the Searched CNN

  对于最优的多阶段网络\(a=\{f_1, \cdots, f_s \}\)后,在使用时为每个阶段预设一个阈值。按计算图依次进行多阶段推理,当该阶段的预测结果达到阈值时,则停止后续的推理,直接使用该阶段结果。

Experiments


  与多种类型的加速方法对比不同目标网络的转化后性能。

  与MSDNet进行DenseNet转换性能对比。

  不同目标网络转换后各阶段的性能对比。

  准确率与计算量间的trade-off。

  多阶段ResNet-56在CIFAR-10上的模型。

Conclustion


  S2DNAS最核心的点在于设计了丰富而简洁的搜索空间,从而能够使用常规的NAS方法即可进行动态推理网络的搜索,解决了动态推理网络的设计问题,可进行任意目标网络的转换。不过S2DNAS没有公布搜索时间,而在采用网络训练的时候仅用少量训练周期,没有列出验证训练方式和完整训练得出的准确率是否有偏差。此外,S2DNAS的核心是将静态网络转换成动态网络,如果转换时能够将静态网络的权值用上,可以更有意义,不然直接在目标数据集上搜索就好了,没必要转换。





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

S2DNAS:北大提出动态推理网络搜索,加速推理,可转换任意网络 | ECCV 2020 Oral的更多相关文章

  1. CSG:清华大学提出通过分化类特定卷积核来训练可解释的卷积网络 | ECCV 2020 Oral

    论文提出类特定控制门CSG来引导网络学习类特定的卷积核,并且加入正则化方法来稀疏化CSG矩阵,进一步保证类特定.从实验结果来看,CSG的稀疏性能够引导卷积核与类别的强关联,在卷积核层面产生高度类相关的 ...

  2. Gradient Centralization: 简单的梯度中心化,一行代码加速训练并提升泛化能力 | ECCV 2020 Oral

    梯度中心化GC对权值梯度进行零均值化,能够使得网络的训练更加稳定,并且能提高网络的泛化能力,算法思路简单,论文的理论分析十分充分,能够很好地解释GC的作用原理   来源:晓飞的算法工程笔记 公众号 论 ...

  3. 【转载】Linux动态库搜索路径的技巧

    转自:http://soft.chinabyte.com/os/232/11488732_2.shtml 众所周知,Linux动 态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都 ...

  4. 使用CDN对动态网站内容加速有效果吗

      个资源文件,有利于减少原始服务器的压力.        缓存网页内容        对于动态网站而言,部分访问量大的网页内容可能改观不大,好比论坛的首页,置顶的帖子很少泛起大转变,因此这样的网页可 ...

  5. 仿百度壁纸客户端(五)——实现搜索动画GestureDetector手势识别,动态更新搜索关键字

    仿百度壁纸客户端(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Frag ...

  6. Linux动态库搜索路径的技巧

    众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径 ...

  7. 仿百度壁纸client(五)——实现搜索动画GestureDetector手势识别,动态更新搜索keyword

    仿百度壁纸client(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸client(一)--主框架搭建,自己定义Tab + ViewPager ...

  8. 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络

    英特尔 至强 平台集成 AI 加速构建数据中心智慧网络 SNA 通过 AI 方法来实时感知网络状态,基于网络数据分析来实现自动化部署和风险预测,从而让企业网络能更智能.更高效地为最终用户业务提供支撑. ...

  9. DyLoRA:使用动态无搜索低秩适应的预训练模型的参数有效微调

    又一个针对LoRA的改进方法: DyLoRA: Parameter-Efficient Tuning of Pretrained Models using Dynamic Search-Free Lo ...

  10. GDB动态库搜索路径

    当GDB无法显示so动态库的信息或者显示信息有误时,通常是由于库搜索路径错误导致的,可使用set sysroot.set solib-absolute-prefix.set solib-search- ...

随机推荐

  1. display的值及作用

    display的值及作用 display属性可以设置元素的内部和外部显示类型,元素的外部显示类型将决定该元素在流式布局中的表现,例如块级或内联元素,元素的内部显示类型可以控制其子元素的布局,例如gri ...

  2. 配置nginx反向代理

    最近在做一个前后分离的项目,前端用Vue,后台spring boot,使用nginx做反向代理.下面说一下如何配置: 启动spring boot项目,端口8110 启动nginx 修改nginx.co ...

  3. 3D环饼图

    // <div class="AnalysisAccCom">         <first-title title="分析对象统计"> ...

  4. 【手写信息搜集工具】ThunderSearch 闪电搜索器

    ThunderSearch 闪电搜索器 项目地址:github Windows打包版 利用ZoomEye的官方api,结合开发文档,做了这么一个GUI界面的搜索器.目前支持查询host_search ...

  5. 类型别名TypeAlias

    from collections.abc import Iterable from typing import TypeAlias FromTo = tuple[str, str] # 3.10之前 ...

  6. java+mysql数据库实现的学生管理系统

    说明: java+mysql数据库实现的学生管理系统 功能 实现增加学生.删除学生.修改学生.学生列表.查询学生功能 截图: 开发工具/技术 java  eclipse 价格:50元,有需要联系 微信 ...

  7. 02-Redis系列之-架构和高级API的使用

    通用部分 通用命令 # 1-keys # 打印出所有key keys * # 打印出所有以n开头的key keys n* # 打印出所有以nam开头,第四个字母是a到z的范围 keys nam[a-z ...

  8. DataGear 自定义数据可视化看板的图表主题

    DataGear 看板的 dg-chart-theme 属性,提供了简单且强大的自定义图表主题功能. 通常,只需要设置其color.backgroundColor.actualBackgroundCo ...

  9. 非正式全面解析 NebulaGraph 中 Session 管理

    NebulaGraph 论坛最近有些讨论帖,各种姿势来问 NebulaGraph Session 管理相关的事情,我寻思这也不是一个法子,还是来写一篇文章来讲述下 NebulaGraph 中的 Ses ...

  10. ElasticSearch基本查询使用(2)

    在介绍本章之前,需要先打开安装的Kibana页面, 并打开命令行工具页面: 并且根据上节的介绍,我们需要根据中文搜索,所以需要在建立映射时,指定中文字段的分词器为Ik分词器, 默认为英文分词器,每个中 ...