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

一种神经网络模型的训练方法、装置以及计算设备与流程

2021-10-29 21:37:00 来源:中国专利 TAG:神经网络 深度 装置 模型 训练


1.本发明涉及深度学习技术领域,具体涉及一种神经网络模型的训练方法、装置以及计算设备。


背景技术:

2.随着人工智能近年来开始快速发展,人工智能,特别是深度学习算法已经在视觉图像、语音识别和自然语言处理等领域都得到了广泛的应用。随着端智能化的普及,越来越多的人工智能计算需要在边缘设备进行,以带来新的交互体验。但是与服务器相比,边缘设备算力较低、内存较少。因此,如何将算力和存储消耗较大的深度学习算法进行优化,以便部署在边缘端设备上是人工智能领域的热点问题。
3.一种对深度学习算法,特别是神经网络模型进行优化的方法是对模型参数进行量化,即将例如为单精度浮点数的参数量化为整数格式,由于端设备中的处理器,无论是gpu还是其它处理器,与处理浮点数运算相比,可以更为快速地处理整数运算,因此可以通过参数量化来对部署在端设备上的深度学习模型进行加速,从而加快推理(inference)过程。
4.然而,低度神经网络模型训练仍主要基于高精度浮点计算平台。随着神经网络模型的网络规模、训练数据集日益增大,神经网络模型的训练需要巨大的算能、存储空间和功耗。而量化压缩技术相关研究表明其具有低存储、低功耗及高运算的性能优势。神经网络模型训练包含前向传播、反向传播及参数更新三部分。目前的低精度量化压缩技术研究主要集中在神经网络模型的前向推理部分,对低精度反向传播及参数更新的研究较少。由于反向传播的运算量是前向传播的两倍,因此量化反向梯度传播至关重要。
5.在低精度神经网络模型的训练过程中,由于参数更新值与高精度参数值(通常采用单精度浮点数)相比过小,导致无法直接将参数更新值累加至低精度参数。为解决该问题,通常是在前向传播和方向传播中采用低精度参数值,同时对低精度参数值额外存储对应的高精度浮点值,以便进行参数更新,这一方面增加了额外的存储资源,另一方面需要进行低精度与高精度类型数据的频繁转换操作,导致训练效率低下。


技术实现要素:

