文献综述(或调研报告):
近年来,深度神经网络由于其高效的数据处理能力,在交通,民用安全,嵌入式设备等方面得到了广泛的应用和关注。而现在的数据数量大,变化快速,因此神经网络训练加速算法对于保证网络的高精度和时效性有着重要的意义国内外众多研究机构针对神经网络训练加速方案也展开了深入研究。其中主流的思路为低精度的定点或浮点量化(Zhou et al., 2016; Choi et al., 2018等),通过矩阵/数据流的稀疏性减少计算(Liu et al., 2019)等。本文对近年来国内外的主流思路进行简要陈述和分析。
1. 浮点数精度
正常神经网络运算中所有数据都以IEEE-754标准的Float32形式保存和计算,卷积运算的乘累加占了90%以上的计算资源[1]。这对于GPU来说并不是一个很大的问题,但对于片上训练则会对计算单元和存储单元提出更高的要求。
Ankur Agrawal等人[2]提出使用16位(1-6-9)格式的Float16来针对于IEEE-754的半精度(1-5-10)和bfloat16(1-8-7)进行优化。并且针对于舍入、对角等进行优化。
研究者通过使用1-6-9的FP16在Resnet18网络的Cifar10和Imagenet数据
集进行测试。如图1所示。在实验中,设定网络的权重、偏差(weight and bias),以及激活、误差、权重更新这些变量采用DLFloat表述,所有的矩阵乘法,卷积运算均在FP16单元中进行。而采用低精度的算法训练时,模型的权重初始化、正则化参数、学习率等与baseline情形保持一致。结果表明相对于FP32的模型,准确性并没有明显的下降,而训练速度也是相当的。
相似地,使用Kulisch累加和Gustafson posit格式的编码把权重转化为8bit[3],相比于标准float32点Resnet50在Imagenet数据集上的top1精确度下降在1%以内。通过结合对数浮点乘法,可以做到相比于IEEE754 float16融合乘法功率的0.59倍。
在MNIST和CIFAR10使用较小网络测试不同的浮点数表示。(1,6,5)浮点数与float32相当,(1,8,7)bfloat16在谷歌TPUv2中可用。这些形式保持与float32相同的指数范围,只是精度较低,乘数较小。
在普通计算中,乘除法占用大量的计算资源和周期。研究者提出ELMA。通过在log域内进行乘除计算相当于普通计算中的加减法,而对于加减法则需通过查找表实现。
以上是毕业论文文献综述,课题毕业论文、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。