一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

人工神经网络的混合精度训练的制作方法

2021-11-10 03:05:00 来源:中国专利 TAG:

人工神经网络的混合精度训练


背景技术:

1.人工神经网络(“ann”或“nn”)被应用于人工智能(“ai”)和机器学习(“ml”)中的许多应用,包括图像识别、语音识别、搜索引擎和其他合适的应用。ann通常在多个“时期”(epoch)中进行训练。在每个时期中,ann在多个步骤中对训练数据集中的所有训练数据进行训练。在每个步骤中,ann首先对训练数据的一个实例(在本文中也可以被称为“样本”(sample))进行预测。该步骤通常被称为“前向传递”(forward pass)(在本文中也可以被称为“前向训练传递”(forward training pass)),但是步骤也可以包括后向传递。
2.为了进行预测,将训练数据样本馈送到ann的第一层,该层通常被称为“输入层”(input layer)。然后,ann的每一层都会(通常使用经学习的参数或“权重”(weights))在其输入上计算一个函数,来为下一层生成输入。通常被称为“输出层”(output layer)的最后一层的输出是类别预测,通常被实现为向量,其指示样本是多个类(class)的成员的概率。基于由ann所预测的标签和每个训练数据实例的实际标签,输出层计算“损失”(loss)或误差函数。
3.在ann的“后向传递”(backward pass)(在本文中也可以被称为“后向训练传递”(backward training pass))中,ann的每一层计算针对前一层的误差以及梯度,或者更新将ann的预测朝向所期望的输出移动的层的权重。训练ann的结果是一组权重或“内核”(kernel),其表示可以被应用于输入的变换函数,结果是分类或语义标记的输出。
4.在训练ann之后,可以使用经训练的ann对新数据进行分类。具体来说,经训练的ann模型可以使用训练期间计算出的权重和偏差来对被用来训练ann的数据以外的数据执行任务(例如分类和识别)。通用中央处理单元(“cpu”)、专用处理器(例如图形处理单元(“gpu”)、张量处理单元(“tpu”)和现场可编程门阵列(“fpga”))以及其他类型的硬件可以被用来执行ann模型。
5.ann通常使用常规精度浮点格式(normal

precision floating

point format)(例如16位、32位、64位和80位浮点格式)用于内部计算。训练ann可能是一项计算密集型且存储密集型的任务,需要数十亿次操作和千兆字节的存储。但是,可以通过在训练和/或推断期间使用量化精度浮点格式来改进ann的性能、能源使用和存储要求。量化精度浮点格式的示例包括具有减少位宽度(包括通过减少被用来表示数字的尾数和/或指数的位数)以及使用小(例如3、4或5位)尾数和由两个或多个数字共享的指数的块浮点(“bfp”)格式。然而,量化精度浮点格式的使用会对ann产生某些负面影响,例如但不限于准确度的损失。
6.正是针对这些和其他技术挑战呈现了本文做出的公开。


技术实现要素:

