SMASH:经典One-Shot神经网络搜索,仅需单卡 | ICLR 2018
SMASH 方法使用辅助网络生成次优权重来支持网络的快速测试,从结果来看,生成的权重与正常训练的权重在准确率上存在关联性,整体搜索速度很快,仅需要单卡进行搜索,提供了一个很好的新思路。
来源:晓飞的算法工程笔记 公众号
论文: SMASH: One-Shot Model Architecture Search through HyperNetworks
Introduction
常规的网络设计需要耗费大量的时间进行验证,为了节约验证时间,论文提出训练一个辅助网络 HyperNet,用于动态生成不同结构模型的权重。尽管使用这些生成权重的性能不如常规学习到的权重,但在训练初期,使用生成权重的不同网络的相对性能可以在一定程度上映射出其最优状态时的相对性能。因此,论文提出 one-shot 模型结构搜索 SMASH(one-Shot Model Architecture Search through Hypernetworks),结合辅助网络生成的权重,可以仅使用一轮训练来对大量的结构进行排序。
One-Shot Model Architecture Search through HyperNetworks
SMASH 的逻辑如算法 1,核心是通过辅助网络 HyperNet 根据不同的网络结构生成对应的权重,然后根据验证集表现进行排序:
- 首先训练辅助网络 HyperNet,在每个训练阶段,随机采样一个网络,然后使用 HyperNet 生成权重,end-to-end 地对其进行完整的反向训练。
- 在训练好 HyperNet 后,随机采样大量的网络结构,使用 HyperNet 生成的权重,然后在测试集上验证性能。
- 选择性能最好的结构进行最终的训练测试。
SMASH 包含两个核心部分:
- 如何生成网络结构。论文采用基于存储体(memory bank)的前向网络,能够生成复杂且多分支的拓扑结构,并且能够使用二进制向量进行编码。
- 如何根据网络结构生成权重。训练一个辅助网络 HyperNet,直接学习二进制结构编码到权重空间的映射。
论文认为,只要 HyperNet 学习到如何生成有效的权重,那么在验证集上,使用生成权重的网络的准确率会和正常训练的网络的准确率产生关联,此时,网络的结构将会变成影响验证集准确率的主要因子。
Defining Variable Network Configurations
为了能够生成多种的网络结构并且方便编码输入 HyperNet,论文采用存储体(memory-bank)的方式进行网络表示,将网络视为一系列初始为 0 的存储体,每层的操作视为对存储体的读写。对于单分支网络,网络包含一个大的存储体,每次操作都覆盖存储体的内容(对 ResNet 是相加),对于 DenseNet 的多分枝网络,则读取所有前面的存储体,然后将结果写入空的存储体,而对于 FractalNet,则构造更为复杂。
SMASH 的基础模型包含多个 block,如图 2(b),每个 block 包含多个特定分辨率的存储体,前后 block 间的存储体分辨率为 1/2 倍,通过1\times 1卷积加平均池化进行下采样,1\times 1卷积和全连接输出层的权重是学习来的,不是生成的。
在采样网络时,每个 block 中的存储体个数以及每个存储体的 channel 数都是随机的,而 block 中的层则随机选择读写模式以及处理数据的 op 操作。当读入多个存储体时,在 channel 维度对存储体的 tensor 进行 concat,而写入时则将结果与每个存储体中的 tensor 相加。在实验中,层仅允许读取所属的 block 的存储体。
op 操作包含用于降维1\times 1卷积、多个常规卷积和非线性激活,如图 2(a),每次随机选择 4 个卷积中一个激活,包括其卷积核大小,输出 channel 等超参也是随机的,1\times 1卷积的输出 channel 数与 op 的输出 channel 数成一定比例,比例也是随机选取的,特别说明:
- 1\times 1卷积的权重由 HyperNet 生成,其它卷积则通过正常训练获得(算法 1 的 first loop)。
- 为了保证可变的深度,每个 block 仅学习 4 个卷积,并且在 block 的 op 操作中共享其权值。限制最大卷积核大小以及最大输出 channel 数,假设选择的 op 操作的参数小于最大值,则将权重裁剪至目标大小。
- 下采样卷积和输出层同样基于输入的 channel 数对权重进行裁剪。
在设计时,为了让网络更多地采用 HyperNet 产生的权重,仅在下采样层中以及输出层之前使用 BatchNorm,主要由于很难通过生成的方式产生这种运行时统计的结果。为了弥补这一举措,使用 WeightNorm 的改进版,将生成的1\times 1卷积核除以其欧几里得范数进行正则化(不是单独正则化各 channel),这对 SMASH 十分有效,仅带来些许的性能下降。
Learning to map architectures to weights
Hypernet 采用全卷积网络,这样输出的W可以根据输入c的大小改变而改变,输入c为 4 维 tensor(BCHW),batch size 为 1,这样输出就不会存在完全独立性。输出W的每个 channel 都对应c的一个子集,而权重W对应 op 操作的信息都 embedding 在c的 channel 中。
假设 op 读取 1,2,4 存储体然后写入 2,4 存储体,则输入c的 1、2 和 4 channel 会填入 1,代表输入的存储体,而 6、8 channel 也会填入 1,代表输出的存储体,剩余的 channel 用于描述 op 的其它超参数,比如膨胀值(dilation),输入c的 width 方向是对 op 操作的输出 channel 数的编码。
基于以上的 Hypernet 结构,na ï ve 的实现要求输入c的大小和W的大小一致或者使用上采样来产生更多的输出,但这样效果不好。论文使用 channel-based 的权重压缩方法,不仅能够减小c的大小,还能保持 HyperNet 的表达能力。简单讲就是将输入c的分辨率设定为W的大小进行1/k,HyperNet 的输出 channel 设定为k,最后将结果 reshape 成W的大小,具体可以看看论文的附录 B。
Experiments
Testing the SMASH correlation
对比 SMASH 生成权重的网络与正常训练的网络的准确率,证明 SMASH 生成的权重可以快速地比较相对准确率。
Benchmarking
CONCLUSION
SMASH 方法使用辅助网络生成次优权重来支持网络的快速测试,从结果来看,生成的权重与正常训练的权重在准确率上存在关联性,整体搜索速度很快,仅需要单卡进行搜索,提供了一个很好的新思路。
如果本文对你有帮助,麻烦点个赞或在看呗 ~
更多内容请关注 微信公众号【晓飞的算法工程笔记】