- MNasNet
- 核心点
- 机器学习搜索最优模型;
- 多目标优化:精度 速度(pixel1上实测)
- 分层搜索结构
即:以前是搜索一个block,然后model对这个block重复;根据自然规律,浅层的block和深层的block不同,因此文本的假设:每个block有很多层,每一层相同。每个block各自搜索结构。
此处的搜索空间,要兼顾:多样性和有限性。
- 摘要
Float只是一个代理指标,例如:mobilenetv1和nasnet的float差不多,但是其速度差距很大。
过去搜索基本都是搜索一个block,然后不断重复,这样不合理。不够多样性,因此提出多层结构搜索。即,不同的block搜索不同的结构。
- 前言
- 量化权重/激活值 用lower bit表示
- 剪枝,去掉不重要的参数;
- 引入硬件评价指标latency,如Nasnet
- 手动设计:SN,shufflenet,mobilenet等
- 机器学习设计cnn(RL,遗传算法,darts-可微分算法 等)——设计基本单元,重复
但是仅仅在cifar上测试。
额外:目标cnn侧重与落地,因此真实数据 十分可贵。
GAN可以生成数据,但是无法覆盖极端情况下的数据。
- MNASnet
目标函数:
该优化目标,仅仅只有一个解。
但是pareto需要多个最优解,即:相同性能下,预算最小。属于性能和预算的博弈。
一系列速度和精度的模型,每一个对应一个精度和速度的trade-off
此处:w < 0
此代价函数,找到一系列速度~精度的组合,并且其cost近似。
实验表明:
一倍的速度,可以换来5%精度的提升。
- 分层结构
预定义骨架,每一层输入/输出尺寸,conv的个数,得到MnasNet的机构。
下采样采用stride = 2
以mobilenetV2为基础进行搜索,对于每一个block,layer{0, +1,-1}分别表示:不变,增加一层,减小一层。Filter size表示卷积核的数量{0.75, 1.0, 1.25}
此处不是连续随意搜索,而是基于特定的阶段/数值进行搜索。
搜索算法,采用RL,得到多个pareto最优解。用多目标函数。
RL:在很大的搜索空间中,找到适应环境的局部最优解。像生物适应/改善环境一样。
RL:映射cnn的搜索空间中的超参数 到 一系列的 token。
Rnn生成一系列的向量,分别表示:filter size,con op等。
生成向量为一个动作,a1:t
RL本身的参数,即智能体的参数为theta
目标函数:期望奖励最大化
M:采样出的模型,由动作a1:t决定。
Rnn:智能体生成一个token,对应一个模型,
Trainer:拿到token,把model 训练出来,得到acc,再在真实手机pixel1上得到latency,然后得到目标函数。
循环:sample – eval – update
使用theta,生成一个batch 的模型,预测一系列的token,一个token对应一个模型。根据目标函数,使得期望奖励最大化。训练方式:PPO
不断重复,直到达到最优解,或者 theta收敛。
- 实验
直接在imagenet上训练。自训练5epoch,只看5epoch的acc和latency。
不同的配置,得到不同的Mnasnet,例如:不同的block的数量,每个block的层数。。
每个mnasnet训练4.5天。
智能体采样8000个模型,选出top 15迁移到coco。
进行预热。
T=75MS