Loading [MathJax]/jax/input/TeX/jax.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【神经网络搜索】Once for all

【神经网络搜索】Once for all

作者头像
BBuf
发布于 2021-07-01 08:32:00
发布于 2021-07-01 08:32:00
4510
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

【GiantPandaCV导语】Once for all是韩松组非常有影响力的工作,其最大的优点是解耦了训练和搜索过程,可以直接从超网中采样出满足一定资源限制的子网,而不需要重新训练。该工作被ICLR20接收。

0. Info

Title: Once-for-All: Train one Network and Specialize it for Efficient Deployment

Author: 韩松组

Link: https://arxiv.org/pdf/1908.09791v5

Publish: ICLR2020

1. Motivation

传统网络搜索方法往往只能针对某个特定设备或者特定资源限制的平台进行针对性搜索。对于不同的设备,往往需要在该设备上从头训练。这样的方法扩展性很差并且计算代价太大,所以once for all从这个角度出发,希望能做到将训练和搜索过程解耦,从而可以训练一个支持不同架构配置的once-for-all网络(类似超网的概念),通过从once-for-all网络中选择一个子网,就可以在不需要额外训练的情况下得到一个专门的子网络。

  • 不同的硬件平台有着不同的硬件效率限制,比如延迟、功耗
  • 不同的硬件平台的硬件资源差别很大,比如最新的手机和最老的手机。
  • 相同的硬件上,不同的电池条件、工作负载下使用的网络模型也是不同的。

也就是说,网络设计主要受平台的以下几方面约束:

  • 部署的硬件设备不同。
  • 相同硬件设备上不同的部署要求,比如期望的延迟。

2. Contribution

  • 提出了解决以上问题的方法:设计once-for-all网络,可以在不同的网络配置下进行部署。
  • 推理过程使用的模型是once-for-all网络的一部分,可以无需重新训练就能灵活的支持深度、宽度、卷积核大小、分辨率等参数的不同。
  • 提出了渐进式收缩的训练策略来训练once-for-all网络

3. Method

方法部分需要搞清楚两个问题,一个是网络是什么样的?一个是网络是如何训练的?

第一个问题:once-for-all网络长什么样子?

once-for-all网络支持深度、宽度、卷积核大小、图像分辨率四个因素的变化。

  • elastic depth: 代表选择任意深度的网络,每个单元的深度有{2,3,4}三个选项。
  • elastic width: 代表选择任意数量的通道,宽度比例有{3,4,6}三个选项。
  • elastic kernel size: 代表选择任意的卷积核大小,有{3,5,7}三个选项。
  • arbitrary resolution: 代表图像的分辨率是可变的,从128到224,stride=4的分辨率均可。

由于网络包括5个单元,所以候选的子网大概有

((3×3)2+(3×3)3+(3×3)4)5=2×1019

个不同的子网,并且是在25个不同输入分辨率下进行训练。所有的子网都共享权重,只需要7.7M的参数量。

第二个问题:once-for-all怎样才能同时训练这么多子网络?

由于once-for-all的目标是同时优化所有的子网,所以需要考虑使用新的训练策略。

  • 最简单的想法:不考虑计算代价的情况下,每次梯度的更新都是由全体子网计算得到的。虽然这样最准确,但是可想而知计算代价过高,并不实际。
  • 可行的想法:每次梯度是由一部分子网计算得到的。笔者曾经尝试过这种方法(single path one shot),收敛的速度非常慢,得到的准确率也非常低。这很可能是在训练过程中,由于权重是共享的,梯度在同一个参数的更新上可能带来冲突,减缓了训练的过程,并且达到最终的准确率也不够高。

通过以上分析可以看出,训练超网是非常困难的,需要采用更好的训练策略才能训练得动超网。

本文提出了Progressive Shrinking策略来解决以上问题,如下图所示:

  1. 先训练最大的kernel size, depth , width的网络
  2. 微调网络来支持子网,即将小型的子网加入采样空间中。比如说,当前正在微调kernel size的时候,其他的几个选项depth, width需要维持最大的值。另外,分辨率大小是每个batch随机采样的,类似于yolov3里的训练方法。
  3. 采用了知识蒸馏的方法,让最大的超网来指导子网的学习。

渐进式收缩训练策略

以上策略的特点是:先训练最大的,然后训练小的。这样可以尽可能减小训练小模型的时候对大模型的影响。

下面对照上图详细展开PS策略:

  • 训练整个网络,最大kernel,最宽channel,最深depth
  • 训练可变kernel size, 每次采样一个子网,使用0.96的初始学习率训练125个epoch
  • 训练可变depth,采样两个子网,每次更新收集两者的梯度。第一个stage使用0.08的学习率训练25个epoch;使用0.24的学习率训练125个epoch。
  • 训练可变width,采样四个子网,每次更新收集四个子网梯度。第一个stage使用0.08的学习率训练25个epoch;使用0.24的学习率训练125个epoch。

