MnasNet:NAS 自动架构搜索

【置顶必看】k学长的深度宝典

源码、配套笔记&讲解视频,点击文末名片获取

  1. 研究背景和动机(MnasNet)
    我们先回顾一下背景:
  2. 以前的做法(人工 + 理论指标)
  • 在 MobileNet、ShuffleNet 之前,网络基本靠 人类专家拍脑袋设计:
    • 用什么卷积?
    • 每层多少通道?
    • 多深?
  • 改进方向主要看 FLOPs(理论计算量),但这有个大坑:
    • FLOPs 低 ≠ 手机上跑得快。
    • 因为硬件(手机 CPU/GPU)有内存访问瓶颈,导致一些理论轻量的模型,实际并不快。
      👉 举例:MobileNet v2 FLOPs 比较少,但在手机上推理并没有预期那么快。

如果一味减小网络,速度快了但精度掉太多;如果一味加深网络,精度提高了但速度变慢。

MnasNet 的核心动机就是:

  • 用自动化的神经网络结构搜索(NAS)方法,帮我们在"速度---精度"之间找到最优平衡,而且是真正针对具体硬件(比如手机 CPU)来优化的。

  1. MnasNet 的核心创新

具体方法叫 平台感知的神经架构搜索(Platform-Aware NAS)。

  • 它的主要特点:
    1. 不是人手工设计,而是让 AI(强化学习控制器)自动生成模型结构。
    2. 不是光看 FLOPs,而是直接在真手机上跑,测出每个候选模型的 真实延迟(Latency)。
    3. 最后选择 精度高 + 延迟低 的模型,而不是单一优化。

3、MnasNet 的网络结构

传统 NAS(神经网络搜索)就像 在整个工厂里,每一台机器都要重新挑选(卷积方式、卷积核大小、是否加注意力...)。

👉 问题:搜索空间巨大,计算成本爆炸。


🚀 MnasNet 的新思路:分解层次搜索

MnasNet 说:别傻傻地在每个小零件上都重新选,我们 按车间(Block)来分工,让搜索更聪明!

🏭 工厂类比讲解

  1. 整个网络是一家工厂
    工厂一共有 7 个"车间"(Block1 ~ Block7)。
  • 早期车间处理的是大尺寸原料(高分辨率图片)。
  • 后期车间处理的是精细零件(小分辨率但通道多)。
  1. 每个车间里有多台一样的机器(Layers)
  • 比如 Block4 有 4 台机器(Layer 4-1 ... Layer 4-4)。
  • 这些机器都是同一型号,这样整个车间的风格统一,也让搜索问题更简单。
  • 如果需要缩小尺寸(stride=2),就让车间里的第一台机器负责"压缩尺寸"。
  1. 搜索任务:给每个车间选一种机器型号
    对于某个车间(比如 Block4),我们要决定:
  • 用什么类型的机器?(普通卷积 or 深度卷积 or 倒残差 MBConv)
  • 零件刀片多大?(3×3 还是 5×5 卷积核)
  • 要不要加个"质检员"?(SE 注意力模块)
  • 是否需要旁边开一条捷径?(跳跃连接 identity/pooling)
  • 每台机器能处理多少原料?(通道数)
  • 这个车间要放几台机器?(重复次数 N)
  1. 块内同构、块间异构
  • 块内同构:一个车间内机器全都一样 → 好管理,减少搜索空间。
  • 块间异构:不同车间可以选不同型号机器 → 早期车间选小卷积,后期车间选大卷积,更灵活。