7.本文公开了用于混合精度训练的技术。通过所公开技术的实现,可以通过在ann的不同部分(例如,不同层或其他神经元集合)中和/或在不同训练步骤期间改变精度来改进训练所需的时间和/或ann的准确度。变化的精度允许敏感部分和/或步骤利用更高精度的权重、激活等,而不太敏感的部分和/或步骤可以使用较低的精度值而被令人满意地处理。
8.混合精度训练的使用带来了许多技术优势。例如,通过保持或提高网络训练的关键部分和/或步骤的精度,可以获得更高的精度。同时,较低精度值的使用减少了训练ann所需的存储资源和计算资源。
9.通过需要更少的位来存储在ann训练期间使用的权重、激活和其他值来减少存储要求。通过减少执行组成操作(constituent operations)所需的时间量,可以部分地减少计算资源。例如,当诸如sigmoid函数之类的激活函数的输入具有较低的精度时——即当参数用较少的位来描述时,函数可以在更短的时间内被计算出来。对计算资源的需求的减少也可能部分地是由于给定操作需要处理的位较少而引起的,例如当操作数的位数较少时,乘法操作花费的时间较少。
10.另外或可替代地,通过使用更少的位来完成给定的计算,计算资源可用于以其他方式提高性能,诸如增加并行化的水平。当使用定制电路(诸如asic、fpga等)时,计算资源的减少可能特别明显。在这些配置中,被用来执行给定操作的处理单元(例如fpga逻辑块)的数量较少,在逻辑块之间转发位所需的连接数量也较少。
11.逻辑块和连接数量的减少可能与用来表示较低精度数的位数的减少正相关(例如,线性或超线性地缩放)。因此,处理较小的位宽度格式所需的电路更小、更便宜、更快且更节能。通过所公开技术的实现可以实现其他技术优势。
12.为了提供上面提及的技术优势以及潜在的其他技术优势,ann的某些部分和/或步骤可以被选择来在训练时使用更高或更低的精度值。例如,ann的初始层(即“输入层”)和最后一层(即“输出层”)可能以比其他层(即“隐藏层”(hidden layers))更高的精度级别而被处理。另外或可替代地,训练的早期阶段可能以较低的精度级别就足够准确起作用,以快速改进ann模型,而较高的精度级别可以被用来提高后续步骤和时期的精度。
13.在一些配置中,长短期记忆(lstm)或门控循环单元(gru)、ann的常见组件可以以比其他操作更高或更低的精度来执行一些操作。例如,lstm的输入门、输出门和/或遗忘门(forget gates)可以使用不同的精度级别来执行操作——无论是在给定的lstm内还是与其他lstm进行比较时。
14.在一些配置中,在ann训练期间可以使用不同的数据类型。例如,如上面所讨论的,ann的一些部分/步骤可以使用整数值来进行处理,而ann的其他部分可以使用浮点值来进行处理。对于这些不同的数据类型,可以类似地混合精度,即位宽度。例如,一些步骤的一些部分可以使用int64数据类型来进行处理,而相同步骤的其他部分可以使用int32数据类型来进行处理。
15.在一些配置中,基于量化误差是否超过阈值来动态地选择精度(例如位宽度、数据类型等)。量化误差可以在ann网络中的不同点处进行测量和/或随着训练的进行随时间进行测量,并被用来确定是增加还是降低针对特定层或给定步骤或时期的精度。
16.在一些配置中,通过将训练结果与基线值进行比较来计算量化误差。基线值可以通过多种方法来确定,包括但不限于:使用全精度浮点值来训练同一网络,以高精度重复计算的子集,以及分析或采样针对所涉及的计算的数据统计。如果某个部分或步骤的量化误差超过了已定义的阈值,则可以将该部分或步骤的精度调整得更高以减少差异度(discrepancy)。类似地,不同的层类型(例如批量归一化、卷积等)可以基于量化误差的动态测量来使其精度被调整。
17.应当了解,上述主题可以被实现为计算机控制的装置、计算机实现的方法、计算设备,或者被实现为诸如计算机可读介质之类的制品。通过阅读以下详细描述和回顾相关附图,这些和各种其他特征将是显而易见的。
18.本发明内容被提供来以简化的形式介绍在下面的详细描述中进一步描述的所公开技术的一些方面的简要描述。本发明内容不旨在标识要求保护的主题的关键特征或必要特征,也不旨在将本发明内容用来限制要求保护的主题的范围。此外,要求保护的主题不限于解决在本公开的任何部分中指出的任何或所有缺点的实现。
附图说明
19.图1是示出了根据本文公开的一个实施例的本文公开的计算系统的配置的各方面的计算架构图,该计算系统能够在ann训练和推断期间对激活和权重进行量化;
20.图2a和图2b是示出了根据本文公开的一个实施例的用于使用量化精度浮点格式来表示ann中的权重和激活值的一种机制的各方面的数据结构图;
21.图3是示出了根据本文公开的一个实施例的由本文公开的计算系统用于混合精度训练的精度参数的各方面的框图;
22.图4是图示了ann的节点可能如何被拆分成各层的神经网络图;
23.图5是图示了在ann被训练时的时期和步骤的时序图;
24.图6是图示了长短期记忆(lstm)的各方面的框图;
25.图7是示出根据本文公开的一个实施例的例程的流程图,该例程图示了用于混合精度训练的说明性计算机实现过程的各方面;
26.图8是示出了用于可以实现本文所呈现的技术的各方面的计算设备的说明性计算机硬件和软件架构的计算机架构图;以及
27.图9是图示了在其中可以实现所公开的技术的各方面的分布式计算环境的网络图。
具体实施方式
28.以下详细描述针对用于混合精度训练的技术。除了上面描述的其他技术优势之外,所公开的技术还可以改善ann的准确度或推断时间。这可以节省计算资源,包括但不限于存储器、处理器周期、网络带宽和功率。还可以通过所公开技术的实现来实现本文中未具体标识的其他技术优势。
29.现在参考附图,其中相似的数字在若干附图中表示相似的元件,将描述用于混合精度训练的各种技术的各方面。在下面的详细描述中参照附图,附图构成详细描述的一部分并且通过说明特定配置或示例的方式来示出。
30.ann和ann训练的概述
31.在描述用于混合精度训练的公开技术之前,将参考图1

