低功耗计算机视觉技术前沿,四大方向,追求更小、更快、更高效

核心提示深度学习在广泛应用于目标检测、分类等计算机视觉任务中。但这些应用往往需要很大的计算量和能耗。例如处理一张图片分类,VGG-16需要做 150亿次计算,而YOLOv3需要执行390亿次计算。这就带来一个问题,如何在低功耗的嵌入式系统或移动设备

深度学习广泛应用于目标检测和分类等计算机视觉任务。但是这些应用通常需要大量的计算和能量消耗。比如处理一个图片分类,VGG-16需要150亿次计算,而YOLOv3需要390亿次计算。

这就带来了一个问题,深度学习如何部署在低功耗的嵌入式系统或移动设备中?一种解决方案是将计算任务转移到云端,但这并不能最终解决问题,因为很多深度学习应用需要端侧的计算,比如部署在无人机或卫星上的应用。

从2016年开始,业界开始探索模型加速和小型化的研究,也提出了大量的小型化方案。这些技术可以消除DNNs中的冗余,减少75%以上的计算量,减少50%以上的推理时间,同时保证准确性不损失。但是如果要大规模部署DNNs模型,还是需要继续优化。

如果想往前走,需要看看目前低功耗计算机视觉的研究进展如何。美国普渡大学的Abhinav Goel等人最近对该领域的研究进展做了参考性总结。

论文链接:https://arxiv.org/pdf/2003.11066

在这篇文章中,Goel等人将低功耗推理方法分为四类,即:

1.参数的量化和修剪:通过减少用于存储DNN模型参数的位数来减少存储器和计算成本。

2.压缩卷积滤波和矩阵分解:将较大的DNN层分解成较小的层,以减少内存需求和冗余矩阵运算的数量。

3.网络架构搜索:自动构建不同层次组合的DNN,从而找到具有预期性能的DNN架构。

4.知识转移和提炼:用更多的计算训练一个紧凑的DNN来模仿DNN的输出、特征和激活。

下图总结了这四种方法的介绍和优缺点:

Goel等人的这篇综述不仅总结了这些方法的优缺点,还提出了一些可能的改进措施。同事们还提出了一套评价指标来指导今后的研究。

首先,参数量化和修剪

内存访问对DNNs的能耗有重要影响。为了构建低功耗DNNs,一种策略是在性能和存储器访问时间之间进行权衡。针对这种策略,目前有两种方法,一种是量化参数,即降低DNN参数的大小;另一种是剪枝,从DNNs中删除不重要的参数和连接。

1.参数量化

研究表明,当训练以不同位宽的定点格式存储的参数时,年度参数的位宽减小。虽然测试误差略有增加,但可以大大降低能耗。如下图所示:

基于这一基础研究,人们做了大量的工作,试图在给定的精度限制下找到DNN参数的最佳位宽。甚至Courbariaux、Rastegari等人提出了二元神经网络。

为了进一步降低DNNs的内存需求,目前常用的是参数量化和模型压缩。例如,韩等人首先将参数量化为离散的面元,然后对这些面元进行霍夫曼编码压缩,从而使模型规模减小了89%,而精度基本不受影响。类似地,HashedNet将DNN的连接量化到散列桶中,使得到相同桶的散列连接将共享相同的参数。但是这种方法需要很高的训练成本,因此应用受到限制。

优点:当参数位宽减小时,DNNs的性能基本保持不变。这主要是因为约束参数在训练过程中具有正则化作用。

缺点和改进方向:1)使用量化技术的DNNs往往需要多次重新训练,使得训练能耗非常大,因此如何降低训练成本是该技术必须要解决的问题;2)2)DNNs中的不同层对特征具有不同的敏感度。如果所有层都具有相同的位宽,将导致较差的性能。因此,如何为每个连接层选择不同的精度参数是提高性能的关键步骤,可以在训练中学习。

2.修剪

从DNNs中删除不重要的参数和连接可以减少内存访问的次数。

海森加权形变测量法可以评估DNN中参数的重要性,从而去除那些冗余的参数,降低DNN模型的规模。然而,这种基于测量的剪枝方法只适用于所有连接的层。

为了将剪枝扩展到卷积层,很多学者各显神通。Anwar等人提出了粒子滤波的方法;Polyak等人将样本输入数据,切断哪些稀疏激活的连接;韩等人使用新的损失函数来学习中的参数和连接;Yu等人使用了一种传播重要性分数的算法来测量每个参数相对于输出的重要性。

一些人还试图同时对模型应用剪枝、量化和压缩,将模型大小缩小了95%。

插图:不同DNN的模型压缩率。p:剪枝,q:量化,c:压缩。

优点:如上表所示,剪枝可以与量化和编码相结合,从而获得更显著的性能收益。例如,当这三个部件一起使用时,VGG-16的尺寸可以缩小到原来的2%。此外,剪枝可以降低DNN模型的复杂度,从而减少过拟合。