6.鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的神经网络模型的训练方法、装置以及计算设备。
7.根据本发明的一个方面,提供了一种神经网络模型的训练方法,在服务器中执行,所述神经网络模型包括多个网络层,所述方法包括:前向传播步骤:获取当前网络层的参数对应的第一块浮点数;将上一层网络层输出的激活值量化为第二块浮点数,其中第一块浮点数和第二块浮点数的位宽为第一预定值;基于第一块浮点数和第二块浮点数计算当前网络层的激活值,并输出到下一层网络层;反向传播步骤:将下一层网络层输出的激活值梯度量化为第三块浮点数,其中第三块浮点数的位宽为第二预定值;基于第三块浮点数和第一块浮点数计算上一层网络层的激活值梯度,并输出到上一层网络层;基于第三块浮点数和
第二块浮点数计算当前网络层的参数梯度;参数更新步骤:基于参数梯度计算当前网络层的参数更新值,生成与参数更新值对应的第四块浮点数,其中第四块浮点数的位宽为第三预定值;基于第一块浮点数和第四块浮点数对当前网络层的参数进行更新,生成更新后的参数对应的第一块浮点数。
8.可选地,在本发明的神经网络模型的训练方法中,所述当前网络层为全连接层,所述全连接层包括线性处理单元和激活函数单元;所述基于第一块浮点数和第二块浮点数计算当前网络层的激活值,包括;将第一块浮点数和第二块浮点数输入到线性处理单元进行处理,输出位宽为第三预定值的线性值;将所述线性值量化为位宽为第一预定值的量化线性值;将所述量化线性值输入到激活函数单元进行处理,输出位宽为第三预定值的激活值。
9.可选地,在本发明的神经网络模型的训练方法中,所述基于第三块浮点数和第一块浮点数计算上一层网络层的激活值梯度,包括:基于激活函数单元采用的激活函数对第三块浮点数进行反向求导,得到位宽为第三预定值的线性值梯度;将所述线性值梯度量化为位宽为第二预定值的量化线性值梯度;基于第一块浮点数对所述量化线性值梯度进行反向求导,得到上一层网络层的激活值梯度;所述基于第三块浮点数和第二块浮点数计算当前网络层的参数梯度,包括:基于第二块浮点数对所述线性值梯度进行反向求导,得到当前网络层的参数梯度。
10.可选地,在本发明的神经网络模型的训练方法中,所述当前网络层为卷积层,所述卷积层包括卷积单元、池化单元和激活函数单元;所述基于第一块浮点数和第二块浮点数计算当前网络层的激活值,包括;将第一块浮点数和第二块浮点数输入到卷积单元进行处理,输出位宽为第三预定值的线性值;将所述线性值量化为位宽为第一预定值的量化线性值;将所述量化线性值输入到池化单元进行处理,输出池化值;将所述池化值输入到激活函数单元进行处理,输出位宽为第三预定值的激活值。
11.可选地,在本发明的神经网络模型的训练方法中,所述基于第三块浮点数和第一块浮点数计算上一层网络层的激活值梯度,包括:基于激活函数单元采用的激活函数对第三块浮点数进行反向求导,得到位宽为第三预定值的池化值梯度;基于池化单元采用的池化模板对所述池化值梯度进行反向求导,得到线性值梯度;将所述线性值梯度量化为位宽为第二预定值的量化线性值梯度;基于第一块浮点数对所述量化线性值梯度进行反向求导,得到上一层网络层的激活值梯度;所述基于第三块浮点数和第二块浮点数计算当前网络层的参数梯度,包括:基于第二块浮点数对所述线性值梯度进行反向求导,得到当前网络层的参数梯度。
12.可选地,在本发明的神经网络模型的训练方法中,所述第一预定值小于所述第二预定值,所述第二预定值小于所述第三预定值。
13.可选地,在本发明的神经网络模型的训练方法中,所述第一预定值为8,所述第二预定值为16,所述第三预定值为32。
14.可选地,在本发明的神经网络模型的训练方法中,所述基于第一块浮点数和第四块浮点数对当前网络层的参数进行更新,生成更新后的参数对应的第一块浮点数,包括:获取上一次迭代后的延迟更新值对应的第五块浮点数,其中所述延迟更新值为参数更新值中未更新到参数中的部分,所述第五块浮点数的位宽为第二预定值;将所述第四块浮点数的尾数所右移动第一预定数值位后,累加到第五块浮点数中;计算第一块浮点数与尾数向右
移动第二预定数值位后的第五块浮点数之差,得到第一差值;计算算第一块浮点数与第五块浮点数之和,然后减去所述第一差值,作为本次迭代后的延迟更新值对应的第五块浮点数;将所述第一块浮点数更新为所述第一差值。
15.可选地,在本发明的神经网络模型的训练方法中,所述第一预定数值为第五块浮点数的指数与第四块浮点数的指数之差,所述第二预定数值为第五块浮点数的位宽-1。
16.可选地,在本发明的神经网络模型的训练方法中,在进行尾数的移位操作时,截断的部分采用四舍五入的方式添加到未截断部分。
17.可选地,在本发明的神经网络模型的训练方法中,所述服务器中包含加速单元,所述训练方法适于由所述加速单元执行。
18.可选地,在本发明的神经网络模型的训练方法中,所述加速单元为神经网络处理单元npu或者图形处理单元gpu。
19.可选地,在本发明的神经网络模型的训练方法中,所述服务器部署在数据中心。
20.根据本发明另一方面,提供一种神经网络模型的训练方法,在终端设备中执行,所述神经网络模型包括多个网络层,所述方法包括:前向传播步骤:获取当前网络层的参数对应的第一块浮点数;将上一层网络层输出的激活值量化为第二块浮点数,其中第一块浮点数和第二块浮点数的位宽为第一预定值;基于第一块浮点数和第二块浮点数计算当前网络层的激活值,并输出到下一层网络层;反向传播步骤:将下一层网络层输出的激活值梯度量化为第三块浮点数,其中第三块浮点数的位宽为第二预定值;基于第三块浮点数和第一块浮点数计算上一层网络层的激活值梯度,并输出到上一层网络层;基于第三块浮点数和第二块浮点数计算当前网络层的参数梯度;参数更新步骤:基于参数梯度计算当前网络层的参数更新值,生成与参数更新值对应的第四块浮点数,其中第四块浮点数的位宽为第三预定值;基于第一块浮点数和第四块浮点数对当前网络层的参数进行更新,生成更新后的参数对应的第一块浮点数。
21.可选地,在本发明的神经网络模型的训练方法中,所述终端设备为桌面型计算设备、膝上型计算设备、平板型计算设备、移动电话计算设备、音箱计算设备、车辆的计算设备、包括计算设备的可穿戴装置、或者包括计算设备的家居装置。
22.可选地,在本发明的神经网络模型的训练方法中,所述终端设备中包含加速单元,所述训练方法适于由所述加速单元执行。
23.可选地,在本发明的神经网络模型的训练方法中,所述加速单元为神经网络处理单元npu或者图形处理单元gpu。
24.根据本发明另一方面,提供一种神经网络模型的训练装置,包括:前向传播模块,适于:获取当前网络层的参数对应的第一块浮点数;将上一层网络层输出的激活值量化为第二块浮点数,其中第一块浮点数和第二块浮点数的位宽为第一预定值;基于第一块浮点数和第二块浮点数计算当前网络层的激活值,并输出到下一层网络层;反向传播模块,适于:将下一层网络层输出的激活值梯度量化为第三块浮点数,其中第三块浮点数的位宽为第二预定值;基于第三块浮点数和第一块浮点数计算上一层网络层的激活值梯度,并输出到上一层网络层;基于第三块浮点数和第二块浮点数计算当前网络层的参数梯度;参数更新模块,适于:基于参数梯度计算当前网络层的参数更新值,生成与参数更新值对应的第四块浮点数,其中第四块浮点数的位宽为第三预定值;基于第一块浮点数和第四块浮点数对
当前网络层的参数进行更新,生成更新后的参数对应的第一块浮点数。
25.根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行上述方法的指令。
26.根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行上述的方法。
27.根据本发明实施例的神经网络模型的训练方案,基于块浮点量化与延迟更新结合,通过块浮点数的共享指数控制参数值、延迟更新值和参数更新值拥有相同的小数点位置,将参数更新值中相对于延迟更新值有效的部分(参数更新值和延迟更新值的尾数重叠部分)加入到延迟更新值中,当延迟更新值足够大时,再根据延迟更新值来更新参数值。这样,可以在前向传播、反向传播和参数更新过程中,都采用低精度参数值,而不需要额外保存低精度参数值对应的高精度浮点值,也不需要频繁的进行高精度与低精度类型数据的转换操作,在节约存储资源的同时提高了神经网络模型的训练速度。
28.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
29.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
30.图1示出了根据本发明一个实施例所应用的数据中心的结构图;
31.图2示出了根据本发明一个实施例的数据中心中一个服务器的内部结构图;
32.图3是根据本发明一个实施例服务器内部的调度单元和加速单元的连接关系图;
33.图4是根据本发明一个实施例的加速单元核的内部结构图;
34.图5示出了本发明实施例中块浮点数的表示方法示意图;
35.图6示出了根据本发明一个实施例的神经网络模型的训练方法600的流程图;
36.图7示出了本发明实施例中卷积层的训练过程示意图;
37.图8示出了本发明实施例中参数更新过程示意图;
38.图9示出了根据本发明一个实施例的神经网络模型的训练装置900的示意图。
具体实施方式
39.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
40.首先介绍本发明实施例的神经网络模型的训练方法的一种实施环境。
41.数据中心
42.数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加速、
展示、计算、存储数据信息。在今后的发展中,数据中心也将会成为企业竞争的资产。随着数据中心应用的广泛化,人工智能等越来越多地应用到数据中心。而神经网络作为人工智能的重要技术,已经大量应用到数据中心大数据分析运算中。
43.在传统的大型数据中心,网络结构通常如图1所示,即互连网络模型(hierarchical inter-networking model)。这个模型包含了以下部分:
44.服务器140:各服务器140是数据中心的处理和存储实体,数据中心中大量数据的处理和存储都是由这些服务器140完成的。
45.接入交换机130:接入交换机130是用来让服务器140接入到数据中心中的交换机。一台接入交换机130接入多台服务器140。接入交换机130通常位于机架顶部,所以它们也被称为机顶(top of rack)交换机,它们物理连接服务器。
46.汇聚交换机120:每台汇聚交换机120连接多台接入交换机130,同时提供其他的服务,例如防火墙,入侵检测,网络分析等。
47.核心交换机110:核心交换机110为进出数据中心的包提供高速的转发,为汇聚交换机120提供连接性。整个数据中心的网络分为l3层路由网络和l2层路由网络,核心交换机110为通常为整个数据中心的网络提供一个弹性的l3层路由网络。
48.通常情况下,汇聚交换机120是l2和l3层路由网络的分界点,汇聚交换机120以下的是l2网络,以上是l3网络。每组汇聚交换机管理一个传送点(pod,point of delivery),每个pod内都是独立的vlan网络。服务器在pod内迁移不必修改ip地址和默认网关,因为一个pod对应一个l2广播域。
49.汇聚交换机120和接入交换机130之间通常使用生成树协议(stp,spanning tree protocol)。stp使得对于一个vlan网络只有一个汇聚层交换机120可用,其他的汇聚交换机120在出现故障时才被使用。也就是说,在汇聚交换机120的层面,做不到水平扩展,因为就算加入多个汇聚交换机120,仍然只有一个在工作。
50.服务器
51.由于服务器140是数据中心真实的处理设备,图2示出了一个服务器140内部的结构框图。服务器140包括有总线连接的存储器210、调度单元集群270和加速单元集群280。调度单元集群270包括多个调度单元220。加速单元集群280包括多个加速单元230。加速单元在本公开实施例中主要是为了加速神经网络模型的运算处理速度而设计的专门处理单元,可以体现为专门为神经网络运算处理设计的处理单元(npu)、图形处理单元(gpu)、专用集成电路(asic)和现场可编程门阵列(fpga)等。调度单元是对加速单元进行调度、向各加速单元分配要执行的待执行指令序列的处理单元,它可以采用中央处理单元(cpu)、专用集成电路(asic)、现场可编程门阵列(fpga)等多种形式。
52.传统的中央处理单元的架构设计,使得在架构中控制单元、存储单元占用了很大一部分空间,而计算单元占用的空间反而不足,因此其在逻辑控制方面十分有效,而在大规模并行计算方面则效率不够。因此,开发出了各种专门的加速单元,用来针对不同功能和不同领域的计算进行更有效的提高运算速度的处理。本发明提出的加速单元是专用于加速神经网络模型的运算处理速度的处理单元。它是采用数据驱动并行计算的架构,用于处理各神经网络节点的大量运算(例如卷积、池化等)的处理单元。由于各神经网络节点的大量运算(例如卷积、池化等)中的数据和中间结果在整个计算过程中紧密联系,会被经常用到,用
现有的中央处理单元构架,由于中央处理单元的核内的内存容量很小,因此要大量频繁访问核外存储器,造成处理的低效。采用这种专用于加速神经网络模型的运算处理速度的加速单元,由于其每个核中具有适于神经网络计算用到的存储容量的片上内存,避免频繁访问核外部的存储器,就能大大提高处理效率,提高计算性能。
53.加速单元230要接受调度单元220的调度。如图2所示,存储器210中存储有各种神经网络模型,包括这些模型的节点和节点的权重和偏置数据等。这些神经网络模型当需要时被图2中的一个调度单元220部署到一个加速单元230。即,调度单元220可以通过指令的形式向加速单元230发送模型中的参数(如各节点的权重和偏置)在存储器210中的地址。加速单元230在实际使用该神经网络模型进行计算时,就会根据这些参数在存储器210中的地址,直接在存储器210中寻址这些参数,将其暂存在其片上内存中。加速单元230在实际使用该神经网络模型进行计算时,调度单元220还会将模型的输入参数通过指令的形式发送给加速单元230,暂存在加速单元230的片上内存中。这样,加速单元230就可以根据这些输入参数和模型中的参数(例如权重和偏置)进行推理计算。
54.调度单元和加速单元的内部结构
55.下面结合图3的调度单元220与加速单元230的内部结构图,具体说明调度单元220是如何调度加速单元230进行工作的。
56.如图3所示,调度单元220内包含多个处理器核222和被多个处理器核222共享的高速缓存221。每个处理器核222包括取指令单元203、指令译码单元224、指令发射单元225和指令执行单元226。
57.取指令单元223用于将要执行的指令从存储器210中搬运到指令寄存器(可以是图3示出的寄存器堆229中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。
58.取出指令后,调度单元220进入指令译码阶段,指令译码单元224按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元226的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。
59.指令发射单元225位于指令译码单元224与指令执行单元226之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元226,使得多个指令的并行操作成为可能。
60.指令发射单元225将指令发射到指令执行单元226后,指令执行单元226开始执行指令。但如果该指令执行单元226判断该指令应该是加速单元执行的,则将其转发到相应的加速单元执行。例如,如果该指令是一条神经网络推理(inference)的指令,指令执行单元226不再执行该指令,而是将该指令通过总线发送到加速单元230,由加速单元230执行。
61.加速单元30内部包括多个核236(图3中示出了4个核,但本领域技术人员应当理解,加速单元230中也可以包含其它数目的核236)、命令处理器237、直接存储访问机制235、和总线通道231。
62.总线通道231是指令从总线进出加速单元230的通道。
63.直接存储器访问(dma,direct memory access)机制235是一些计算机总线架构提
供的功能,它能使数据从附加设备直接写入计算机主板的存储器上。这种方式相比于设备之间所有的数据传输都要通过调度单元的方式,大大提高了数据访问的效率。正是因为有这样的机制,加速单元230的核可以直接访问存储器210,读取神经网络模型中的参数(例如各节点的权重和偏置)等,大大提高了数据访问效率。
64.命令处理器237将由调度单元220发送至加速单元230的指令分配给核236执行。指令执行单元226将需要加速单元230执行的待执行指令序列发送给加速单元230。该待执行指令序列从总线通道231进入后,缓存在命令处理器237,由命令处理器237选择核236,将指令序列分配给其执行。另外,命令处理器237还负责核236之间的同步操作。
65.加速单元核
66.图4是根据本发明一个实施例的加速单元核236的内部结构图。
67.在一个实施例中,如图4所示,加速单元核236包括张量引擎310、池化引擎320、存储器拷贝引擎330、定序器350、指令缓存器340、片上内存360、常数缓冲器370。
68.命令处理器237分配给加速单元核236的指令序列首先进入指令缓存器340缓存。然后,定序器350从指令缓存器340中按照先进先出的顺序取指令,根据指令的性质分配给张量引擎310、池化引擎320、或存储器拷贝引擎330执行。张量引擎310负责处理神经网络模型中的卷积和矩阵乘法等相关操作。池化引擎320负责处理神经网络模型中的池化操作。存储器拷贝引擎330负责核236内的片上内存360存储的操作数向核236间共享的存储器、或者其它核236内的片上内存360的拷贝。定序器350根据取出的指令是卷积、矩阵乘法、池化、还是操作数拷贝等操作性质,决定将指令分配给张量引擎310,池化引擎320,还是存储器拷贝引擎330。
69.片上内存360是存储神经网络模型中的模型参数、以及神经网络模型实际使用时的输入参数和各种中间结果的核内存储器。常数缓冲器370是存储神经网络模型中除权重参数之外的其它常量参数(例如,神经网络模型中的超参)的缓冲器。如上所述,在调度单元220将神经网络模型预先配置在加速单元230的过程中,调度单元220通过指令的形式向加速单元230发送模型中的参数在存储器210中的地址。这些参数包括节点的权重和其它参数(例如超参)。对于权重,加速单元230在实际的神经网络模型运算时,将它从存储器210相应的位置取出,放在片上内存360中。对于其它参数,加速单元230在实际的神经网络模型运算时,从存储器210相应的位置取出,放在常数缓冲器370中。另外,当实际开始推理(inference)的指令由命令处理器237分配给核236执行后,指令中的输入参数(给神经网络模型的输入)也存储在片上内存360。另外,当张量引擎310和池化引擎320进行卷积或池化运算后,得到的各种中间结果也存放在片上内存360中。
70.本发明实施例的神经网络模型的训练方法可以在上述的数据中心的服务器140中执行。根据神经网络模型的规模大小和训练数据集的规模大小,模型的训练方法可以由一台服务器140中的一个加速单元230来执行,或者由一台或多台服务器120中的多个加速单元230对神经网络模型执行分布式训练。加速单元230可以从存储器210中获取神经网络模型和训练数据,并基于获取的训练数据对神经网络模型进行训练。
71.神经网络模型训练包含前向传播、反向传播及参数更新三部分。目前的低精度量化压缩技术研究主要集中在神经网络模型的前向推理部分,对低精度反向传播及参数更新的研究较少。由于反向传播的运算量是前向传播的两倍,因此量化反向梯度传播至关重要。
72.然而,在低精度神经网络模型的训练过程中,由于参数更新值与低精度参数值相比过小,导致无法直接将参数更新值累加至低精度参数。为解决该问题,通常是在前向传播和方向传播中采用低精度参数值,同时对低精度参数值额外存储对应的高精度浮点值(通常为单精度浮点数),以便进行参数更新,这一方面增加了额外的存储资源,另一方面需要进行低精度与高精度类型数据的频繁转换操作,导致训练效率低下。
73.为此,本发明实施例提出了基于块浮点(block floating point,bfp)与延迟更新(lazy update)相结合的神经网络模型训练方案。该方案中,通过块浮点数的共享指数控制参数值、延迟更新值和参数更新值拥有相同的小数点位置,将参数更新值中相对于延迟更新值有效的部分(例如,参数更新值和延迟更新值的尾数重叠部分)加入到延迟更新值中,当延迟更新值足够大时,再根据延迟更新值来更新参数值。其中,参数更新值是指,在一次迭代中,基于参数梯度并采用优化算法(例如随机梯度下降法、动量梯度下降法等)计算得到的、待对参数值进行更新的数值;参数延迟更新值是指,从第一迭代到上一次迭代为止,参数更新值未更新到参数值中的部分,例如,到目前为止共进行了n次迭代,第i次迭代时的参数更新值为x
i
,x
i
更新到参数值中的部分为y
i
,则延迟更新值为这样,可以在前向传播、反向传播和参数更新过程中,都采用低精度参数值,而不需要额外保存低精度参数值对应的高精度浮点值,也不需要频繁的进行高精度与低精度类型数据的转换操作,在节约存储资源的同时提高了神经网络模型的训练速度。
74.以下先介绍将多个浮点数据量化为一个块浮点数据的原理,在后文模型的训练方法实施例中,再详细介绍延迟更新的过程。
75.块浮点数是一种对整块整型数据拥有同一共享指数的数据格式,即对多个浮点数据进行量化,以其中的最大数据为基准形成指数(整型数据),作为多个浮点数据的共享指数,然后,以共享指数为基准,分别生成每个浮点数据的尾数(整型数据)。也就是说,多个浮点数据形成一个数据块,该数据块可以表示为一个块浮点数。
76.图5示出了本发明实施例中块浮点数的表示方法示意图。图5所示的块浮点数是一个位宽为8比特的块浮点数,其尾数部分为8位(包括符号位),指数部分也为8位(包括符号位),该块浮点数对应于3个浮点数据。
77.需要说明的是,在本发明实施例中,块浮点数的位宽指尾数部分的位宽(即尾数部分具有多少个比特位),并且,不同位宽的块浮点数,指数部分的位宽是相同的,例如都为8比特。这样,8位块浮点数,其指数部分和尾数部分都是8比特;16位块浮点数,其指数部分为16比特,尾数部分为8比特,32位块浮点数,其指数部分为32比特,尾数部分为8比特;n位块浮点数,其指数部分为n比特,尾数部分为8比特。
78.将浮点数量化为整数,通常可以采用仿射量化方式,公式如下:
79.r=s(q-z)
80.其中,s(扩展系数)和z(零点)表示量化参数,r值指的是浮点值,q指的是量化值。通常情况下,s用32位单精度浮点或定点表示,z被映射于量化值的真正零点,其中z与q均为整型数据。
81.为更有效的在定制化硬件中提高实现效率,在对称量化中将扩展系数约束至2的指数的格式,同时将z置为0。在本发明实施例中采用该量化方式,能够通过比特位移的方式代替定点数和浮点数间存在的高复杂度乘法计算。
82.这样,量化公式可以表示为:
[0083][0084]
其中,为扩展系数,e
s
为指数,q为尾数。对于多个浮点数r,其取值范围为r∈[r
min
,r
max
],则多个浮点数对应的块浮点数的共享指数可表示为下述方式:
[0085]
e
s
=ceil(log2{max(|r
min
|,|r
max
|)})-(b-1)
[0086]
其中,r
min
为多个浮点数的最小值,r
max
为多个浮点数的最大值,ceil()函数为向上取整,b表示浮点数的位宽,例如,对于32位单精度浮点数,b=32。
[0087]
对于两个块浮点数的乘法为:
[0088]
i
a
·
b
=i
a
·
i
b
,e
a
·
b
=e
a
e
b
[0089]
其中,i
a
、i
b
分别为两个块浮点数的尾数部分,e
a
、e
b
分别为两个块浮点数的指数部分,i
a
·
b
为乘积的尾数部分,e
a
·
b
为乘积的指数部分。本发明实施例中,对于中间计算结果,通常用32位块浮点数暂存,其主要目的是为了防止后续卷积中乘累加操作时出现溢出的情况,这样,基于上述公式获得了一个新的共享指数。
[0090]
以上给出了一种将多个浮点数量化为块浮点数的实现方式,本发明实施例的神经网络模型的训练中,可以采用该方式将多个浮点数量化为块浮点数,也可以采用现有技术中将多个浮点数量化为块浮点数的其他实现方式,本发明对具体采用何种量化方式不做限制,本领域技术人员可以根据具体需求做合理选择。
[0091]
图6示出了根据本发明一个实施例的神经网络模型的训练方法600的流程图。方法600可以在前述的服务器140中执行,例如由一台服务器140中的一个加速单元230来执行,或者由一台或多台服务器120中的多个加速单元230对神经网络模型执行分布式训练。加速单元230可以从存储器210中获取神经网络模型和训练数据,并基于获取的训练数据对神经网络模型进行训练。方法600可以应用于图像、语音、视频、机器翻译等多种场景,例如,在图像场景下,相应的神经网络模型可以为图像分类模型、目标检测模型等;在机器翻译场景下,相应的神经网络模型可以为神经网络机器翻译模型。如图6所示,方法600包含前向传播步骤s602、反向传播步骤s604和参数更新步骤s606。
[0092]
在步骤s602中,将训练样本的样本特征输入到神经网络模型中,经神经网络模型的各网络层的处理,得到神经网络模型的模型输出,基于模型输出与训练样本的样本标签计算损失函数。
[0093]
训练数据的类型可以是:图像样本,语音样本,自然语言处理样本。例如,待训练的神经网络模型是神经网络机器翻译模型时,每条训练数据是一个文本对,该文本对是第一语种文本与第二语种文本的对应关系,第一语种文本为样本特征,作为模型的输入,第二语种文本是样本标签。
[0094]
神经网络模型的第一层网络层以样本特征作为输入,基于输入与第一层网络层的参数(权重、偏置)计算激活值,然后,第二层网络层以第一层网络层输出的激活值作为输入,基于输入与第二层网络层的参数计算激活值,以此类推,最后由神经网络模型的输出层输出的激活值作为模型的输出,并基于模型输出与训练样本的样本标签计算损失函数(loss)。
[0095]
在本发明实施例中,执行前向传播过程时,会将模型输入、各网络层的激活值以及
各网络层的参数量化为块浮点数,具体量化方式可以采用前文描述的方式,也可以采用现有技术中的其他块浮点量化方式。为便于描述,将第一层网络的输入也称为激活值,并将各网络层的参数对应的块浮点数称为第一块浮点数,将激活值对应的块浮点数称为第二块浮点数。第一块浮点数和第二块浮点数采用相同的位宽,例如,均为8位块浮点数。
[0096]
这样,在前向传播中,当前网络层执行的处理为:获取当前网络层的参数对应的第一块浮点数;将上一层网络层输出的激活值量化为第二块浮点数;基于第一块浮点数和第二块浮点数计算当前网络层的激活值,并输出到下一层网络层。
[0097]
需要说明的是,网络层对激活值的计算通常是以张量为单位的,即基于输入的激活值张量和本网络层的参数张量来计算激活值,激活值张量是一个网络层(或网络层中的网络单元)的所有激活值构成的张量,参数张量是一个网络层(网络层中的网络单元)的所有参数构成的张量。相应地,块浮点数也是以张量为粒度,第一块浮点数是将参数张量对应的数据块量化得到的块浮点数,第二块浮点数是将激活值张量对应的数据块量化得到的块浮点数。
[0098]
神经网络模型通常包括多个卷积层和一个或多个全连接层,卷积层包括卷积单元、池化单元和激活函数单元,全连接层包括线性处理单元和激活函数单元。其中,池化单元不具有参数和参数梯度。
[0099]
图7示出了本发明实施例中卷积层的训练过程示意图。如图7所示,在卷积层中执行的前向传播处理包括以下流程:
[0100]
1)采用直接存储器(dma)访问的方式从存储器(ddr)中获取本网络层的参数对应的第一块浮点数和上一层网络层输出的激活值,将激活值量化为第二块浮点数,将第一块浮点数和第二块浮点数输入到卷积单元进行处理,并输出处理得到的线性值。另外,还将第一块浮点数和第二块浮点数暂存到存储器中,以便反向传播时访问。在本实施例中,第一块浮点数和第二块浮点数均为8位块浮点数(8-bit bfp),输出的线性值为32位块浮点数(32-bit bfp);
[0101]
假设当前卷积层为第l层,则卷积单元中执行的处理为:
[0102]
i
l
=i
l-1
*w
l
[0103]
其中,*代表卷积运算,i
l-1
为上一层网络层输出的激活值对应的第二块浮点数,i
l
为经卷积处理得到的线性值,w
l
为卷积单元的参数对应的第一块浮点数。
[0104]
2)将输出的线性值量化为位宽为8的量化线性值(8-bit bfp);
[0105]
3)将量化线性值输入到池化单元进行处理,输出池化值(8-bit bfp);
[0106]
4)将池化值输入到激活函数单元进行处理,输出激活值(32-bit bfp),当前卷积层的前向传播完成。
[0107]
类似地,在全连接层中执行的前向传播处理流程包括:
[0108]
1)将第一块浮点数和第二块浮点数输入到线性处理单元进行处理,输出处理得到的线性值(32-bit bfp);
[0109]
2)将输出的线性值量化为位宽为8的量化线性值(8-bit bfp);
[0110]
3)将量化线性值输入到激活函数单元进行处理,输出激活值(32-bit bfp),当前全连接层的前向传播完成。
[0111]
前向传播完成后,方法600进入步骤s604。在步骤s604中,基于损失函数计算输出
层的激活值梯度,并从输出层开始,逐层计算当前网络层的参数梯度和下一网络层的激活值梯度。
[0112]
在本发明实施例中,执行反向传播过程时,会将激活值梯度量化为块浮点数,具体量化方式可以采用前文描述的方式,也可以采用现有技术中的其他块浮点量化方式。为便于描述,将激活值梯度对应的块浮点数称为第三块浮点数。第三块浮点数的位宽大于第一块浮点数和第二块浮点数,例如,为16位块浮点数(16-bit bfp)。
[0113]
这样,在反向传播中,当前网络层执行的处理为:将下一层网络层输出的激活值梯度量化为第三块浮点数;基于第三块浮点数和第一块浮点数计算上一层网络层的激活值梯度,并输出到上一层网络层;基于第三块浮点数和第二块浮点数计算当前网络层的参数梯度。
[0114]
继续参照图7,在神经网络模型的卷积层中执行的反向传播处理包括以下流程:
[0115]
1)将下一层网络层输出的激活值梯度量化为第三块浮点数(16-bit bfp);
[0116]
申请人发现,为保证神经网络模型的训练精度不受损失,反向传播的梯度需要比参数和激活值更大的位宽,因此,在本发明实施例中,将反向传播中的各种梯度的位宽设置为16位。
[0117]
2)基于激活函数单元采用的激活函数对第三块浮点数进行反向求导(激活求导),得到池化值梯度(32-bit bfp);
[0118]
反向求导是根据链式法则进行的求导,已知激活值梯度,则可以对激活函数进行求导,将求导结果与激活值梯度相乘,得到激活函数单元的输入(也即池化单元的输出)的导数,本发明中将其称为池化值梯度。
[0119]
在本步骤以及后续步骤中,关于在反向传播中利用链式法则进行求导的原理和过程,可参考相关现有技术,这里不做赘述。
[0120]
3)基于池化单元采用的池化模板对池化值梯度进行反向求导(池化求导),得到线性值梯度(32-bit bfp);
[0121]
4)将线性值梯度量化为量化线性值梯度(16-bit bfp)
[0122]
5)基于第一块浮点数(即卷积单元的参数)对量化线性值梯度进行反向求导(卷积求导1),得到上一层网络层的激活值梯度(32-bit bfp);
[0123]
6)基于第二块浮点数(即输入到卷积单元的激活值)对线性值梯度进行反向求导(卷积求导2),得到当前网络层的参数梯度(32-bit bfp)。
[0124]
假设当前卷积层为第l层,则与卷积单元对应的反向传播处理为:
[0125]
g
l-1
=g
l
*rot180(w
l
)
[0126]
g
w
=i
l-1
*g
l
[0127]
其中,*代表卷积运算,w
l
为卷积单元的参数对应的第一块浮点数,g
l
为池化求导结果,g
l-1
为上一层网络层的激活值梯度,rot180()表示对矩阵翻转180度,i
l-1
为输入到当前网络层的激活值梯度,g
w
为当前网络层的参数梯度。
[0128]
由于g
l-1
的计算贯穿整个反向传播数据流,而g
w
的计算可与g
l-1
的计算并行,且不会阻断向更低层的数据流传播。因此,反向传播阶段,激活值梯度可表示为两个不同的数据精度,对于下一层g
l-1
的计算,其量化为16位bfp的格式,对于g
w
的计算,则保持32位bfp的格式。
[0129]
类似地,在全连接层中执行的反向传播处理流程包括:
[0130]
1)将下一层网络层输出的激活值梯度量化为第三块浮点数(16-bit bfp);
[0131]
2)基于激活函数单元采用的激活函数对第三块浮点数进行反向求导,得到线性值梯度(32-bit bfp);
[0132]
3)将线性值梯度量化为量化线性值梯度(16-bit bfp);
[0133]
4)基于第一块浮点数(即线性处理单元的参数)对量化线性值梯度进行反向求导,得到上一层网络层的激活值梯度(32-bit bfp);
[0134]
5)基于第二块浮点数(即输入到线性处理单元的激活值)对线性值梯度进行反向求导,得到当前网络层的参数梯度(32-bit bfp)。
[0135]
反向传播完成后,方法600进入步骤s606。在步骤s606中,对神经网络模型的参数进行更新。可以依次或者并行地对神经网络模型的每一个网络层的参数进行更新,先基于当前网络层的参数梯度计算当前网络层的参数更新值,生成与参数更新值对应的第四块浮点数(32-bit bfp),然后,基于第一块浮点数和第四块浮点数对当前网络层的参数进行更新,生成更新后的参数对应的第一块浮点数。
[0136]
由于参数更新值与低精度参数值相比过小,导致无法直接将参数更新值累加至低精度参数,因此,在步骤中,采用延迟更新(lazy update)的方法来对参数进行更新。通过块浮点数的共享指数控制参数值、延迟更新值和参数更新值拥有相同的小数点位置,将参数更新值中相对于延迟更新值有效的部分(例如,参数更新值和延迟更新值的尾数重叠部分)加入到延迟更新值中,当延迟更新值足够大时,再根据延迟更新值来更新参数值。其中,参数更新值是指,在一次迭代中,基于参数梯度并采用优化算法(例如随机梯度下降法、动量梯度下降法等)计算得到的、待对参数值进行更新的数值;参数延迟更新值是指,从第一迭代到上一次迭代为止,参数更新值未更新到参数值中的部分。
[0137]
图8示出了本发明实施例中参数更新过程示意图。如图8所示,对参数进行延迟更新的过程包括:
[0138]
1)获取上一次迭代后的延迟更新值对应的第五块浮点数(16-bit bfp);
[0139]
2)将第四块浮点数的尾数所右移动第一预定数值位后,累加到第五块浮点数中,其中,第一预定数值为第五块浮点数的指数与第四块浮点数的指数之差。在进行尾数的移位操作时,截断的部分采用四舍五入的方式添加到未截断部分。
[0140]
3)计算第一块浮点数与尾数向右移动第二预定数值位后的第五块浮点数之差,得到第一差值。在一种实现方式中,第二预定数值为第五块浮点数的位宽-1(图中为15),同样,在进行尾数的移位操作时,截断的部分采用四舍五入的方式添加到未截断部分,相当于将延迟更新值的最高位以四舍五入的方式更新到参数中。在另一种实现方式中,第二预定数值也可以取其他数值,使得移位后的延迟更新值与参数值的尾数有重叠部分,并将延迟更新值的重叠部分更新到参数中。
[0141]
4)计算算第一块浮点数与第五块浮点数之和,然后减去所述第一差值,作为本次迭代后的延迟更新值对应的第五块浮点数;
[0142]
5)将所述第一块浮点数更新为所述第一差值。
[0143]
上述延迟更新过程用算法表示如下:
[0144]
w
acc
=w
acc
(w
ch
>>(e
acc-e
ch
)).round()
[0145]
w
wu
=w-(w
acc
>>(b-1)).round()
[0146]
w
acc