图2b提供ann、ann训练和量化的简要概述。如上简述,ann被应用于ai和ml中的许多应用,包括但不限于对图像或语音进行识别、对图像进行分类、将语音翻译成文本和/或其他语言、面部或其他生物特征识别、自然语言处理(“nlp”)、自动语言翻译、搜索引擎中的查询处理、自动内容选择、分析电子邮件和其他电子文档、关系管理、生物医学信息学、识别候选生物分子、提供建议或其他
分类和ai任务。
32.对上述应用的处理可以在诸如个人计算机或手机之类的个体设备上进行,但是也可以在数据中心中执行。硬件加速器也可以被用来加速ann处理,包括诸如被编程来加速nn处理的tpu、fpga和gpu之类的专用ann处理单元。由于其灵活的性质和每单位计算的低功耗,此类硬件设备可以被部署在消费者设备以及数据中心中。
33.ann通常由一系列不同类型的层组成(例如卷积、relu、全连接和池化层(pooling layers))。如图1中所示,超参数122可以定义ann的拓扑。例如,超参数122可以包括定义ann的拓扑或结构的拓扑参数,包括但不限于层的数量和类型、层的分组、层之间的连接以及过滤器的数量。超参数122还可以定义ann的配置和/或操作的其他方面。
34.ann的训练102通常利用训练数据集108,即,在执行监督训练时。训练数据集108包括用于应用到ann的样本(例如图像)和描述针对训练数据集108中每个相应样本的来自ann的期望输出的数据(例如,已经用描述图片中的实际内容的数据标记过的图像集合)。
35.ann通常在多个“时期”中被训练。在每个时期中,ann训练模块106或另一组件在多个步骤中在训练数据集108中的训练数据上训练ann。在每个步骤中,ann首先对训练数据的一个实例(在本文中也可以被称为“样本”)进行预测。该步骤通常被称为“前向传递”(在本文中也可以被称为“前向训练传递”)。
36.为了进行预测,将训练数据样本馈送到ann的第一层,该层通常被称为“输入层”。然后,ann的每一层都会(通常使用经学习的参数或“权重110”)在其输入上计算函数来产生输出(通常被称为“激活”(activation)),该输出被用作下一层的输入。通常被称为“输出层”的最后一层的输出是类别预测,通常被实现为向量,其指示样本是多个类的成员的概率。基于由ann所预测的标签和与训练数据集108中的每个训练数据实例相关联的标签,输出层计算“损失”或误差函数。
37.在ann的“后向传递”(在本文中也可以被称为“后向训练传递”)中,ann的每一层计算前一层的误差和梯度,或者更新将ann的预测朝向所期望的输出移动的层的权重110。训练ann的结果是一组权重110,其表示可以被应用于输入的变换函数,结果是预测116。可以使用诸如下面所描述的那样的建模框架来以这种方式训练ann。
38.ann训练也可以是无监督的——即没有训练数据集108。无监督学习可以执行诸如掩码语言模型、下一句预测、聚类分析等任务。常用技术包括自组织图(som)、自适应共振理论(art)等。
39.在已训练了ann模型之后,可以在推断104期间使用建模框架的组件(例如,图1中所示的ann推断模块112)来做出预测116,该预测116关于输入数据集114中被应用于经训练的ann的样本的分类。具体地,使用在训练102期间使用的超参数112来配置ann的拓扑。然后ann使用在训练102期间获得的权重110(和偏差)来对输入数据集114中的样本(通常是在训练期间未使用的样本)执行分类、识别或其他类型的任务。这种建模框架可以使用通用cpu、专用处理器(例如gpu、tpu或fpga)和其他类型的硬件来执行ann并以这种方式生成预测116。
40.在一些示例中,专有或开源库或框架被利用来促进ann创建、训练102、评估和推断104。此类库的示例包括但不限于tensorflow、microsoft cognitive toolkit(“cntk”)、caffe、theano、keras和pytorch。在一些示例中,诸如集成开发环境(“ide”)之类的编程工
具为程序员和用户提供用于定义、编译和评估ann的支持。
41.诸如上述那些工具可以被用来定义、训练和使用ann。作为一个示例,建模框架可以包括预定义的应用编程接口(“api”)和/或编程原语,它们可以被用来指定ann的一个或多个方面,诸如超参数122。这些预定义的api可以包括较低级别的api(例如,激活函数、成本或误差函数、节点、边和张量)和较高级别的api(例如,层、卷积nn、循环nn、线性分类器等)。
[0042]“源代码”(source code)可以被用作这样的建模框架的输入以定义给定ann的图形的拓扑。特别地,建模框架的api可以使用源代码来进行实例化和互连,以指定复杂的ann模型。可以通过使用不同的api、不同数量的api以及以不同的方式互连api来定义不同的ann模型。可以使用其他配置中的其他类型的工具来定义、训练和实现ann。
[0043]
量化人工神经网络概述
[0044]
计算机系统中的典型的浮点表示由三部分组成:符号、尾数和指数。符号指示数字是正数还是负数。尾数决定了数字可以被表示的精度。特别地,表示的精度由尾数的精度来决定。常见的浮点表示使用宽度为10(float16)、24(float32)或53(float64)位的尾数。指数修改尾数的大小。
[0045]
传统上,已经使用常规精度浮点格式(例如32位浮点或“float32”格式)数字对ann进行训练和部署。如本文中所使用的,术语“常规精度浮点”是指具有符号、尾数和按每个数的指数(per

number exponent)的浮点数格式。常规精度浮点格式的示例包括但不限于ieee 754标准格式,诸如16位、32位或64位格式。
[0046]
通过在训练和/或推断期间使用量化精度浮点格式,可以改进ann的性能、能量使用和存储要求。特别地,权重110和激活值(图2a和图2b中所示)可以以较低精度的量化精度浮点格式来表示,这通常导致一定量的误差被引入。量化精度浮点格式的示例包括具有减少位宽度的格式(包括通过减少被用来表示数字的尾数或指数的位数)以及使用小(例如3、4或5位)尾数和由两个或多个数字共享的指数的块浮点格式。
[0047]
如图1中所示,在训练102和推断104期间都可以利用量化118。特别地,可以通过从常规精度浮点格式(例如16位或32位浮点数)到量化精度浮点格式的转换来量化由ann生成的权重110和激活值。在某些类型的硬件(诸如fpga)上,量化精度浮点格式的使用可以大大提高ann处理的延迟和吞吐量。
[0048]
如本文中所使用的,术语“量化精度浮点”(quantized

precision floating

point)是指浮点数格式,其中浮点数的两个或多个值已被修改为具有比以常规精度浮点表示这些值时更低的精度。特别地,量化精度浮点表示的一些示例包括bfp格式,其中两个或多个浮点数参考公共指数来表示。
[0049]
可以通过为集合中的两个、更多或所有浮点数选择公共指数并且偏移个体元素的尾数以匹配共享的公共指数来生成bfp格式数。因此,出于本公开的目的,术语“bfp”意指其中单个指数在两个或多个值之间共享的数系统,其中每个值由符号和尾数对(sign and mantissa pair)来表示(无论是存在显式符号位,或是尾数本身已带符号)。
[0050]
因此,并且如图2a和图2b中所图示,浮点数集合可以使用bfp浮点格式由单个共享指数值来表示,而数集合中的每个数包括符号和尾数。例如,如图2a中所图示,由ann生成的权重110a

