深度神经网络的量化
在数字硬件中,数字以二进制字存储。二进制字是一个固定长度的比特序列(1和0)。数据类型定义了硬件组件或软件功能如何解释这个由1和0组成的序列。数字可以表示为可缩放的整数(通常称为定点)或浮点数据类型。
大多数预训练的神经网络和使用深度学习工具箱训练的神经网络使用单精度浮点数据类型。即使是小型训练过的神经网络也需要相当大的内存,并且需要能够执行浮点运算的硬件。这些限制可能会阻碍深度学习功能部署到低功耗微控制器和fpga。
使用深度学习工具箱模型量化库支持包,您可以量化网络以使用8位缩放整数数据类型。万博1manbetx
要了解量化深度学习网络并将其部署到GPs manbetx 845U、FPGA或CPU环境所需的产品,请参见量化流程.
精度和范围
与单精度浮点数据类型相比,伸缩的8位整数数据类型的精度和范围有限。在将数字从较大的浮点数据类型转换为较小的固定长度的数据类型时,有几个数值注意事项。
精度损失:精度损失是一个舍入误差。当发生精度损失时,该值舍入为该数据类型所能表示的最接近的数字。在平局的情况下,它四舍五入:
在正无穷方向上最接近可表示值的正数。
负数在负无穷方向上最接近可表示的值。
在MATLAB®方法执行这种类型的舍入
轮
函数。下溢:下溢是一种精度损失。当值小于数据类型可表示的最小值时,就会发生下流。当这种情况发生时,值饱和为零。
溢出:当一个值大于一个数据类型所能表示的最大值时,就会发生溢出。当发生溢出时,该值饱和到该数据类型所能表示的最大值。
动态范围直方图
使用深度网络量化器应用程序,收集和可视化网络的卷积层和全连接层的权重和偏差的动态范围,以及网络中所有层的激活。该应用程序为网络卷积层的权重、偏差和激活分配了一个缩放的8位整数数据类型。应用程序会显示每个参数的动态范围的直方图。以下步骤描述了这些直方图是如何生成的。
在运行网络时,考虑为一个参数记录的以下值。
找出参数的每个日志值的理想二进制表示形式。
最高有效位(MSB)是二进制字的最左边的位。这个位对数字的值贡献最大。每个值的MSB用黄色突出显示。
通过对齐二进制字,可以看到参数的日志值所使用的位的分布。每列中MSB的总和(用绿色突出显示)给出了记录值的汇总视图。
每个位位置的MSB计数以热图的形式显示。在这张热图中,蓝色较深的区域对应着比特位置上更多的MSB。
的深度网络量化器应用程序分配一个数据类型,可以避免溢出,覆盖范围,并允许下溢。需要一个额外的符号位来表示值的符号性。
下图显示了一个表示来自2的位的数据类型示例3.到23,包括符号位。
在指定数据类型之后,该数据类型之外的任何位都将被删除。由于分配了固定长度的较小数据类型,对于不能由数据类型表示的值,可能会发生精度损失、溢出和下溢。
在本例中,值0.03125受到下溢,因此量化值为0。数值2.1有一定的精度损失,因此量化值为2.125。值16.250大于数据类型的最大可表示值,因此该值溢出,量化值饱和到15.874。
的深度网络量化器App显示了网络的卷积层和全连接层中每个可学习参数的热图直方图。直方图的灰色区域表示不能用数据类型表示的位。