CN114222997A - 用于对神经网络进行后训练量化的方法和装置 - Google Patents
用于对神经网络进行后训练量化的方法和装置 Download PDFInfo
- Publication number
- CN114222997A CN114222997A CN202080048236.6A CN202080048236A CN114222997A CN 114222997 A CN114222997 A CN 114222997A CN 202080048236 A CN202080048236 A CN 202080048236A CN 114222997 A CN114222997 A CN 114222997A
- Authority
- CN
- China
- Prior art keywords
- input
- bits
- bit
- exponent
- range
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Engineering & Computer Science (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Molecular Biology (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Nonlinear Science (AREA)
- Neurology (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
提供了一种用于对神经网络进行动态点量化以实现更高精度和更低存储要求的方法和装置(100)。传统的神经网络模型需要海量磁盘空间,这增加了与这些模型关联的计算成本,从而要求用户设备提供大量的性能和功率。本发明聚焦于量化深度学习模型,从而与传统模型相比,降低存储要求,而不损害精度,同时还实现更高的性能。所述神经网络通过如下方式来量化:确定输入是正数还是负数(901);确定所述输入的指数范围(902);确定所述输入的层参数的最大范围(903);确定所述输入的层的偏移量(904);通过将所述输入转换为其对应的二进制形式来执行指数调整(905),并通过将所述偏移量与指数调整值相加来确定所述输入的指数表示(906)。
Description
技术领域
本申请要求于2019年10月30日提交给印度专利局、发明名称为“用于对神经网络进行后训练量化的方法和装置(METHOD AND APPARATUS FOR QUANTIZATION OF NEURALNETWORKS POST TRAINING)”的第IN201931043851号印度专利申请的优先权,该申请通过全文引用并入本文。
本文描述的主题大体上涉及深度学习模型,更具体涉及用于量化神经网络(例如存储的神经网络模型的权重和参数)的方法和装置。
背景技术
机器学习是人工智能(artificial intelligence,AI)的一种应用,它利用统计技术为计算机系统提供在不显示编程的情况下,利用数据进行“学习”的能力,例如,逐步提高针对特定任务的性能。机器学习模型接收输入并根据接收到的输入生成输出,例如预测输出。有些机器学习模型是参数模型,根据接收到的输入和模型的参数值生成输出。
机器学习领域的最先进技术包括深度神经网络,这些深度神经网络采用由多个处理层组成的计算模型,这些计算模型利用多个抽象层学习数据(通常是非常大量的数据)的表示,从而产生术语“深度学习”或“深度网络”。深度学习,也称为“深度结构化学习”或“分层学习”,是机器学习方法的一部分,基于学习数据表示,而不是基于任务特定算法。“学习”可以是“监督的”、“半监督的”或“无监督的”。
“深度神经网络”、“深度信念网络”和“递归神经网络”等深度学习架构已应用于多个领域,包括但不限于计算机视觉、语音识别、自然语言处理、音频识别、社交网络过滤、机器翻译、生物信息学、药物设计、棋盘游戏程序等,它们产生的结果与人类专家相当,在某些情况下优于人类专家。
人工神经网络(本文称为“神经网络”)是一种信息处理范式,它的灵感来自生物神经系统(例如大脑)处理信息的方式。这一范式的关键因素是信息处理系统的新结构。该范式由大量高度互联的处理元件(神经元)组成,这些处理元件协同工作,以解决特定问题。神经网络像人类一样通过示例学习。神经网络可以通过学习过程针对特定应用(例如模式识别或数据分类)配置。生物系统中的学习涉及对神经元之间存在的突触连接的调整,神经网络也是如此。
与现有神经网络模型关联的问题是,这些神经网络模型占用磁盘上的大量空间,预训练模型的大小十分巨大;从而导致将此类模型放置在边缘设备或用户设备上的问题,所述设备例如但不限于手机、平板电脑、树莓派板、可穿戴设备等。通常,此类设备的存储空间和处理能力有限。目前,这些模型使用32位浮点数据结构存储。典型的预训练模型的大小的示例如下表1所示。可以一致推断,几乎所有大小都被神经网络连接的权重所占据,因为这些权重是不同的浮点数。出于同样的原因,简单的压缩技术(例如zip压缩)并不能充分压缩这些权重。
表1:列出一些预训练的神经网络模型所占的空间
序号 | 模型 | 权重 |
1 | AlexNet | 285MB |
2 | VGG-16 | 528MB |
3 | Resnet 152 | 220MB |
4 | Extraction | 90MB |
与这些神经网络模型关联的另一个问题是,这些模型的计算成本非常高,从而消耗用户设备的大量性能和功率。由于这些模型在大多数情况下需要32位浮点运算和乘法运算,因此在功率和性能要求方面,与这些模型关联的成本很高。
克服与神经网络关联的这些缺点的一种方法是提高用于部署这些网络的硬件的计算能力。这种方案成本高昂,并且由于尺寸限制,在用户设备上大规模部署不可行。大规模部署的替代方法是在定点中实现这些神经网络模型,这可以在减少内存、带宽、降低功耗和计算时间以及存储要求方面提供优势。
对于某些最先进的技术,参考TensorFlowTM,它引入了定点量化作为量化预训练模型的方案,以减少推理阶段的内存。该技术查看权重的范围,即最小值和最大值,并尝试将每个权重值映射到8位的等效整数表示张量。例如,如果最小值=–10.0,最大值=30.0且为8位阵列,则量化值在下文表示。虽然这种方法节省了75%的空间,并由于其运算涉及8位而提高了性能,但与这种方法关联的一些实时问题将在下文详细讨论。
量化 | 浮点数 |
0 | –10.0 |
255 | 30.0 |
128 | 10.0 |
与TensorFlowTM关联的缺点如下所示:
(a)不同层之间的相加:一些神经网络使用简单的逐元素加法层类型,它简单地将来自不同层的两个激活层输出(RESNET-32就是这样一个示例)相加,如图1A-1C所示。在RESNET-32中,滤波器大小为3×3的32个卷积层相互堆叠,并存在将来自两个激活层的输入相加的快捷方式连接。虚线快捷方式连接箭头表示输入被上采样以匹配第二加法输入的大小,而实线快捷方式连接箭头具有相同尺寸的加法输入。如果两个阵列的量化尺度相同,则可以对它们进行加法运算。由于这种方法涉及不同层的不同量化范围,因此不同量化尺度上的两个激活层无法匹配进行加法运算。因此,需要解量化以使层的值回到原始值,执行加法运算,然后再次执行量化。这种重复的量化和解量化使模型变得缓慢,并涉及资源的消耗,从而使性能优势不可行。
(b)级联:对级联层的全面支持引起了与加法层相同的解量化和重新量化问题。由于数据类型uint 8的这种重新缩放值将是一个有损操作,而且级联似乎应该是一个无损操作,因此这种实现方式也会受到同样的影响。
(c)真零问题:在这种实现方式中,由于量化是基于范围并逐步递增的,因此使零值移位,例如:
量化 | 浮点数 |
0 | –10.0 |
255 | 30.0 |
128 | 10.0 |
浮点值–10.0现在用零表示,零值用某个其它数字表示,这是一个问题,因为零是一个重要的运算,在神经网络操作中出现很多,例如,当滤波器重叠时,卷积可以在边缘填充零,relu激活函数将任何负数替换为零,等等。因此,量化操作再次被解量化,再次被重新量化,如图2所示。深色阴影框表示输入数据的解量化和量化。这种重复的量化和解量化使模型的性能低于原始模型的性能。图3示出了cifarnet图像分类模型的三种变型的量化TensorFlowTM与正常模型之间比较的一些性能数据。性能是根据对单个图像进行分类所需的推理时间来衡量的。从所述图表可以推断,TensorFlowTM的量化模型的性能比原始模型低得多,从而使其本身的目的失败。根据表2和表3中列出的以下数据,可以推断MNIST数据集的性能也受到影响。
表2:列出原始网络对MNIST数据集的各个操作的性能
节点类型 | 平均毫秒 | 平均% |
Conv2D | 62.098 | 73.109% |
MatMul | 16.089 | 18.942% |
Add | 4.248 | 5.001% |
Maxpool | 1.453 | 1.711% |
Relu | 1.006 | 1.184% |
Const | 0.022 | 0.026% |
Reshape | 0.008 | 0.009% |
Retval | 0.004 | 0.005% |
Arg | 0.004 | 0.005% |
NoOp | 0.004 | 0.005% |
Identity | 0.003 | 0.004% |
表3:列出了TensorFlowTM对MNIST数据集的量化操作的性能
节点类型 | 平均毫秒 | 平均% |
QuantizedConv2D | 637.514 | 74.337% |
QuantizedMatMul | 188.589 | 21.990% |
QuantizeV2 | 7.491 | 0.873% |
RequantizationRange | 5.128 | 0.598% |
Dequantized | 4.476 | 0.522% |
Add | 4.296 | 0.501% |
Requantize | 3.801 | 0.443% |
QuantizedMaxPool | 2.203 | 0.257% |
QuantizedRelu | 1.398 | 0.163% |
Min | 1.241 | 0.145% |
Max | 1.224 | 0.143% |
NoOp | 0.147 | 0.017% |
Const | 0.042 | 0.005% |
Reshape | 0.020 | 0.002% |
QuantizedReshape | 0.014 | 0.002% |
Arg | 0.007 | 0.001% |
Retval | 0.005 | 0.001% |
发明内容
提供本发明内容是为了介绍与用于量化神经网络的方法和装置相关的概念,这些概念在具体实施方式中进一步描述。本发明内容并不旨在确定所要求保护的主题的基本特征,也不旨在用于确定或限制所要求保护的主题的范围。
从上文论述可以推断,现有的定点量化方案没有解决与神经网络关联的问题,从而使这些模型太大,无法在用户设备上使用。
因此,与原始模型大小相比,需要减小存储大小,而不过多损害神经网络的精度和性能。因此,本发明公开了一种用于对神经网络进行动态点量化以在较低的存储要求下实现更高精度的方法、装置和系统。此外,与量化和重新量化关联的时间惩罚也被减少。
上述动态点量化神经网络的需要仅仅是为了提供对传统系统和技术的一些缺点的概述,并不打算是穷尽性的。在阅读以下描述后,传统系统和技术的其它缺点以及本文描述的各种非限制性实施例的对应益处会变得更加明显。
本发明的目的是提供深度学习模型的量化。
本发明的另一个目的是,与原始模型大小相比,减小存储大小,而不过多损害神经网络的精度和性能。
本发明的又一个目的是提供一种用于量化神经网络的方法。
本发明的又一个目的是提供一种用于量化神经网络的装置。
具体地,本发明涉及量化现有模型,以便与现有模型相比,降低该模型的存储要求,而不过多损害精度,同时还实现更好的性能。
根据本发明的第一方面,提供了一种用于量化神经网络的方法。该方法的输入是预训练神经网络的每个层的权重和偏差。作为预训练神经网络,这些输入至少在最初可以与真实世界数据(例如图像信息)相关和/或是真实世界数据的特征。该方法包括如下步骤:确定输入是正数还是负数,其中,所述输入是包括带符号位、至少一个指数位和至少一个尾数位的浮点数;确定所述输入的指数范围;确定所述输入的用于以量化形式表示所述输入的层参数的最大范围;确定所述输入的层的偏移量;通过将所述输入转换为对应的二进制形式来执行指数调整;并通过将所述偏移量与指数调整值相加来确定所述输入的指数表示。
根据第一方面,在所述方法的第一种可能的实现方式中,如果所述输入是正数,则所述带符号位为0;如果所述输入是负数,则所述带符号位为1。
根据第一方面,在所述方法的第二种可能的实现方式中,通过取以2为底的n–1指数,并从中减去1作为从零开始的范围,计算n位宽的指数范围。在指数部分中n减去1,以避免溢出,其中,n是赋予指数部分的位宽。
根据第一方面,在所述方法的第三种可能的实现方式中,所述最大范围由范围=数值≤2Level确定,其中,Level是表示所述层参数的整个范围所需的位数。
根据第一方面,在所述方法的第四种可能的实现方式中,所述偏移量是通过所述指数范围减去表示所述最大范围所需的所述level并加上所述尾数位的一半确定的。
根据第一方面,在所述方法的第五种可能的实现方式中,将所述输入转换为对应的二进制形式包括确定所述输入的位长是否为10位的步骤;其中,如果所述二进制形式的输入的位的位长大于10位,则丢弃低二进制位置的位,并且通过加上丢弃的位数来调整指数部分的值;其中,如果所述二进制形式的输入的所述位的位长小于10位,则将零附加到所述输入的所述二进制形式的末尾,并且通过减去添加的零的数量来调整所述输入的所述指数。
根据第一方面,在所述方法的第六种可能的实现方式中,还包括对任何两个量化输入进行乘法运算的步骤。
根据第一方面,在所述方法的第七种可能的实现方式中,还包括对任何两个量化输入进行加法运算的步骤。
根据本发明的第二方面,提供了一种用于量化神经网络的装置。所述装置包括符号确定模块、指数范围确定模块、最大范围确定模块、偏移量确定模块、指数调整模块和指数表示模块。所述符号确定模块用于确定输入是正数还是负数,其中,所述输入是包括带符号位、至少一个指数位和至少一个尾数位的浮点数。所述指数范围确定模块用于确定所述输入的指数范围。所述最大范围确定模块用于确定所述输入的层参数的最大范围。所述偏移量确定模块用于确定所述输入的层的偏移量。所述指数调整模块用于通过将所述输入转换为对应的二进制形式来执行指数调整。所述指数表示模块用于通过将所述偏移量与指数调整值相加来确定所述输入的指数表示。
根据第二方面,在所述装置的第一种可能的实现方式中,如果所述输入是正数,则所述带符号位为0;如果所述输入是负数,则所述带符号位为1。
根据第二方面,在所述装置的第二种可能的实现方式中,通过取以2为底的n–1指数,并从中减去1作为从零开始的范围,计算n位宽的指数范围。在指数部分中n减去1,以避免溢出,其中,n是赋予指数部分的位宽。
根据第二方面,在所述装置的第三种可能的实现方式中,所述最大范围由范围=数值≤2Level确定,其中,Level是表示所述层参数的整个范围所需的位数。
根据第二方面,在所述装置的第四种可能的实现方式中,所述偏移量是通过所述指数范围减去表示所述最大范围所需的所述level并加上所述尾数位的一半确定的。
根据第二方面,在所述装置的第五种可能的实现方式中,将所述输入转换为对应的二进制形式涉及确定所述输入的位长是否为10位;其中,如果所述二进制形式的输入的位的位长大于10位,则丢弃低二进制位置的位,并且通过加上丢弃的位数来调整指数部分的值;其中,如果所述二进制形式的输入的所述位的位长小于10位,则将零附加到所述输入的所述二进制形式的末尾,并且通过减去添加的零的数量来调整所述输入的所述指数。
根据第二方面,在所述装置的第六种可能的实现方式中,所述装置还用于对任何两个量化输入进行乘法运算。
根据第二方面,在所述装置的第七种可能的实现方式中,所述装置还用于对任何两个量化输入进行加法运算。
本发明的其它方面、优点和显著特征对于本领域技术人员而言根据以下详细描述变得显而易见,该详细描述结合附图公开了本发明的示例性实施例。
附图说明
该详细描述是参考附图进行描述的。在各附图中,附图标记的数字标识了该附图标记首次出现的附图。所有附图使用相同的数字来指代相同特征和组件。
图1示出了具有34个层的RESNET架构的示意图。
图2示出了Tensorflow量化和解量化操作的流程图的框图。
图3示出了Tensorflow量化模型对比原始模型的性能的图形表示。
图4示出了本发明的实施例提供的权重分析的处理流程的框图。
图5示出了本发明提供的浮点表示的处理流程的框图。
图6示出了本发明提供的如何分配内存占用空间的流程图。
图7示出了整数算术乘法速度对比浮点乘法速度的图形表示。
图8示出了本发明提供的浮点到尾数指数表示的映射的框图。
图9示出了本发明的实施例提供的量化神经网络的方法的流程图。
图10示出了本发明的另一个实施例提供的用于量化神经网络的装置的框图。
应理解,附图是为了说明本发明的概念,并且可以不是按比例绘制的。
具体实施方式
下文结合本发明的实施例中的附图,对本发明的实施例中的一些技术方案进行清楚的描述。本领域技术人员将理解,所描述的实施例仅仅是本发明的一部分实施例,而不是全部实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例都属于本发明的保护范围。
本发明可以以多种方式实现,例如过程、装置、系统、计算机可读介质(例如计算机可读存储介质),或计算机网络,其中,程序指令存储在(非瞬时性)存储器中或通过光学或电子通信链路进行发送。在本说明书中,这些实现方式或者本发明可以采取的任何其它形式可以称为技术。通常,所公开过程的步骤的顺序可以在本发明的范围内进行更改。
下文提供本发明的一个或多个实施例的详细描述以及示出本发明的原理的附图。虽然本发明是结合这些实施例进行描述的,但本发明不限于任何实施例。本发明的范围仅由权利要求书限制,并且本发明包括许多替代方案、修改和等同物。以下描述中阐述了许多具体细节,以便透彻地理解本发明。提供这些细节是为了举例的目的,并且本发明可以在没有部分或者所有这些具体细节的情况下根据权利要求书进行实践。为清楚起见,没有详细描述与本发明有关的技术领域中已知的技术资料,以免对本发明产生不必要的混淆。
以下详细描述中阐述了许多具体细节,以便透彻地理解本发明。但是,本领域的技术人员应理解,在没有这些特定细节的情况下,依然可以实践本发明。在其它情况下,没有详细描述公知的方法、过程、组件、模块、单元和/或电路,以免混淆本发明。
尽管本发明的实施例在这方面不受限制,但使用“处理”、“计算(computing/calculating)”、“确定”、“建立”、“分析”、“检查”等术语进行的讨论,可以指计算机、计算平台、计算系统或其它电子计算设备的一个或多个操作和/或过程,该一个或多个操作和/或过程将数据(该数据表示为计算机寄存器和/或存储器内的物理(例如,电子)量)操纵和/或转换成其它数据,该其它数据类似地表示为计算机寄存器和/或存储器或可以存储指令以执行操作和/或过程的其它信息非瞬时性存储介质内的物理量。
尽管本发明的实施例在这方面不受限制,但本文使用的术语“多个”可以包括“多个”或“两个或更多个”等。术语“多个”可以在整个说明书中用于描述两个或更多个组件、设备、元件、单元、参数等。除非明确说明,否则本文描述的方法实施例不限于特定的顺序或序列。此外,所描述的方法实施例或其元素中的一些可以在同一时间点同时发生或执行。
在本发明中,“量化”是指用比浮点位少的位数表示数量。
在本发明中,“深度学习模型”是指具有层深度的人工神经网络。
在本发明中,“神经网络”是指基于生物神经网络的结构和功能的计算模型。
在本发明中,“解量化”是指将量化数值转换为浮点表示。
在本发明中,“预训练模型”是指训练其权重以执行特定任务的人工神经网络。
在本发明中,“权重参数”是指人工神经网络中将一个神经元连接到另一个神经元的边的乘法因子。
在本发明中,“偏差参数”是指人工神经网络中神经元的加法因子。
在本发明中,“卷积层”是指对输入应用卷积操作的层。
在本发明中,“残差网络(RESNET)”是指一种深度学习模型。
在本发明中,“修改后的美国国家标准与技术研究院(Modified NationalInstitute of Standards and Technology,MNIST)”是指用于训练各种图像处理系统的手写数字的大数据集。
在本发明中,“修正线性单元(Rectified Linear Unit,ReLU)”是指类似于电气工程中的半波整流的激活函数。
在本发明中,“TensorFlowTM”是指开源机器学习框架。
在本发明中,“定点量化”是指将落在两个level之间的信号值分配给level总数固定的两个level中的一个level的量化方法。
在本发明中,“权重分析”是指查找层权重的范围和标准偏差。
公开了一种用于量化神经网络的方法和装置。虽然描述了各方面,这些方面关于量化深度学习模型,以便与传统模型相比,减小这些模型的存储要求,而不过多损害精度,并且还实现更好的性能,但本发明可以在任何数量的不同计算系统、环境和/或配置中实现,实施例在以下示例性系统、设备/节点/装置和方法的上下文中描述。
与神经网络模型关联的问题是,这些神经网络模型占用磁盘上的大量空间,预训练模型的大小十分巨大,从而导致将此类模型放置在用户设备上的问题,并且与这些模型关联的计算成本非常高,从而要求用户设备提供大量的性能和功率。这些模型需要32位浮点运算和乘法运算。因此,在功率和性能要求方面,与这些运算关联的成本很高。
此外,现有的定点量化方案没有解决与神经网络关联的问题,从而使这些模型太大,无法在用户设备上使用。因此,与原始模型大小相比,需要减小存储大小,而不过多损害神经网络的精度和性能。目前的解决方案涉及重复量化和解量化,这使神经模型比原始模型性能低,从而严重影响神经模型的性能。
因此,本发明公开了一种用于对神经网络进行动态点量化以在较低的存储要求下实现更高精度的方法和装置。本发明特别聚焦于量化深度学习模型,以便与传统模型相比,降低存储要求,而不过多损害精度,同时还实现更高的性能。
需要说明的是,本发明提供的方案聚焦于预训练模型,以量化权重。该方案的实施例通过下文简单描述的步骤实现。
1.权重分析:与传统的定点量化方法不同,根据每个层中的权重范围,采用可变位宽方法;量化权重表示为8位或16位方案,如图4所示。
2.浮点表示:与传统的定点量化方法不同,该方法检查范围并用量化域中唯一的数字表示落在特定范围内的数字,采用了一种替代的表示方法。值得注意的是,由于观察到预训练模型中的所有权重落在更小的范围内,权重以图5所示的方式表示。与五个卷积层相比,三个全连接层包含了大部分权重。最后一个1000路softmax层有助于将图像分类到1000类别中的一个。这完全消除了与当前解决方案关联的浮点乘法的要求。下文提供了等同物的表示。
Uint32=uint16*uint16
两个uint 16操作数的操作结果存储在uint 32中,以避免在操作中可能导致的任何溢出,然后结果将再次归一化为8位或16位格式。下文对具有不同用例和精度数据的技术方案进行详细说明。
如上所述,流行的卷积神经网络的预训练模型太大,无法安装在用户设备或边缘设备上,并且当前使用32位浮点数据结构存储,所述设备例如但不限于手机、平板电脑、树莓派板、可穿戴设备等。在本发明中,这些权重和偏差参数根据特定层的权重和偏差参数的分布被转换为较小的位表示,即8位或16位。对于权重和偏差的标准偏差较大的层,选择16位以表示量化权重,其它情况下选择8位以表示量化权重。这将使模型的内存占用空间至少减少50%。
图6示出了在本发明中,考虑层A、B、C等权重和偏差中的每一个,并且根据范围将选择动态位宽,即8位或16位。因此,根据相应层中的参数范围,每个层可以具有不同的位宽。在乘法运算的情况下,只有尾数部分被乘,整数也是如此,而不是浮点数被乘,与整数相比,浮点数是繁重的运算。
图7以图形方式示出实验结果,该实验结果说明数学运算的结果因16位或32位的数据大小以及整数或浮点数的数据类型而变化。对于整数算术运算,有8位和16位指令可用,与浮点运算相比,速度快得多,如图表所示。而且,从图中可以很容易地推断,相同数据大小的浮点数乘法速度比整数乘法的速度要慢得多。
在本发明中,添加指数部分,并对带符号位进行xor运算。由于尾数部分的大小相对较小,因此在这种情况下,乘法的成本较小。因此,提高了计算性能。与其它技术相比,这种表示的相对误差更小。此外,这种表示不需要解量化,因为所有权重都以相同的尺度量化,或者可以很容易地转换为更高的位表示。在加法运算的情况下,在尾数部分中使用右移或左移运算符使指数部分完全相同。之后,添加尾数部分以获得最终结果。因此,与现有的量化算法相比,加法运算没有太多开销。
本发明的动态点量化包括以下步骤,针对16位表示解释。
步骤1:对于层的每个权重值和预训练神经网络模型的所有层,根据待量化的权重值的符号,如果待量化的数值是正的,则第一个位将为0,如果待量化的权重值是负的,则第一个位将为1。
步骤2:指数范围确定:求层中参数分布的标准偏差。根据输出所需的精度,设置标准偏差的阈值,超过该阈值,层参数将量化为16位,低于该阈值,层参数将量化为8位。如果层参数属于16位表示,则指数位将为5,因此范围将为2^4–1=15(已考虑2^4,而不是2^5以避免溢出)。通过取以2为底的n–1指数并从中减去1作为从零开始的范围,计算n位宽的指数范围。在指数部分中n减去1,以避免溢出。公式在下文提供,其中,n是赋予指数部分的位宽。
指数范围=2n-1-1
步骤3:最大范围确定:要以量化形式表示数值,应找到层参数的范围。最小层参数值与最大参数值的模值之间的最大值是层的最大范围。最大范围用于计算表示层参数所需的位数。例如,如果最小参数值为–20,最大参数值为150。然后,20和150的最大值,即150是最大范围,则需要2^8=256level来表示数字150,因为2^7只能表示128level。公式在下文提供,其中,level是表示层参数的整个范围所需的位数。level是表示层参数的整个范围所需的位数,例如对于一个层。
范围=数值≤2Level
步骤4:偏移量确定:为模型的每个层定义偏移量值。偏移量值是从指数部分取出的值,以便层参数可以适合8位或16位表示。特定层的偏移量是通过减去具有表示层参数的最大范围所需的level的指数范围来计算的。为了将权重值保持在量化域范围的中心,将选定格式(8位或16位格式)的尾数位的一半添加到偏移量中。因此,对于上面的示例,偏移量将为15(指数范围)–8(level)+5(尾数位的一半)=12。公式在下文提供,其中,n是赋予指数部分的位宽,level是表示层参数的整个范围所需的位数。
偏移量=2(n-1)-1-Level+尾数位/2
步骤5:查找尾数部分和指数调整:现在,将层参数中的每个数值转换为二进制形式,并确保每个数值符合尾数的10位格式(如果值是16位宽)。如果层参数中的数值的二进制形式的位超过10,则忽略二进制形式数值的低二进制位置的位,并通过将忽略的位数相加来调整指数部分的值。如果层参数中数值的二进制形式的位小于10位,则最后附加零,并通过减去添加的零的数量来调整指数部分。例如,150可以表示为1001 0110,因此这将用10位表示为1001 0110 00,在最后额外添加两个位,以便可以表示完整的10位,指数部分变为2(-2)。因此,指数调整值为–2。
步骤6:查找指数部分:指数表示可以通过将偏移量和步骤5中的指数调整值相加来实现。公式在下文提供:
指数1=偏移量+来自步骤5的指数调整值
针对运算中的所有数值计算指数部分。在示例值为150的情况下,指数部分变为12+(–2)=10。
在使用本权利要求的量化方法的任何两个数值相乘的情况下,步骤1-6保持相同。这些步骤以浮点格式表示数值。在步骤6之后,执行以下步骤进行乘法。
步骤7:乘法表示:两个量化数值的尾数部分进行整数相乘,结果存储在32位累加器中,以避免任何溢出,然后将操作归一化为10位,例如150*150将根据上述尾数部分获得为1010 1111 1100 1000 000。因此,这将被归一化为1010 1111 11(十进制为703),并将产生指数的偏移量,因为我们将丢弃最后9位。因此,尾数指数调整值是尾数中丢弃的位数。公式在下文提供:
尾数指数调整值=丢弃的位数
步骤8:指数的最终表示:乘积的指数是将两个量化数值的指数和步骤7中丢弃的位数相加。公式在下文提供:
乘积的指数=指数1+指数2+步骤7中丢弃的位数
因此,在150*150相乘的情况下,乘积的指数变为(10)+(10)+9=29。
步骤9:偏移量计算:乘积的偏移量将是两个量化数值的偏移量相加。
乘积的偏移量=偏移量1+偏移量2
在150*150的情况下,乘积的偏移量变为12+12=24。
步骤10:验证乘积值:要验证乘积值是否正确,需要将数值转换回实数格式。这可以通过将尾数与以2为底的指数值减去偏移量的结果的幂相乘来完成。从符号位开始,在末尾添加符号。公式在下文提供:
实值=-1符号×尾数×2(指数-偏移量)
在150*150的情况下,实值变为22496。该值非常接近实际乘积值22500。量化乘法产生了0.017%的相对误差。
在使用本权利要求的量化方法的任何两个数值相加的情况下,步骤1-6保持相同。这些步骤以浮点格式表示数值。在步骤6之后,执行以下步骤进行加法。
步骤7:归一化:要将两个量化数值相加,指数部分(最终的指数部分)应相同。如上文所述,通过调整尾数部分,将较小的数值归一化为较大的数值的相同的偏移量和指数部分值。
步骤8:加法表示:将两个量化数值的尾数部分相加。结果存储在32位累加器中。然后,使用尾数指数调整值将32位值归一化为10位值。例如,150+150,尾数相加将产生10010110 00+1001 0110 00=1001 0110 000。归一化过程将丢弃最后一位。因此,尾数指数调整值变为1。
步骤9:指数确定:和的指数将是一个数值的指数和步骤8中丢弃的位数的和。
和的指数=指数1+步骤8中丢弃的位数
步骤10:偏移量确定:偏移量值与数值保持相同。
加法算法的验证可以用与乘法算法的验证相同的方式完成。使用乘法算法的步骤10中的公式验证加法结果。本发明的方案的量化误差优于TensorFlowTM使用的方法的量化误差。表4示出了两种方案中量化159.654时的量化误差。它表明误差的改善大于10倍。
表4:两种方案的实验的量化误差
对于该方案,表示最大数值210,精度为±0.5。大于此值的任何数值以及浮点数之间的距离大于0.5。可以使用此方案表示的最大数值是2171-1。
图10示出了本发明的用于量化神经网络的装置(100)的框图。该装置包括符号确定模块(101)、指数范围确定模块(102)、最大范围确定模块(103)、偏移量确定模块(104)、指数调整模块(105)和指数表示模块(106)。符号确定模块(101)用于确定输入是正数还是负数,其中,所述输入是包括带符号位、至少一个指数位和至少一个尾数位的浮点数。指数范围确定模块(102)用于确定所述输入的指数范围。最大范围确定模块(103)用于确定所述输入的层参数的最大范围。偏移量确定模块(104)用于确定所述输入的层的偏移量。指数调整模块(105)用于通过将所述输入转换为对应的二进制形式来执行指数调整。指数表示模块(106)用于通过将偏移量与指数调整值相加来确定所述输入的指数表示。所述装置还用于对任何两个量化输入进行乘法运算和/或加法运算。各模块之间的连接仅仅是说明性的,并且可以理解,模块根据哪个输出应该提供给哪个输入来实现相应的功能而互连。
与现有的定点量化技术相比,本发明的动态点量化技术确保了更高的精度,这从上文讨论的示例中可以明显看出,其中,一个数值经过量化并被解量化回原始数值。除了精度外,动态点量化技术确保运算的性能比定点量化技术快得多,因为它不涉及以另一种形式变换或表示数值,从而消除了与定点量化技术关联的所有问题,例如真零问题、不同层的相加、级联等。动态点量化技术不需要解量化,从而将性能提高了多倍。
下文提及本发明的一些非限制性优点:
·它降低了与传统神经网络关联的存储要求,而不过多损害精度。
·与现有模型相比,它提供了更好、更快的性能。
·它可以在用户设备上实现神经网络。
·与现有模型相比,它可以节省高达75%的磁盘空间。
·它使模型的内存占用空间至少减少50%。
本领域技术人员可以理解,任何已知的或新的算法都可以用于实现本发明。但是,需要说明的是,本发明提供了一种用于量化神经网络的方法和装置以实现上述益处和技术先进性,而不论使用任何已知的或新的算法。
本领域普通技术人员可以意识到,结合本说明书中所公开的实施例描述的各示例,单元及算法步骤能够以电子硬件,或者以计算机软件与电子硬件的组合来实现。功能是由硬件还是由软件执行取决于技术方案的特定应用和设计约束条件。本领域技术人员可以使用不同的方法实现每个特定应用的所描述的功能,但是不应认为该实现方式超出本发明的范围。
本领域技术人员可以清楚地理解,为了描述的方便和简洁,上述系统、装置和单元的具体工作过程可以参考上述方法实施例中对应的过程,本文不再赘述。
在本申请提供的几个实施例中,应理解,所公开的装置、方法或系统可以通过其它方式实现。例如,所描述的装置实施例仅仅是示例性的。例如,单元划分仅仅是逻辑功能划分,在实际实现方式中可以是其它划分。例如,可以将多个单元或组件组合或集成到另一系统中,或可以忽略或不执行一些特征。此外,所显示或讨论的相互耦合或直接耦合或通信连接可以通过一些接口实现。装置或单元之间的直接耦合或通信连接可以通过电子、机械或其它形式实现。
当这些功能通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以将这些功能存储在计算机可读存储介质中。基计算机软件产品存储在存储介质中并包括若干指令,用于指示计算机节点(可为个人计算机、服务器或网络节点)执行本发明的实施例中所描述的方法的所有或部分步骤。上述存储介质包括:可以存储程序代码的任何介质,例如USB闪存驱动器、可移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁盘或光盘。
相互通信的设备之间不需要保持连续通信,除非另有明确规定。此外,相互通信的设备可以直接通信或通过一个或多个媒介间接通信。
当本文描述单个设备或物品时,很明显可以使用一个以上的设备/物品(不论它们是否协作)来代替单个设备/物品。类似地,对于本文描述的一个以上的设备或物品的情况(不论它们是否协作),很明显可以使用单个设备/物品来代替一个以上的设备或物品,或者可以使用不同数量的设备/物品来代替所示数量的设备或程序。或者,设备的功能和/或特征可以由未明确描述为具有这种功能/特征的一个或多个其它设备实施。因此,本发明的其它实施例不需要包括设备本身。
最后,选择本说明书中使用的语言主要是出于可读性和指导性,而不是记述或限制发明主题。因此,本发明的范围不由该详细描述限制,而是由本申请基于此提出的任何权利要求限制。因此,本发明的实施例的公开内容旨在为说明性的,而不是为了限制本发明的范围,本发明的范围在权利要求中提出。
关于本文中基本上任何复数和/或单数术语的使用,本领域技术人员可以根据上下文和/或应用从复数转换为单数和/或从单数转换为复数。为清楚起见,本文可以明确阐述各种单数/复数置换。
虽然已经以特定于结构特征和/或方法的语言描述了用于量化神经网络的方法和装置的实现方式,以便与现有模型相比,降低存储要求,而不过多损害精度,并实现更好的性能,应当理解,所附权利要求不一定限于所描述的特定特征或方法。具体的特征和方法被公开为量化深度学习模型的实现方式示例。
Claims (18)
1.一种用于量化神经网络的方法,其特征在于,所述方法包括以下步骤:
装置(100)确定(S901)输入是正数还是负数,其中,所述输入是包括带符号位、至少一个指数位和至少一个尾数位的浮点数;
所述装置(100)确定(S902)所述输入的指数范围;
所述装置(100)确定(S903)所述输入的用于以量化形式表示所述输入的层参数的最大范围;
所述装置(100)确定(S904)所述输入的层的偏移量;
所述装置(100)通过将所述输入转换为对应的二进制形式,执行(S905)指数调整;
所述装置(100)通过将所述偏移量与指数调整值相加,确定(S906)所述输入的指数表示。
2.根据权利要求1所述的方法,其特征在于,如果所述输入是正数,则所述带符号位为0;如果所述输入是负数,则所述带符号位为1。
3.根据权利要求1或2所述的方法,其特征在于,指数范围由以下等式确定:
指数范围=2n-1-1
其中,n是位宽。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述最大范围由以下等式确定:
范围=数值≤2Level
其中,level是表示所述层参数的整个范围所需的位数。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述偏移量是通过所述指数范围减去表示所述最大范围所需的所述Level并加上所述尾数位的一半确定的。
6.根据权利要求1至5中任一项所述的方法,其特征在于,将所述输入转换为对应的二进制形式包括确定所述输入的位长是否为10位的步骤;其中,如果所述二进制形式的输入的位的位长大于10位,则丢弃低二进制位置的位,并且通过加上丢弃的位数来调整指数部分的值;如果所述二进制形式的输入的所述位的位长小于10位,则将零附加到所述输入的所述二进制形式的末尾,并且通过减去添加的零的数量来调整所述输入的所述指数。
7.根据权利要求1至6中任一项所述的方法,其特征在于,还包括对任何两个量化输入进行乘法运算的步骤。
8.根据权利要求1至7中任一项所述的方法,其特征在于,还包括对任何两个量化输入进行加法运算的步骤。
9.一种用于量化神经网络的装置(100),其特征在于,所述装置包括:
符号确定模块(101),用于确定输入是正数还是负数,其中,所述输入是包括带符号位、至少一个指数位和至少一个尾数位的浮点数;
指数范围确定模块(102),用于确定所述输入的指数范围;
最大范围确定模块(103),用于确定所述输入的层参数的最大范围;
偏移量确定模块(104),用于确定所述输入的层的偏移量;
指数调整模块(105),用于通过将所述输入转换为对应的二进制形式来执行指数调整;
指数表示模块(106),用于通过将所述偏移量与指数调整值相加来确定所述输入的指数表示。
10.根据权利要求9所述的装置,其特征在于,如果所述输入是正数,则所述带符号位为0;如果所述输入是负数,则所述带符号位为1。
11.根据权利要求9或10所述的装置,其特征在于,指数范围由以下等式确定:
指数范围=2n-1-1
其中,n是位宽。
12.根据权利要求9至11中任一项所述的装置,其特征在于,所述最大范围由以下等式确定:
范围=数值≤2Level
其中,level是表示所述层参数的整个范围所需的位数。
13.根据权利要求9至12中任一项所述的装置,其特征在于,所述偏移量是通过所述指数范围减去表示所述最大范围所需的所述level并加上所述尾数位的一半确定的。
14.根据权利要求9至13中任一项所述的装置,其特征在于,所述指数调整模块(105)用于确定所述输入的位长是否为10位;其中,如果所述二进制形式的输入的位的位长大于10位,则丢弃低二进制位置的位,并且通过加上丢弃的位数来调整指数部分的值;如果所述二进制形式的输入的所述位的位长小于10位,则将零附加到所述输入的所述二进制形式的末尾,并且通过减去添加的零的数量来调整所述输入的所述指数。
15.根据权利要求9至14中任一项所述的装置,其特征在于,还用于对任何两个量化输入进行乘法运算。
16.根据权利要求9至16中任一项所述的装置,其特征在于,还用于对任何两个量化输入进行加法运算。
17.一种神经网络模型,其特征在于,层的权重存储在通过根据权利要求1至8中任一项所述的方法获得的8位或16位浮点表示中。
18.一种用于量化神经网络的方法,其特征在于,所述神经网络包括图形文件和参数文件,所述方法采用根据权利要求1至8中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IN201931043851 | 2019-10-30 | ||
IN201931043851 | 2019-10-30 | ||
PCT/CN2020/124064 WO2021083154A1 (en) | 2019-10-30 | 2020-10-27 | Method and apparatus for quantization of neural networks post training |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114222997A true CN114222997A (zh) | 2022-03-22 |
Family
ID=75714865
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080048236.6A Pending CN114222997A (zh) | 2019-10-30 | 2020-10-27 | 用于对神经网络进行后训练量化的方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114222997A (zh) |
WO (1) | WO2021083154A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113780523B (zh) * | 2021-08-27 | 2024-03-29 | 深圳云天励飞技术股份有限公司 | 图像处理方法、装置、终端设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102564456B1 (ko) * | 2017-10-19 | 2023-08-07 | 삼성전자주식회사 | 뉴럴 네트워크의 파라미터를 양자화하는 장치 및 방법 |
KR20190068255A (ko) * | 2017-12-08 | 2019-06-18 | 삼성전자주식회사 | 고정 소수점 뉴럴 네트워크를 생성하는 방법 및 장치 |
CN109740737B (zh) * | 2018-12-30 | 2021-02-19 | 联想(北京)有限公司 | 卷积神经网络量化处理方法、装置及计算机设备 |
CN109901814A (zh) * | 2019-02-14 | 2019-06-18 | 上海交通大学 | 自定义浮点数及其计算方法和硬件结构 |
CN110009101B (zh) * | 2019-04-11 | 2020-09-25 | 北京字节跳动网络技术有限公司 | 用于生成量化神经网络的方法和装置 |
-
2020
- 2020-10-27 CN CN202080048236.6A patent/CN114222997A/zh active Pending
- 2020-10-27 WO PCT/CN2020/124064 patent/WO2021083154A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2021083154A1 (en) | 2021-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108510067B (zh) | 基于工程化实现的卷积神经网络量化方法 | |
Wan et al. | Tbn: Convolutional neural network with ternary inputs and binary weights | |
CN108337000B (zh) | 用于转换到较低精度数据格式的自动方法 | |
US20210089922A1 (en) | Joint pruning and quantization scheme for deep neural networks | |
EP3295385B1 (en) | Fixed point neural network based on floating point neural network quantization | |
CN109948149B (zh) | 一种文本分类方法及装置 | |
KR102608467B1 (ko) | 뉴럴 네트워크의 경량화 방법, 이를 이용한 인식 방법, 및 그 장치 | |
CA2957695A1 (en) | System and method for building artificial neural network architectures | |
CN110175641B (zh) | 图像识别方法、装置、设备和存储介质 | |
Imani et al. | Fach: Fpga-based acceleration of hyperdimensional computing by reducing computational complexity | |
CN110472695B (zh) | 一种工业生产过程的异常工况检测和分类方法 | |
CN109214502B (zh) | 神经网络权重离散化方法和系统 | |
CN110874625A (zh) | 一种深度神经网络量化方法及装置 | |
US20200302283A1 (en) | Mixed precision training of an artificial neural network | |
WO2020092581A2 (en) | Constraining function approximation hardware integrated with fixed-point to floating-point conversion | |
CN114222997A (zh) | 用于对神经网络进行后训练量化的方法和装置 | |
US11699077B2 (en) | Multi-layer neural network system and method | |
CN112418388A (zh) | 一种实现深度卷积神经网络处理的方法及装置 | |
CN114065913A (zh) | 模型量化方法、装置及终端设备 | |
CN115409159A (zh) | 对象操作方法、装置、计算机设备以及计算机存储介质 | |
CN114139678A (zh) | 卷积神经网络量化方法、装置、电子设备和存储介质 | |
US11657282B2 (en) | Efficient inferencing with fast pointwise convolution | |
Liu | Hardware-friendly model compression technique of DNN for edge computing | |
Zhen et al. | A Secure and Effective Energy-Aware Fixed-Point Quantization Scheme for Asynchronous Federated Learning. | |
CN116959489B (zh) | 语音模型的量化方法、装置、服务器及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |