链接:https://arxiv.org/pdf/1908.09791.pdf
如要有效地部署深度学习模型,需要专门的神经网络架构,以便最好地适应不同的硬件平台和效率限制条件(定义为部署场景(deployment scenario))。传统的方法要么是人工设计,要么就是使用 AutoML(自动机器学习)来搜索特定的神经网络,再针对每个案例从头开始训练。这些方法的成本高昂,而且难以扩展,因为它们的训练成本与部署场景的数量有关。
本研究为高效神经网络设计引入了一种 Once for All(OFA/一劳永逸)方法,可处理很多部署场景。这种新方法的特点是分离了模型训练与架构搜索过程。这种方法不会针对每种案例都训练一个专用模型,而是训练一个支持多种不同架构设置(深度、宽度、核大小和分辨率)的 OFA 网络。
然后给定一个部署场景,再通过选择 OFA 网络中特定的子网络来搜索合适的结果,这个过程无需训练。因此,专用模型的训练成本就从 O(N) 降到了 O(1)。但是,我们却难以防止许多不同子网络之间的干扰。针对这一问题,MIT 的这些研究者提出了渐进式收束算法(progressive shrinking algorithm)。该算法能够训练支持超过 10^19 个子网络的 OFA 网络,同时还能保持与独立训练的网络一样的准确度,从而节省非重复性工程开发(non-recurring engineering/NRE)成本。
研究者在多种不同的硬件平台(移动平台/CPU/GPU)和效率限制条件上进行了广泛的实验,结果表明:相比于当前最佳(SOTA)的神经架构搜索(NAS)方法,OFA 能稳定地取得同等水平(或更好)的 ImageNet 准确度。值得注意的是,OFA 在处理多部署场景(N)时的速度比 NAS 快几个数量级。当 N=40 时,OFA 所需的 GPU 工作小时数比 ProxylessNAS 少 14 倍、比 FBNet 少 16 倍、比 MnasNet 少 1142 倍。部署场景越多,则相比于 NAS 就节省越多。
引言
深度学习模型的模型大小和计算成本的爆发式增长带来了新的难题:如何在不同的硬件平台上有效地部署它们?当硬件资源(比如片上内存大小、算术单元的数量)不同时,最佳的神经网络架构也存在很大的差异。即使在同样的硬件上运行时,由于电池条件或工作负载的差异,最佳的模型架构也大为不同。
在不同的硬件平台和效率限制条件下,研究者要么专门为移动平台设计紧凑的模型,要么通过压缩来加速已有的模型,实现有效部署。但是,不管是人工设计方法,还是基于 AutoML 的方法,为每个部署场景都设计各自的专用 DNN 都具有很高的工程开发成本和计算成本。
针对这一难题,这篇论文给出的解决方案是:设计一种一劳永逸(OFA)的网络,使其可以直接在部署在不同的架构配置上。推理可以通过选择该 OFA 网络的一部分来实现。它无需再训练,就能灵活地支持不同的深度、宽度、核大小和分辨率。
具体来说,首先在模型训练阶段训练一个单一的 OFA 网络,然后可以基于此生成具有不同架构配置的不同子网络。据介绍,这项研究的关注重点是在各个子网络不互相干扰的情况下提升每个子网络的准确度。在模型具体化阶段,研究者首先会为子网络的一个子集预构建准确度表和硬件效率表(延迟或能耗)。这些子网络的权重直接取自 OFA 网络,无需再训练。在测试时,给定一个部署场景,仅需查询准确度表和硬件延迟表就能得到一个特定的子网络。这个查询过程的成本可以忽略不计。
但是,训练这个 OFA 网络却并不轻松,因为这需要权重的联合优化,这样才能维持大量子网络的准确度。为了解决这些问题,研究者提出了用于这个 OFA 网络的渐进式收束网络。简单来说,首先训练一个带有最大深度、宽度和核大小的神经网络,然后逐步训练该网络以支持更小的子网络。
研究者在 ImageNet 上评估了所提出的框架的效率,并测试了不同的硬件平台(移动平台/CPU/GPU)和效率限制条件。在所有的部署场景中,OFA 相比于当前最佳的硬件感知型 NAS 方法都总是能取得同等或更高的 ImageNet 准确度,同时在处理不同部署场景时的效率要高出几个数量级。
方法
图 1:左图:训练单个 OFA 网络,以支持包括深度、宽度、核大小和分辨率在内的不同架构配置。给定一个部署场景,无需训练,直接从该 OFA 网络中选择一个专用子网络。中图:这种方法可将专用深度学习部署的成本从 O(N) 降至 O(1)。右图:OFA 网络之后再使用模型选择,可以实现很多准确度-延迟权衡,而整个过程仅需训练一次。相比而言,传统方法需要反复多次训练。表 2 给出了搜索成本比较,图 6 是在更多硬件平台上的结果。
这项研究探索了卷积神经网络架构的四个重要维度,即深度、宽度、核大小和分辨率。膨胀和分组数量等其它维度可以很自然地整合进来,但还有待进一步的研究。整体目标是使训练得到的网络的每个受支持的子网络都能实现与同样的架构配置同等水平的准确度。
图 2:渐进式收束过程的一个示例。其覆盖 CNN 架构的四个重要维度(深度 D、宽度 W、核大小 K、分辨率 R),得到一个由不同子网络构成的大型空间(>10^19)。
训练 OFA 网络
首先训练一个弹性分辨率的带有最大 [深度, 宽度, 核大小] 的完整神经网络。然后以一种渐进的方式微调这个神经网络(从大型子网络到小型子网络),以同时支持完整的 [深度, 宽度, 核大小] 和部分的 [深度, 宽度, 核大小]。
图 3:弹性核大小的核变换矩阵。这里支持 7×7、5×5 和 3×3 的核。权重共享使其比独立式的设置更有效率。
图 4:弹性深度的训练过程概览。这里不会单独地跳过每个块,而是会保留前 D 个块,然后跳过后面 (4-D) 个块。蓝色和绿色块的权重在 D=2, 3, 4 上是共享的。橙色块在 D=3, 4 上共享。
训练流程的详情如下:
弹性分辨率(图 2)。为了支持弹性分辨率,研究者在训练模型时为每批训练数据采样了不同的图像大小。
弹性核大小(图 3)。研究者在共享核权重时引入了核变换矩阵。具体而言,就是在不同的块上使用不同的核变换。在每个块中,核变换矩阵在不同的通道之间共享。
弹性深度(图 4)。为了在原本有 N 个块的阶段得到有 D 个块的子网络,首先保留前 D 个块,再跳过后面的 N-D 个块。最后,前 D 个块的权重在大型和小型模型之间共享。
弹性宽度(图 5)。宽度的意思是通道数量。研究者为每一层都提供了选择不同通道扩展比的灵活性。
知识蒸馏(图 2)。研究者既使用了训练数据给出的硬标签,也使用了在训练 OFA 网络时通过训练完整网络所得到的软标签。
使用 OFA 网络进行专用模型部署
图 5:用于弹性宽度的渐进式收束过程概览。这个例子是渐进地支持 4、3、2 个通道的设置。更小的通道设置的初始化是用通道分类后最重要的通道(大 L1 范数)来完成。
目标是搜索一个在目标硬件平台上满足效率限制条件(延迟、能耗等)的神经网络,同时优化其准确度。
这项研究的做法是随机采样子网络的一个子集,并构建它们的准确度表和延迟表。由此,给定目标硬件和延迟限制条件时,可以直接查询准确度表和对应的延迟表,得到表内的最佳子网络。查询这些表的成本可以忽略不计,从而可避免总成本的线性增长。
在实验中,研究者采样了 1.6 万个子网络,并在 1 万张验证图像(采样自原始训练集)上构建了准确度表。此外,由于支持弹性分辨率,还会在多种输入图像大小上测量同样的子网络。
实验
研究者首先在 ImageNet 上应用了渐进式收束算法来训练 OFA 网络,然后在多种不同的硬件平台(三星 Note8、谷歌 Pixel1、Pixel2、英伟达 1080Ti、2080Ti、V100 GPU、英特尔 Xeon CPU)上使用不同的延迟限制条件展示了所训练的 OFA 网络的有效性。
在 ImageNet 上训练 OFA 网络
研究者训练了一个支持弹性深度(每个阶段中块数量可以为 2、3 或 4)、弹性宽度(每个块的扩展比可以为 4、5 或 6)和弹性核大小(每个深度可分的卷积层的核大小可以为 3、5 或 7)。因此,对于 5 个阶段,有大约 ((3 × 3)^2 + (3 × 3)^3 + (3 × 3)^4)^5 ≈ 2 × 10^19 个子网络。此外,输入图像尺寸也是弹性的,以步幅 4,从 128 到 224 不等。
训练过程使用了标准的随机梯度下降(SGD)优化器,Nesterov 动量为 0.9,权重衰减为 4e-5。初始学习率为 0.4,学习率衰减使用了余弦调度(cosine schedule)。独立模型以 2048 的批大小在 32 个 GPU 上训练了 150 epoch。OFA 网络的训练使用了同样的训练设置,但训练成本更高(大约 8 倍),在 V100 GPU 上训练了大约 1200 GPU 小时。
结果
表 2:在三星 Note8 上与当前最佳的硬件感知型 NAS 方法的比较。OFA 的模型训练与架构搜索是分离的。随着部署场景数量的增长(在实验中 N=40),搜索成本和训练成本都保持不变。#25 表示从 OFA 网络抓取权重后微调了 25 epoch 的专用子网络。
表 3:在三星 Note8 上,不同延迟限制条件下的 ImageNet 准确度结果。
论文链接:https://arxiv.org/pdf/1908.09791.pdf