通过以上描述可以看出来,权重共享的网络优化起来非常复杂,上边的选择的子网个数、学习率的选择、epoch的选择可能背后作者进行了无数次尝试调参,才得到了一个比较好的结果。

  1. **Elastic Kernel Size: **Kernel Size是如何共享的呢?

卷积核共享

简单来说就是,中心共享+变换矩阵。从直觉上来讲,优化7x7的卷积核以后,再优化中间的5x5卷积核势必会影响原先7x7卷积核的结果,两者在分布和数值上有较大的不同,强制训练会导致性能有较大的下降,所以这就需要引入变换矩阵,具体实现是一个MLP,具体方法是:

  • 不同层使用各自独立的变换矩阵来共享权重。
  • 相同层内部,不同的通道之间共享变换矩阵。
  1. Elastic Depth: 如何优化不同深度的网络呢?

不同的深度优化

深度为2、3、4的时候,按照上图所示,选择前i个层,进行训练和优化。

  1. **Elastic Width: ** 如何优化不同的通道个数?

通道的选择

并没有使用类似slimmable network中那种选取前n个通道的策略,而是选取了一个channel importance进行排序,通道重要性计算方法是L1范数,L1范数越大,代表其重要性比较高,选择重要性最高的前n个通道。

部署阶段的其他技术细节:

  • 搜索子网,满足一定的条件,比如延迟、功率等限制。
  • 预测器:neural-network-twins, 功能是给定一个网络结构,预测其延迟和准确率。采样了16K个不同架构、不同分辨率的子网,然后再10K的验证数据集上得到他们真实的准确率。【arch, accuracy】可以作为准确率预测器的训练数据集。
  • 构建了一个延迟查找表 latency lookup table来预测不同目标硬件平台的延迟。预测器训练数据集只需要40GPU Days。

4. Experiment

训练细节

  • 网络搜索空间:MobileNetV3类似的
  • 使用标准的SGD优化器,momentum=0.9 weight decay=3e-5
  • 初始学习率2.6 使用cosine schedule来进行learning rate decay
  • 在32GPU上使用2048的batch size训练了180个epoch
  • 在V100GPU上训练了1200个GPU hours

渐进收缩策略:

渐进收缩策略的有效性

上图展示了使用渐进收缩策略以后带来的性能提升,可以看出,不同的架构配置下,都带来了2-4%的性能提升。

实验结果:

实验结果

once-for-all在ImageNet上训练结果如上表所示,其中可以发现虽然训练代价比较高,但是搜索的代价稳定在40GPU Hours并且取得了相同量级MACs下不错结果。

5. Revisiting

  • 并没有什么突破性的创新点,但是每个点都做得很扎实,在一个不错的motivation下,将故事讲的非常引人入胜。所以会讲故事+扎实的实验结果+(大量的算力) 才得到这个结果。
  • 渐进收缩策略中先训练kernel size,在训练depth,最后训练width的顺序并没有明确指出为何是这样的顺序。
  • 通道的搜索策略笔者把它搬到single path one shot上进行了实验,效果并不理想。
  • 通道搜索策略中once for all计算L1 Norm是根据输入的通道来计算的,有点违背直觉,通常来讲根据输出通道计算更符合直觉一些。这一点可以参考通道剪枝,可能两种方法都是可行的,具体选哪个需要看实验结果。
  • 共享kernel size那部分工作的分析非常好,想到使用一个转移矩阵来适应不同kernel所需要的分布非常符合直觉。
  • 这篇工作代码量非常大,非常的工程化,从文章的实验也能看出里边需要非常强的工程能力,调参能力、才能在顶会上发表。

6. Reference

https://zhuanlan.zhihu.com/p/164695166

https://github.com/mit-han-lab/once-for-all

https://arxiv.org/abs/1908.09791

