随着深度学习的发展,神经网络变得越来越大。例如,在ImageNet识别挑战赛中,获胜模型在2012年至2015年间的规模增长了16倍。仅一年时间,百度的深度语音模型的训练操作数就增长了10倍。总的来说,嵌入式系统中的深度学习主要面临三个挑战:随着模型规模的增大,将模型部署到手机上变得越来越困难。如果模型超过100MB,则只能在连接Wi-Fi时(通常)才能下载。训练速度变得极慢。例如,与ResNet101相比,原始ResNet152的精度提高了不到1%,并且需要在4个分布式GPU上进行1.5周的训练。如此庞大的模型也在能源效率方面苦苦挣扎。例如,要在围棋比赛中击败李世石,AlphaGo需要1,920个CPU和280个GPU进行训练,耗电约3,000美元。在这种情况下,在资源受限的设备上运行神经网络需要数据工程和数据科学的联合解决方案,有时也称为“算法和硬件协同设计”。在本文中,我们只讨论象限的左上角。更高级的推理算法是什么?1.神经网络剪枝与你想的相反,剪枝与砍树无关。在机器学习中,模型修剪涉及删除不重要的权重以获得更小、更快的网络。模型剪枝最早是由YannLeCun于1989年在他的论文“OptimalBrainDamage”中提出的。其思想是采用一个经过充分训练的网络,去除剪枝后的权重将导致最小化目标函数的增加。每个参数的贡献可以用Hessian矩阵来近似。一旦去除了不重要的权重,就可以重新训练较小的网络,这个过程可以重复多次,直到网络具有令人满意的大小和合理的性能。从那时起,出现了多种修剪技术。Hanetal.,2015,在“LearningbothWeightsandConnectionsforEfficientNeuralNetworks”中,介绍了一种三步法,即训练神经网络,然后修剪低于选择阈值的连接权重,最后训练稀疏网络网络学习最后剩余的连接权重。您可能想知道:如何确定修剪阈值?好问题!卷积层和全连接层都可以被修剪,但是,经验表明卷积层比全连接层对修剪更敏感。因此,需要根据每一层的灵敏度来选择阈值,如下图所示,摘自Han等人的研究论文。根据研究报告,在NVIDIATitanXGPU上重新训练剪枝后的AlexNet需要173小时。但再训练时间并不是关键问题,因为最终目标是让较小的模型在资源有限的设备上快速运行。在ImageNet上,该方法将AlexNet的参数数量减少了9倍(从6100万个参数减少到670万个),将VGG-16减少了13倍(从1.38亿个参数减少到1030万个参数)。剪枝后,AlexNet和VGGNet的存储要求大大降低,所有权重都可以存储在片上而不是片外DRAM(访问DRAM会消耗大量能量)。2.深度压缩的神经网络既是计算密集型又是内存密集型,因此很难在硬件资源有限的嵌入式系统上部署。为了解决这一限制,Han等人的“深度压缩”论文引入了一个3步流水线:修剪、训练模型量化和霍夫曼编码,所有这些一起工作可将神经网络的存储需求减少35-49倍,但不影响其准确性。该方法首先通过仅学习重要连接来修剪网络。接下来,该方法量化权重以执行权重共享。最后,该方法使用霍夫曼编码。在前两个步骤之后,作者重新训练网络以调整剩余的连接和量化中心。修剪将连接数减少了9倍到13倍。量化将代表每个连接的位数从32减少到5。在ImageNet上,该方法将AlexNet所需的存储减少了35倍(从240MB到6.9MB)而不会损失准确性。该方法还将VGG-16预训练模型的大小减少了49倍(从552MB减少到11.3MB),而没有损失准确性。最后,这种深度压缩算法有助于在大小和下载带宽都受到限制的移动应用程序中使用复杂的神经网络。在对CPU、GPU和移动GPU进行基准测试时,压缩网络具有3到4倍的层加速和3到7倍的能效。3.数据量化近年来,基于卷积神经网络的方法在大量应用中取得了巨大的成功,是计算机视觉中应用最广泛的体系结构之一。然而,基于CNN的方法计算量大且消耗资源,因此难以集成到智能手机、智能眼镜和机器人等嵌入式系统中。FGPA是加速CNN的有前途的平台,但有限的带宽和片上内存大小限制了CNN的FPGA加速器的性能。清华大学研究人员的论文《GoingDeeperwithEmbeddedFPGAPlatformforCNN》提出了一种用于ImageNet大规模图像分类的CNN嵌入式FPGA加速器设计方案。作者通过经验证明,在目前比较先进的CNN模型架构中,卷积层是以计算为中心的,而全连接层是以记忆为中心的。因此,他们提出了一种动态精确的数据量化方法(如下图所示),以帮助提高带宽和资源利用率。在这个数据量化流程中,任意两个定点数之间的分数长度对于不同的层和特征映射集是动态的,但对于同一层是静态的,以最小化每一层的截断误差。权重量化阶段的目标是找到权重层的最佳分数长度。在这个阶段,首先分析每层权重的动态范围。然后,初始化小数长度以避免数据溢出。数据量化阶段的目的是为两层之间的一组特征图找到最佳得分长度。该阶段采用贪心算法逐层比较定点CNN模型和浮点CNN模型的中间数据,减少精度损失。他们的结果(在对不同神经网络架构的不同策略进行进一步分析后)表明,动态精度量化比静态精度量化更有益。使用动态精度量化,他们可以使用更短的操作表示,同时仍能达到相当的精度。4.低秩估计卷积神经网络的另一个问题是它们昂贵的测试时间评估,这使得该模型在现实世界的系统中不切实际。例如,云服务需要每秒处理数千个新请求。大多数移动设备(例如手机和平板电脑)只有CPU或低端GPU。一些识别任务,例如对象检测,即使在高端GPU上处理单个图像仍然非常昂贵。小时。因此,加快CNN测试时间的计算具有重要的现实意义。微软亚洲研究院的论文《EfficientandAccurateApproximationsofNonlinearConvolutionalNetworks》提出了一种加速非线性卷积神经网络的方法。该方法基于最小化非线性响应的重构误差,并采用低秩约束来减少计算量。为了解决一个具有挑战性的约束优化问题,作者将其分解为两个可行的子问题并迭代求解。然后他们提出了最小化不对称重建误差的方法,有效地减少了多个近似层的累积误差。从左边开始,作者将原来的层W替换为W'和P。实际上d'过滤器的大小是k×k×c。这些过滤器产生一个d'维特征图。在这个featuremap中,d-by-d'矩阵P可以用1×1×d'来实现。因此,P对应于具有1×1空间支持的卷积层,可将d'维特征映射到d维特征。他们将这种低秩近似应用于为ImageNet训练的大型网络,并得出结论,训练速度提高了4倍。事实上,与AlexNet相比,他们的加速模型执行推理的速度相对较快,但准确率提高了4.7%。5.训练后三元量化另一种可以解决大型神经网络模型在有限功率预算下在移动设备上的部署问题的算法是训练后三元量化,它可以将神经网络中权重的精度降低到三元值。这种方法精度下降很小,甚至可以提高一些模型在CIFAR-10和ImageNet上的精度。在本文中,AlexNet模型是从头开始训练的,这意味着它与训练普通的全精度模型一样简单。训练好的量化方法既可以学习到三元的值,也可以学习到三个值的分布,如上图所示。首先,作者通过将每个权重除以最大权重将全精度权重归一化到[-1,+1]范围。接下来,中间全分辨率权重通过阈值量化为{-1,0,+1}。阈值因子t是一个超参数,它在所有层中都是相同的,以减少搜索空间。最后,他们通过反向传播两个梯度(短线)来执行训练后量化:将梯度1传播到全分辨率权重,将梯度2传播到比例系数。前者可以学习三元取值,后者可以学习三元取值赋值。他们在CIFAR-10上的实验表明,使用这种经过训练的量化方法获得的三元组模型分别优于全精度ResNet32、ResNet44和ResNet56模型0.04%、0.16%和0.36%。在ImageNet上,他们的模型比全精度AlexNet模型准确度高0.3%,比之前的三元组模型准确度高3%。总结我希望本文能帮助您了解您正在使用的深度学习库在幕后使用了多少优化。这里介绍的这5种算法使从业者和研究人员能够更有效地进行模型推理,从而在手机等小型边缘设备上实现越来越多的实际应用。
