HARDWARE-ORIENTED APPROXIMATION OF CONVOLUTIONAL NEURAL NETWORKS
面向硬件的卷积神经网络近似
Philipp Gysel Mohammad Motamedi Soheil Ghiasi
翻译:汪岩
摘要:
高计算复杂度阻碍了卷积神经网络(CNN)的广泛使用,尤其是在移动设备中的使用。可以说,硬件加速器是减少执行时间和功耗的最有前途的方法。加速器开发中最重要的步骤之一,是面向硬件的模型近似。本文介绍了模型近似框架Ristretto,Ristretto针对表示卷积权重、全连接层权重和输出的数值分辨率来分析CNN。 Ristretto使用定点而非浮点来压缩模型。而且,Ristretto还可以对生成的定点网络做调优。在最大误差容限为1%的条件下,Ristretto可以将CaffeNet和SqueezeNet压缩为8位。
1、简介
深度学习网络,如AlexNet包含数百万个参数,需要数十亿次算术运算。因此,各种解决方案都开始用于减少CNN的资源需求。与浮点相比,定点算法的资源占用更少。而且定点计算对于神经网络计算已经足够。各种研究表明,压缩深度神经网络的性能也不错。
深度CNN的复杂性可以分为两部分。首先,卷积层包含超过90%的运算量。通过将这些浮点运算转换为小定点数运算,可以显著减少芯片面积和能耗。第二种资源密集层是全连接层,其中包含90%以上的网络参数。使用位宽减小的另一个好处是,减少了全连接层向片外存储器传输的数据。本文仅专注于卷积层和全连接层近似。Ristretto会自动在位宽缩减和最大容错之间找到理想平衡。 Ristretto可对任何给定的网络执行快速、全自动的剪枝分析。该训练后( post-training )工具可用于神经网络的特定应用剪枝。
2、混合定点精度
接下来的两节将讨论浮点CNN到定点的量化。此外,我们探讨了动态定点,并说明了如何在保持分类精度的同时,进一步减小网络规模。
全连接层和卷积层的数据路径由一系列MAC操作(乘法和累加)组成,如图1所示。激活层数据与网络权重相乘,结果累加后作为输出。这种结构很适合使用混合精度,即CNN的不同部分使用不同的位宽。
在图1中,m和n分别表示输出层和层权重的位数。乘积通过加法器树累加,树越到末端越粗。加法器的第一级输出为m+n+2位宽,位宽每一级增加1位。最后一级的位宽为m + n + logx,其中x是每个输出值的乘法运算数量。在最后阶段,MAC结果和偏置(bias)相加形成层输出。对于每个网络层,都需要在位宽(m和n)与分类精度之间找到平衡。
![b8400a6e1ec0f5290830ca61ff20d547.png](https://i-blog.csdnimg.cn/blog_migrate/4e37315491f95c02c6cc0a3abdff98f3.png)
3、动态定点
CNN的不同部分具有很大的动态范围。在较大的层中,输出是数千次累加的结果,因此网络参数量远比输出层小。定点覆盖整个大动态范围的能力有限,动态定点(Williamson,1991; Courbariaux等,2014)是解决此问题的一个方法。
在动态定点中,每个数字表示为
![1716fc7ba8b09d6cabda583ee48d394a.png](https://i-blog.csdnimg.cn/blog_migrate/a10ce92eaf947411c5a55d9118282a9c.png)
,其中B表示位宽,s为符号位,fl是小数长度,x是尾数。网络中的中间值具有不同的范围。因此,最好将定点数分配给具有常数fl的不同组,如此一来,在组内分配给小数部分的位数就是恒定的。每个网络层都分为两组:一组用于输出,一组用于权重。由于权重通常明显较小,因此可以更好地覆盖层输出和权重的动态范围。硬件上可以使用移位来实现动态定点计算。
前人的工作中已经提出了部署神经网络的不同硬件加速器(Motamedi等,2016; Qiu等,2016; Han等,2016a)。加速器设计的第一个重要步骤是网络的压缩。在下一节中