深度神经网络的量化

在数字硬件,数字存储在二进制字。二进制字的位数是固定长度的序列(1和0)。数据类型定义硬件组件或软件功能如何解释1和0的该序列。号被表示为任一整数缩放(通常被称为固定点)或浮点数据类型。

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

使用深度学习工具箱模型量化库支持包,您可以量化一个网络,以使用8位缩放整数数据类型。万博1manbetx

神经网络的量化要求GPU中,用于深度学习库的GPU编码器™接口万博1manbetx支持软件包,以及深度学习工具箱模型量化库支持软件包。使用GPU需要CUDA®使英伟达®计算能力6.1或更高的GPU。

精度和范围

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

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

    • 正数到正无穷大的方向最接近的表示值。

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

    在MATLAB®属性可以执行这种类型的舍入回合功能。

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

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

动态范围的直方图

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

  1. 例如,要开始考虑下面的值记录为参数,同时行使网络。

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

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

  3. 通过对齐二进制字,您可以看到一个参数的记录值所使用的位的分布。在日志值的聚合视图中,将每个列中的MSB的数量相加。

  4. 显示每个比特位置作为热图的MSB计数。在该热图,深蓝色区域对应于在比特位置更大数目的MSB的的。

  5. 该软件分配能够代表位的位置捕获最多信息的数据类型。在这个例子中,该软件将选择表示2比特的数据类型3.23。一个额外的符号位是必需的以表示的值的符号性。

  6. 分配数据类型后,该数据类型之外的任何位都被删除。在此示例中,第一值,0.03125,从下溢症,所以量化值是0。理想值2.1遭受一些精度损失,所以该量化值是2.125。值16.250比数据类型的最大可表示值大,所以这个值溢出。量化值饱和为15.874。

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

另请参阅

应用程序

功能

相关话题