缺点和改进方向:同样,修剪也会增加训练时间。如上表所示,同时使用剪枝和量化,训练时间增加了600%;如果使用稀疏约束来修剪DNN,这个问题会更严重。另外,剪枝的优势只有在对稀疏矩阵使用定制硬件或特殊数据结构时才会显现出来。所以相对于现在的连接剪枝技术,通道剪枝可能是一个改进的方向,因为它不需要任何特殊的数据结构,也不会产生矩阵稀疏。

第二,压缩卷积滤波和矩阵分解

卷积在DNNs中占有很大的比重。以AlexNet为例,其中全连接层占了近89%的参数。因此,要想降低DNNs的功耗,就要减少卷积层的计算量和全连接层的参数量。还有两个技术方向,即:1)采用更小的卷积滤波器;2)将矩阵分解成参数较小的矩阵。

1.压缩卷积滤波器

与较大的滤波器相比,较小的卷积滤波器具有较少的参数和较低的计算成本。

但是,如果把所有的大卷积层都替换掉,DNN的平移不变性就会受到影响,从而降低DNN模型的精度。因此,一些人试图找出那些多余的过滤器,并用更小的过滤器取代它们。SqueezeNet就是这样一种技术,它使用三种策略将3×3卷积转换为1 × 1卷积。

如上图所示,SqueezeNet相比AlexNet减少了98%的参数,但性能不受影响。

MobileNets在瓶颈层使用深度可分卷积来减少计算量、延迟和参数数量。当使用深度可分离卷积时,通过保持较小的特征尺寸并仅扩展到较大的特征空来实现高精度。

优点:瓶颈卷积滤波器大大降低了DNNs的内存和延迟要求。对于大多数计算机视觉任务,这些方法可以达到SOTA性能。压缩与剪枝和量化技术正交,因此这三种技术可以一起使用,以进一步降低能耗。

缺点及改进方向:已证明1×1卷积在小DNN下计算量大,导致精度差。这主要是因为计算强度太低,无法有效利用硬件。通过对内存的有效管理,可以提高深度可分卷积的运算强度。通过优化缓存中参数的空间隔和时间局部性,可以减少内存访问的次数。

2.矩阵分解

通过将张量或矩阵分解成乘积形式,将多维张量分解成更小的矩阵,可以消除冗余计算。一些因式分解方法可以将DNN模型加速4倍以上,因为它们可以将矩阵分解成更密集的参数矩阵,避免了非结构化稀疏乘法的局部性问题。

为了尽量减少精度损失,可以分层进行矩阵分解:先分解一层的参数,然后根据重建误差分解后续各层的参数。然而,逐层优化的方法使得这些方法很难应用于大规模的DNN模型,因为分解超参数的数量将随着模型的深度呈指数增加。Wen等人使用紧凑的核形状和深度结构来减少因子分解超参数的数量。

矩阵分解有许多技术。Kolda等人证明了大多数因子分解技术可以用于加速DNN模型,但是这些技术不一定能够在精度和计算复杂度之间达到最佳平衡。比如CPD和BMD在精度上可以做的非常好,但是Tucker-2分解和奇异值分解就没有那么精确。CPD在压缩上优于BMD,但CPD相关的优化问题有时无解,导致无法分解,而BMD的因式分解却一直存在。

优点:矩阵分解可以降低DNN的计算成本,卷积层和全连接层都可以使用相同的因式分解。

缺点和改进方向:由于缺乏理论解释,很难解释为什么有些分解可以获得更高的精度,而有些却不能;此外,与矩阵分解相关的计算往往等同于模型获得的性能增益,从而导致增益和损失的抵消。另外,矩阵分解在大型DNN模型中很难实现,因为分解超参数随着深度呈指数增长,训练时间主要花在寻找正确的分解超参数上;事实上,没有必要在整个空空间中搜索超级参数,这样你就可以在训练中学习如何找到更好的搜索空空间,从而加快大型DNN模型的训练速度。

三、网络架构搜索

在设计低功耗计算机视觉程序时,不同的任务可能需要不同的DNN模型架构。然而,由于存在许多结构可能性,通常很难手工设计出最佳的DNN模型。最好的办法就是将这个过程自动化,也就是网络架构搜索技术。

NAS使用递归神经网络作为控制器,并使用强化学习来构建候选DNN架构。这些候选DNN架构经过训练,然后用验证集进行测试。测试结果用作奖励函数,以优化控制器的下一个候选架构。

Net和AmoebaNet证明了NAS的有效性,通过架构搜索获得DNN模型,就可以获得SOTA的性能。

