Abstract
- 目前,神经网络架构设计主要由计算复杂度的间接度量(即FLOP)引导。然而,直接度量(例如,速度)还取决于诸如存储器访问成本和平台特性之类的其他因素。 因此,这项工作建议评估目标平台上的直接度量,而不仅仅考虑FLOP。基于一系列对照实验,这项工作为高效的网络设计提供了几个实用指南。因此,提出了一种称为ShuffleNet V2的新架构。全面的消融实验验证了我们的模型在速度和准确度方面是最先进的。
Introduction
- 为了测量计算复杂性,广泛使用的度量是浮点运算的数量,或FLOPs1。 但是,FLOP是间接指标。 它是我们真正关心的直接度量的近似值,但通常不等同,例如速度或延迟。 在以前的作品[17,18,14,19]中已经注意到这种差异。 例如,MobileNet v2 [14]比NASNET-A [9]快得多,但它们具有可比较的FLOP。 这种现象在图1(c)(d)中进一步说明,它表明具有相似FLOP的网络具有不同的速度。 因此,使用FLOP作为计算复杂性的唯一指标是不充分的,并且可能导致次优设计。
- 间接(故障)和直接(速度)指标之间的差异可归因于两个主要原因。首先,对速度有相当大影响的几个重要因素没有被触发器考虑在内。其中一个因素是内存访问成本(MAC)。在某些操作(如组卷积)中,这种成本占运行时的很大一部分。它可能是具有强大计算能力的设备(如GPU)的瓶颈。在网络体系结构设计过程中,不应简单地忽略这一成本。另一个是平行度。在相同的触发器下,一个高度并行的模型可能比另一个高度并行的模型快得多。
- 其次,具有相同FLOP的操作可能具有不同的运行时间,具体取决于平台。 例如,张量分解广泛用于早期工作[20,21,22]以加速矩阵乘法。 然而,最近的工作[19]发现[22]中的分解在GPU上甚至更慢,尽管它将FLOP降低了75%。 我们调查了这个问题并发现这是因为最新的CUDNN [23]库专门针对3×3转换而优化。 我们当然不能认为3×3转换比1×1转速慢9倍。
- 通过这些观察,我们提出应该考虑两个原则来实现有效的网络架构设计。 首先,应该使用直接度量(例如,速度)而不是间接度量(例如,FLOP)。 其次,应在目标平台上评估