zoukankan      html  css  js  c++  java
  • ICCV 2021 | BN-NAS: 只训练BN层来自动搜索模型

    论文链接:BN-NAS: Neural Architecture Search with Batch Normalization

    1. Motivation

    之前的One-shot NAS工作在搜索过程中有两个特点:

    • 训练所有模块的参数
    • 使用在验证集上的准确率作为评价指标来评估模型的好坏

    很明显这两个步骤都非常耗时,所以这篇论文打起了 batch-normalization (BN) 的主义,即

    • 只训练BN的参数
    • 使用BN的参数作为评价指标

    实验结果表明,这样做不仅训练速度加快,而且最终模型性能也得到了保证

    下面详细介绍一下算法细节

    2. Methodology

    如下图示,整个算法包含三个步骤:

    1. Supernet training
    2. subnet searching
    3. subnet retraining

    2.1 Supernet Training

    第一步是训练Supernet。不同于以往训练所有参数,BNNAS采取的策略是

    1. 随机初始化Supernet参数
    2. 只训练BN的参数,即Conv和Linear等有参数的层都frozen。

    这样一来需要训练的参数量就极大地减少了。

    作者选取了SPOS和FairNAS两篇论文作为baseline,他们supernet分别训练了100和150个epoch。作为对比,作者只训练BN,基于SPOS和FairNAS分别只训练了10和15个epoch。

    题外话:我很好奇只训练BN的话,模型能收敛吗,或者模型的train acc能有多高?如果根本学不到东西,那BN参数指标真的有意义吗?

    2.2 Subnet Searching

    论文中的搜索空间长这样,可以看到是类似MobileNet的结构。模型由多个layer组成,每个layer有 (N) 个candidate operation,每个operation由多个conv+BN+relu组成,区别就是这些conv的卷积核和通道数(expand ratio)不一样 。

    需要注意的是每个operation最后都是BN,如上图中的红框所示,所以作者就用这个BN的参数来作为评价指标,具体的方法如下图所示

    我们以 (Layer_L) 的Op2为例,它的指标值 (S_{o\_{2,L}}) 是其最后的BN层所有 (gamma) 的平均值。

    这个只是某一层的BN-based指标值,那么一个子模型的指标值就是所有层的总和,计算如下:

    那么优化目标函数可以表示如下:

    2.3 Subnet Retraining

    根据优化目标函数公式(5)可以通过不断优化找到最优的子模型结构 (a^*),之后对这个子模型做retrain。

    3. 实验分析

    3.1 相关性比较

    前面介绍过了每一层的N个operations都会根据公式(3)计算得到对应的BN-based value,那么整个Supernet可以有一个 (N*L) 的矩阵表示。

    下图中(a)表示训练所有参数的结果,(b)表示只训练BN参数的结果。横纵坐标都表示epoch数,具体的值就是不同epoch之间的相似度,这个相似度就是根据计算上面提到的 (N*L) 的矩阵 (L\_2) 距离得到的。

    文中对下图的分析师(a)是在30个epoch的时候,不同epoch之间的相似度变得差不多了,而(b)在第10个epoch就很相似了。只能说有点牵强。。。明明还有那么多白色区域

    3.2 Results on ImageNet

  • 相关阅读:
    Apache服务器的安装与配置
    改变HTML下拉框选项的方法
    Struts2性能调优拦截器
    上传文件到服务器的Linux命令
    Strut2判断是否是AJAX调用
    MySQL自动关闭连接导致DBCP报错
    Tomcat6添加MySQL的JNDI数据源
    Linux查找命令
    SqlServer与Oracle的分页(收集整理) 中庸
    struts2入门
  • 原文地址:https://www.cnblogs.com/marsggbo/p/15270259.html
Copyright © 2011-2022 走看看