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》则表示随机初始化其实也可以得到很好的性能,不过需要合适的学习率。

两篇文章也有一些小的区别:

  1. 该文章主要使用的是结构化剪枝,小的数据集上使用的是非结构化剪枝,与 lottery 的全部非结构化剪枝有所区别。
  2. 该文章主要是在大网络上剪枝,但是 lottery 主要是在小网络上做的。
  3. 优化方式也有所区别,lottery 那篇使用的优化策略并不算是分类任务上的主流配置。

该文章发现在结构化剪枝的时候并没有 lottery 里观察到的那种区别,lottery 下得到的结构在不同的初始化方式下区别其实不大;在非结构化剪枝的时候,主要区别来源于学习率的不同。