MobileNetV3 与 Lottery Ticket Hypothesis 笔记
MobileNetV3:在 NAS 基础上的工程微调
读完 MobileNetV3 的论文,整体感觉没有以前那些经典工作那么有冲击力,不过性能好能部署就是好东西。先来看实验效果:
总体思路是在 MnasNet 的基础上得到种子结构(seed architecture),再进行微调。Large 版本直接拿 MnasNet 的搜索结果,Small 版本则修改了目标函数,降低 latency 的权重、增大精度的重要性,重新搜索了一遍。
MnasNet 使用的目标函数为:
其中 w 的大小用于控制 latency 的重要性。
NetAdapt 微调
第二步用 NetAdapt 对种子结构进行微调。NetAdapt 的主要目标是在约束 latency 的情况下找到最好的精度,输入一个已训练好的 seed architecture:
从种子结构出发,利用 NetAdapt 生成一批 latency 至少下降 delta 的候选结构,然后将种子的权重通过截断或随机初始化的方式对齐到候选结构,再做 finetune,取精度最好的:
这个过程重复多次,最终得到目标 latency 下精度最佳的模型。
头尾与激活函数的改动
得到上述模型之后,还做了一些手工调整,主要改了头部、尾部和激活函数。
头部改变:将初始卷积的输出通道数减半。
尾部改变如下图:
激活函数更改为:
最终得到的整体结构如下:
其中 SE-block 按如下方式嵌入到 block 里面:
MobileNetV2 里 stride=2 的 block 结构如下图,在 V3 中 stride=2 与 stride=1 同样以是否有 residual 连接来区分,residual 和 SE 模块并不冲突:
THE LOTTERY TICKET HYPOTHESIS:找到可训练的稀疏小网络
这篇文章的核心思想是,可以通过一种迭代的非结构化剪枝方式找到一个小网络,而这个迭代剪枝过程也是对大网络的训练过程。
最终得到的小网络大概是整个大网络的 10%~20% 大小,对这个小网络采取与大网络相同的初始化方式,可以更快地训练到与大网络相匹配的精度,这就是所谓的 lottery。
整个训练迭代过程如下图,这个过程通常会迭代很多次,重要的是每次都初始化为 theta_0:
并且这样的效果会随着剪枝程度的增加越发明显:剪枝越多,得到的小网络在随机初始化下就越难训练,初始化变得越来越重要,与剪枝前的网络保持同样的初始化方式则会很容易训练。
与《Rethinking the Value of Network Pruning》的对比
另一篇文章《Rethinking the Value of Network Pruning》则表示随机初始化其实也可以得到很好的性能,不过需要合适的学习率。
两篇文章也有一些小的区别:
- 该文章主要使用的是结构化剪枝,小的数据集上使用的是非结构化剪枝,与 lottery 的全部非结构化剪枝有所区别。
- 该文章主要是在大网络上剪枝,但是 lottery 主要是在小网络上做的。
- 优化方式也有所区别,lottery 那篇使用的优化策略并不算是分类任务上的主流配置。
该文章发现在结构化剪枝的时候并没有 lottery 里观察到的那种区别,lottery 下得到的结构在不同的初始化方式下区别其实不大;在非结构化剪枝的时候,主要区别来源于学习率的不同。