为了获得用于移动设备的有效DNN模型,Tan等人提出了MNasNet,其在控制器中使用多目标奖励函数。实验中,MNasNet比NasNet快2.3倍,参数少4.8倍,运算少10倍。此外,MNasNet比NasNet更准确。

然而,尽管NAS方法效果显著,但大多数NAS算法计算量很大。例如,MNasNet需要50,000个GPU才能在ImageNet数据集上找到高效的DNN架构。

为了降低与NAS相关的计算成本,一些研究人员建议根据代理任务和奖励来搜索候选架构。例如,在上面的例子中,我们使用较小的数据集CIFAR-10,而不是ImageNet。FB就是这么处理的,速度是MNA FBNet的420倍。然而,蔡等人的研究表明,在代理任务上优化的结构不能保证在目标任务上是最优的。为了克服基于代理的NAS解决方案带来的局限性,他们提出了无代理NAS,该方案使用路径级剪枝来减少候选架构的数量,并使用基于梯度的方法来处理延迟等目标。他们在300个GPU内找到了一个有效的架构。此外,一种称为单路径NAS的方法可以将架构搜索时间减少到4 GPU小时,但这种加速是以降低准确性为代价的。

优点:NAS通过在所有可能的架构空中进行搜索,自动平衡准确性、内存和延迟之间的平衡,无需任何人工干预。NAS可以在许多移动设备上实现最佳的准确性和能耗性能。

缺点和改进方向:计算量太大,很难在大数据集上搜索任务的结构。此外,为了找到满足性能要求的架构,必须在目标设备上训练和运行每个候选架构来生成奖励函数,这将导致很高的计算成本。实际上,可以在不同的数据子集上并行训练候选DNN,从而减少训练时间;从不同数据子集获得的梯度可以组合成训练的DNN。但是,这种并行训练方法可能会导致准确率较低。另一方面,在保持高收敛速率的同时,可以通过使用自适应学习速率来提高精度。

四。知识转移和提炼

大模型比小模型更准确,因为参数越多,可以学习的函数越复杂。那么这么复杂的函数用一个小模型能学会吗?

一种方式是知识转移,将从大型DNN模型中获得的知识转移到小型DNN模型中。为了学习复杂函数,小DNN模型将在大DNN模型标记的数据上进行训练。其背后的想法是,由大DNN标记的数据将包含许多对小DNN有用的信息。例如,大型DNN模型在某些类别标签上输出输入图像的概率很高,这可能意味着这些类别共享一些共同的视觉特征;对于小型DNN模型,如果我们模拟这些概率,我们可以学到比直接从数据中学到的更多的东西。

另一项技术是Hinton在2014年提出的知识蒸馏。这种方法的训练过程比知识传授简单得多。在知识升华中,小DNN模型通过学生-教师模型训练,其中小DNN模型是学生,一组专门的DNN模型是教师;通过训练学生模仿老师的输出,小DNN模型可以完成整个任务。然而,在辛顿的工作中,小DNN模型的准确性相应地降低。李等人通过最小化教师和学生之间的欧氏距离,进一步提高了小模型的精度。同样,FitNet让学生模型中的每一层都模仿老师的特征图。但是,上述两种方法对学生模型的结构要求严格,通用性差。为解决这一问题,彭等将指标间的相关性作为优化问题。

优点:基于知识转移和知识提炼的技术可以显著降低大规模预训练模型的计算成本。研究表明,知识提炼的方法不仅可以用于计算机视觉,还可以用于半监督学习和领域适应等许多任务。

缺点和改进方向:知识升华通常对学生和教师的结构和规模有严格的假设,很难在所有应用中推广。此外,目前的知识蒸馏技术严重依赖softmax输出,无法与不同的输出层协同工作。作为改进方向,学生可以学习教师模型的神经元激活序列,而不仅仅是模仿教师的神经元/层输出,可以消除对学生和教师结构的限制,减少对softmax输出层的依赖。

动词 (verb的缩写)讨论

事实上,没有一种技术可以建立最有效的DNN模式。上面提到的大多数技术是互补的,可以同时使用,从而降低能耗、模型大小和精度。基于对以上内容的分析,笔者在文末得出五点结论:

1)量化和降低参数的精度,可以显著降低模型的规模和算术运算的复杂度,但大多数机器学习库很难人工量化。Nvidia的TensorRT库为这种优化提供了一个接口。

2)剪枝和模型压缩是优化大规模预训练DNN的有效选择。

3)当从零开始训练新的DNN模型时,应该使用压缩卷积滤波器和矩阵分解来减少模型的大小和计算。

4)NAS可用于查找单个设备的最佳DNN模型。具有多个分支的DNN通常需要昂贵的内核启动以及GPU和CPU的同步。

5)知识提炼可以应用于中小型数据集,因为对学生和教师的DNN架构要求的假设较少,可以有较高的准确率。

 
友情链接
鄂ICP备19019357号-22