110c可以各自包括按权重的符号202a

202c和按权重的尾数204a

204c。然而,权
重110a

110c共享公共指数206a。类似地,如图2b中所图示,由ann生成的激活值208a

208c可以分别包括按每个激活值的符号202d

202f和按每个激活值的尾数204d

204f。然而,激活值208a

208c共享公共指数206b。在一些示例中,用于一组bfp数的共享指数206被选择为原始浮点值的最大指数。
[0051]
bfp格式(诸如图2a和图2b中所图示的格式)的使用可以减少某些常见ann操作所需的计算资源。例如,对于以常规精度浮点格式表示的数,需要浮点加法以执行点积运算(dot product operation)。在浮点向量的点积中,求和以浮点形式来执行,这可能需要偏移以将具有不同指数的值对齐。另一方面,对于使用bfp格式浮点数的点积运算,可以使用整数算术来计算乘积以组合尾数元素。结果,可以通过共享指数来保持大动态范围的数集合,同时通过使用更多整数算术而非浮点算术来降低计算成本。
[0052]
bfp格式的浮点数可以被利用来执行针对ann层的训练操作,包括前向传播(forward propagation)和反向传播(backward propagation)。一个或多个ann层的值可以用量化格式来表达,量化格式具有比常规精度浮点格式更低的精度。例如,bfp格式可以被用来使用神经网络加速器(诸如fpga)加速在训练和推断操作中执行的计算。
[0053]
此外,可以通过将这些值的一部分(例如,用于神经网络的输入层、隐藏层或输出层)从常规精度浮点压缩到诸如bfp之类的较低精度数字格式来改进ann训练的各部分,诸如激活值208的临时存储。激活值208可以稍后被取回(retrieve)以供在例如训练阶段的反向传播期间使用。
[0054]
如上面所讨论的,可以通过在训练和/或推断期间使用量化精度浮点格式来改进ann的性能、能量使用和存储要求。然而,以这种方式使用量化精度浮点格式会对ann产生某些负面影响,诸如但不限于准确度的损失。本文公开的技术解决了这些以及潜在的其他考虑。
[0055]
混合精度训练(mpt)
[0056]
图3是示出根据本文公开的一个实施例的由本文公开的计算系统针对mpt的精度参数的各方面的框图。mpt通常是指针对在用于训练ann的基于ml的过程期间所使用的权重、激活值或其他变量使用不同的精度,例如通过使用不同的位宽度、数据类型等。
[0057]
精度可以基于ann中的位置而不同,即精度可以从一层到下一层而不同。例如,输入层可以被配置为使用比隐藏层或输出层更高或更低的精度。另外或可替代地,精度可以随时间不同,即精度可以被配置为针对训练过程的不同时期或步骤而为高或为低或保持不变。在一些实施例中,精度可能在长短期记忆(lstm)组件内不同,例如“输入”门可以被配置为使用比“输出”门或“忘记”门更高的精度值,反之亦然。
[0058]
在一些配置中,指派给特定节点的有效精度基于位置(即节点在哪一层)以及时间(即当前时期或步骤)。在这些配置中,精度根据位置从基线级别(例如8位尾数)调整,并基于时间进一步调整。例如,输入层内的节点可以使其精度向上调整。但是,如果训练仍处于较早时期,则精度可能会向下调整。净效果可能是有效精度相对于基线精度增加、减少或保持不变。
[0059]
如图3中所示,超参数122包括定义用于权重的位宽度302、用于激活值的位宽度304和/或数据类型306。具体地,超参数122指定用于量化权重的每层位宽度302a、用于量化权重的每步骤位宽度302b,以及用于量化权重的每门位宽度302c。超参数122还定义用于量
化激活值的每层位宽度304a、用于量化激活值的每步骤位宽度304b以及用于量化激活值的每门位宽度304c。在一些配置中,超参数122还指定数据类型306,其指示是否以及应该使用哪种类型的浮点、整数或其他数据类型。示例数据类型包括float32、具有5位尾数的bfp、int64等。数据类型306可以针对ann进行全局配置,或在每层/步/门级别上进行配置。
[0060]
在一些配置中,位宽度302和304定义针对尾数204的位宽度,以用于存储由ann的层所生成的权重/激活值。如上面所讨论的,可以使用量化精度浮点格式(诸如bfp格式,其尾数具有比以常规精度浮点表示的尾数更少的位,并且具有共享指数)来表示激活值和权重。同时,针对常规精度浮点、非bfp量化表示、整数或任何其他数据类型的精度被类似地设想。
[0061]
图4是图示了节点如何被拆分成各层(更一般地被称为“集合”)的神经网络图。图4描绘了具有层404、406、408和410的神经网络402。层404包括输入层,即接收和处理输入值。输入层对精度很敏感,当使用更高的精度(或相对更高的精度)时,往往会产生更准确的结果。
[0062]
同时,层406和408表示隐藏层,其不接收输入,也不提供输出。这些隐藏层可以使用较低精度来操作,而不会导致准确度的显著降低。
[0063]
层410包括输出层,使得层410提供做出预测的结果值(例如y
l
、y2、y3),例如分类、图像识别或其他ml和ai相关任务。在一些配置中,输出层对精度很敏感,并且因此可以被配置为使用比隐藏层406和408更高的精度级别来处理和生成值。
[0064]
图5是图示了当ann被训练时的时期和步骤的时序图。在此配置中,训练在时期502开始,继续通过时期504,并在时期506结束。每个时期可以以任意数量的步骤执行训练,例如步骤508、510和512。在一些配置中,每个步骤包括前向训练传递和后向训练传递。虽然图5描绘了每三个步骤的三个时期的训练,这种细分是为了便于说明,并且任何数量的时期和步骤被类似地设想。此外,训练可能发生于已定义的步骤数或未定义的步骤数——例如训练可以持续到已定义的步骤数,或者训练可以继续直到达到所期望的准确度级别。
[0065]
在一些配置中,每个时期或每个步骤可以与不同的精度相关联。可以为特定时期或步骤设置或调整激活值和权重。例如,时期502可以与精度“a5w6”相关联,该精度将“5”位分配给激活值,将“6”位分配给权重。时期504可以寻求提高准确度以尝试改进由训练时期502生成的结果。例如,时期504可以与精度“a6w6”相关联,这将激活值的位宽度增加到“6”。
[0066]
在其他实施例中,连续的时期和/或步骤可能会降低精度或保持相同的精度。在一些配置中,每个时期(或步骤)可以与精度的变化相关联。例如,可以基于当前步骤向上或向下调整默认精度。可以在此调整之上进行其他调整,例如基于ann内的位置的调整(例如,基于ann内的层)。
[0067]
图6是图示了长短期记忆的框图。在一些实施例中,lstm 602包括四个门:输入门604、输入调制门606、输出门608和遗忘门610。lstm 602对供应给这些门的值执行操作,例如操作612,其对输入门604和输入调制门606执行矩阵乘法;操作614,其将提供给遗忘门610的值与存储的单元值605相乘;以及操作616,其将存储的单元值605与提供给输出门608的值相乘。
[0068]
在一些配置中,ann训练模块106定义被用来执行这些矩阵乘法的操作的精度。可以向不同的门供应具有不同精度级别的值,并且因此矩阵乘法操作612、614和616可以各自
以不同精度进行操作并产生不同精度的值。以这种方式,可以通过对小的位宽度不敏感的操作使用不太精确的操作来节省存储和计算资源。
[0069]
现在参考图7来描述示出例程700的流程图,该例程700示出了用于混合精度训练的说明性计算机实现过程的各方面。应该了解的是,本文关于图7和其他图描述的逻辑操作可以被实现为:(1)计算机实现的动作的序列或在计算设备上运行的程序模块和/或(2)互连机器逻辑电路或计算设备内的电路模块。
[0070]
本文公开的技术的特定实现是取决于计算设备的性能和其他要求的选择问题。因此,本文描述的逻辑操作被不同地称为状态、操作、结构设备、动作或模块。这些状态、操作、结构设备、动作和模块可以以硬件、软件、固件、专用数字逻辑及其任意组合来实现。应当了解,可以执行比本文描述且图中所示更多或更少的操作。这些操作也可以以与本文描述的顺序不同的顺序来执行。
[0071]
例程700开始于操作702,其中ann训练模块106定义包括多个节点集合的ann。在一些配置中,节点集合是如图4中所描绘的层集合,因此由一层所生成的激活值作为输入被供应给另一层。
[0072]
例程700从操作702进行到操作704,其中ann训练模块106针对与多个节点集合中的第一集合相关联的激活值设置第一位宽度。在一些配置中,第一位宽度是默认值,而在其他配置中,第一位宽度是基于确定出量化误差超过阈值而设置的。例如,可以通过将潜在位宽度的结果与使用传统浮点精度定义的ann所生成的结果进行比较来计算量化误差。如果精度差异超过已定义的阈值,则可以增加针对节点集合的位宽度。如果精度差异低于另一个已定义的阈值,则可以减少针对节点集合的位宽度以节省计算资源。
[0073]
另外或可替代地,可以通过仅以高精度重复计算的一部分来计算或估计量化误差。计算的重复部分可以是对层、步骤、时期和/或输入的子集的计算。可以将重复部分的结果与使用bfp在相同或不同的层、步骤、时期和/或输入的(一个或多个)子集上或在整个ann上的计算结果进行比较。可以针对重复部分或者针对ann整体来调整位宽度。
[0074]
另外或可替代地,通过在整个计算过程中对统计进行采样,并且响应于统计中的变化来确定增加或减少位宽度,从而可以计算或估计量化误差。在一些配置中,可以随时间跟踪诸如准确度、训练速度、训练效率等统计数据,并计算移动平均值。在训练期间,可以将周期性采样的统计与移动平均值进行比较,并且可以响应于所采样的统计超过或低于移动平均值一个已定义的阈值来调整位宽度。例如,当准确度低于准确度移动平均值一个已定义的阈值时,可以降低位宽度。在一些配置中,可以响应于移动平均值的大的、快速的和/或意外的(即,对于特定层、步骤、时期而言是意外的)改变来调整位宽度。位宽度变化可能针对相应的层、步骤、时期等,或者针对整个ann。
[0075]
在一些配置中,位宽度被设置为平衡准确度要求与存储和计算成本。然而,位宽度可以被设置来将准确度最大化、将存储和计算成本最小化,或者结合二者。在一些配置中,ann训练模块106还设置被用来执行ann训练操作并且被用来存储ann训练操作的结果(例如权重)的数据类型。例程700然后从操作704进行到操作706。
[0076]
在操作706处,ann训练模块106为多个节点集合中的第二集合的激活值设置第二位宽度。可以使用上文关于操作704所描述的技术来确定第二位宽度。在一些配置中,第一位宽度和第二位宽度不同,例如,第一位宽度定义了6位尾数,而第二位宽度定义了5位尾
数。
[0077]
例程700然后从操作706进行到操作708,其中ann训练模块106部分地通过将第一激活函数应用于多个节点集合中的第一集合来训练ann。在一些配置中,第一激活函数产生具有第一位宽度的激活值。另外或可替代地,第一激活函数的结果被压缩(也被称为量化)为由第一位宽度定义的精度。
[0078]
例程700然后从操作708进行到操作710,其中ann训练模块106部分地通过将第二激活函数应用于多个节点集合中的第二集合来训练ann。在一些配置中,第二激活函数产生具有第二位宽度的激活值。另外或可替代地,第二激活函数的结果被压缩(也称为量化)为由第二位宽度定义的精度。在一些配置中,第一激活函数和第二激活函数是相同的函数,只是位宽度(和任何输入值)发生了变化。
[0079]
然后例程700从操作710进行到操作712,它在那里结束。
[0080]
图8是示出了用于可以实现本文所呈现的各种技术的计算设备的说明性计算机硬件和软件架构的计算机架构图。特别地,图8中所图示的架构可以被利用来实现服务器计算机、移动电话、电子阅读器、智能电话、台式计算机、可选的现实或虚拟现实(“ar/vr”)设备、平板计算机、膝上型计算机或其他类型的计算设备。
[0081]
虽然本文描述的主题是在执行ann训练的服务器计算机的一般上下文中呈现的,但是本领域技术人员将认识到可以结合其他类型的计算系统和模块来执行其他实现。本领域技术人员还将了解,本文描述的主题可以用其他计算机系统配置来实践,包括手持设备、多处理器系统、基于微处理器或可编程的消费电子产品、嵌入在设备中的计算或处理系统(诸如可穿戴计算设备、汽车、家庭自动化等)、小型计算机、大型计算机等。
[0082]
图8中所图示的计算机800包括一个或多个中央处理单元802(“cpu”)、一个或多个gpu 830、系统存储器804——包括随机存取存储器806(“ram”)和只读存储器(“rom”)808以及将存储器804耦合到cpu 802的系统总线810。包含诸如在启动期间帮助在计算机800内的元件之间传输信息的基本例程的基本输入/输出系统(“bios”或“固件”)可以被存储在rom 808中。计算机800还包括大容量存储设备812,用于存储操作系统822、应用程序和其他类型的程序。大容量存储设备812还可以被配置为存储其他类型的程序和数据。
[0083]
大容量存储设备812通过连接到总线810的大容量存储控制器(未示出)而被连接到cpu 802。大容量存储设备812及其关联的计算机可读介质为计算机800提供非易失性存储。尽管本文所包含的计算机可读介质的描述是指大容量存储设备,诸如硬盘、cd

