CN113168563A - 用于神经网络的残差量化 - Google Patents
用于神经网络的残差量化 Download PDFInfo
- Publication number
- CN113168563A CN113168563A CN201980081880.0A CN201980081880A CN113168563A CN 113168563 A CN113168563 A CN 113168563A CN 201980081880 A CN201980081880 A CN 201980081880A CN 113168563 A CN113168563 A CN 113168563A
- Authority
- CN
- China
- Prior art keywords
- neural network
- quantized
- tensor
- floating point
- precision
- 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
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- 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/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computing Systems (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Neurology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
Abstract
一种用于在神经网络中提供量化精度的操作的仿真的方法和装置被公开。在一些示例中,量化精度的操作以块浮点格式被执行,在块浮点格式中张量的值共享共同指数。可以基于各种输入指标来使用用于选择较高精度或较低精度的技术。当转换为量化的张量时,产生残值张量。在一个实施例中,与从普通精度浮点数到量化的张量的转换相关联的误差值被用于确定在点积计算中是否使用残差张量。使用残差张量可以提高来自节点的输出的精度。对是否使用残差张量的选择取决于各种输入指标,包括误差值、层编号、指数值、层类型等。
Description
背景技术
机器学习(ML)和人工智能(AI)技术可以对解决许多复杂的计算问题(诸如识别图像和语音、分析和分类信息、以及执行各种分类任务)有用。机器学习是计算机科学的领域,该领域使用统计技术来给予计算机系统从一组训练数据提取更高级特征的能力。具体而言,可以通过训练诸如人工神经网络(NN)或深度神经网络(DNN)的模型来提取特征。在模型被训练之后,新数据可以被应用于模型,并且,使用经训练的模型,新数据可以被分类(例如,更高级别的特征可以被提取)。机器学习模型通常在通用处理器(也称为中央处理单元(CPU))上被执行。但是,训练模型和/或使用模型在计算上可能是昂贵的,并且因此使用通用处理器实时执行特征提取可能是不可能的。因此,有充足的机会改进实现神经网络的计算机硬件和软件。
发明内容
提供本发明内容以简化形式介绍一些概念,这些概念将在下面的详细描述中进一步描述。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
公开了与使用混合精度数据格式来训练神经网络加速器有关的技术。在所公开技术的一个示例中,神经网络加速器被配置为加速多层神经网络的给定层。给定层的输入张量可以从普通精度浮点格式被转换为量化精度(quantized precision)浮点格式。可以使用经转换的输入张量来执行张量操作。张量操作的结果可以从块浮点格式被转换为普通精度浮点格式。经转换的结果可以用于生成神经网络的层的输出张量,其中输出张量使用普通精度浮点格式。
在一个实施例中,公开了一种节点电路,该节点电路可以基于多种输入指标在节点或层的基础上来选择较高精度的模式或者较低精度的模式。当转换为量化的张量时,产生残值张量。与从普通精度浮点数转换为量化的张量相关联的误差值被用于确定是否在点积计算中使用残差张量。使用残差张量提高从节点输出的精度。对是否使用残差张量的选择取决于各种输入指标,包括误差值、层编号、指数值、层类型等。
通过以下参考附图进行的详细描述,本发明的前述和其他目的,特征和优势将变得更加明显。
附图说明
图1示出了如可以在所公开技术的某些示例中被实现的启用量化的(quantization-enabled)系统的框图。
图2示出了描绘如可以使用所公开的某些示例方法和装置而被建模的深度神经网络的图解。
图3示出了如可以在所公开的技术的某些示例中被执行的将普通浮点格式转换为量化的浮点格式的某些方面的图解。
图4描绘了可以被用于表示量化的神经网络模型的许多替代块浮点格式,如可以在所公开的技术的某些示例中所使用的。
图5描绘了可以被用于表示量化的神经网络模型的多个备选块浮点格式,如可以在所公开的技术的某些示例中所使用的。
图6是描绘训练神经网络以供与量化的模型一起使用的方法的流程图,如可以在所公开的技术的某些示例中所实现的。
图7是框图,描绘混合精度浮点环境以及普通精度浮点域与量化的浮点域之间的边界的框图,如可以在所公开的技术的某些示例中所实现的。
图8是描绘使用转换硬件从普通精度浮点张量到量化的张量和残差张量的转换的框图,其中量化的张量和残差张量中的一种或两者可以被用作节点输出函数的一部分。
图9示出了图8的转换硬件的更多细节。
图10示出了浮点张量被转换为量化的张量和残差张量的具体示例。
图11是包括用于选择性地组合图10的量化的张量和残差张量的控制硬件的硬件图。
图12示出了由图11的控制硬件使用的示例性输入指标。
图13是描绘使用量化的张量的选择性精度来操作神经网络加速器的方法的流程图。
图14示出用于实现所公开的技术的一些实施例的合适计算环境的框图。
具体实施方式
I.一般注意事项
本公开是在代表性实施例的上下文中阐述的,其不旨在以任何方式进行限制。
如在本申请中使用的,单数形式的“一”,“一个”和“该”包括复数形式,除非上下文另外明确指出。另外,术语“包括”是指“包含”。此外,术语“耦合”涵盖将项耦合或链接在一起的机械、电气、磁性、光学以及其他实用方式,并且不排除在耦合的项之间存在中间元件。此外,如本文所使用,术语“和/或”是指短语中的任何一项或项的组合。
本文描述的系统,方法和装置不应以任何方式解释为是限制性的。而是,本公开针对各种公开的实施例的所有新颖的和非显而易见的特征和方面,单独地以及以与彼此的各种组合和子组合。所公开的系统,方法和装置不限于任何特定方面或特征或者其组合,所公开的事物和方法也不要求存在任何一个或多个特定优势或者解决任何一个或多个特定问题。此外,可以以与彼此的各种组合和子组合来使用所公开的实施例的任何特征或方面。
尽管为了方便呈现而以特定的顺序的次序描述了所公开的方法中的一些方法的操作,但是应当理解,这种描述方式涵盖重安排,除非下面阐述的特定语言要求特定的顺序。例如,在某些情况下,顺序地描述的操作可以被重安排或者并发执行。而且,为了简单起见,附图可能未示出可以将所公开的事物和方法与其他事物和方法结合使用的各种方式。另外,该描述有时使用诸如“产生”、“生成”、“显示”、“接收”、“验证”、“执行”和“启动”的术语来描述所公开的方法。这些术语是对被执行的实际操作的高级别描述。与这些术语对应的实际操作将取决于特定的实现而变化,并且可以由本领域的普通技术人员容易地辨别。
为了更好理解的目的,并非旨在对范围进行限制,已经提供了本文参考本公开的装置或方法所呈现的操作理论、科学原理或者其他理论描述。所附权利要求中的装置和方法不限于以这种操作理论所描述的方式起作用的那些设备和方法。
所公开的方法中的任何方法可以被实现为计算机可读指令,该计算机可读指令被存储在一个或多个计算机可读介质(例如计算机可读介质,诸如一个或多个光学介质盘、易失性存储器组件(诸如DRAM或SRAM)、或者非易失性存储器组件(诸如硬盘驱动器))中并且在计算机(例如任何可商购的计算机,包括智能电话或者包扩计算硬件的其他移动设备)上被执行。可以将用于实现所公开的技术的任何计算机可执行指令中的任何计算机可执行指令、以及在所公开的实施例的实现期间所创建和使用的任何数据存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如专用软件应用或者经由网络浏览器或其他软件应用(诸如远程计算应用)而被访问或下载的软件应用的一部分。这样的软件可以例如在单个本地计算机上或者在使用一台或多台网络计算机的网络环境中被执行(例如,经由互联网、广域网、局域网、客户端-服务器网络(诸如云计算网络)或其他这样的网络)。
为了清楚起见,仅描述了基于软件的实现的某些经选择的方面。省略了本领域公知的其他细节。例如,应当理解,所公开的技术不限于任何特定的计算机语言或程序。例如,所公开的技术可以由用C、C++、Java或者任何其他合适的编程语言编写的软件来实现。同样,所公开的技术不限于任何特定的计算机或者硬件类型。合适的计算机和硬件的某些细节是众所周知的,并且不需要在本公开中详细阐述。
此外,基于软件的实施例中的任何实施例(例如,包括用于使计算机执行所公开的方法中的任何方法的计算机可执行指令)都可以通过合适的通信手段被上载、下载或者远程访问。这样的合适的通信方式包括,例如,互联网、万维网、内联网、软件应用、电缆(包括光缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信,或者其他这样的通信手段。
II.概述
人工神经网络(ANN或本文通篇所用的“NN”)被应用于人工智能和机器学习中的多个应用,包括图像识别、语音识别、搜索引擎和其他合适的应用。这些应用的处理可以在单独设备(例如个人计算机或手机)上进行,但其也可以在大型数据中心中被执行。同时,可以与NN一起使用的硬件加速器包括专用NN处理单元,诸如张量处理单元(TPU)和现场可编程门阵列(FPGA),这些专用NN处理单元被编程来加速神经网络处理。由于其灵活性质和每单位计算的低功耗,这样的硬件设备正在被部署在消费类设备以及数据中心中。
传统上,NN是使用单精度浮点(32位浮点或float32格式)而被训练和部署的。但是,已经表明,可以使用较低精度的浮点格式(诸如16位浮点(float16)或定点)来执行准确性损失最小的推理操作。在诸如FPGA的专用硬件上,降低了精度的格式可以大大改善DNN处理的时延和吞吐量。
以普通精度浮点格式表示的数字(例如,以16位浮点格式、32位浮点格式、64位浮点格式或者80位浮点格式表达的浮点数)可以被转换为量化精度格式数字,这可以允许执行操作中的性能优势。特别是,NN权重和激活值可以在引入可接受水平的误差的情况下以较低精度的量化的格式表示。较低精度的量化的格式的示例包括具有减少的位宽度的格式(包括通过减少用于表示数字的尾数或者指数的比特数目)和其中两个或更多个数字共享同一单个指数的块浮点格式。
FPGA设备上的计算的特性之一是其通常缺乏硬件浮点支持。可以有代价地使用灵活逻辑来执行浮点操作,但是经常在FPGA实现中支持浮点数所需要的逻辑的量是负担不起的。已经开发了支持浮点计算的一些较新的FPGA,但是即使在这些设备上,同一设备每单位时间仍然可以产生两倍于当其以整数模式被使用时的计算输出。通常,创建NN时考虑到浮点计算,但是当FPGA是针对NN处理时,如果可以使用整数运算来表达神经网络,那将是有益的。所公开技术的示例包括块浮点(BFP)的硬件实现,包括在NN、FPGA和其他硬件环境中使用BFP。
计算机系统中典型的浮点表示由三部分组成:记号(s)、指数(e)和尾数(m)。记号指示数字是正的还是负的。指数和尾数如科学计数法中使用:
值=s×m×2θ
在尾数的精度限制内,任何数字可以被表示。由于指数将尾数缩放2的幂,就像科学计数法中指数缩放10的幂一样,因此非常大数字的量级可以被表示。表示的精度由尾数的精度确定。典型的浮点表示使用宽度为10位(float16),24位(float32)或53位(float64)的尾数。具有大于253的量级的整数可以被近似为float64浮点格式,但是由于尾数位数不足,因此其将无法被精确表示。对于任意分数,也会出现类似的效果,其中分数由尾数的位表示,该尾数的位取2的负幂的值。存在许多分数不能被精确表示,因为它们在二进制系统中是不合理的。在两种情况下更精确的表示形式都是可能的,但是它们可能要求尾数包含更多的位。最终,需要无限数目的尾数位来精确表示一些数字(例如,)。10位(半精度浮点数),24位(单精度浮点数)和53位(双精度浮点数)尾数限制是通用计算机中尾数存储要求与表示精度的共同折衷。
利用块浮点格式,两个或更多个数字的组使用单个共享指数,每个数字仍然具有自己的记号和尾数。在一些示例中,共享指数被选择为原始浮点值的最大指数。为了本公开的目的,术语块浮点(BFP)表示一种数字系统,其中单个指数跨两个或多个值被共享,其中每个数字都由记号和尾数对表示(无论是否有明确的记号位,或者尾数本身是带记号的)。在一些示例中,矩阵或向量的一个或多个行或列的所有值,或者矩阵或向量的所有值,可以共享共同指数。在其他示例中,BFP表示可以是无记号的。在一些示例中,矩阵或向量BFP表示中的元素中的一些但不是所有元素可以包括被表示为整数、浮点数、定点数、符号的数字,或者被表示为混合了以记号、尾数和指数表示的数字的其他数据格式。在一些示例中,矩阵或向量BFP表示中的元素中的一些或所有元素可以包括具有两个或更多个部分的复杂元素,例如:具有虚部的复数(a+bi,其中)、包括分子和分母的分数、使用极坐标(r,θ)、或其他多分量元素。
BFP格式可以以在某些方面与普通浮点类似的方式用于权衡精度和存储要求。首先,一组数字可以共享相同的指数,而不是将指数与每个浮点数一起存储。为了共享指数同时维持高水平的准确性,这些数字应该接近相同的量级,因为量级的差异被表达在尾数中。如果量级的差异太大,则尾数对于大的值将上溢,或者对于较小的值可能是零(“下溢”)。取决于特定的应用,某个量的上溢和/或下溢是可接受的。
尾数的大小可以被调整以适应特定的应用。这可能影响所表示的数字的精度,但是从所减少的表示大小可以实现潜在的收益。例如,普通单精度浮点数的大小为四个字节,但是对于所公开技术的某些实现,仅两个字节用于表示每个值的记号和尾数。在一些实现中,每个值的记号和尾数可以以一个字节或更少字节表示。
在所公开技术的某些示例中,以上所表达的表示用于从表示中得出原始数字,但是针对一组数字仅有单个指数被存储,其中每个数字由带记号的尾数表示。每个带记号的尾数可以由两个字节或更少的字节表示,因此与四字节浮点相比,存储器存储装置节省了大约2倍。此外,加载和存储这些值的存储器带宽要求也近似是普通浮点的一半。
神经网络操作被用于许多人工智能操作中。经常,在实现神经网络时所执行的大量处理操作是在执行矩阵×矩阵或矩阵×向量的乘法或卷积操作。这样的操作是计算带宽和存储器带宽密集的,其中矩阵的大小可以是例如1000×1000个元素(例如1000×1000个数字,每个数字都包含记号、尾数和指数)或更大,并且使用了许多矩阵。如本文所讨论的,BFP技术可以被应用于这样的操作以减少给定系统中的计算需求以及存储器带宽,无论该系统是FPGA、CPU还是另一硬件平台。如本文所用,本文中术语“元素”的使用是指这样的矩阵或向量的成员。
如本文所使用的,术语“张量”是指可以用于表示NN的属性并且包括一维向量以及二维、三维、四维或更大维矩阵的多维数组。如本公开中所使用的,张量不要求任何其他数学属性,除非特别说明。
如本文所使用的,术语“普通精度浮点”是指具有尾数、指数和可选的记号并且由本机或虚拟CPU本机支持的浮点数格式。普通精度浮点格式的示例包括但不限于IEEE 754标准格式,诸如16位、32位、64位,或者由处理器支持的其他处理器,诸如Intel AVX、AVX2、IA32以及x86_64 80位浮点格式。
可以使用不同的精度(例如,混合精度)格式来表示给定的数字。例如,数字可以以较高精度的格式(例如,float32)和较低精度的格式(例如,float16)表示。降低数字的精度可以包括减少用于表示数字的尾数或指数的位数。另外,降低数字的精度可以包括减少可以用于表示数字的指数的值的范围,诸如当多个数字共享共同指数时。类似地,增加数字的精度可以包括增加用于表示数字的尾数或指数的位数。另外,增加数字的精度可以包括增加可用于表示该数字的指数的值的范围,诸如当一个数字从共享共同指数的一组数字被分开时。如本文所使用的,将数字从较高精度的格式转换为较低精度的格式可以被称为下投(down-cast)或量化该数字。将数字从较低精度的格式转换为较高精度的格式可以称为上投(up-cast)或去量化该数字。
如本文所使用,术语“量化精度浮点”是指如下浮点数格式:在该浮点数格式中,张量的两个或更多个值已已经被修改,以具有比当以普通精度浮点表示值时更低的精度。特别地,量化精度浮点表示的许多示例包括块浮点格式,其中张量的两个或多个值参考共同指数而被表示。可以通过选择针对张量的元素中的两个、更多个或所有元素的共同指数、并且移位个体元素的尾数以匹配共享的共同指数,来生成量化精度浮点数。在一些示例中,张量内的元素组可以在例如每行、每列、每瓦片或者其他基础上共享共同指数。
在所公开技术的一个示例中,神经网络加速器被配置为使用混合精度数据格式来加速多层神经网络的给定层。例如,混合精度数据格式可以包括普通精度浮点格式和量化精度浮点格式。针对给定层的输入张量可以从普通精度浮点格式被转换为量化精度浮点格式。可以使用经转换的输入张量来执行张量操作。张量操作的结果可以从块浮点格式被转换为普通精度浮点格式。经转换的结果可以用于生成神经网络的层的输出张量,其中输出张量使用普通精度浮点格式。以这种方式,与仅使用普通精度浮点格式的可比较的加速器相比,可以潜在地使神经网络加速器更小并且更有效率。更小并且更有效率的加速器可以具有提高的计算性能和/和提高的能效。另外,与仅使用量化精度浮点格式的加速器相比,神经网络加速器可能潜在地具有提高的准确性。通过提高加速器的精度,可以减少训练的收敛时间,并且在将神经网络的输入分类时,加速器可以更准确。
III.使用混合精度浮点训练神经网络的示例架构
图1是概述如所公开技术的某些示例中可以实现的示例启用量化的系统110的框图100。如图1所示,启用量化的系统110可以包括多个硬件资源,该多个硬件资源包括通用处理器120和专用处理器(诸如图形处理单元122和神经网络加速器180)。处理器耦合到可以包括易失性或非易失性存储器设备的存储器125和存储装置127。处理器120和122执行被存储在存储器或存储装置中的指令,以便提供神经网络模块130。神经网络模块130包括允许系统被编程为实现各种类型的神经网络的软件接口。例如,可以提供允许应用定义神经网络的软件功能,包括权重、偏置、激活函数、节点值以及神经网络各层之间的互连。另外,软件功能可以用于定义递归神经网络的状态元素。神经网络模块130还可以提供实用程序,以允许训练和再训练利用该模块所实现的神经网络。表示神经网络模块的值被存储在存储器或存储装置中,并且由指令对其进行操作,该指令由处理器中的一个处理器。可以使用普通精度浮点和/或量化的浮点值来表示被存储在存储器或存储装置中的值。
在一些示例中,专有或开放源代码库或框架被提供给程序员来实现神经网络创建、训练和评估。这样的库的示例包括TensorFlow、微软认知工具包(CNTK)、Caffe、Theano和Keras。在一些示例中,诸如集成开发环境的编程工具为程序员和用户提供了定义、编译和评估NN的支持。
神经网络加速器180可以被实现为定制或专用集成电路(例如,包括片上系统(SoC)集成电路)、现场可编程门阵列(FPGA)或其他可重配置逻辑、或者由物理通用处理器托管的软处理器虚拟机。神经网络加速器180可以包括张量处理单元182、可重配置逻辑设备184和/或一个或多个神经处理核心(诸如子图加速器186)。子图加速器186可以以硬件、软件或硬件和软件的组合来配置。作为一个示例,可以使用在张量处理单元182上可执行的指令来配置和/或执行子图加速器186。作为另一示例,可以通过将可重配置逻辑块184编程来配置子图加速器186。作为另一示例,可以使用神经网络加速器180的硬连线逻辑门来配置子图加速器186。
子图加速器186可以被编程为执行子图或神经网络的个体节点。例如,子图加速器186可以被编程为执行包括NN的层的子图。子图加速器186可以访问用于存储权重、偏置、输入值、输出值等的本地存储器。子图加速器186可以具有许多输入,其中每个输入可以由不同的权重值加权。例如,子图加速器186可以产生输入张量与子图加速器186的经编程输入权重的点积。在一些示例中,点积可以在其被用作对激活函数的输入之前,由偏置值调整。例如,子图加速器186的输出可以被存储在本地存储器中,在该本地存储器中输出值可以被访问并且被发送到不同的NN处理器核心和/或神经网络模块130或存储器125。
神经网络加速器180可以包括经由互连(未示出)与彼此连接的多个110的子图加速器186。互连可以在个体子图加速器186、存储器接口(未示出)和输入/输出(I/O)接口(未示出)之间运送数据和控制信号。取决于特定的期望配置,互连可以使用电、光学、磁性或其他合适的通信技术来传输和接收信号,并且可以提供根据多个不同拓扑而被布置的通信连接。例如,互连可以具有交叉开关、总线、点对点总线或者其他合适的拓扑。在一些示例中,多个子图加速器186中的任何一个子图加速器可以被连接至其他核心中的任何核心,而在其他示例中,一些核心仅被连接至其他核心的子集。例如,每个核心可以仅连接至最近的4、8或10个相邻核心。互连可以用于向和从子图加速器186传输输入/输出数据,以及向和从子图加速器186传输控制信号和其他信息信号。例如,子图加速器186中的每个子图加速器可以接收和传输指示当前由相应子图加速器186中的每个相应子图加速器正在执行的操作的执行状况的信号量。此外,矩阵和向量值可以经由互连在子图加速器186之间被共享。在一些示例中,互连被实现为连接子图加速器186和存储器系统的导线,而在其他示例中,核心互连可以包括用于在(多个)互连导线、开关和/或路由组件上多路复用数据信号的电路装置,包括活动信号驱动和中继器、或者其他合适的电路装置。在所公开技术的一些示例中,在神经网络加速器180之内、以及向/从神经网络加速器180所传输的信号不限于全摆幅电数字信号,而是神经网络加速器180可以被配置为包括差分信号、脉冲信号或者用于传输数据和控制信号的其他合适的信号。
在一些示例中,启用量化的系统110可以包括仿真神经网络加速器180的功能的可选量化仿真器。神经网络加速器180提供可以用于将以神经网络模块130中全精度浮点格式表示的数据转换为量化的格式值的功能性。神经网络加速器180还可以使用量化的格式值来执行操作。这样的功能性将在下面进一步详细讨论。
神经网络模块130可以被用于使用工具流来指定、训练和评估神经网络模型,该工具流包括硬件无关的建模框架131(也称为本机框架或机器学习执行引擎)、神经网络编译器132和神经网络运行时环境133。存储器包括用于包括建模框架131、神经网络编译器132和神经网络运行时环境133的工具流的计算机可执行指令。该工具流可以用于生成表示全部或部分的神经网络模型(诸如下面关于图2所讨论的神经网络模型)的神经网络数据200。应注意,虽然工具流被描述为具有三个单独的工具(131、132和133),但是在各种示例中,工具流可以具有更少或更多个工具。例如,不同工具(131、132和133)的功能可以被组合到单个建模和执行环境中。
神经网络数据200可以被存储在存储器125中。神经网络数据200可以以一种或多种格式表示。例如,与给定神经网络模型对应的神经网络数据200可以具有与工具流的每个相应工具相关联的不同格式。通常,神经网络数据200可以包括节点、边、分组、权重、偏置,激活函数和/或张量值的描述。作为特定示例,神经网络数据200可以包括用于表示神经网络模型的源代码、可执行代码、元数据、配置数据、数据结构和/或文件。
建模框架131可以用于定义和使用神经网络模型。作为一个示例,建模框架131可以包括预定义的API和/或编程原语,该预定义的API和/或编程原语可用于指定神经网络模型的一个或多个方面。预定义的API可以包括较低级别的API(例如,激活函数、成本或误差函数、节点、边和张量)和较高级别的API(例如,层、卷积神经网络、递归神经网络、线性分类器等)。“源代码”可以被用作建模框架131的输入,以定义给定神经网络模型的图的拓扑。特别地,可以在源代码内实例化和互连建模框架131的API,以指定复杂的神经网络模型。数据科学家可以通过使用不同的API、不同数目的API、以及以不同的方式互连API来创建不同的神经网络模型。
除了源代码以外,存储器125还可以存储训练数据。训练数据包括用于向神经网络模型200应用的一组输入数据、以及来自神经网络模型的针对输入数据的每个相应数据集的期望输出。建模框架131可以用于利用训练数据来训练神经网络模型。训练的输出是与神经网络模型的每个节点相关联的权重和偏置。在神经网络模型被训练之后,建模框架131可以用于将被应用于经训练的神经网络模型的新数据分类。具体地,经训练的神经网络模型使用从训练所获得的权重和偏置来对尚未被用于训练神经网络模型的数据执行分类和识别任务。与仅使用CPU 120相比,建模框架131可以使用CPU 120和专用处理器(例如,GPU122和/或神经网络加速器180)来以提高的性能来执行神经网络模型。在一些示例中,针对一些分类任务,性能可以潜在地达成实时性能。
编译器132分析被提供给神经网络模型的源代码和数据(例如,用于训练模型的示例),并且将该模型转换成可以在神经网络加速器180上被加速的格式,该格式将在下面进一步详细描述。具体地,编译器132将源代码转换成用于将神经网络模型和存储器表示为神经网络数据200的可执行代码、元数据、配置数据和/或数据结构。在一些示例中,编译器132可以将神经网络模型(例如神经网络200)划分成使用CPU 120和/或GPU 122的部分和可以在神经网络加速器180上被执行的其他部分(例如,神经网络子图)。编译器132可以生成可执行代码(例如,运行时模块),该可执行代码用于执行被分配给CPU 120的子图以及用于与被分配给加速器180的子图通信。编译器132可以生成用于加速器180的配置数据,该配置数据用于配置加速器资源以评估被分配给可选加速器180的子图。编译器132可以创建数据结构,该数据结构用于存储在执行和/或训练期间由神经网络模型生成的值以及用于CPU 120与加速器180之间的通信。编译器132可以生成元数据,该元数据可以用于在运行时期间标识子图、边分组、训练数据以及有关神经网络模型的各种其他信息。例如,元数据可以包括用于在神经网络模型的不同子图之间进行接口的信息。
运行时环境133提供可执行环境或解释器,该可执行环境或解释器可以用于在训练模式期间训练神经网络模型,并且可以用于在训练、推理或分类模式下评估神经网络模型。在推理模式期间,可以将输入数据应用于神经网络模型输入,并且可以根据神经网络模型的训练将输入数据分类。输入数据可以是存档数据或实时数据。
运行时环境133可以包括部署工具,该部署工具在部署模式期间可以用于向神经网络加速器180安装或部署全部或部分的神经网络。运行时环境133还可以包括管理不同的运行时模块的执行以及运行时模块与神经网络加速器180之间的通信的调度器。因此,运行时环境133可以用于控制在神经网络模块130和神经网络加速器180上被建模的节点之间的数据流。
在一个示例中,神经网络加速器180从神经网络模块130接收并返回普通精度值150。如图1所示,子图加速器186可以使用量化的浮点来执行其操作中的大量操作,并且子图加速器186与神经网络模块130之间的接口可以使用全精度值来在模块之间传送信息。普通精度值可以以16位、32位、64位或者其他合适的浮点格式表示。例如,表示神经网络的值的一部分可以被接收,包括边权重、激活值或者用于量化的其他合适的参数。普通精度值150被提供给普通精度浮点到量化的浮点转换器152,该转换器152将普通精度值转换成量化的值。量化的浮点操作154然后可以在量化的值上被执行。然后,可以使用量化的浮点到普通浮点转换器来将量化的值转换回到普通浮点格式,该量化的浮点到普通浮点转换器产生普通精度浮点值。作为特定示例,子图加速器186可以用于加速神经网络的给定层,并且向量-向量、矩阵-向量、矩阵-矩阵和卷积操作可以使用量化的浮点操作而被执行,以及较少计算密集的操作(例如,添加偏置值或计算激活函数)可以使用普通浮点操作而被执行。
由转换器152和转换器156执行的普通浮点与量化的浮点之间的转换通常在被表示为向量或多维矩阵的一组数字上被执行。在一些示例中,可以基于普通精度格式来执行普通包括可能在特定的神经网络实现中受期望的操作的附加普通精度操作158,该附加普通精度格式158包括向神经网络的一个或多个节点添加偏置,应用双曲正切函数或其他这样sigmoid函数,或对从量化的浮点格式被转换回的普通精度值的整流函数(例如,ReLU操作)。
在一些示例中,量化的值仅在神经网络加速器180的逻辑门和内部存储器中被使用和存储,并且存储器125和存储装置127仅存储普通浮点值。例如,神经网络加速器180可以量化从神经网络模型130所接收的用于神经网络模型的输入、权重和激活,并且可以在将值向神经网络模型130传递回之前,对在神经网络加速器180上执行的操作的结果进行去量化。可以使用存储器125、存储装置127、或者输入/输出接口(未示出)来在神经网络模型130与神经网络加速器180之间传递值。在其他示例中,仿真器提供了对量化的完全仿真,包括仅存储共享指数的一个副本,以及利用降低的尾数宽度操作。某些结果可能与其中使用普通浮点数执行底层操作的版本不同。例如,完全仿真版本可以检查有限的量化的位宽度(例如3位、4位或5位宽的尾数)的下溢或上溢条件。
DNN的大量计算成本是在向量-向量、矩阵-向量和矩阵-矩阵乘法和/或卷积中。这些操作的输入大小是二次的,而诸如偏置加法和激活函数等操作的输入大小则是线性的。因此,在一些示例中,量化仅被应用于在神经网络加速器180上所实现的矩阵-向量乘法操作。在这样的示例中,所有其他操作使用普通精度格式(诸如float16)而被完成。因此,从用户或程序员的角度,启用量化的系统110接受和输出来自/到神经网络模块130的普通精度float16值,并且输出float16格式值。可以向程序员或用户隐藏所有到块浮点格式的和从块浮点格式的转换。在一些示例中,程序员或用户可以指定用于量化操作的某些参数。在其他示例中,量化操作可以利用块浮点格式的优势来减少计算复杂性,如下面关于图3所讨论的。
神经网络加速器180用于加速神经网络图或子图的评估和/或训练,该评估和/或训练通常具有当仅通过使用CPU 120和/或GPU 122评估子图时通常无法实现的提高的速度和减少的时延。在所示的示例中,加速器包括张量处理单元(TPU)182、(例如,被包含在一个或多个FPGA或可编程电路结构中的)可重配置逻辑设备184、和/或子图加速器186,但是任何合适的硬件加速器都可以用于建模神经网络。加速器180可以包括提供软CPU的配置逻辑。软CPU监督加速器180上的经加速图或子图的操作,并且可以管理与神经网络模块130的通信。软CPU还可以用于配置逻辑以及控制来自加速器上RAM(例如FPGA内的块RAM中)的数据的加载和存储。
在一些示例中,神经网络加速器180的参数可以是可编程的。神经网络加速器180可以用于对全部或部分的神经网络模型200的训练、推理或分类进行原型设计(prototype)。例如,基于通过在神经网络内180内对网络进行原型设计所获得的准确性或性能结果,量化参数可以被选择。在所期望的一组量化参数被选择之后,量化的模型可以被编程到加速器180中用于执行进一步的操作。
编译器132和运行时133在神经网络模块130与神经网络加速器180之间提供快速接口。实际上,神经网络模型的用户可能意识不到模型的部分正在所提供的加速器上被加速。例如,通常通过将张量值写入包括标识符的数据结构来在模型中传播节点值。运行时133将子图标识符与加速器相关联,并且提供用于将向加速器翻译消息、在无需程序干预的情况下将权重、偏置和/或张量的值透明地写入神经网络加速器180的逻辑。类似地,由神经网络加速器180输出的值可以利用如下消息透明地被发送回给神经网络模块130:该消息包括在服务器处的接收节点的标识符、以及被发送回给总体神经网络模型的有效载荷,该有效载荷包括诸如权重、偏置和/或张量的值。
图2示出了深度神经网络(DNN)200的简化拓扑,DNN 200可以用于使用所公开的BFP实现来执行增强的图像处理。可以使用所公开的用于量化的和BFP矩阵/向量操作的技术来实现一个或多个处理层,包括在上述启用量化的系统110中使用多个神经网络子图加速器186中的一个或多个神经网络子图加速器。应当注意,本文所公开的神经网络实现的应用不限于DNN,而是还可以与其他类型的神经网络(诸如卷积神经网络(CNN))一起使用,包括具有长短期记忆(LSTM)或门控循环单元(GRU)、或者可以适用于使用本文公开的BFP方法和装置的其他合适人工神经网络的实现。
DNN 200可以以至少两种不同的模式操作。最初,DNN 200可以在训练模式下被训练,并且然后在推理模式下作为分类器被使用。在训练模式期间,一组训练数据可以被应用于DNN 200的输入,并且DNN 200的各种参数可以被调整,以便在训练完成时,DNN 200可以作为分类器被使用。训练包括执行训练输入数据的前向传播,计算损失(例如,确定DNN的输出与DNN的预期输出之间的差)以及执行通过DNN的反向传播以调整DNN 200的参数(例如,权重和偏置)。当DNN 200的架构适合于分类训练数据时,DNN 200的参数将收敛并且训练可以完成。在训练之后,DNN 200可以在推理模式下被使用。具体而言,训练或非训练数据可以被应用于DNN 200的输入,并且通过DNN 200被前向传播,使得输入数据可以由DNN 200分类。
如图2所示,节点的第一集合210(包括节点215和节点216)形成输入层。集合210的每个节点连接到由节点的第二集合220(包括节点225和节点226)形成的第一隐藏层中的每个节点。第二隐藏层由节点的第三集合230形成,包括节点235。输出层由节点的第四集合240(包括节点245)形成。在示例200中,给定层的节点完全互连到其(多个)相邻层的节点。换句话说,层可以包括与该层的其他节点具有共同输入和/或向该层的其他节点的共同目的地提供输出的节点。在其他示例中,层可以包括具有与该层的其他节点的共同输入的子集和/或向该层的其他节点的共同目的地的子集提供输出的节点。
在前向传播期间,通过向前驱节点所生成的每个输入应用权重、并且收集权重以产生输出值,每个节点中的每个节点产生输出。在一些示例中,每个个体节点可以使激活函数(σ)和/或偏置(b)被应用。通常,经适当编程的处理器或FPGA可以被配置为实现所描绘的神经网络200中的节点。在一些示例神经网络中,隐藏组合节点n的输出函数f(n)可以产生被数学地表达为如下的输出:
其中wi是向输入边xi应用(与输入边xi相乘)的权重,b是节点n的偏置值,σ是节点n的激活函数,E是节点n的输入边的数目。在一些示例中,激活函数产生0和1之间的连续值(表示为浮点数)。在一些示例中,取决于总和是高于还是低于阈值,激活函数产生二进制1或0值。
给定的神经网络可以包含数千个个体节点,并且因此以普通精度浮点来执行针对节点的计算中的所有计算可能是计算上昂贵的。计算上更昂贵的解决方案的实现可以包括比计算上较不昂贵的解决方案的实现大并且消耗更多能量的硬件。但是,使用量化的浮点或者以混合精度(使用普通精度浮点量化的浮点)来执行操作可以潜在地降低神经网络的计算复杂性。仅使用量化的浮点的简单实现可以显著降低计算复杂性,但是由于由量化引入的误差,该实现可能在训练期间收敛和/或正确分类输入数据有困难。但是,混合精度实现可以潜在地提高某些计算的精度,同时还提供与量化的浮点相关联的降低的复杂性的好处。
DNN 200的混合精度实现可以包括以普通精度浮点和量化的浮点执行操作的节点。作为具体示例,隐藏组合节点n的输出函数f(n)可以产生被数学地表达为如下的输出::
其中wi是向输入边xi应用(与输入边xi相乘)的权重,Q(wi)是权重的量化的浮点值,Q(xi)是源自输入边xi的输入的量化的浮点值,Q-1()是向量w和x的点积的量化的浮点值的去量化表示,b是节点n的偏置值,σ是节点n的激活函数,并且E是节点n的输入边的数目。通过使用量化的浮点值来执行点积,(与仅使用普通精度浮点值相比较)计算复杂性可以潜在地被降低,并且通过普通精度浮点值的输出函数的其他操作,(与仅使用量化的浮点值相比较)输出函数的准确性可以潜在地被提高。
可以通过调整输出函数f(n)的构成值来训练和重训练神经网络。例如,通过调整节点的权重wi或偏置值b,神经网络的行为可以通过网络输出张量值的对应变化而被调整。例如,可以在反向传播期间使用成本函数C(w,b)来找到适合网络的权重和偏置,其中成本函数可以被数学地描述为:
其中w和b表示所有权重和偏置,n是训练输入的数目,a是来自网络的针对训练输入x的输入向量的输出值向量。通过调整网络权重和偏置,可以使用各种搜索技术(例如,随机梯度下降)将成本函数C驱动到目标值(例如,到零(0))。当成本函数C被驱动到目标值时,神经网络被称为收敛。类似于输出函数f(n),可以使用混合精度计算机算法来实现成本函数。例如,可以使用量化的浮点值和操作来执行向量操作,并且可以使用普通精度浮点值来执行非向量操作。
这样的神经网络BFP实现的合适应用的示例包括但不限于:执行图像识别、执行语音识别、将图像分类、将语音翻译为文本和/或其他语言、面部或其他生物识别、自然语言处理、自动化语言翻译、搜索引擎中的查询处理、自动内容选择、分析电子邮件和其他电子文档、关系管理、生物医学信息学、标识候选生物分子、提供建议、或者其他分类和人工智能任务。
网络加速器(诸如图1中的网络加速器180)可以用于加速DNN200的计算。作为一个示例,DNN 200可以被分割成可以单独被加速的不同子图。作为特定示例,层210、220、230和240中的每个层可以是被加速的子图。可以使用量化的浮点来执行层的计算上昂贵的计算,并且可以使用普通精度浮点来执行该层的较不昂贵的计算。可以使用普通精度浮点将值从一个层向另一层传递。通过加速一层内所有节点的一组计算,计算中的一些计算可以被重用,并且与加速个体节点相比较,由该层执行的计算可以被减少。
在一些示例中,每个卷积层中的一组并行乘法累加(MAC)单元可以用于提速计算。同样,并行乘法器单元可以用于完全连接的和密集矩阵的乘法阶段。也可以使用一组并行的分类器。这样的并行化方法具有以增加的控制复杂性为代价更进一步提速计算。
受益于本公开的本领域普通技术人员将容易理解,神经网络实现的应用可以用于使用神经网络的不同方面,无论是单独使用还是彼此组合或子组合使用。例如,所公开的实现可以用于经由梯度下降和/或用于神经网络的反向传播操作来实现神经网络训练。此外,所公开的实现可以用于神经网络的评估。
图3是图解300,图解300图示如可以在所公开技术的某些示例中使用的将普通浮点格式转换为量化的块浮点格式的示例。例如,被表示为普通浮点数(例如,以32位或16位浮点格式)的神经网络的输入张量可以被转换为所图示的块浮点格式。
如图所示,多个普通浮点格式数字310被表示为使得示例数字315或数字316中的每个数字都包括记号、指数和尾数。例如,对于IEEE 754半精度浮点格式,记号用1个位表示,指数用5个位表示,尾数用10个位表示。当神经网络模型200中的浮点格式数字310被转换为量化精度的块浮点格式数字的集合时,存在一个指数值,该指数值由所示集合的所有数字共享。因此,如图所示,块浮点数320的集合由单个指数值330表示,而集合的数字中的每个数字包括记号和尾数。但是,由于所图示的集合的数字以浮点格式具有不同的指数值,因此每个数字的相应尾数可以被移位,使得以量化的格式相同或近似的数字被表示(例如,经移位的尾数345和346)。
进一步地,如图3所示,使用块浮点格式可以减少某些常见操作所要求的计算资源。在图示的示例中,以正式浮点格式(350)和块浮点格式(360)图示了两个浮点向量的点积。对于以普通精度浮点格式操作350所表示的数字,要求浮点加法来执行点积操作。在浮点向量的点积中是以浮点来执行求和的,这可能要求移位以将值与不同的指数对齐。另一方面,对于块浮点点积操作360,可以使用整数运算来计算积,以组合如图所示的尾数元素。换句话说,由于在块浮点表示中指数部分可以被因式分解,因此可以完全利用定点或整数表示来完成尾数的乘法和加法。作为结果,数字集合的大的动态范围可以利用共享指数而被维持,同时通过使用更多的整数运算而不是浮点运算来降低计算成本。在一些示例中,由量化仿真器140执行的操作可以被优化以利用块浮点格式的优势。
在一些示例中,共享指数330被选择为神经网络模型200中原始普通精度数字之中最大的指数。在其他示例中,共享指数可以以不同的方式被选择,例如,通过选择是普通浮点指数的均值或中位数的指数,或者通过选择当其尾数被转换为量化的数字格式时最大化尾数中所存储的值的动态范围的指数。应注意,如果共享指数和该值的原始浮点指数不相同,则一些量化的尾数可能会丢失。这因为尾数被移位以与新的共享指数对应而发生。
对于块浮点张量中的哪些值将共享一个指数,有几种可能的选择。最简单的选择是让整个矩阵或向量共享指数。但是,在更精细的粒度之上共享指数可以减少错误,因为它使用更接近其原始普通浮点格式指数的共享指数来增加BFP数字的似然性。因此,可以减少由于丢弃尾数位的精度损失(当移动尾数与共享指数对应时)。
例如,考虑将行向量乘以矩阵。如果针对W的每一列一个指数被共享,则每个点积xWj(其中Wj是W的第j列)仅涉及针对x的一个共享指数和针对Wj的一个共享指数。
图4和图5示出了可以用于神经网络的计算的备选块浮点格式。在神经网的上下文中,一种核心操作是执行点积。例如,点积是矩阵乘法和卷积的核心计算。矩阵乘法涉及矩阵的行/列与输入向量的点积。卷积涉及滤波器与输入窗口的点积。在量化的浮点的上下文中,被选择以共享指数的一组值可以对用于计算点积的计算机运算逻辑的复杂性具有影响。共享指数的值可以称为边界框内的值。边界框的形状潜在的会影响量化误差和计算成本。虽然将类似量级的值聚类以创建边界框可以减少量化误差,但是跟踪任意边界框形状的缩放因子可能很昂贵。取而代之的是,矩阵和滤波器可以被分割成对于由神经网络执行的操作潜在地更有效率的边界框。具体地,边界框的适当选择可以减少用于实现神经网络操作的计算机运算电路的复杂性。图4示出了可以很适合用于矩阵的块浮点格式,以及图5示出了可以很适合用于卷积滤波器的块浮点格式。
图4示出了可以在所公开技术的某些示例中使用的四个备选块浮点格式的图解400。如图所示,第一格式410表示共享单个指数425的值的整个数组420。换句话说,值的整个数组420被封装在单个边界框内。
在第二格式430中,共同指数在每列的基础上被共享。换句话说,矩阵的列是值的边界框。因此,在该特定示例中,被存储在矩阵的偶数列431中的块浮点值每个都共享第一单个指数432。被存储在奇数列435中的块浮点值每个都共享第二单个指数437。在其他示例中,数组的每个列都可以与不同的共享指数相关联。对于使用备选格式的十一列的瓦片,可以有十一个对应的共享指数,每列一个共享指数。在其他示例中,数组的每个行可以与不同的共享指数相关联,或者奇数和偶数行可以与共享的共同指数相关联。
第三格式450被示出,其中数组中的元素的分组共享共同指数。例如,如果根据第三格式450的15×15矩阵的值共享指数,则第一组5×5元素分组455和456共享单个共享指数458。类似地,数组中元素的第二5×5元素分组460和461可以共享第二单个指数468。在其他示例中,瓦片中的每个瓦片可以与其自己相应的共享指数相关联。在示例格式450中,对于15×15矩阵,可以存在九个共享指数。
第四格式470被示出,其中两个共享指数在瓦片加每列的基础上被共享。因此,包括数字480、481和485的第一组数字都共享单个共同指数488。类似地,包括集合490和491的第二组数字每个都共享第二不同的单一指数495。在备选的示例中,所示的分组中的每个分组可以具有其自己的共享指数。
在一些示例中,可以通过减少尾数宽度来进一步降低矩阵向量乘法的计算成本。具有共享的共同指数的大范围的值可以仅利用尾数的几位被表达。例如,在具有4位尾数和5位指数的表示中,值可以表示在范围[2-140.012,2151.1112]或大致[2-17,216]内被表达。相反,一个4位的定点数只能表示范围[00012,11112],或大致[20,24]的值。
图5是图示如可以在所公开技术的某些示例中使用的三种备选的块浮点格式的图解500。这些格式可以对二维卷积有用,但是这些格式也可以被泛化到更高维的卷积。如图所示,第一格式510表示共享单个指数514的值的整个卷积滤波器512。值的不同卷积滤波器516可以共享单个指数518。因此,格式510图示了整个卷积滤波器可以是值的边界框。
在第二格式520中,每个空间像素可以是边界框,使得共同指数在每空间像素的基础上沿着通道维度被共享。如图所示,空间像素值522共享单个指数524,并且空间像素值526共享单个指数528。例如,针对具有维度[x,y,ci]的输入,每个空间维度x和y可以定义具有ci个值的边界框。类似地,针对维度[fx,fy,ci]的co个卷积滤波器,该co个卷积滤波器中的每个滤波器的像素(fx,fy)可以是具有ci个值的单独的边界框。该方法的边界框大小为ci。
在第三格式530中,每个空间像素可以沿着通道维度被子划分,使得边界框包括空间像素的子划分。如图所示,被子划分的空间像素值532共享单个指数534,被子划分的空间像素值536共享单个指数538。对于小的ci,处理缩放因子的成本可能是显著的。例如,在深度卷积神经网的第一层处的输入图像可能具有与3个颜色通道对应的ci=3。跟踪每个三元组的缩放因子可能是昂贵的。在这种情况下,可以将卷积重新整形成矩阵-矩阵乘法,以增加边界框并且减少跟踪边界框的花销。例如,每个卷积滤波器可以被展平以创建具有co个列和fx,*fy,ci个行的矩阵W。输入矩阵X可以被创建,其中每行是与卷积滤波器扫过的输入窗口对应的fx,*fy,ci向量。结果Y=XW是矩阵,该矩阵可以被整形以匹配卷积操作的输出。在卷积被重新公式化为矩阵乘法的情况下,以上参考图4讨论的针对矩阵乘法的边界框策略可以被应用。
图6是描绘如可以在所公开技术的某些示例中实现的使用量化的模型训练神经网络的方法600的流程图。例如,训练神经网络可以包括遍历一组训练数据,其中方法600用于在训练数据的给定迭代期间更新神经网络的参数。作为一个示例,方法600可以由启用量化的系统(诸如图1的启用量化的系统110)执行。
在过程框610处,神经网络的参数(诸如权重和偏置)可以被初始化。作为一个示例,权重和偏置可以被初始化为随机的普通精度浮点值。作为另一示例,权重和偏置可以被初始化为从较早的训练集合中所计算的普通精度浮点值。初始参数可以被存储在启用量化的系统的存储器或存储装置中。在一个示例中,参数可以被存储为量化的浮点值,这可以减少用于存储初始参数的存储量。
在过程框620处,神经网络的输入值可以通过神经网络被前向传播。神经网络的给定层的输入值可以是神经网络的另一层的输出。可以使用普通精度浮点在各层之间将值从一层的输出传递到下一层的输入。层i的输出函数可以包含数学地被描述为如下的项:
yi=Q-1(f(Q(yi-l),Q(Wi)))
其中yi-1是来自向层i提供输入的层的输出,Wi是层i的权重张量,f()是该层的前向函数,Q()是量化函数,并且Q-1()是去量化函数。层的输出函数可以是f()的去量化的表示,或者输出函数可以包含附加项,诸如激活函数或偏置的加法,这些附加项是使用普通精度浮点(在去量化之后)或者使用量化的浮点(在去量化之前)而被执行的。通常,层的输入、输出和参数是张量。通常,层的输入、输出和参数将是向量或矩阵。量化函数将普通精度浮点值转换为量化的浮点值。量化函数可以被选择以考虑输入数据的类型和由层i执行的操作的类型。例如,当yi和Wi是二维矩阵,并且输出函数包括采取yi-1和Wi的叉积的项时,针对yi-I的量化函数可以使用包含yi-I的行或者行的部分的边界框,并且针对Wi的量化函数可以使用包含Wi的列或者列的部分的边界框。当选择边界框以遵循操作符的流时,计算可以更有效率,从而使硬件实现更小、更快、更节能。去量化函数将量化的浮点值转换为普通精度浮点值。
其中是来自层i之后的层的输出误差项,Wi是层i的权重张量,g()是该层的反向函数,Q()是量化函数,并且Q-1()是去量化函数。反向函数g()可以是针对相对于yi-I的梯度的f()或者梯度函数的部分的反向函数。层的输出误差项可以是g()的去量化的表示,或者输出误差项可以包括使用普通精度浮点(在去量化之后)或使用量化浮点(在去量化之前)而被执行的附加项。
其中是层i的权重误差项,是层i的输出误差项,yi是层i的输出,h()是该层的反向函数,Q()是量化函数,并且Q-1()是去量化函数。反向函数h()可以是针对相对于Wi-1的梯度的f()的或者权重误差等式的部分的反向函数。层的权重误差项可以是h()的去量化的表示,或者权重误差项可以包括使用普通精度浮点(去量化之后)或者使用量化浮点(去量化之前)而被执行的附加项。权重误差项可以包括使用普通精度浮点数而被执行的其他项。
在过程框650处,每个层的参数可以被更新。例如,可以通过基于训练的迭代计算新的权重来更新每个层的权重。作为一个示例,权重更新函数可以数学地被描述为:
图7是描绘了混合精度浮点环境以及普通精度浮点域与量化的浮点域之间的分割的示例的框图700。如上所述,诸如向量-向量、向量-矩阵、矩阵-矩阵和卷积操作的计算上更昂贵的操作可以由量化的层710在量化的浮点域中执行。诸如标量相加和标量相乘的计算上较不昂贵的操作可以在量化的层710之外在普通精度浮点域中被执行。关于神经网络,神经网络可以被分割为层(诸如层710)。层内的大部分计算工作可以在量化的浮点域中被执行,并且该层的计算上的较不昂贵的操作(诸如添加偏置值或计算激活函数)可以在普通精度浮点域操作中被执行。在普通精度浮点域中,层之间进行接口的值可以从从一层被传递到另一层。通过量化特定于给定层的输入,量化可以针对该层的操作,使得该层的操作更有效率。具体地,量化的浮点格式的边界框可以被选择,以降低计算机运算电路的复杂性,以使计算机逻辑潜在地更快和/或更节能。
作为一个示例,给定层的输出值yi、输出误差项权重Wi和权重误差项可以被存储在普通精度浮点域中。在前向传播流720期间,来自较早层的输出值可以通过量化器722从普通精度浮点域被传送到量化的浮点域,该量化器722从普通精度浮点到量化的浮点来转换。来自给定层的输出值可以通过去量化器724从量化的浮点域被传送到普通精度浮点域,该去量化器从量化的浮点到普通精度浮点来转换。给定层的权重可以通过量化器742从普通精度浮点域被传送到量化的浮点域。
在反向传播流730期间,来自较后层的输出误差项可以通过量化器732从普通精度浮点域被传送到量化的浮点域。来自给定层输出误差项可以通过去量化器734从量化的浮点域被传送到普通精度浮点域。给定层的权重可以通过量化器742从普通的浮点域被传送到量化的浮点域。来自给定层的权重误差项可以通过去量化器754从量化的浮点域被传送到普通精度浮点域。
IV.利用量化的和残差张量选择较高或较低精度的示例架构
图8示出了普通精度浮点到量化的浮点转换器152(来自图1)的进一步细节。转换器152包括转换硬件810,该转换硬件810接收普通精度浮点张量816并且将该张量转换为量化的张量820和残差张量830。通常,浮点张量可以包括多个向量,该多个向量具有不同指数但是具有共同长度的尾数。转换硬件810执行移位操作,以便使多个向量具有共同指数。转换硬件810可以进一步包括分解硬件,该分解硬件将较高精度的浮点张量划分成较低精度的量化的张量820和残差张量830。转换硬件810还可以生成与转换相关联的量化的误差值840。例如,由于位数的减少,从浮点张量816到量化的张量820的转换会导致某个量的损失。由于位减少而损失的信息越多,量化的误差值越高。例如,如果损失的位全为零,则量化的误差值低。但是,如果损失的位包括大且变化范围的数字,则量化的误差可能高。
图9更详细地示出了转换硬件810。转换硬件810包括移位硬件910,该移位硬件910可以包括右移位操作,该右移位操作可以基于指数的当前值将输入浮点向量816单独移位任何期望数目的位置。例如,移位硬件910可以比较输入指数并且确定哪个输入指数最大。然后,移位可以基于最大指数和正在被评估的当前指数之间的差异发生。示例性移位可以是任意数目的位的位置(1、2、3等),使得移位硬件910的输出包括具有共同指数的浮点向量912。具有共同指数的浮点数912然后可以被输入到分解硬件920中,该分解硬件920将浮点数划分成量化的向量820和残差向量830。通常,量化的向量820和残差向量830具有相等长度的尾数,但是指数不同。更具体地,残差向量830中的所有残差向量具有共同指数,并且量化的向量820中的所有量化的向量具有共同指数。然而,量化的向量820的共同指数可以与残差向量830的共同指数不同。通过具有相等长度的尾数,量化的向量820和残差向量830可以使用节点内的相同硬件来对向量执行点积或其他数学函数。误差计算硬件930基于残差向量830中所包含的信息量来计算量化的误差值840。通常,更宽范围的位的值导致更大的量化的误差。更具体地,由硬件930执行的误差函数如下:e=x-q(x),其中x是输入向量,并且q(x)是x的量化的版本。
图10提供了示出具有不同指数的浮点向量816的示例。通常,浮点数具有32位,但是为简单起见图示较少数目的位。最高的指数,26,被确定作为共同指数使用,使得移位硬件910可以被用于将尾数向右移位。在备选实施例中,最低指数可以与执行左移位操作的硬件一起被使用。如图所示,中间输出912包括由移位硬件910取决于每个向量的指数而使用以下公式移位了一些位位置的浮点数:移位=(最大指数)-(当前指数)。例如,最大指数在1040处被示出并且值为6。指数3显示为向量1050的一部分。每个向量独立于其他向量而被移位。1050处的向量根据以下公式而被移位:最大指数的绝对值(例如6)-当前指数(例如3)。经移位的向量的分解包括将经移位的浮点数912的比特分成相等长度的量化的部分820和残差部分830。如在1010和1020处所示,量化的部分820和残差部分830之间的指数可以不同。然而,量化的部分820内的所有向量具有共同指数1020,并且残差部分830中的所有向量具有共同指数1010。
图11是根据一个实施例的硬件图,用于当在节点中执行数学操作时选择性地确定较高的精度或较低的精度。量化的张量820和残差张量830被输入到多路复用器1110中。取决于选择信号1112的状态,一次仅将张量820、830中的一个张量传递给数学函数1120。可以使用公式来执行数学函数1120,诸如以下所示的公式:
数学函数可以包括量化的张量和权重1122之间的点积。尽管未示出,但是权重1122也可以是量化的权重并且具有被应用于数学函数的残差分量。该技术还可以被应用于向量-矩阵和矩阵-矩阵的乘法。f(n)的结果被示出为量化的张量结果1130。
取决于控制硬件1132,在确定了针对量化的张量820的f(n)之后,可以针对残差张量830使用相同的硬件1120来重复该过程。结果在1140处示出,其是针对残差张量的函数f(n)。残差张量结果1140以虚线示出以指示其不需要被包括。如果期望低精度,则仅量化的张量结果1130被使用。然而,针对较高的精度,残差张量结果1140也可以被包括。针对较低精度,仅量化的张量结果1130在组合器1150中被用作操作数。作为结果,输出1160是以上公式中描述的f(n)。然而,如果残差张量结果1140也被使用,则组合器1150的输出由以下公式表示,该输出是结果1130、结果1140的组合:
在任一情况下,输出1160都是节点的输出。当输出仅是量化的张量结果1130时,输出是较低精度的,并且当输出包括量化的张量和残差张量两者时,结果1160是较高精度的。因此,控制硬件1132可以被视为在高精度操作模式与低精度操作模式之间的切换。
控制硬件1132基于输入指标1162来确定是处于低精度模式还是处于高精度模式,这将在下面参照图12进一步描述。如果期望较低的精度,则数学函数1120仅被执行一次。然而,如果期望较高的精度,则控制硬件1132使用选择信号1112将量化的张量820和残差张量830循序地传递通过数学函数。另外,控制硬件1132可以使用控制信号1170来选择在组合器1150中使用哪些操作数。以这种方式,相同的硬件1120可以用于量化的张量820和残差张量830两者。使用相同的硬件1120的一个优势是神经网络可以包括较低精度的硬件,对产生较高精度的结果,该较低精度的硬件更快、更小。另外,大部分时间低精度模式被使用,因此,电路总体上更快。量化的张量820和残差张量830两者都被调整大小以与较低精度的硬件1120匹配。但是,因为处理量化的张量820首先被处理,然后残差张量830被处理,所以可以使用低精度硬件选择性地达成高精度结果。更具体地,较高的精度的位长度是较低的精度的两倍。在备选实施例中,并行硬件可以用于对量化的张量820和残差张量830分别执行数学函数1120。
还应当认识到,尽管仅描述了单个残差张量,但是可以添加附加的残差张量。在这种情况下,组合器1150的输出可以如下:
并且相同的数学函数硬件1120可以用于每个误差项。
图12更详细地示出了控制硬件1132和输入指标1162。使用哪个输入指标1162取决于特定的实现。输入指标1162由控制硬件1132用来做出是否使用残差张量结果1140来获得较高精度的决定。在1210处,用户输入可以被提供,其中用户可以控制哪些节点应该接收较高的精度。例如,用户可以使用应用编程接口(API)来通信,其中用户可以指示何时以及何处期望较高的精度。为了简单起见,网络服务请求通常被描述为API请求,但是应当理解,可以做出其他网络服务请求。API请求是到已定义的请求-响应消息系统的程序接口,通常以JSON或XML表达,该系统经由Web而被暴露-最常见的是通过基于HTTP的Web服务器而被暴露。因此,在某些实现中,API可以被定义为一组超文本传输协议(HTTP)请求消息,以及响应消息的结构定义,这些定义可以使用可扩展标记语言(XML)或JavaScript对象表示法(JSON)格式。API可以指定执行动作的一组函数或例程,包括完成特定任务或允许与软件组件交互。当网络服务从客户端设备或从主机计算机接收API请求时,网络服务可以生成对该请求的响应,并且向请求中所标识的端点发送该响应。可以做出对图1的NN加速器180的API。用户可以控制个体节点,诸如节点225、节点226,或者用户可以控制节点的分组,诸如在层级别(例如,层220)处。
在1220处,可以使用量化的误差值。例如,返回到图9,可以使用误差计算硬件930的输出840。如果量化的误差值840超过阈值(在1250处输入),则较高的精度自动地被使用。因此,如果量化的误差值840太高,则其指示量化的向量820太不精确。因此,可以将残差向量830添加到组合器1150(图11)中的结果以获得更准确的结果。在1230处,可以使用层编号。例如,参见神经网络200(图2),层编号可以与输入层(诸如层210)、输出层(诸如层240)或与中间层相关联的编号(例如层220或层230)相关联。更进一步,在1240处,可以使用指数值1240。例如,返回到图10,1040处所示的指数值“6”被用作与量化的向量820相关联的指数值。可以知道,指数的不同值具有较低的精度。因此,可以设置阈值,并且如果指数超过阈值,则控制硬件可以切换到较高精度的操作模式。在一些实现中,诸如反向传播,可以动态地改变阈值。最后,可以使用层类型1260。例如,用户可以录入执行较高精度的层的类型,诸如输入层、输出层、卷积层或完全被连接的层。备选地,可以将层类型预先编程到神经网络中。这些输入指标的任何组合都可以用于生成选择信号1112和控制信号1170。
图13是根据一个实施例的用于在较高精度和较低精度的操作模式之间切换的流程图1300。在处理框1310中,在被量化之前,输入向量从浮点数被转换为共同指数和尾数值。例如,在图10中,浮点向量816可以通过移位操作被转换为912处所示的共同指数和尾数。这样的移位可以通过移位硬件910(图9)来发生。转换硬件810可以用于将浮点张量816转换为具有共同指数和尾数的量化的张量820,如图10所示,1020是用于与量化向量820相关联的尾数的共同指数。在过程框1320中,与浮点数相关联的尾数值可以被分解为量化的值和残差。例如,在图9中,分解硬件920可以诸如通过划分浮点数来生成量化的向量820和残差向量830。另外,在图10中,低位的3位用作残差向量830,高位的3位用作量化的向量820。因此,通过将浮点尾数划分成不同的部分来使用浮点数尾数的一部分作为量化的向量以及另一部分用于残差向量,是一种分解尾数值的技术。在一个特定示例中,尾数可以被划分成两半以产生量化的向量820及残差向量830。可以使用其他技术。在处理框1330中,使用量化的向量和权重来执行点积以获得第一输出。尽管本文描述了向量上的点积,但是应当理解,该技术可以用于向量-矩阵或矩阵-矩阵乘法。在决策框1340中,是否需要较高精度的决策被做出。可以由控制硬件1132(图12)基于输入指标1162做出这样的决策。如果不需要较高的精度,则在1350处,来自处理框1330的第一输出被用作节点输出,该第一输出是较低精度的输出,如1352处所示。另一方面,如果需要高精度的输出,则在处理框1360处,使用残差和权重执行点积以获得第二输出。例如,控制硬件1132可以控制多路复用器1110的选择信号1112以允许残差张量830通过(可以使用上述函数执行点积的)数学函数1120。在处理框1370中,第一输出和第二输出可以被组合以获得较高精度的输出1372作为节点的输出。例如,组合器1150可以用于组合结果1130和1140,诸如通过串联、加法等。
V.示例计算环境
图14示出了合适的计算环境1400的一般示例,在其中可以实现所描述的实施例、技术(technique)、以及技术(technology),包括支持多语言回放框架。
由于可以在各种通用或专用计算环境中实现该技术,因此计算环境1400并不旨在建议对该技术的使用或功能性的范围进行任何限制。例如,可以利用其他计算机系统配置来实现所公开的技术,包括手持式设备、多处理器系统、可编程消费电子产品、网络PC、小型计算机、大型计算机等。还可以在分布式计算环境中实践所公开的技术,在分布式计算环境中,任务由通过通信网络而被链接的远程处理设备执行。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备两者中。
参考图14,计算环境1400包括至少一个处理单元1410和存储器1420。在图14中,最基本的配置1430被包括在虚线内。处理单元1410执行计算机可执行指令,并且可以是真实或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力,并且因此多个处理器可以同时运行。存储器1420可以是易失性存储器(例如,寄存器、高速缓存、RAM),非易失性存储器(例如,ROM、EEPROM、闪存等),或两者的某种组合。存储器1420存储可以实现例如本文描述的技术的软件1480、图像和视频。计算环境可以具有附加的特征。例如,计算环境1400包括存储装置1440、一个或多个输入设备1450、一个或多个输出设备1460以及一个或多个通信连接1470。诸如总线、控制器或网络的互连机制(未示出)互连计算环境1400的组件。通常,操作系统软件(未示出)提供用于在计算环境1400中执行的其他软件的操作环境,并且协调计算环境1400的组件的活动。
存储装置1440可以是可移除的或不可移除的,并且包括磁盘、磁带或盒式磁带、CD-ROM、CD-RW,DVD、或者任何其他可以用于存储信息并且可以在计算环境1400内被访问的介质。存储装置1440存储可以用于实现本文所述的技术的用于软件1480的指令、插件数据和消息。
(多个)输入设备1450可以是触摸输入设备,诸如键盘、小键盘、鼠标、触摸屏显示器、笔或轨迹球、语音输入设备、扫描设备、或者向计算环境1400提供输入的另一设备。对于音频,(多个)输入设备1450可以是接受模拟或数字形式的音频输入的声卡或类似设备,或者可以是向计算环境1400提供音频样本的CD-ROM阅读器。(多个)输出设备1460可以是显示器、打印机、扬声器、CD刻录机、或者提供来自计算环境1400的输出的另一设备。
(多个)通信连接1470使得通过通信介质(例如,连接网络)与另一计算实体通信成为可能。通信介质在经调制的数据信号中传达信息,诸如计算机可执行指令、压缩图形信息、视频或其他数据。(多个)通信连接1470不限于有线连接(例如,兆位或千兆位以太网、无限带宽,通过电或光纤连接的光纤通道),而是还包括无线技术(例如,经由蓝牙、WiFi(IEEE802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外的RF连接)和其他合适的通信连接,以为所公开的代理、网桥和代理数据消费者提供网络连接。在虚拟主机环境中,(多个)通信连接可以是由虚拟主机提供的虚拟化的网络连接。
可以使用在计算云1490中实现全部或部分所公开技术的计算机可执行指令来执行所公开方法的一些实施例。例如,所公开的方法可以在位于计算环境1430中的处理单元1410上被执行,或者所公开的方法可以在位于计算云1490中的服务器上被执行。
计算机可读介质是可以在计算环境1400内被访问的任何可用介质。作为示例而非限制,在计算环境1400的情况下,计算机可读介质包括存储器1420和/或存储装置1440。应当容易地理解,术语计算机可读存储介质包括用于数据存储的介质,诸如存储器1420和存储设备1440,而不包括传输介质,诸如经调制的数据信号。
考虑到可以应用所公开的主题的原理的许多可能的实施例,应当认识到,所示出的实施例仅是优选示例,并且不应被视为将权利要求的范围限制于那些优选示例。确切地说,所要求保护的主题的范围由所附权利要求限定。因此,我们要求保护落入这些权利要求范围内的所有内容作为我们的发明。
Claims (15)
1.一种方法,包括:
在执行在硬件上的神经网络中:
将输入向量从浮点数转换为共同指数和尾数值;
将所述尾数值分解为量化的值和残差值;
针对每个量化的值和残差值:
使用所述量化的值和权重来执行点积,以提供第一输出;
取决于所需要的期望精度水平,选择性地选择是否对所述残差值执行点积;
如果较低的精度水平被需要,则使用所述第一输出作为节点输出;
如果较高的精度水平被需要,则使用所述残差值和权重来执行点积,以获得第二输出;
将所述第一输出与所述第二输出组合,以生成所述节点输出。
2.根据权利要求1所述的方法,其中所述选择性地选择基于量化的误差值,所述量化的误差值从将所述输入向量中的每个输入向量从其相应的浮点数转换为所述共同指数和所述尾数值而被计算。
3.根据权利要求2所述的方法,还包括:基于所述量化的误差值是否超过阈值,对所述残差值执行所述点积。
4.根据权利要求3所述的方法,其中所述阈值基于所述共同指数的值而改变。
5.根据前述权利要求1-4中的任一项所述的方法,其中所述神经网络包括节点的多个层,所述方法在每个节点上被执行,并且所述选择性地选择是基于所述节点驻留在所述多个层中的哪个层。
6.根据前述权利要求1-5中的任一项所述的方法,其中所述神经网络包括节点的多个层,并且所述选择性地选择基于层类型。
7.根据前述权利要求1-6中的任一项所述的方法,其中所述第一输出使用被设计为执行向量乘法的硬件而被计算,并且所述第二输出使用相同的所述硬件在所述第一输出之后顺序地被生成,以便使用较低精度的硬件来生成较高精度的节点输出。
8.根据前述权利要求1-7中的任一项所述的方法,其中所述选择性地选择由用户通过所述神经网络的应用编程接口(API)来控制。
9.根据前述权利要求1-8中的任一项所述的方法,其中所述选择性地选择基于所述共同指数的绝对值。
10.一种神经网络,包括:
被设计为对第一大小的张量执行点积的硬件,所述第一大小的张量是第二大小的普通精度浮点数的一部分;
用于转换所述普通精度浮点数以便将所述普通精度浮点数减少为所述第一大小的量化的张量和所述第一大小的残差张量的硬件;以及
用于基于期望精度水平来选择性地确定是仅对所述量化的张量、还是对所述量化的张量和所述残差张量执行所述点积的硬件。
11.根据权利要求10所述的神经网络,其中用于转换的所述硬件生成与所述转换相关联的量化的误差值,其中用于选择性地确定的所述硬件将所述量化的误差值与阈值进行比较以确定是否对所述残差张量执行所述点积。
12.根据权利要求11所述的神经网络,其中所述量化的误差值基于与所述量化的张量相关联的指数的值而改变。
13.根据前述权利要求10-12中的任一项所述的神经网络,其中所述神经网络包括多个层,其中每个层包括多个节点,每个节点包括被设计为执行所述点积的所述硬件。
14.根据权利要求13所述的神经网络,其中用于选择性地确定的所述硬件使用与所述多个层相关联的层类型来确定是否对所述残差张量执行所述点积。
15.根据前述权利要求10-14中的任一项所述的神经网络,还包括用于将所述量化的张量和所述残差张量相加以产生节点输出的硬件。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/221,187 | 2018-12-14 | ||
US16/221,187 US11586883B2 (en) | 2018-12-14 | 2018-12-14 | Residual quantization for neural networks |
PCT/US2019/064092 WO2020123185A1 (en) | 2018-12-14 | 2019-12-03 | Residual quantization for neural networks |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113168563A true CN113168563A (zh) | 2021-07-23 |
Family
ID=68966101
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980081880.0A Pending CN113168563A (zh) | 2018-12-14 | 2019-12-03 | 用于神经网络的残差量化 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11586883B2 (zh) |
EP (1) | EP3895075B1 (zh) |
CN (1) | CN113168563A (zh) |
WO (1) | WO2020123185A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114118384A (zh) * | 2021-12-09 | 2022-03-01 | 安谋科技(中国)有限公司 | 神经网络模型的量化方法、可读介质和电子设备 |
CN114118384B (zh) * | 2021-12-09 | 2024-06-04 | 安谋科技(中国)有限公司 | 神经网络模型的量化方法、可读介质和电子设备 |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6832329B2 (ja) * | 2018-12-18 | 2021-02-24 | 富士通株式会社 | データ構造 |
US11676003B2 (en) * | 2018-12-18 | 2023-06-13 | Microsoft Technology Licensing, Llc | Training neural network accelerators using mixed precision data formats |
GB2580171B (en) * | 2018-12-21 | 2021-02-17 | Imagination Tech Ltd | Methods and systems for selecting quantisation parameters for deep neural networks using back-propagation |
US11321606B2 (en) * | 2019-01-15 | 2022-05-03 | BigStream Solutions, Inc. | Systems, apparatus, methods, and architectures for a neural network workflow to generate a hardware accelerator |
US11507823B2 (en) * | 2019-01-22 | 2022-11-22 | Black Sesame Technologies Inc. | Adaptive quantization and mixed precision in a network |
CN112306555A (zh) * | 2019-07-30 | 2021-02-02 | 北京百度网讯科技有限公司 | 并行提取多个卷积窗中的图像数据的方法、装置、设备以及计算机可读存储介质 |
US11823054B2 (en) * | 2020-02-20 | 2023-11-21 | International Business Machines Corporation | Learned step size quantization |
US20200218508A1 (en) * | 2020-03-13 | 2020-07-09 | Intel Corporation | Floating-point decomposition circuitry with dynamic precision |
US11687336B2 (en) * | 2020-05-08 | 2023-06-27 | Black Sesame Technologies Inc. | Extensible multi-precision data pipeline for computing non-linear and arithmetic functions in artificial neural networks |
CN111738419B (zh) * | 2020-06-19 | 2024-01-12 | 北京百度网讯科技有限公司 | 神经网络模型的量化方法和装置 |
US20220067525A1 (en) * | 2020-08-25 | 2022-03-03 | Nvidia Corporation | Techniques for pruning neural networks |
CN112070213A (zh) * | 2020-08-28 | 2020-12-11 | Oppo广东移动通信有限公司 | 神经网络模型的优化方法、装置、设备及存储介质 |
US20220067530A1 (en) * | 2020-08-28 | 2022-03-03 | Nvidia Corporation | Fine-grained per-vector scaling for neural network quantization |
US20220222575A1 (en) * | 2021-01-14 | 2022-07-14 | Microsoft Technology Licensing, Llc | Computing dot products at hardware accelerator |
EP4177791A1 (en) * | 2021-11-09 | 2023-05-10 | Datakalab | Neural network quantization |
US11734075B2 (en) * | 2021-11-24 | 2023-08-22 | International Business Machines Corporation | Reducing data format conversion of an accelerator |
CN114676830A (zh) * | 2021-12-31 | 2022-06-28 | 杭州雄迈集成电路技术股份有限公司 | 一种基于神经网络编译器的仿真实现方法 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6144977A (en) | 1995-07-10 | 2000-11-07 | Motorola, Inc. | Circuit and method of converting a floating point number to a programmable fixed point number |
US7196647B2 (en) * | 2004-01-16 | 2007-03-27 | Cirrus Logic, Inc. | Signal processing with look-ahead modulator noise quantization minimization |
GB2483902B (en) * | 2010-09-24 | 2018-10-24 | Advanced Risc Mach Ltd | Vector floating point argument reduction |
US20140289445A1 (en) | 2013-03-22 | 2014-09-25 | Antony Savich | Hardware accelerator system and method |
US10373050B2 (en) | 2015-05-08 | 2019-08-06 | Qualcomm Incorporated | Fixed point neural network based on floating point neural network quantization |
US10216703B2 (en) * | 2016-02-08 | 2019-02-26 | Spero Devices, Inc. | Analog co-processor |
US10528321B2 (en) * | 2016-12-07 | 2020-01-07 | Microsoft Technology Licensing, Llc | Block floating point for neural network implementations |
US11556772B2 (en) | 2017-04-28 | 2023-01-17 | Intel Corporation | Incremental precision networks using residual inference and fine-grain quantization |
US10860924B2 (en) * | 2017-08-18 | 2020-12-08 | Microsoft Technology Licensing, Llc | Hardware node having a mixed-signal matrix vector unit |
US10167800B1 (en) | 2017-08-18 | 2019-01-01 | Microsoft Technology Licensing, Llc | Hardware node having a matrix vector unit with block-floating point processing |
US10678508B2 (en) * | 2018-03-23 | 2020-06-09 | Amazon Technologies, Inc. | Accelerated quantized multiply-and-add operations |
US10795678B2 (en) * | 2018-04-21 | 2020-10-06 | Microsoft Technology Licensing, Llc | Matrix vector multiplier with a vector register file comprising a multi-port memory |
US11151445B2 (en) * | 2018-04-21 | 2021-10-19 | Microsoft Technology Licensing, Llc | Neural network processor with a window expander circuit |
US20200143243A1 (en) * | 2018-11-01 | 2020-05-07 | Cognizant Technology Solutions U.S. Corporation | Multiobjective Coevolution of Deep Neural Network Architectures |
US11562201B2 (en) * | 2019-02-25 | 2023-01-24 | Microsoft Technology Licensing, Llc | Neural network layer processing with normalization and transformation of data |
-
2018
- 2018-12-14 US US16/221,187 patent/US11586883B2/en active Active
-
2019
- 2019-12-03 WO PCT/US2019/064092 patent/WO2020123185A1/en unknown
- 2019-12-03 CN CN201980081880.0A patent/CN113168563A/zh active Pending
- 2019-12-03 EP EP19824166.3A patent/EP3895075B1/en active Active
-
2023
- 2023-02-16 US US18/110,794 patent/US20230196085A1/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114118384A (zh) * | 2021-12-09 | 2022-03-01 | 安谋科技(中国)有限公司 | 神经网络模型的量化方法、可读介质和电子设备 |
CN114118384B (zh) * | 2021-12-09 | 2024-06-04 | 安谋科技(中国)有限公司 | 神经网络模型的量化方法、可读介质和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
EP3895075A1 (en) | 2021-10-20 |
US11586883B2 (en) | 2023-02-21 |
US20200193273A1 (en) | 2020-06-18 |
US20230196085A1 (en) | 2023-06-22 |
EP3895075B1 (en) | 2024-01-24 |
WO2020123185A1 (en) | 2020-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3955173B1 (en) | Training neural network accelerators using mixed precision data formats | |
CN113168563A (zh) | 用于神经网络的残差量化 | |
US11645493B2 (en) | Flow for quantized neural networks | |
EP3906616B1 (en) | Neural network activation compression with outlier block floating-point | |
US20190340499A1 (en) | Quantization for dnn accelerators | |
US20200210840A1 (en) | Adjusting precision and topology parameters for neural network training based on a performance metric | |
US20200210838A1 (en) | Neural network activation compression with narrow block floating-point | |
US20200264876A1 (en) | Adjusting activation compression for neural network training | |
WO2020131464A1 (en) | Scaled learning for training dnn | |
US11562247B2 (en) | Neural network activation compression with non-uniform mantissas | |
US20230037227A1 (en) | Dual exponent bounding box floating-point processor |
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 |