BigNAS: 一次学习,各种尺寸小模型应有尽有
现在,在网络结构搜索上,为了效果和速度,大家倾向于一次性的训练一个总模型,比如上面文章列表中的Darts和ENAS。然后再从总模型上采样得到符合条件的最优子模型。之后再重新训练、微调或者其他办法进行处理。
在得到总模型后,后续生成子模型后的处理比较耗时,给整个流程增加了额外的计算量和复杂度。BigNAS的出现则解决了这一问题,使得在大模型训练完成后,可以不用后续处理,直接生成各种尺寸的子模型就能达到最优的效果。
以下是三种从总模型到子模型的方法,其中,左图是得到总模型后,采样或者用某种策略得到子模型,然后再进行重新训练。中图则是得到总模型后,进行蒸馏,压缩得到各种各样的子模型。右图则是本文提出的方法,直接一步到位,训练得到总模型,然后总模型生成能够直接使用的子模型。
要做成这个事情,就需要在训练总模型的时候,能够同时将总模型中能够采样出来的大模型和小模型训练好,注意,此时大模型和小模型是有参数共享的。
这个问题很难,难在什么地方?比如:
如果没有正确的初始化,损失函数会爆炸。 步调不一致:小模型还没训练好,大模型可能已经过拟合了。 大模型更倾向于在训练数据集上过拟合,而小模型一般不会。
BigNAS则针对这些问题提出了很多改进的手段。总体来说,生成子模型需要两步:
训练得到一个总模型,从这个总模型中可以通过采样,切片等方式生成直接可用的子模型。 对于一定的资源限制条件,在总模型上从粗粒度到细粒度的进行筛选,得到符合条件的最好模型。
训练总模型
在训练总模型的时候,使用了如下技巧:
三明治法则
在训练的时候,从总模型中采样出最大模型,最小模型以及随机的N个模型(实验中N=2)。然后在几个模型上分别训练得到梯度,梯度进行聚合再更新总模型。
在这里,总模型大小是由输入图像大小、模型宽度、模型深度、核大小等参数决定的;每个参数都有自己的值集合,比如输入图像大小就是从[128, 196, 256, 384]中任选一个值。最小模型就是指最小的输入图像,最浅最窄的模型等等。通过这种方式,使得总模型中的大小模型都被训练了。
原地蒸馏
在训练的过程中,最大模型的损失是和ground truth去计算,其他小模型的损失则是和大模型预测的soft Label去计算,只用蒸馏的损失。此时注意,给大模型和小模型的输入,需要是图像中的同一个patch。用了原地蒸馏后,模型效果增加了0.3%。
初始化
在训练过程中,发现训练非常不稳定,将学习率降低到30%后,可以收敛,但是最后top-1的准确率低1%。
于是采用了如下手段,鉴于我们训练的模型都是残差网络,所以我们在这里会通过设置残差网络中每个block的最后的Batch Normalizaiton的系数γ=0,来确保经过残差网络的block后,方差不变。这个技巧在文献[2]中被提出,在它们那里只是有了提升,而在BigNAS里确实必需。
收敛行为
在实验中,发现大模型和小模型的收敛行为很不一致,大模型过拟合了小模型才刚刚收敛,如下图左。
为了解决这个问题,对学习率进行了改进,将其变为指数衰减+常量结尾,即最后的学习率是一个常量,常量值是最初值的5%。如上图右。有了更大的学习率后,大模型会在最优解上左右摇摆,但不会过拟合,小模型会加快收敛。从而解决这个问题。
正则化
一般来说,大模型容易过拟合而小模型不会,所以,我们需要将应对过拟合的手段加在大模型上而小模型不用,这样就增大了复杂度,因为大模型和小模型是共享参数的。
但是,BigNAS中采用了一种简单但有效的方法,即只对最大的子模型做正则化。采用的手段就是dropout和权重衰减。
批归一化校准
批归一化的统计参数并没有被累积,因为训练阶段是多模型训练,所以这些统计值的定义有问题。在模型训练结束后,会重新对BN的统计量做校准,此时并不需要重新训练模型
从粗到细的结构选择
给定计算资源的限制后,需要从总模型中找到最优的子模型。在这个选择过程中,首先定义一个受限的参数集合,然后评估这个首先参数中所有子模型得到benchmark,这是粗粒度选择。
在得到benchmark后,定义一个更加细粒度的参数集合,从上面粗粒度过程中得到的最好模型上做参数选择的更新。
最后,选定参数后,直接使用总模型里的参数初始化,得到网络结构。这个过程不需要重新训练。
实验
实验使用的搜索空间如下,这个空间基于MobileNetV2。
得到的结果如下,可以看到,在每个参数量级上,BigNAS都能得到最好的结果。
初始化的不同带来的模型收敛的不同,结果如下,左侧为小模型,右侧为大模型。这张图是模型训练开始不久后的。
同样的,如果关注模型最后的结果,如下图,可见,使用新的初始化方法+原来的学习率,可以学的更快更好。
学习率加上恒定结尾后,曲线如下,可见,大模型和小模型的训练步调变的一致了。
正则化的影响如下:
总结与思考
勤思考,多提问是Engineer的良好品德。
在训练过程中需要从总模型中采样小模型,这个步骤需要对图做修改,但是TPU上的图在训练过程中是不允许修改的,那么如何实现呢?
参考文献
[1]. Yu, Jiahui, et al. 'Bignas: Scaling up neural architecture search with big single-stage models.' arXiv preprint arXiv:2003.11142 (2020). [2]. Goyal, Priya, et al. 'Accurate, large minibatch sgd: Training imagenet in 1 hour.' arXiv preprint arXiv:1706.02677 (2017).