rom驱动器、dvd

rom驱动器或usb存储密钥,但是本领域技术人员应该了解,计算机可读介质可以是可由计算机800访问的任何可用的计算机存储介质或通信介质。
[0084]
通信介质包括计算机可读指令、数据结构、程序模块或调制数据信号(诸如载波或其他传输机制)中的其他数据,并且包括任何递送介质。术语“调制数据信号”(modulated data signal)是指一种信号,该信号具有以使得对信号中的信息进行编码的方式来设置或改变的一个或多个特性。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声学、射频、红外线和其他无线介质之类的无线介质。上述任何一种或几种的组合也应被包括在计算机可读介质的范围内。
[0085]
作为示例而非限制,计算机存储介质可以包括以用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术实现的易失性和非易失性、可移
动和不可移动介质。例如,计算机存储介质包括但不限于ram、rom、eprom、eeprom、闪存或其他固态存储器技术、cd

rom、数字多功能磁盘(“dvd”)、hd

dvd、blu

ray,或其他光存储、磁盒、磁带、磁盘存储或其他磁存储设备,或可以被用来存储所需信息且可由计算机800访问的任何其他介质。出于权利要求的目的,短语“计算机存储介质”(computer storage medium)及其变体不包括波或信号本身或通信介质。
[0086]
根据各种配置,计算机800可以使用通过诸如网络820之类的网络到远程计算机的逻辑连接而操作在联网环境中。计算机800可以通过连接到总线810的网络接口单元816而连接到网络820。应当了解,网络接口单元816也可以被利用来连接到其他类型的网络和远程计算机系统。计算机800还可以包括输入/输出控制器818,用于接收和处理来自多个其他设备的输入,包括键盘、鼠标、触摸输入、电子笔(图8中未示出)或物理传感器,诸如相机。类似地,输入/输出控制器818可以向显示屏或其他类型的输出设备(也未在图8中示出)提供输出。
[0087]
应当了解,本文描述的软件组件在被加载到cpu 802中并被执行时,可以将cpu 802和整个计算机800从通用计算设备变换为定制为促进本文所呈现的功能性的专用计算设备。cpu 802可以由任意数量的晶体管或其他分立电路元件构成,它们可以单独或共同显现任意数量的状态。更具体地,cpu 802可以响应于包含在本文公开的软件模块内的可执行指令而操作为有限状态机。这些计算机可执行指令可以通过指定cpu 802如何在状态之间转变来变换cpu 802,从而变换构成cpu 802的晶体管或其他分立硬件元件。
[0088]
对本文呈现的软件模块进行编码还可以变换本文呈现的计算机可读介质的物理结构。在本说明书的不同实现中,物理结构的具体变换取决于各种因素。此类因素的示例包括但不限于被用来实现计算机可读介质的技术、计算机可读介质的特征是主存储装置还是辅助存储装置等。例如,如果计算机可读介质被实现为基于半导体的存储器,则可以通过变换半导体存储器的物理状态来将本文公开的软件编码在计算机可读介质上。例如,该软件可以变换构成半导体存储器的晶体管、电容器或其他分立电路元件的状态。软件还可以变换此类组件的物理状态,以便在其上存储数据。
[0089]
作为另一个示例,本文公开的计算机存储介质可以使用磁技术或光技术来实现。在这样的实现中,当软件被编码在其中时,本文呈现的软件可以变换磁介质或光介质的物理状态。这些变换可以包括改变给定磁介质内的特定位置的磁特性。这些变换还可以包括改变给定光介质内的特定位置的物理特征或特性,以改变那些位置的光学特性。在不脱离本说明书的范围和精神的情况下,物理介质的其他变换是可能的,提供上述示例只是为了促进讨论。
[0090]
鉴于上文,应当了解,在计算机800中发生许多类型的物理变换以便存储和执行本文呈现的软件组件。还应当了解,图8中为计算机800所示出的架构或类似的架构可以被利用来实现其他类型的计算设备,包括手持计算机、视频游戏设备、嵌入式计算机系统、诸如智能电话、平板计算机和ar/vr设备之类的移动设备,以及本领域技术人员已知的其他类型的计算设备。还可设想计算机800可能不包括图8中所示出的所有组件,它可以包括未在图8中明确示出的其他组件,或者可以利用与图8中所示出的架构完全不同的架构。
[0091]
图9是图示了根据本文所呈现的各种配置的在其中可以实现所公开的技术的各方面的分布式网络计算环境900的网络图。如图9中所示,一个或多个服务器计算机900a可以
经由通信网络820(其可以是固定有线或无线lan、wan、内联网、外联网、对等网络、虚拟专用网络、互联网、蓝牙通信网络、专有低压通信网络或其他通信网络)来与许多客户端计算设备互连,诸如但不限于平板计算机900b、游戏机900c、智能手表900d、诸如智能电话之类的电话900e、个人计算机900f和ar/vr设备900g。
[0092]
在其中通信网络820是互联网的网络环境中,例如,服务器计算机900a可以是专用服务器计算机,其可操作以处理数据并且通过许多已知协议中的任何一个向客户端计算设备900b

