主要内容

深度神经网络的量化

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

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

使用深度学习工具箱模型量化库支持包,您可以量化网络以使用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. 深层网络量化器应用程序显示这个热图直方图的每个可学习的参数在卷积层和网络的全连接层。直方图的灰色区域表示数据类型不能表示的位。

    深度网络量化器应用程序显示的热图直方图示意图。

另请参阅

应用程序

功能