https://file.lzhu.me/projects/OnceForAll/OFA%20Slides.pdf

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
只需搜一次的NAS算法: Once-for-all
早期的NAS算法大都是针对某一个具体的硬件平台做模型搜索。换句话说,对于新的平台则需要重新搜索,这样既耗时又耗资源。所以这篇文章(简称OFA)的主要目的是只需要搜索一次就能为不同的平台找到合适的模型结构,所以论文名字取为 Once for All。
marsggbo
2021/07/24
1.3K0
只需搜一次的NAS算法: Once-for-all
论文解读 Once for all: Train One Network and Specialize it for Efficient Deployment
早期的NAS算法大都是针对某一个具体的硬件平台做模型搜索。换句话说,对于新的平台则需要重新搜索,这样既耗时又耗资源。所以这篇文章(简称OFA)的主要目的是只需要搜索一次就能为不同的平台找到合适的模型结构,所以论文名字取为 Once for All。
marsggbo
2021/07/27
9410
APQ:联合搜索网络架构、剪枝和量化策略
本文提出APQ,以便在资源受限的硬件上进行有效的深度学习推理。与以前分别搜索神经体系结构,修剪策略和量化策略的方法不同,本文以联合方式优化它们。为了应对它带来的更大的设计空间问题,一种有前途的方法是训练量化感知的准确性预测器,以快速获得量化模型的准确性,并将其提供给搜索引擎以选择最佳拟合。但是,训练此量化感知精度预测器需要收集大量量化的<model,precision>对,这涉及量化感知的微调,因此非常耗时。为了解决这一挑战,本文建议将知识从全精度(即fp32)精度预测器转移到量化感知(即int8)精度预测器,这将大大提高采样效率。此外,为fp32精度预测器收集数据集只需要通过从预训练的 once-for-all 网络中采样就可以评估神经网络,而无需任何训练成本。ImageNet 上的大量实验证明了联合优化方法的好处。与MobileNetV2 + HAQ 相比,APQ 以相同的精度将延迟降低2倍,能耗降低1.3倍。与单独的优化方法(ProxylessNAS + AMC + HAQ )相比,APQ可提高ImageNet精度2.3%,同时减少GPU数量级和CO2排放量,从而推动了绿色AI在环保方面的前沿。
AI异构
2021/01/07
1.5K0
【神经网络搜索】Single Path One Shot
【GiantPandaCV导读】Single Path One Shot(SPOS)是旷视和清华、港科大联合的工作。与之前的工作不同,SPOS可以直接在大型数据集ImageNet上搜索,并且文章还提出了一种缓和权重共享的NAS的解耦策略,让模型能有更好的排序一致性。
BBuf
2021/04/16
9670
【AI系统】EfficientNet 系列
本文主要介绍 EfficientNet 系列,在之前的文章中,一般都是单独增加图像分辨率或增加网络深度或单独增加网络的宽度,来提高网络的准确率。而在 EfficientNet 系列论文中,会介绍使用网络搜索技术(NAS)去同时探索网络的宽度(width),深度(depth),分辨率(resolution)对模型准确率的影响。以及如何加速训练推理速度。
用户11307734
2024/12/05
3030
【神经网络搜索】DARTS: Differentiable Architecture Search
【GiantPandaCV】DARTS将离散的搜索空间松弛,从而可以用梯度的方式进行优化,从而求解神经网络搜索问题。本文首发于GiantPandaCV,未经允许,不得转载。
BBuf
2021/03/10
1.6K2
通用卷积神经网络CCNN
来源:机器之心 本文约2400字,建议阅读5分钟 来自阿姆斯特丹自由大学、阿姆斯特丹大学、斯坦福大学的研究者提出了 CCNN。 在 VGG、U-Net、TCN 网络中... CNN 虽然功能强大,但必须针对特定问题、数据类型、长度和分辨率进行定制,才能发挥其作用。我们不禁会问,可以设计出一个在所有这些网络中都运行良好的单一 CNN 吗? 本文中,来自阿姆斯特丹自由大学、阿姆斯特丹大学、斯坦福大学的研究者提出了 CCNN,单个 CNN 就能够在多个数据集(例如 LRA)上实现 SOTA ! 1998 年 L
数据派THU
2022/09/27
6630
通用卷积神经网络CCNN
【综述】一文概览动态神经网络
在过去了几年里,动态神经网络非常热,热到每周都能看到几篇不错的动态神经网络论文上传到arxiv。那么什么是动态神经网络呢?它有有哪些类型呢?它的研究现状如何呢?接下来,就由Happy带领大家简单回顾一下咯。
AIWalker
2021/05/24
1.6K0
【综述】一文概览动态神经网络
卷积神经网络及经典模型
虽然图片识别对于人来说是一件轻松的事情,但是对于计算机来说,由于接受的是一串数字,对于同一个物体,表示这个物体的数字可能会有很大的不同,所以使用算法来实现这一任务还是有很多挑战的,具体来说:
Here_SDUT
2022/09/19
4.5K0
卷积神经网络及经典模型
【AI系统】FBNet 系列
本文主要介绍 FBNet 系列,在这一篇会给大家带来三种版本的 FBNet 网络,从基本 NAS 搜索方法开始,到 v3 版本的独特方法。在本文中读者会了解到如何用 NAS 搜索出最好的网络和训练参数。
用户11307734
2024/12/05
1380
2025最新卷积神经网络(CNN)详细介绍及其原理详解
本文详细介绍了卷积神经网络(CNN)的基础概念和工作原理,包括输入层、卷积层、池化层、全连接层和输出层的作用。通过举例和图解,阐述了CNN如何处理图像,提取特征,以及如何进行手写数字识别。此外,讨论了池化层的平移不变性和防止过拟合的重要性。 本文是关于卷积神经网络(CNN)技术教程,整体内容从基础概念到实际示例,逐层剖析 CNN 的各个组成部分与作用,并通过手写数字识别案例帮助大家更直观地理解其工作原理。
猫头虎
2025/06/08
1.7K0
2025最新卷积神经网络(CNN)详细介绍及其原理详解
卷积神经网络学习路线(十七) | Google CVPR 2017 MobileNet V1
这是卷积神经网络的第十七篇文章,Google 2017年发表的MobileNet V1,其核心思想就是提出了深度可分离卷积来代替标准卷积,将标准卷积分成Depthwise+Pointwise两部分,来构建轻量级的深层神经网络,这一网络即使现在也是非常常用的。论文原文地址和代码实现见附录。
BBuf
2020/02/21
6730
卷积神经网络学习路线(十七) | Google CVPR 2017 MobileNet V1
【AI系统】轻量级CNN模型新进展
在本文会接着介绍 CNN 模型的小型化,除了第二篇文章提到的三个模型外,在本文会继续介绍 ESPNet 系列,FBNet 系列,EfficientNet 系列和 GhostNet 系列。
用户11307734
2024/12/02
3680
【综述】神经网络中不同种类的卷积层
在深度学习中,卷积的目的是从输入中提取有用的特征。在图像处理中,卷积滤波器的选择范围非常广,每种类型的滤波器(比如Sobel算子、Canny算子等)都有助于从输入图像中提取不同的方面或者特征,比如水平、垂直、边缘或对角线等特征。
BBuf
2020/03/19
1.3K0
【综述】神经网络中不同种类的卷积层
卷积神经网络
神经网络(neual networks)是人工智能研究领域的一部分,当前最流行的神经网络是深度卷积神经网络(deep convolutional neural networks, CNNs),虽然卷积网络也存在浅层结构,但是因为准确度和表现力等原因很少使用。目前提到CNNs和卷积神经网络,学术界和工业界不再进行特意区分,一般都指深层结构的卷积神经网络,层数从”几层“到”几十上百“不定。
大龄老码农-昊然
2021/05/13
9120
卷积神经网络
CNN结构设计技巧-兼顾速度精度与工程实现
宽度(通道数)决定了网络在某一层学到的信息量,另外因为卷积层能重组通道间的信息,这一操作能让有效信息量增大(这也是1x1卷积的作用,它能学习出重组信息,使得对于任务更友好,所以这里不能和分离卷积一起比较,传统卷积的有效卷积数更多,正比于输入通道乘以输出通道,分离卷积的有效卷积正比于输入通道数,传统卷积相当于分离卷积前升维再做分离卷积)。
BBuf
2020/04/15
9010
CNN结构设计技巧-兼顾速度精度与工程实现
【深度学习】卷积神经网络结构组成与解释
卷积神经网络是以卷积层为主的深度网路结构,网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积(元素相乘再求和)的操作。
Twcat_tree
2023/11/25
1.1K0
【深度学习】卷积神经网络结构组成与解释
轻量化神经网络综述
深度神经网络模型被广泛应用在图像分类、物体检测等机器视觉任务中,并取得了巨大成功。然而,由于存储空间和功耗的限制,神经网络模型在嵌入式设备上的存储与计算仍然是一个巨大的挑战。
SIGAI学习与实践平台
2018/10/18
1.1K0
轻量化神经网络综述
模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%
深度神经网络(DNNs)在各种任务上取得了显著的进展,在工业应用中取得了显著的成功。在这些应用中,模型优化的追求突出地表现为一个普遍的需求,它提供了提高模型推理速度的潜力,同时最小化精度折衷。这一追求包括各种技术,尤其是模型削减、量化以及高效模型设计。高效模型设计包括神经架构搜索(NAS)和手工设计方法。模型削减已成为工业应用中优化模型的主要策略。作为主要加速方法,模型削减关注于有意去除冗余权重,同时保持准确性。
集智书童公众号
2024/01/17
1.3K0
模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%
【AI系统】MobileNet 系列
在本文会介绍 MobileNet 系列,重点在于其模型结构的轻量化设计,主要介绍详细的轻量化设计原则,基于这原则,MobileNetV1 是如何设计成一个小型,低延迟,低功耗的参数化模型,可以满足各种用例的资源约束。可以更方便的实现分类,检测,嵌入和分割等功能。会结合目前较流行的深度学习技术,在 V1 的基础会分别讲解 V2,V3,V4 做出的改进升级,让读者们更深入了解轻量级网络结构的设计思路与过程。
用户11307734
2024/12/02
2850
相关推荐
只需搜一次的NAS算法: Once-for-all
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档