🧩 图里的意思

  • 图上绿色方块(Block1~7)就是车间。
  • 黄色小方块(Layer 2-1 ... Layer 2-N₂)表示同一车间里重复的机器。
  • 蓝色箭头上的选项(ConvOp、KernelSize、SE Ratio、SkipOp、FilterSize、#Layers)就是我们给工厂配机器时的菜单。
  • 底部小蓝框示例(1×1 conv → 5×5 depthwise → SE → 1×1 conv → 残差)就是某个车间最终选中的机器型号。
    MnasNet 的"分解层次搜索"就像是:
    👉 不再在工厂里的 每一台机器上瞎选,而是 先把工厂划分成车间,再给每个车间统一选好机器型号和数量。
  • 块内机器相同 → 节省精力(缩小搜索空间)。
  • 不同车间机器可不同 → 保证灵活性(不同阶段处理不同任务)。
    🔄 整体流程
  1. Controller(控制器) → 经理
  • 它的任务就是 从搜索空间里挑选一份候选模型。
  • 搜索空间就像"人才市场",有各种可能的神经网络结构(不同卷积、核大小、层数等)。
  • Controller 会"抽签"一样,采样出一个模型交给 Trainer。

  1. Trainer(训练器) → 培训班老师
  • 它接收 Controller 提供的候选模型,把它放到数据集上做训练,看看效果。
  • 训练后会测试两个关键指标:
    • accuracy(准确率):模型识别的对不对。
    • latency(延迟):模型在 真实手机上跑的速度。

  1. Mobile phones(手机硬件) → 真机考核
  • MnasNet 强调 平台感知,所以不是只在电脑上测,而是直接把模型丢到手机里,测真实延迟。
  • 这样能避免模型"纸面上很快,但手机上很慢"的问题。

  1. Multi-objective reward(多目标奖励) → 综合打分系统
  • 这里就像考核工人的总分,不仅看工作质量(准确率),还要看效率(延迟)。
  • 如果模型又准又快 → 奖励高。
  • 如果模型虽然准,但很慢 → 奖励低。
  • 如果模型快,但不准 → 奖励也低。

  1. Reward 回传给 Controller(奖惩反馈) → 经理学习
  • Controller 根据奖励结果来调整"挑人策略"。
  • 就像经理从经验中学会:
    • "哦,原来在手机上用 5×5 卷积太慢了,以后少挑。"
    • "用 SE 模块虽然稍慢,但精度大幅提升,值得保留。"
  • 经过不断循环,Controller 越来越会挑模型,最后找到一个"既准又快"的最佳结构。
    这个搜索算法就像是:
  • Controller = 招聘经理:负责挑选候选人(模型结构)。
  • Trainer = 培训老师:负责对候选人进行测试(训练+验证)。
  • Mobile phone = 真机面试官:直接考察候选人在真实岗位(硬件)上的表现。
  • Reward = 总分系统:把准确率和速度综合起来,打分反馈。
  • 闭环学习:经理不断从反馈中学习,最终能招到"又能干又高效"的最佳员工(最终模型)。
    4、 致命缺陷:搜索开销巨大,效率低
    MnasNet 用的是 强化学习(RL)+真实手机延迟测试 的搜索方式。
  • 每次 Controller 采样一个模型 → Trainer 要训练、评估精度 → 还要真机跑延迟 → 最后才能打分。
  • 这个过程要 成千上万次循环,一次搜索往往需要 几百上千 GPU 天!

5、后续改进方向(怎么解决 MnasNet 的高开销问题)

1️⃣ ProxylessNAS(2019)

  • 问题:MnasNet 每次都要真机测试延迟,太耗时。
  • 改进:ProxylessNAS 提出了 直接在目标硬件上搜索,但是用了一种 延迟预测模型,不需要每次都跑真机。
  • 好处:把搜索效率提升了一个量级,训练更快,硬件友好。
    👉 打个比方:MnasNet 是每造一辆赛车都拉到赛道跑一圈;ProxylessNAS 则是先训练一个"赛道模拟器",能预测赛车的速度,这样大大节省时间。

2️⃣ FBNet(Facebook,2019)

  • 问题:MnasNet 训练每个候选模型太慢。
  • 改进:FBNet 提出 可微分 NAS(Differentiable NAS),直接把搜索问题变成一个 梯度优化问题。
  • 核心思想:候选模型不再一个个训练,而是共享参数(weight sharing),用梯度下降来一步到位找到最优结构。
  • 好处:搜索效率从几百 GPU 天 → 1 GPU 天就能完成。
    👉 打个比方:MnasNet 是"造一辆车就训练一辆车";FBNet 是"造一个车厂,把所有车的零件都放进去,让它们共享零件,只训练一次,就能挑出最好车"。

3️⃣ EfficientNet(Google,2019)

  • 问题:MnasNet 搜到的结构是固定的,如果要换大小(比如大模型、小模型),得重新搜索。
  • 改进:EfficientNet 提出了 复合缩放法(Compound Scaling),只用一个基础网络(通过类似 MnasNet 搜出来的),再用统一规则同时放大宽度、深度和分辨率。
  • 好处:不用每次重新搜索,一次搜索 → 一家子模型(EfficientNet-B0 到 B7)。
    👉 打个比方:MnasNet 是"每次都要重新设计车子";EfficientNet 是"设计一辆车的原型,然后通过放大缩小比例,就能得到不同排量的车型(小轿车 → SUV → 卡车)"。
相关推荐
hello_2506 小时前
云原生架构与GitOps技术栈介绍
云原生·架构
赵渝强老师10 小时前
【赵渝强老师】MongoDB的分布式存储架构
分布式·mongodb·架构
Tadas-Gao10 小时前
微服务可观测性的“1-3-5”理想:从理论到实践的故障恢复体系
java·开发语言·微服务·云原生·架构·系统架构·可观测
数据智能老司机10 小时前
建构 AI Agent 应用——Agentic 系统的学习机制
架构·llm·agent
brzhang11 小时前
把网页的“好句子”都装进侧边栏:我做了个叫 Markbox 的收藏器,开源!
前端·后端·架构
上园村蜻蜓队长11 小时前
ARM芯片架构之coresight 时间戳组件介绍
arm开发·架构
数据智能老司机13 小时前
建构 AI Agent 应用——编排
架构·llm·agent
拉姆哥的小屋14 小时前
突破传统!基于SAM架构的双模态图像分割:让AI“看见“红外与可见光的完美融合
人工智能·架构
做运维的阿瑞14 小时前
Python核心架构深度解析:从解释器原理到GIL机制全面剖析
开发语言·python·架构·系统架构