900g传送数据以及从客户端计算设备900b

900g接收数据,前述许多已知协议诸如是超文本传输协议(“http”)、文件传输协议(“ftp”)或简单对象访问协议(“soap”)。此外,联网计算环境900可以利用各种数据安全协议,诸如安全套接字层(“ssl”)或完美隐私(“pgp”)。客户端计算设备900b

900g中的每一个都可以配备有操作系统,其可操作以支持诸如网络浏览器(图9中未示出)、其他图形用户界面(图9中未示出)或移动桌面环境(图9中未示出)之类的一个或多个计算应用或终端会话,以获得对服务器计算机900a的访问。
[0093]
服务器计算机900a可以可通信地耦合到其他计算环境(图9中未示出)并且接收关于参与用户的交互/资源网络的数据。在说明性操作中,用户(图9中未示出)可以与在客户端计算设备900b

900g上运行的计算应用进行交互以获得期望的数据和/或执行其他计算应用。
[0094]
数据和/或计算应用可以被存储在服务器900a或多个服务器900a上,并通过客户端计算设备900b

900g在示例性通信网络820上传送给合作用户。参与用户(图9中未示出)可以请求访问全部或部分容纳在服务器计算机900a上的特定数据和应用。该数据可以在客户端计算设备900b

900g和服务器计算机900a之间进行传送以进行处理和存储。
[0095]
服务器计算机900a可以托管用于数据和应用的生成、认证、加密和通信的计算应用、进程和小应用程序,并且可以与其他服务器计算环境(图9中未示出)、第三方服务提供商(图9中未示出)、网络附加存储(“nas”)和存储区域网络(“san”)协作来实现应用/数据事务。
[0096]
应当了解,为便于讨论,图9中所示的计算架构和图9中所示的分布式网络计算环境已被简化。还应当了解,计算架构和分布式计算网络可以包括和利用更多的计算组件、设备、软件程序、网络设备和本文没有具体描述的其他组件。
[0097]
本文所呈现的公开内容还包括以下示例中阐述的主题:
[0098]
示例1:一种计算机实现的方法,包括:定义包括多个节点层的人工神经网络(ann);针对与多个节点层中的第一层相关联的激活值设置第一位宽度;针对与多个节点层中的第二层相关联的激活值设置第二位宽度;并且在ann的训练期间或从ann的推断期间,将第一激活函数应用于多个节点层中的第一层,从而生成具有第一位宽度的多个激活值,并将第二激活函数应用于多个节点层中的第二层,从而生成具有第二位宽度的第二多个激活值。
[0099]
示例2:示例1的计算机实现的方法,还包括:针对与多个节点层中的第一层相关联的权重设置第三位宽度,其中在ann的训练期间或从ann的推断期间,多个节点层中的第一层生成具有所述第三位宽度的权重;以及针对与多个节点层中的第二层相关联的权重设置第四位宽度,其中在ann的训练期间或从ann的推断期间,多个节点层中的第二层生成具有第四位宽度的权重。
[0100]
示例3:示例1的计算机实现的方法,其中多个节点层中的第一层包括输入层,其中多个节点层中的第二层包括输出层,并且其中第一位宽度和第二位宽度被设置为不同于与剩余节点层的集合相关联的位宽度。
[0101]
示例4:示例1的计算机实现的方法,其中ann在多个步骤上被训练或在多个步骤上从ann做出推断,其中第一位宽度被用来在多个步骤中的第一步骤期间训练多个节点层中的第一层或从多个节点层中的第一层进行推断,并且其中第五位宽度被用来在多个步骤中的第二步骤期间训练多个节点层中的第二层或从多个节点层中的第二层进行推断。
[0102]
示例5:示例4的计算机实现的方法,其中通过对与第一层相关联的位宽度和与多个步骤中的第一步骤相关联的位宽度进行平均来在多个步骤中的第一步骤期间针对第一层确定有效位宽度。
[0103]
示例6:示例1的计算机实现的方法,还包括:针对ann的长短期记忆(lstm)组件的第一门类型设置第六位宽度;并针对ann的lstm组件的第二门类型设置第七位宽度。
[0104]
示例7:示例1的计算机实现的方法,其中激活值以块浮点格式(bfp)来表示,该块浮点格式具有与常规精度浮点表示的尾数相比包括更少位的尾数。
[0105]
示例8:一种计算机实现的方法,包括:定义包括多个节点层的人工神经网络(ann),其中ann在多个步骤上被训练;针对在多个步骤中的第一步骤期间生成的激活值设置第一位宽度;针对在多个步骤中的第二步骤期间生成的激活值设置第二位宽度;通过在多个步骤中的第一步骤期间应用第一激活函数来训练ann,从而生成具有第一位宽度的激活值;并且通过在多个步骤中的第二步骤期间应用第二激活函数来训练ann,从而生成具有第二位宽度的激活值。
[0106]
示例9:示例8的计算机实现的方法,其中ann在多个时期上被训练,其中针对在第一时期期间生成的值设置第一位宽度,并且其中针对在第二时期期间生成的值设置第二位宽度。
[0107]
示例10:示例9的计算机实现的方法,其中第一位宽度不同于第二位宽度。
[0108]
示例11:示例8的计算机实现的方法,其中第三位宽度与多个节点层中的第一层相关联,其中第四位宽度与多个节点层中的第二层相关联,并且其中针对第一层中的并且在第一步骤期间被训练的的节点的有效位宽度基于第一位宽度和第三位宽度的组合。
[0109]
示例12:示例11的计算机实现的方法,其中通过在第三位宽度大于第一位宽度时增加第一位宽度并且在第三位宽度小于第一位宽度时减小第一位宽度,针对第一层中的并且在第一步骤期间被训练的节点的有效位宽度被确定。
[0110]
示例13:示例8的计算机实现的方法,其中当量化误差超过或低于所定义的阈值时,第一位宽度或第二位宽度在训练期间被动态地更新。
[0111]
示例14:示例8的计算机实现的方法,还包括:在多个步骤上从经训练的ann推断输出,该推断包括:在多个步骤中的第一步骤期间应用第一激活函数;以及在多个步骤中的第二步骤期间应用第二激活函数。
[0112]
示例15:一种计算设备,包括:一个或多个处理器;以及至少一个计算机存储介质,其上存储有计算机可执行指令,该计算机可执行指令在由一个或多个处理器执行时使计算设备:定义包括一个或多个组件的人工神经网络(ann),该一个或多个组件包括多个门;针对多个门中的第一门设置第一位宽度;针对多个门中的第二门设置第二位宽度;并且部分
地通过处理供应给多个门的输入来从ann推断输出,其中供应给多个门中的第一门的输入使用第一位宽度被处理,并且其中供应给多个门中的第二门的输入使用第二位宽度被处理。
[0113]
示例16:示例15的计算设备,其中一个或多个组件包括一个或多个长短期记忆组件(lstm),其中lstm包括j门、i门、f门和o门,其中j门被指派与其他门不同的位宽度。
[0114]
示例17:示例16的计算设备,其中多个门中的第一门包括输入门,并且其中多个门中的第二门包括输出门。
[0115]
示例18:示例17的计算设备,其中第一位宽度不同于第二位宽度。
[0116]
示例19:示例15的计算设备,其中ann在多个步骤上被训练,并且其中随着ann被训练,第一位宽度在多个步骤上被调整。
[0117]
示例20:示例15的计算设备,其中一个或多个组件包括一个或多个长短期记忆组件(lstm)或门控循环单元(gru)。
[0118]
基于上述,应当了解,本文已经公开了用于混合精度训练的技术。尽管本文所呈现的主题已经以特定于计算机结构特征、方法和变换动作、特定计算机机器和计算机可读介质的语言进行了描述,但是应当理解,在所附权利要求中阐述的主题不一定局限于本文描述的特定特征、行为或介质。相反,特定特征、动作和介质作为实现要求保护的主题的示例形式而被公开。
[0119]
以上描述的主题仅通过说明的方式提供并且不应被解释为限制。在不遵循所示出和描述的示例配置和应用并且不脱离在随附权利要求中阐述的本公开的范围的情况下,可以对本文描述的主题进行各种修改和改变。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献