zoukankan      html  css  js  c++  java
  • 【Cream of the Crop】2020-NIPS-Cream of the Crop: Distilling Prioritized Paths For One-Shot Neural Architecture Search-论文阅读

    Cream of the Crop

    2020-NIPS-Cream of the Crop: Distilling Prioritized Paths For One-Shot Neural Architecture Search

    来源:ChenBong 博客园


    Introduction

    一般的超网NAS方法(e.g. SPOS):训练超网 ==> 搜索最佳子模型 ==> retrain

    本文的方法:训练超网,得到最佳子模型 ==> retrain

    基于SPOS的改进:

    1. 训练:在抽样子网的同时,维护了一个优质模型池(<目标flops),用于存储采样中获得的优质子网,每次随机采样一个子网后,从优质模型池(使用Meta Network)找到与之最匹配的优质子网,作为 teacher,指导采样到的子网进行更新(蒸馏)。
    2. 模型池更新:如果采样到的子网比模型池中最差的子网优秀,则将该采样到的子网加入模型池
    3. 获得最佳子网结构:训练结束,模型池中性能最好的子网即作为最佳结构,无需搜索过程
    4. 获得最佳子网:retrain,将最佳子网retrain 500 个epoch

    image-20210206174337246

    Motivation

    超网训练的固有缺陷:子网没有得到充足训练

    其他方法在超网训练结束后还需要对超网进行搜索(EA,RL...)

    其他使用蒸馏的超网训练方法采样到的子网进行训练时,需要额外的 tearcher (OFA)

    Contribution

    Method

    模型池

    包含 K 个优质子网

    每个 batch 采样1个子网,在模型池中寻找与之最匹配的优质子网指导其更新,验证采样到的子网,如果该子网比模型池中最差的子网优秀,则将该采样到的子网加入模型池,替换模型池中最差的子网:

    image-20210206174537845

    使用模型池的SPOS

    image-20210206174247960

    在模型池中找到与采样子网的最佳匹配

    image-20210206174944268

    更新子网参数

    image-20210206180002777

    更新MetaNetwork参数

    冻结网络参数,更新MetaNetwork参数 θ,需要计算二阶导,计算量大因此间隔 ( au) 计算一次:

    image-20210206180129043

    image-20210206174944268

    Experiments

    Setup

    • 16 V100
    • 2048 batchsize
    • AutoAugment
    • 500 epochs
    • lr scheduler:cosine annealing

    Search Space

    image-20210206193957873

    ImageNet

    image-20210206181306988

    左图为小flops(<100M)的搜索结果,在其他nas方法中较少见

    image-20210206181534822

    在每个区间,不同方法没有在相近的flops下比较,且本文的方法的flops都较大

    Ablation Study

    各个模块的作用

    image-20210206181455597

    1 vs #2:EA搜索和模型池作用相当

    2 vs #4 / #5:KD的有效性

    5 vs #6:模型池+EA作用不大

    模型池的规模 K

    image-20210206182555122

    超网训练/搜索开销:12 GPU days(V100)

    Conclusion

    Summary

    pros:

    • 做了小flops的一些结构搜索,在其他 nas 工作中好像比较少见

    cons:

    • 使用子网与优质模型的 output logit 的差计算两个模型匹配度,感觉理由不够充分,匹配度应该是包括中间层的一些输出,而不仅仅是最后一层的输出
    • MetaNetwork 的输入实际上只是计算2个一维向量的距离,使用全连接似乎大材小用,能否使用简单的L1/L2-norm
    • 还是需要retrain,最近的超网工作的趋势应该都是无需retrain的,不同规模都要重新搜索+retrain(对比无需retrain的OFA、BigNAS,代价太大)
    • retrain 开销太大,500 epoch,AutoAugment...

    To Read

    Reference

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

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

  • 相关阅读:
    flask-login
    python3安装scrapy框架
    Redis--对象共享(整数型字符串)
    Redis--对象(type、encoding、ptr、lru、refcount)
    Redis--内存回收(引用计数法)
    Redis--跳跃表
    Redis--压缩列表(节约内存,连锁更新)
    Redis--整数集合(升降级)
    Redis--Rehash(h[0],h[1],rehashIdx, 渐进式)
    Redis--解决Hash表键冲突(单向链表next指针,表头)
  • 原文地址:https://www.cnblogs.com/chenbong/p/14392505.html
Copyright © 2011-2022 走看看