(w w
acc
)-w
wu
[0147]
w

w
wu
[0148]
其中,w为参数值的尾数部分,w
ch
为参数更新值的尾数部分,e
ch
为参数更新值的指数部分,w
acc
为延迟更新值的尾数部分,e
acc
为延迟更新值的指数部分,w
wu
为中间变量,b为延迟更新值的位宽(本实施例中为16),round()为四舍五入取整,

表示将右边的值赋给左边。
[0149]
执行步骤s602~步骤s606后,完成一次迭代。可以反复执行上述步骤s602~步骤s606,当所述神经网络模型收敛,或者,对参数的迭代次数达到预设次数时,停止训练,得到训练好的神经网络模型。
[0150]
在一个实施例中,待训练的神经网络模型为神经网络机器翻译模型,则,将最终的参数应用到模型中,得到训练好的神经网络机器翻译模型,然后,基于所述神经网络机器翻译模型翻译待翻译信息,得到翻译结果,并输出所述翻译结果。
[0151]
根据本发明实施例的神经网络模型的训练方案,基于块浮点量化与延迟更新结合,通过块浮点数的共享指数控制参数值、延迟更新值和参数更新值拥有相同的小数点位置,将参数更新值中相对于延迟更新值有效的部分加入到延迟更新值中,当延迟更新值足够大时,再根据延迟更新值来更新参数值。这样,可以在前向传播、反向传播和参数更新过程中,都采用低精度参数值,而不需要额外保存低精度参数值对应的高精度浮点值,也不需要频繁的进行高精度与低精度类型数据的转换操作,在节约存储资源的同时提高了神经网络模型的训练速度。
[0152]
这样,在一些应用场景中,上述训练方法也可由终端设备执行,终端设备中部署有上述的加速单元,例如神经网络处理单元(npu)、图形处理单元(gpu)等。终端设备可以是桌面型计算设备、膝上型计算设备、平板型计算设备、移动电话计算设备、音箱计算设备、车辆的计算设备(例如,车载通信系统、车载娱乐系统、车载导航系统)、包括计算设备的可穿戴装置(例如,具有计算设备的手表、具有计算设备的眼镜)或者包括计算设备的家居装置(例如,具有计算设备的音箱、具有计算设备的电视、具有计算设备的洗衣机)。
[0153]
图9示出了根据本发明一个实施例的神经网络模型的训练装置900的示意图。参照图9,装置900包括前向传播模块910、反向传播模块920和参数更新模块930,其中:
[0154]
前向传播模块910适于:
[0155]
获取当前网络层的参数对应的第一块浮点数;
[0156]
将上一层网络层输出的激活值量化为第二块浮点数,其中第一块浮点数和第二块浮点数的位宽为第一预定值;
[0157]
基于第一块浮点数和第二块浮点数计算当前网络层的激活值,并输出到下一层网络层;
[0158]
反向传播模块920适于:
[0159]
将下一层网络层输出的激活值梯度量化为第三块浮点数,其中第三块浮点数的位宽为第二预定值;
[0160]
基于第三块浮点数和第一块浮点数计算上一层网络层的激活值梯度,并输出到上一层网络层;
[0161]
基于第三块浮点数和第二块浮点数计算当前网络层的参数梯度;
[0162]
参数更新模块930适于:
[0163]
基于参数梯度计算当前网络层的参数更新值,生成与参数更新值对应的第四块浮点数,其中第四块浮点数的位宽为第三预定值;
[0164]
基于第一块浮点数和第四块浮点数对当前网络层的参数进行更新,生成更新后的参数对应的第一块浮点数。
[0165]
前向传播模块910、反向传播模块920和参数更新模块930的所执行的具体处理,可参照上述方法600,这里不做赘述。
[0166]
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、u盘、软盘、cd-rom或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
[0167]
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的方法。
[0168]
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
[0169]
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的较佳实施方式。
[0170]
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0171]
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0172]
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个
子模块。
[0173]
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0174]
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0175]
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
[0176]
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
[0177]
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