主要内容

深度神经网络的量化

在数字硬件中,数字是以二进制字存储的。一个二进制字是一个固定长度的位序列(1和0)。数据类型定义了硬件组件或软件函数如何解释这个1和0序列。数字可以表示为缩放整数(通常称为定点)或浮点数据类型。

大多数预训练的神经网络和使用Deep Learning Toolbox™训练的神经网络使用单精度浮点数据类型。即使是经过训练的小型神经网络也需要相当大的内存,并且需要能够执行浮点运算的硬件。这些限制限制了深度学习能力在低功耗微控制器和fpga上的部署。

使用Deep Learning Toolbox模型量化库支持包,您可以量化网络,以使用8位缩放整数数据类型。金宝app

了解量化深度学习网络并将其部署到GPU下载188bet金宝搏、FPGA或CPU环境所需的产品,请参见量化工作流先决条件

精度和范围

与单精度浮点数据类型相比,缩放的8位整数数据类型的精度和范围有限。当将数字从较大的浮点数据类型转换为较小的固定长度数据类型时,有几个数值方面的考虑。

  • 精度损失:精度损失是一个舍入误差。当发生精度损失时,该值被舍入到该数据类型所能表示的最接近的数字。在平局的情况下:

    • 在正无穷方向上最接近可表示值的正数。

    • 在负无穷方向上最接近可表示值的负数。

    在MATLAB®方法执行这种类型的舍入函数。

  • 下溢:下溢是一种精度损失。当值小于数据类型所能表示的最小值时,就会发生下溢。当这种情况发生时,该值饱和为零。

  • 溢出:当一个值大于数据类型所能表示的最大值时,就会发生溢出。当发生溢出时,该值饱和到该数据类型所能表示的最大值。

动态范围直方图

使用深层网络量化器应用程序收集和可视化一个网络的卷积层和全连接层的权重和偏差的动态范围,以及网络中所有层的激活。该应用程序为网络的权重、偏差和卷积层的激活分配一个缩放的8位整数数据类型。该应用程序显示了这些参数的动态范围的直方图。下面的步骤描述了如何生成这些直方图。

  1. 考虑在运行网络时为某个参数记录的以下值。

    记录参数值的示意图。

  2. 找到参数的每个记录值的理想二进制表示形式。

    最有效位(MSB)是二进制字的最左边位。这个位对数值的贡献最大。每个值的MSB都用黄色突出显示。

    表中显示的每个记录值的理想二进制表示,最重要的位用黄色突出显示。

  3. 通过对二进制字进行对齐,您可以看到参数的日志值所使用的位的分布。每一列中以绿色突出显示的MSB的总和给出了记录值的聚合视图。

    在表格底部用绿色高亮显示的每一列的MSB的总和。

  4. 每个位位置的MSB计数显示为一个热图。在这张热图中,深蓝色的区域对应比特位置中较多的MSB。

    MSB计数显示为热图,较暗的区域对应比特位置上较多的MSB。

  5. 深层网络量化器应用分配一个数据类型,可以避免溢出,覆盖范围,并允许下溢。需要一个额外的符号位来表示值的符号性。

    下图显示了一个数据类型的例子,它表示来自2的位3.到2-3,包括符号位。

    原始值的二进制表示表,从2^3到2^3的区域和符号位列用一个包围框突出显示。

  6. 在分配数据类型之后,该数据类型之外的任何位都将被删除。由于分配了一个较小的固定长度的数据类型,对于无法用数据类型表示的值,可能会出现精度损失、溢出和下溢。

    值的二进制表示表,不可表示的位变灰。右边的表显示了8位二进制表示和量化值。

    在本例中,值0.03125存在下溢,因此量化值为0。值2.1有一定的精度损失,因此量化值为2.125。值16.250大于该数据类型的最大可表示值,因此该值溢出,量化值饱和为15.874。

    相同的表,在右边的表中突出显示了下溢、精度损失和溢出的代表性案例。

  7. 深层网络量化器在网络的卷积层和全连接层中,应用程序显示每个可学习参数的热图直方图。直方图的灰色区域显示了数据类型无法表示的位。

    由Deep Network Quantizer应用程序显示的热图直方图的示意图。

另请参阅

应用程序

功能