CN113469354A - 受存储器限制的神经网络训练 - Google Patents
受存储器限制的神经网络训练 Download PDFInfo
- Publication number
- CN113469354A CN113469354A CN202110342087.0A CN202110342087A CN113469354A CN 113469354 A CN113469354 A CN 113469354A CN 202110342087 A CN202110342087 A CN 202110342087A CN 113469354 A CN113469354 A CN 113469354A
- Authority
- CN
- China
- Prior art keywords
- intermediate output
- layer
- neural network
- gradient
- memory
- 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.)
- Granted
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 260
- 238000012549 training Methods 0.000 title claims abstract description 157
- 238000000034 method Methods 0.000 claims abstract description 59
- 238000012545 processing Methods 0.000 description 105
- 238000013523 data management Methods 0.000 description 44
- 238000007726 management method Methods 0.000 description 32
- 230000008569 process Effects 0.000 description 27
- 238000004364 calculation method Methods 0.000 description 24
- 230000001133 acceleration Effects 0.000 description 20
- 230000004913 activation Effects 0.000 description 19
- 238000001994 activation Methods 0.000 description 19
- 238000011176 pooling Methods 0.000 description 19
- 230000006870 function Effects 0.000 description 17
- 208000025174 PANDAS Diseases 0.000 description 10
- 208000021155 Paediatric autoimmune neuropsychiatric disorders associated with streptococcal infection Diseases 0.000 description 10
- 240000004718 Panda Species 0.000 description 10
- 235000016496 Panda oleosa Nutrition 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 230000036961 partial effect Effects 0.000 description 8
- 239000011159 matrix material Substances 0.000 description 7
- 230000000644 propagated effect Effects 0.000 description 7
- 239000013598 vector Substances 0.000 description 7
- 238000013527 convolutional neural network Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000002829 reductive effect Effects 0.000 description 4
- 230000000007 visual effect Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000013529 biological neural network Methods 0.000 description 3
- 239000004744 fabric Substances 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000000717 retained effect Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 241000282326 Felis catus Species 0.000 description 1
- 241001465754 Metazoa Species 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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/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
-
- 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/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
- 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/044—Recurrent networks, e.g. Hopfield networks
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
Abstract
本公开提供了用于训练神经网络的方法和系统。在一个示例中,装置包括存储指令的存储器;和硬件处理器,被配置为执行所述指令以:控制神经网络处理器执行损失梯度操作,以生成数据梯度;在所述损失梯度操作完成之后,控制所述神经网络处理器执行正向传播操作,以生成中间输出;基于所述数据梯度和所述中间输出控制所述神经网络处理器执行反向传播操作,以生成权重梯度;从所述神经网络处理器中接收所述权重梯度;以及基于所述权重梯度更新神经网络的权重。
Description
背景技术
人工神经网络是具有基于生物神经网络的架构的计算系统。人工神经网络可以包括权重集。通过计算,可以将权重与输入数据进行合并来提取信息,并基于该信息做出决策。例如,对于用于检测对象的计算机视觉应用程序,人工神经网络可以合并权重与输入图像,以从图像中提取对象的某些特征。人工神经网络可以基于提取的特征生成关于图像中是否存在对象的决策。
可以通过训练过程生成/更新人工神经网络的权重集,其中人工神经网络可以学习如何在应用程序中执行某项计算任务。训练过程涉及向人工神经网络提供训练输入数据,并由支持特定决策(例如,检测或不检测图像中的对象)的参考输出集标记训练输入数据。人工神经网络可以执行计算来合并权重与训练输入数据,以生成训练输出数据集,训练输出数据集可以与参考输出数据集进行对比以生成差异集。在训练期间,可以向人工神经网络提供不同的训练输入数据集来生成不同的训练输出数据集。可以根据目标调整人工神经网络的权重集,例如尽量减少训练输出数据集和参考输出数据集之间的差异。
为了提高人工神经网络生成正确决策的可能性,通常使用包含大量操作场景的大量训练输入数据来训练人工神经网络。因此,训练操作通常需要大量资源,诸如存储器资源。
附图说明
将参考附图描述根据本公开的各种实施例,其中:
图1示出了使用本文公开的技术处理数据的分类设备的示例;
图2A至图2B为示出了根据本公开的某些方面使用本文公开的技术的预测模型和计算的简化框图;
图3A至图3D示出了神经网络训练操作的示例;
图4示出了根据本公开的某些方面用于控制神经网络处理器处的训练操作的训练模块的示例;
图5A至图5B示出了根据本公开的某些方面由图4所示的训练模块控制的训练操作的示例;
图6A至图6E示出了根据本公开的某些方面由图4所示的训练模块控制的训练操作的示例;
图7示出了根据本公开的某些方面由训练模块用于控制训练操作的启发信息的示例;
图8示出了根据本公开的某些方面的训练操作的流程图示例;
图9示出了支持图5A至图6E的训练操作示例的集成电路的示例;和
图10示出了支持图5A至图6E的训练操作示例的主机系统的示例。
具体实施方式
本公开的示例涉及神经网络处理,特别涉及在分布式系统中执行神经网络训练过程。
人工神经网络(以下简称神经网络)通常在诸如神经网络处理器等计算系统中实现,以具有基于生物神经网络的架构,并以类似于生物神经网络的方式处理输入数据。神经网络通常包括多个级联神经网络层,其中每层包括一个权重集。在推理操作中,第一神经网络层可以接收输入数据集,将输入数据与第一神经网络层的第一权重合并(例如,将输入数据集与权重相乘并对乘积求和,再对总和进行后处理等),以生成第一中间输出,并在第一正向传播操作中将第一中间输出传播至第二神经网络层。第二神经网络层将第一中间输出与第二神经网络层的第二权重合并,以执行第二正向传播操作,从而生成第二中间输出,并将第二中间输出传播至更高的神经网络层。正向传播操作可以始于第一神经网络层,终于最高神经网络层。每个神经网络层的正向传播操作可以表示从输入数据集提取和处理信息的不同阶段。随后可以基于最高神经网络层的输出数据进行决策。例如,每个神经网络层可以从图像提取和/或处理特征,并且可以根据神经网络层对已提取特征的处理结果生成关于图像中是否包含对象的决策。
可以通过训练操作生成和/或更新神经网络的权重集,以提高神经网络生成正确决策的可能性。可以由执行干扰操作的同一计算系统(例如,神经网络处理器)或不同的系统执行训练操作。训练操作示例可以采用梯度下降算法。具体地,作为训练操作的一部分,可以使用每个神经网络层的权重集对训练输入数据集执行上述正向传播操作,以在最高神经网络层级生成训练输出数据集。
可以将训练输出数据和目标输出数据输入损失梯度操作计算出第一输出误差梯度,以表示与训练输出数据的输出误差(训练输出数据和目标输出数据之间)的偏导数。可以在最高神经网络层执行第一反向传播操作,其中第一输出误差梯度可以与前一神经网络层(次高神经网络层)的中间输出合并,以生成最高神经网络层的第一权重梯度。第一权重梯度可以表示与最高神经网络层的权重的输出误差的偏导数。第一权重梯度可以用于更新最高神经网络层的权重,以尽量减少输出误差。
此外,最高神经网络层接收的第一输出误差梯度可以与最高神经网络层的初始权重合并,以获得第二输出误差梯度。在第二反向传播操作中,可以将第二输出误差梯度传播回前一层,以生成第二权重梯度,从而更新前一层的权重,并在前一层之前生成将传播至该层的第三输出误差梯度。输出误差梯度可以通过连续的反向传播操作一直传播至第一神经网络层,并且可以基于为每层生成的权重梯度更新每层的权重。可以对相同的输入数据集重复训练操作,进行多次迭代,直至达到损失目标(例如,最高神经网络层的第一输出误差阈值)。
训练操作通常涉及庞大的存储器资源。例如,每层在正向传播操作中生成的中间输出通常存储在存储器中。随后从存储器中取出中间输出,以支持生成每层的反向传播操作的权重梯度。如向训练过程提供大训练数据集,和/或受训神经网络具有大量层数,则可以从正向传播操作中产生大中间输出数据集作为结果。可能需要大容量存储器存储大中间输出数据集和其他数据(例如,训练数据集和权重等),以支持训练操作。对于某些类型的存储器设备,诸如神经网络处理器的片上静态随机存取存储器(SRAM)、高速存储器设备(例如,高带宽存储器(HBM))等,可能无法实现此类大容量存储器的容量。
如需在计算和存储器资源均有限的计算系统中执行训练操作,方法之一是将训练数据集划分为多个部分。随后可以将训练操作划分为多个批次,并使每批均在训练数据集的一部分上执行。可以确定包含在一部分中的训练数据集的大小,使得从该部分训练数据集生成的中间输出数据可以纳入存储器。计算系统随后将依次执行批处理。对于每批,计算系统还可以针对每层依次执行正向传播操作和反向传播操作,并使用存储器存储和获取每层的中间输出数据、权重、权重梯度和数据梯度。计算系统可以更新每批中每层的权重,直至训练数据集的所有部分均已处理。计算系统还可以执行各批次的多次迭代,直至达到损失目标。
虽然划分训练数据集以将相应的中间输出数据纳入存储器能减少存储器施加的限制,但此类布置会导致效率低下并大幅延长训练时间。具体地,通过要求从训练数据集的一部分生成的所有中间输出数据纳入存储器,可以减小训练数据集的该部分的大小,这可能会导致大量批次的训练操作。因为训练操作的各批依次执行,并且可以执行训练操作各批次的多次迭代以实现损失目标,所以大量批次可能导致整个训练操作需极长时间方可完成。此外,划分训练数据集以将相应的中间输出数据纳入存储器会导致计算资源低效利用。例如,在训练操作的某一批次期间,未利用计算系统中的某些计算资源。当计算系统具有的计算能力超过处理该批次的训练数据部分和/或中间输出所需的计算能力时,可能发生这种情况。因为计算资源被低效利用,所以训练操作花费的时间远超计算系统本可能花费的时间。
本公开的示例涉及神经网络处理,特别涉及在诸如神经网络处理器等计算系统中执行多层神经网络的训练操作。神经网络至少包括第一神经网络层和第二神经网络层。第二神经网络层可以是最高神经网络层。
作为训练操作的一部分,计算系统可以基于对第一层的输入数据和第一神经网络层的第一权重,对第一层执行第一正向传播操作以生成第一中间输出。计算系统可以基于对第一中间输出和第二神经网络层的第二权重,对第二神经网络层执行第二正向传播操作以生成第二中间输出。当第二正向传播操作结束时,计算系统可以将第二中间输出,而不是第一中间输出存储在存储器中。例如,计算系统可以在第一正向传播操作期间将第一中间输出存储在存储器中,随后在第二正向传播操作期间用存储器中的第二中间输出覆盖第一中间输出。因为存储器不需要同时存储第一中间输出和第二中间输出,所以训练操作可以接收更大的输入数据集,并生成更大的第一中间输出数据集和更大的第二中间输出数据集,即使存储器缺乏同时存储第一中间输出数据集和第二中间输出数据集的能力。
计算系统随后可以从存储器获得第二中间输出,并基于第二中间输出和目标输出执行损失梯度操作,以计算第一输出误差梯度。因为存储器此时并未存储第一中间输出,所以计算系统还可以基于输入数据重复第一正向传播操作,以重新生成第一中间输出。计算系统随后可以对第二神经网络层执行第一反向传播操作,以将第一中间输出与第一输出误差梯度合并,从而生成第一权重梯度,并将第一输出误差梯度与第二权重合并,从而生成第二输出误差梯度。计算系统还可以执行第二反向传播操作神经网络层,以将输入数据与第二输出误差梯度合并,从而生成第二权重梯度。计算系统可以将第一权重梯度和第二权重梯度传输至训练模块,以分别更新第二神经网络层的第二权重和第一神经网络层的第一权重。
可以由训练模块管理计算系统的训练操作。训练模块可以选择存储第二中间输出覆盖第一中间输出,并且基于各种标准/方法控制计算系统重复第一正向传播操作。例如,可以遵循预定义模式进行选择,其中,当正向传播操作完成时,神经网络层的子集将中间输出存储在存储器中,并且子集的每一神经网络层均由预定数量的神经网络层隔开。作为说明性示例,神经网络层可以包括以四个神经网络层为一组的层组,并且该模式可以指定每组中的一个神经网络层在正向传播操作结束时将中间输出存储在存储器中,而该组剩余的三个神经网络层在正向传播操作结束时不存储中间输出。基于该模式,训练模块随后可以确定第二神经网络层将存储第二中间输出,而第一神经网络层不会存储第一中间输出。
作为另一示例,可以基于诸如神经网络的拓扑,存储器的容量,计算系统的可用计算资源等各种启发法进行选择。例如,基于神经网络的拓扑,训练模块可以确定第一中间输出具有的数据大小小于第二中间输出。作为另一示例,基于计算系统的可用计算资源,因为第二神经网络层比第一神经网络层更复杂(例如,更复杂的算术操作和后处理操作)等原因,所以训练模块还可以确定重新生成第一中间输出比重新生成第二中间输出所需时间更短。以上所述均可以允许训练模块选择第二中间输出而不是第一中间输出存储在存储器中。在一些示例中,训练模块可以接收指示计算系统的可用计算和存储器资源以及神经网络的拓扑的启发信息,并基于启发信息调整选择,而不是遵循预定义模式。
利用上述技术,存储器不需要在反向传播操作前存储神经网络中所有层的中间输出。这可以减轻存储器资源对训练操作的限制,并允许对更大的输入数据集开展训练操作。在批量执行训练操作的情况下,可以减少批次数量,从而大幅缩短训练操作的整体完成时间。此外,当基于启发法(例如,神经网络拓扑和可用计算资源等)选择神经网络层存储中间输出时,可以根据可用的计算和存储器资源调整选择,以尽量缩短训练操作的整体完成时间。以上所述均可以大幅提高训练操作的效率。
以下说明将描述各种示例。出于解释的目的,其中阐述了具体配置和细节,以便提供对示例的透彻理解。但是,对于本领域技术人员显而易见的是,无需此类具体细节也可以实践该示例。此外,为免混淆所述实施例,可以省略或简化众所周知的特征。
图1示出了使用本文公开的技术处理数据的分类设备100的示例;例如,分类设备100可以是操作软件应用102和预测模型103预测数据序列中包括的信息,并基于预测执行预定功能的计算设备。例如,分类设备100可以是用于识别图像中的特定对象(例如,文本和人等)的图像识别服务的一部分。应理解图像识别服务仅作为说明性示例提供,并且本文公开的技术可以用于其他数据处理应用程序,例如基于文本的数据处理(例如,搜索查询处理)和音频数据处理等。此外,分类设备100可以并行或在不同时间操作多个不同的预测模型,以处理不同的输入数据。
在一些示例中,可以在多租户计算服务系统中提供图像识别服务。多租户计算服务系统通常可以包括多个服务器,该多个服务器可以承载数据并被多个客户端或组成用于运行实例,诸如虚拟机实例或裸机实例(例如,直接在服务器硬件上运行的操作系统)。在大多数实例中,诸如裸机或虚拟机实例,多租户计算服务系统可以在客户端需要它们时被分配给客户端,并在不再需要它们时被停用,从而可以将资源重新分配给其他客户端。在本公开中,术语“租户”、“客户端”和“客户”可以互换使用,尽管这些术语不一定意味着存在任何特定的业务安排。术语“实例”可以指例如直接在服务器硬件上执行或作为虚拟机执行的实例。不同类型的实例通常对应于不同的硬件功能和/或硬件布置(例如,不同数量的可用存储器和/或处理硬件)。在图1的示例中,多租户计算服务系统可以在客户端需要图像识别服务时提供该服务,并且该服务在不再被需要后停用,从而可以将支持图像识别服务的资源(例如,对软件应用程序102的访问以及用于处理软件应用程序102的底层硬件资源)重新分配给其他客户端。不同客户端(或一个客户端)可以请求应用程序102使用包括预测模型103的相同或不同预测模型执行对不同输入数据的处理。
在图1的示例中,软件应用程序102可以接收来自用户的图像104的像素数据。图像104可以包括像素阵列。软件应用程序102可以对像素数据执行分析,并预测图像104中描绘的一个或多个对象106。分析可以包括例如将像素数据与一组预定特征数据进行比较。预定特征数据可以包括与一组预定视觉图像特征(诸如鼻子对象、嘴对象等)相关联的数据。预定特征数据还可以包括与非视觉图像特征或与视觉和非视觉图像特征组合相关联的数据。如下文将要更详细讨论的,软件应用程序102可以使用预测模型103来基于图像104的像素数据计算一组分数。该组分数可以表示例如图像104包括特征数据所表示的图像特征的可能性。软件应用程序102随后可以基于分数确定关于图像104内容的其他信息。例如,基于分数,软件应用程序102可以确定图像104是例如熊猫、猫或其他对象的图像。
预测模型103可以采用人工神经网络形式。人工神经网络可以包括多个处理节点,每个处理节点被配置为处理部分输入像素数据,或进一步处理来自其他处理节点的中间输出。图1示出了使用本文所公开技术的预测模型103的示例。在图1中,预测模型103可以是多层神经网络,诸如深度神经网络(DNN)、卷积神经网络(CNN)等。预测模型103可以包括输入层207、包括中间层209和211的一组中间层以及输出层(图2A中未示出)。应当理解,预测模型103还可以包括其他不同类型的神经网络,包括例如长短时记忆(LSTM)、多层感知(MTP)、多尺度密集网络(MSDNET)等。
层207可以处理表示图像104的不同部分的像素数据。例如,在图2A的示例中,层207可以处理图像204的像素数据。层207的每个处理节点被分配来接收对应于图像104中预定像素的像素值(例如,x0,x1,x2,...xn),并将具有接收的像素值的一个或多个权重发送到层209。在预测模型203是DNN的情况下,可以向层207的每个处理节点分配基于矩阵W1定义的权重集。层207的每个处理节点可以将接收的像素值和分配的权重发送到层209的每个处理节点。在预测模型103是CNN的情况下,层207的各处理节点组可以共享权重集,每组可以将该权重集和本处理节点组接收的像素值发送到层209的单个处理节点。不同的神经网络模型可以包括不同的拓扑(例如,包括不同数量层、层间的不同连接等)和/或包括每层的不同权重集。
层209可以处理来自层207的缩放输出,以生成一组中间输出。例如,假设层209的处理节点210a连接到层207中的n个处理节点,则处理节点210a可以基于以下方程式生成从层207接收的缩放输出之和:
这里,sum210a表示处理节点210a生成的中间输出。W1i×xi表示层207的处理节点对具有相关联权重(例如W10)的特定像素值(例如x0)的缩放。在预测模型103是DNN的情况下,层209的每个处理节点可以基于来自层207的每个处理节点的像素值的缩放生成和,随后通过对缩放像素值求和来生成和(例如Sum210a)。该和还可以表示包含若干元素的输入向量(例如像素值)和权重向量(例如W1)之间的点积。在一些示例中,可以向偏差增加缩放输出来生成中间输出。
在预测模型103是CNN的情况下,层209的每个处理节点可以基于来自层207的处理节点组的像素值的缩放生成中间输出。中间输出可以表示像素值组和包含权重值的滤波器之间的卷积结果。图2B示出了层209可以执行的卷积操作的示例。在图2B中,滤波器230可以包括二维权重阵列。滤波器230中的权重可以表示有待从图像中检测的某些特征的像素的空间分布。二维阵列可以具有R行的高度和S列的宽度,通常比具有H像素的高度和W像素的宽度的输出图像小。每个权重可以被映射到同样具有R行和S列的像素值矩形块中的像素。层209的处理节点(例如处理节点210a)可以从输入层207的处理节点组接收对应于来自输入图像的第一像素矩形块的像素值组240,该第一像素矩形块对应于滤波器230的第一步幅位置,并基于根据方程式1求出的滤波器230的每个权重与组240中每个相应像素相乘结果之和生成卷积输出242,以生成滤波器230表示的矩阵与组240表示的矩阵之间的点积。层209的另一处理节点还可以从输入层207的另一处理节点组接收对应于来自输入图像的第二像素矩形块的像素值组244,该第二像素矩形块对应于滤波器230的第二步幅位置,并基于根据方程式1求出的滤波器230的每个权重与组244中每个相应像素相乘结果之和生成卷积输出246,以生成滤波器230表示的矩阵与组240表示的矩阵之间的点积。在一些示例中,图2B中的每个卷积输出(例如卷积输出242、卷积输出346等)可以对应于层209的处理节点的输出。在一些示例中,输入图像中的像素数据可以被称为输入特征映射,以指示像素是由对应于某些特征的相同滤波器(或相同滤波器组)处理的。卷积输出可以被称为输出特征映射,以指示输出是用滤波器处理输入特征映射的结果。
如图2B所示,可以在滑动窗口中安排卷积操作,使得第二矩形块与输入图像中的第一矩形块重叠或以其他方式与输入图像中的第一矩形块相邻。例如,在图2B的示例中,D可以是每次卷积操作的滑动窗口的步幅距离(以像素为单位),使得对应于组244的像素块可以位于距对应于组240的像素块的距离D(用像素表示)处,并且下一个像素块也可以位于距组244相同的距离D处。层209的其他处理节点也可以接收对应于其他矩形块的像素组,并生成其他中间输出。卷积输出可以是卷积输出阵列的一部分。卷积输出阵列可以具有比输入图像小的高度和宽度。卷积输出的矩形块可以进一步分组,卷积操作可以在卷积输出组和另一滤波器权重集之间的层211处执行,以生成另一卷积输出组。
回到图2A,层209的一个处理节点可以被配置为生成一个卷积输出阵列的卷积输出元素,层209的处理节点组M可以对应于卷积输出阵列组M。层209的处理节点还可以使用激活函数处理每个卷积输出,以生成激活输出。激活函数可以将卷积输出转化为是否将卷积输出正向到中间层211来影响分类器决策(类似于生物神经元放电)的决定。激活函数的示例可以是根据以下方程式定义的线性整流函数(ReLU):
除ReLU外,还可以使用其他形式的激活函数,包括例如softplus函数(其可以是ReLU函数的平滑近似)、双曲正切函数(tanh)、反正切函数(arctan)、sigmoid函数、高斯函数等。
层209的处理节点(例如处理节点210a)可以使用ReLU函数处理和,以基于以下方程式生成层209的第一输出:
first_output210a=ReLU(Sum210a) (方程式3)
可选地,预测模型103可以包括池化层,以减小层209中间输出(例如sum210a)的数目。池化层可以将中间输出分组,并对每组执行池化操作。池化操作可以包括诸如最大池化(例如选择组内的最大中间输出)、最小池化(例如选择最小中间输出)、平均池化(例如查找每组的平均值)、求和池化(查找每组的和)等,减小的中间输出可以通过激活函数处理,以生成层209的第一输出。可以执行池化操作来减少与激活函数处理相关联的计算成本。
层211可以通过例如基于不同的滤波器组执行额外的卷积操作,进一步处理来自层209的缩放中间输出。来自层211的每个处理节点的输出可以正向到其他更高的中间层,或者正向到输出层(图2A中未示出)。输出层可以形成输出向量,该输出向量表示例如某些特征被包括在图像104中的概率和/或图像204包括熊猫图像的概率。例如,可以将输出向量和与熊猫的鼻子对象相关联的参考向量或与熊猫相关联的参考向量做比较。可以基于比较结果确定关于图像104是否是熊猫图像的决定。
可以通过训练过程生成和更新图2A和图2B中描述的权重和滤波器系数,以提高预测模型103生成正确决定的可能性。参照图2A和图2B的示例,可以基于一组训练图像来训练预测模型103。训练图像可以包括不同熊猫的图像、其他动物的图像和其他人工制品等。预测模型103可以处理这些图像,生成不同的输出向量。预测模型103的神经网络层中的权重可以被更新来使预测模型103的正确决定(例如,在包含熊猫的训练图像中检测到熊猫、在不包含熊猫的训练图像中未检测到熊猫等)的数目最大化。
图3A示出了训练神经网络(包括预测模型103的神经网络)的训练过程300的示例。训练过程可以由例如实现神经网络的神经网络硬件加速器、通用硬件处理器或其他支持上述神经网络处理涉及的算术运算的合适的计算系统来执行。训练可以基于梯度下降方案,该方案包括正向传播操作、损失梯度操作和反向传播操作。具体地,如图3A所示,可以对每个神经网络层执行正向传播操作,诸如对最低层1(其可以对应于图2A的输入层207)执行正向传播操作302a,对层2(其可以对应于图2A的层209)执行正向传播操作302a,对最高层n(其可以对应于图2A的层211)执行正向传播操作302n等。神经网络层的正向传播操作可以包括输入数据与该层的权重集之间的乘法和求和计算,然后进行激活函数处理,如上文方程式1和方程式2所述,以生成中间输出数据。中间输出数据随后可以传播到下一神经网络层,作为该层正向传播操作的输入。例如,如图3A所示,正向传播操作302a可以将训练输入数据与层1的权重w1相结合,以生成作为输入传播到层2的中间输出数据out1。正向传播操作302b可以将数据out1和层2的权重w2相结合,以生成随后传播到下一层的中间输出数据out2。在最高层n,正向传播操作302n接收来自层n-1(图3A中未示出)的数据中间outn-1,结合层n的权重wn并生成中间输出数据outn。
损失梯度操作304可以将层n的中间输出数据outn与参考输出数据ref_outn进行比较,以生成输出误差梯度din。输出误差数据梯度din可以测量由outn和ref_outn之差表示的输出误差相对于输出数据outn的每个数据元素的偏导数。在一些示例中,训练的目标是最小化outn和ref_outn之差,以使输出误差梯度din可以接近于零。
在通过损失梯度操作304生成误差梯度din之后,可以对每个神经网络层执行反向传播操作306。例如,可以在最高层n执行反向传播操作306n,可以在层2执行反向传播操作306b,可以在层1执行反向传播操作306a。神经网络层的反向传播操作可以基于该神经网络层的权重、该神经网络层的数据梯度输入以及该层正向传播操作的输入。例如,对于层n,反向传播操作306n可以接收权重wn、中间输出数据outn-1(来自神经网络层n-1的正向传播操作)和误差梯度din作为输入。反向传播操作可以对输入执行与方程式1和方程式2的乘法和求和计算类似的乘法和求和计算,以生成权重梯度wgrad(图3A中的dwn、dw2、dw1等)和输出数据梯度(图3A中的dn、d3、d2等)。
神经网络层的权重梯度wgrad可以表示输出误差相对于神经网络层的每个权重的偏导数,并且可以用于更新该神经网络层的权重。可以基于前一层的中间输出和该神经网络层的输入数据梯度生成权重梯度。例如,在层n,可以基于中间输出outn-1和误差梯度din生成权重梯度dwn,而在层n-1,可以基于中间输出outn-2和层n的输出数据梯度dn生成权重梯度dwn-1。
在层n的权重可以基于权重梯度dwn,通过更新操作308(例如针对层n的更新操作308n)更新,其中权重梯度dwn基于以下方程式:
wn′=wn-α×dwn(方程式3)
在方程式3中,wn′可以指更新的权重wn,而α可以包括一组预定常数。
此外,神经网络层的输出数据梯度可以表示输出误差相对于该神经网络层的乘积和的偏导数。输出数据梯度可以正向到下一较低的神经网络层,作为该层反向传播操作的输入,以计算该层的权重梯度。例如,如上所述,层n的输出数据梯度dn可以传播到层n-1,以计算权重梯度dwn-1。神经网络层的输出数据梯度可以基于该神经网络层的输入数据梯度以及该神经网络层的原始权重(用权重梯度更新之前)来生成。例如,在层n,输出数据梯度dn可以基于权重wn以及反向传播操作306n中的误差梯度din来生成。
层n生成的输出数据梯度dn随后可以传播到下一较低的神经网络层n-1,作为该层反向传播操作的输入。层2的反向传播操作306b可以对数据梯度d3、权重w2和中间输出数据out1进行操作来生成输出数据梯度d1以及权重梯度dw2。权重梯度dw2可以由更新操作308b用来基于方程式3更新权重w2。数据梯度d2可以传播到层1。层1的反向传播操作306a可以对数据梯度d2、权重w1和训练输入数据进行操作来生成权重梯度dw1。权重梯度dw1可以由更新操作308a用来基于方程式3更新权重w1。
训练过程通常涉及向神经网络提供多个训练输入数据集来涵盖不同的操作条件,从而可以训练神经网络在这些不同的操作条件下提供正确的决策。由于计算资源有限,计算系统(例如神经网络硬件加速器)通常缺乏一次性使用所有训练输入数据集来执行训练的能力。
图3B示出了在具有有限计算和存储器资源的计算系统上执行训练操作的一个示例性解决方案。如图3B所示,训练数据集310可以划分为包括312a、312b、312c、312n等部分。另外,随后可以将训练操作划分为批次0、批次1、批次n等批次,每批次都在训练数据集的一部分上执行。如图3B所示,计算系统可以依次执行各批次训练操作。对于每批次,计算系统还可以针对每层执行正向传播操作302、损失梯度操作304、反向传播操作306和权重更新操作308。计算系统可以更新每批中每层的权重,直至训练数据集的所有部分均已处理。计算系统还可以执行各批次的多次迭代,例如迭代320a、迭代320b等,直至达到损失目标。
在每个神经网络层上训练操作中涉及的数据传输通常通过存储器来实现。存储器可以包括神经网络处理器的片上静态随机存取存储器(SRAM)、高速存储设备(例如高带宽存储器(HBM))等。图3C和图3D示出了培训操作批次中涉及的存储器操作的示例。参照图3C,提供存储器330来存储批次0训练操作中涉及的数据,诸如输入数据、中间输出、权重、偏差等。层的正向传播操作可以从存储器330获取输入数据,并将中间输出写回存储器330。例如,层1的正向传播操作302a可以从存储器330获取训练数据332,生成中间输出334a,并将中间输出334a存储在存储器330中。另外,层2的正向传播操作302b可以获取中间输出334a,生成中间输出334b,并将中间输出334b存储在存储器330中。层n-1的正向传播操作302n-1也可以将中间输出334n-1存储在存储器330中,而层n的正向传播操作302n可以将中间输出334n存储在存储器330中。每层的正向传播操作完成之后,每层的中间输出都存储在存储器330中,以待作为输入提供给随后的损失梯度和反向传播操作。
图3D示出了损失梯度和反向传播操作中涉及的存储器访问操作。如图3D所示,损失梯度操作304可以获取中间输出334n(以及参考中间输出,图3D中未示出),以基于参考中间输出和中间输出334n之间的比较生成输出误差梯度din,并将输出误差梯度din存储回存储器330。输出误差梯度din的数据大小可以与中间输出334n相同或不同。由于其他操作不再需要中间输出334n,因此输出误差梯度din可以覆盖存储器330中的部分或全部中间输出334n。层n的反向传播操作306n随后可以从存储器330获取误差梯度din以及中间输出334n-1(由层n-1生成),以计算权重梯度dwn和数据梯度dn,并将两者存储在存储器330(图3D中未示出)中。其他层的反向传播操作也从存储器330获取中间输出。例如,层3的反向传播操作306c可以从存储器330获取中间输出334b(由层2生成),层2的反向传播操作306b可以从存储器330获取中间输出334a(由层1生成),而层1的反向传播操作306a可以从存储器330获取训练数据332。
为确保存储器330可以存储每层的中间输出,必须仔细选择批次中输入训练数据部分的大小,使得每层从输入训练数据部分生成的中间输出的总大小不超过分配给中间输出的容量。但是,这可能会导致效率低下、训练时间大幅增加。具体地,通过要求从训练数据集的一部分生成的所有中间输出数据纳入存储器,训练数据集的该部分的大小可以变得非常小,这可能会导致大量批次的训练操作。因为训练操作的各批依次执行,并且可以执行训练操作各批次的多次迭代以实现损失目标,所以大量批次可能导致整个训练操作需极长时间方可完成。
此外,向批次中计算系统提供小的训练数据集可能会导致计算资源的低效利用。例如,在某一批次训练操作期间,计算系统上的一些计算资源可能未被利用。当计算系统具有的计算能力超过处理该批次的训练数据部分和/或中间输出所需的计算能力时,可能发生这种情况。因为计算资源被低效利用,所以训练操作花费的时间远超计算系统本可能花费的时间。
图4示出了可以至少解决上述一些问题的示例性训练模块400。训练模块400可以管理计算资源402和存储器404,以执行神经网络的训练操作。计算资源402可以包括神经网络处理器406提供的计算硬件(例如算术电路、查找表等),以执行神经网络计算,诸如正向传播操作、反向传播操作、损失梯度计算、权重梯度和数据梯度计算、权重更新计算等。另外,存储器404可以是神经网络处理器406的片上存储器、片外高速存储设备(例如高带宽存储器(HBM))等的一部分。在一些示例中,训练模块400可以包括可由服务器的主机处理器执行的软件指令,该服务器还包括神经网络处理器和存储器404。
参照图4,训练模块400包括正向传播管理模块410、反向传播管理412、中间输出管理模块414和计算模块416,以执行训练操作。正向传播管理模块410可以控制计算资源402,针对从层1开始到层n(最高层)结束的每一层依次执行正向传播操作,诸如图3A的操作302a-302n,并发出每层正向传播操作的状态的信号。反向传播管理模块412可以控制计算资源402,针对从层n(最高层)开始回到层1的每一层依次执行损失梯度操作和反向传播操作,诸如图3A的操作306a-306n,并发出每层反向传播操作的状态的信号。
数据管理模块414可以管理训练操作中涉及的数据的存储和获取,包括正向传播操作和反向传播操作的中间输出。具体地,数据管理模块414可以选择层的子集,其中中间输出在正向传播操作结束时和损失梯度操作之前将保留在存储器404中,而其他层的中间输出则不保留。数据管理模块414可以和正向传播管理模块410共同控制正向传播操作期间每层的中间输出的存储和获取。
此外,数据管理模块414还可以控制用于每层反向传播操作的中间输出的获取(或提供)。例如,数据管理模块414可以从反向传播管理模块412接收特定层的反向传播即将开始的信号。如果该层的中间输出未存储在存储器404中,则数据管理模块414使正向传播管理模块410控制计算资源402来重复正向传播操作,以重新生成未存储在存储器404中的中间输出,并为该层提供重新生成的中间输出。数据管理模块414还可以管理其他数据的存储和获取,诸如输入训练数据、输出误差梯度、数据梯度、权重梯度、权重、偏差等。
计算模块416可以处理未由神经网络处理器406处理的计算,例如,训练数据的预处理。例如,在训练数据包含图像数据的情况下,计算模块416可以执行图像数据的裁剪(或其他预处理)操作,以提取相关对象的像素数据并将提取的像素数据包括到训练数据中。再如,神经网络处理器406可能无法执行一些训练操作,诸如损失梯度计算、权重和数据梯度计算、权重更新计算等。在这种情况下,计算模块416可以处理这些操作,并将更新的权重存储回存储器402。
由于数据管理模块414仅选择层的子集,其中中间输出在正向传播操作结束时和损失梯度操作之前将保留在存储器404中,存储器404不需要在反向传播操作之前存储神经网络所有层的中间输出。这允许训练操作在更大的输入数据集上进行操作。在批量执行训练操作的情况下,可以减少批次数量,从而大幅缩短训练操作的整体完成时间。
图5A和图5B示出了针对四层神经网络的,由训练模块400管理的正向传播操作和相关联的存储器访问操作的示例性顺序。在图5A和图5B所示的示例中,数据管理模块414每隔一层(包括层2和层4)进行选择,以在所有正向传播操作结束时将中间输出保留在存储器404中。此外,输入训练数据502也存储在存储器404中。
参照图5A,正向传播管理模块410可以控制神经网络处理器406基于训练数据502执行层1的正向传播操作302a。神经网络处理器406可以基于数据管理模块414提供的存储器地址508从存储器404获取训练数据502,并生成中间输出504a。神经网络处理器406可以将存储器404中的中间输出504a存储在数据管理模块414提供的存储器地址510处。
正向传播管理模块410随后可以控制神经网络处理器406基于中间输出504a执行层2的正向传播操作302b。神经网络处理器406可以基于数据管理模块414提供的存储器地址510从存储器404获取中间输出504a,并生成中间输出504b。由于中间输出504a(由层1生成)不需要保留,数据管理模块414可以指示神经网络处理器406将中间输出504b存储在存储器地址510处覆盖中间输出504a。
正向传播管理模块410随后可以控制神经网络处理器406基于中间输出504b执行层3的正向传播操作302c。神经网络处理器406可以基于数据管理模块414提供的存储器地址510从存储器404处获取中间输出504b,并生成中间输出504c。由于中间输出504b(由层2生成)需要保留,数据管理模块414可以指示神经网络处理器406将中间输出504c存储在与中间输出504a分离的存储器地址512处。
正向传播管理模块410随后可以控制神经网络处理器406基于中间输出504c执行层4的正向传播操作302d。神经网络处理器406可以基于数据管理模块414提供的存储器地址510从存储器404获取中间输出504c,并生成中间输出504d。由于中间输出504c(由层3生成)不需要保留,数据管理模块414可以指示神经网络处理器406将中间输出504d存储于存储器地址512处覆盖中间输出504c。如图5B所示,在正向传播操作结束时,存储器404可以在存储器地址508处存储训练数据502,在存储器地址510和512处存储层2和层4的中间输出504b和504d以及一些其他数据,但不存储层1和层3的中间输出504a和504c。
图6A、图6B、图6C、图6D和图6E示出了继图5A和图5B示出的正向传播操作之后由训练模块400管理的损失梯度操作、反向传播操作、正向传播操作及相关存储器访问操作的示例序列。
参考图6A,(训练模块400的)计算模块416可以基于中间输出504d执行损失梯度操作304。计算模块416可以基于数据管理模块414提供的存储器地址510从存储器404处获取参考中间输出(图6A中未示出)和中间输出504d,并且基于对中间输出504d与参考中间输出进行的比较来生成输出误差梯度din。由于在损失梯度操作304后不需要中间输出504d,数据管理模块414可以指示计算模块416将输出误差梯度din存储于存储器地址512处来覆盖中间输出504d。
参照图6B,反向传播管理模块412随后可以控制神经网络处理器406来执行层4的反向传播操作306d,该操作需要层3的输出误差梯度din和中间输出504c。然而,如上所述,完成正向传播操作之后不再保留中间输出504c。数据管理模块414通过正向传播管理模块410,可以控制神经网络处理器406重复层3的正向传播操作302c以重新生成中间输出504c。神经网络处理器406可以从存储器地址510处获取中间输出504b以执行层3的正向传播操作302c,并将中间输出504c存储于存储器404的存储器地址602处。神经网络处理器406随后可以从存储器地址512处获取输出误差梯度din,并从存储器地址602处获取中间输出504c,以执行层4的反向传播操作306d。由于其他后续处理不会采用输出误差梯度din,数据管理模块414可以指示神经网络处理器406将层4的反向传播操作306d的输出(包括数据梯度d4和权重梯度dw4)存储于存储器地址512处,以覆盖输出误差梯度din。中间输出504c在随后的操作中也不需要,并且稍后可以被覆盖。计算模块416还可以从存储器地址512处获取权重梯度dw4以更新层4的权重。
参照图6C,反向传播管理模块412随后可以控制神经网络处理器406执行层3的反向传播操作306c,该操作需要存储于存储器404中的层2的数据梯度d4和中间输出504b。神经网络处理器406可以分别从存储器地址512和510处获取数据梯度d4和中间输出504b,以执行层3的反向传播操作306c。由于在随后的操作中不使用数据梯度d4和中间输出504b,数据管理模块414可以指示神经网络处理器406将层3的反向传播操作306c的输出(包括数据梯度d3和权重梯度dw3)存储于存储器地址510处,以覆盖中间输出504b(或存储于存储器地址512处,覆盖数据梯度d4和权重梯度wd4)。计算模块416还可以获取权重梯度dw3以更新层3的权重。
参照图6D,反向传播管理模块412随后可以控制神经网络处理器406来执行层2的反向传播操作306b,该操作需要层1的数据梯度d3和中间输出504a。然而,如上所述,正向传播操作完成之后,不保留中间输出504a。数据管理模块414通过正向传播管理模块410,可以控制神经网络处理器406重复层1的正向传播操作302a以重新生成中间输出504a。神经网络处理器406可以从存储器地址508处获取训练数据502以执行层1的正向传播操作302a,并将中间输出504a存储于存储器地址512处或可以被覆盖的另一存储器地址处(例如,存储器地址602)。神经网络处理器406随后可以从存储器地址510处获取输出误差梯度d3,并从存储器地址512(或602)处获取中间输出504a,以执行层1的反向传播操作306a。由于其他后续处理不使用数据梯度d3,数据管理模块414可以指示神经网络处理器406将层2的反向传播操作306b的输出(包括数据梯度d2和权重梯度dw2)存储于存储器地址510处,以覆盖数据梯度d3。中间输出504a在随后的操作中也不需要,并且稍后可以被覆盖。计算模块416还可以从存储器地址510处获取权重梯度dw2,以更新层2的权重。
参照图6E,最终反向传播管理模块412可以控制神经网络处理器406执行层1的反向传播操作306a,该操作需要存储于存储器404中的数据梯度d2和训练数据502。神经网络处理器406可以分别从存储器地址510和508处获取数据梯度d2和训练数据502,以执行层1的反向传播操作306a来生成层1的权重梯度dw1,该权重梯度dw1可以存储于包括存储器地址510和508在内的任何可以被覆盖的地址中。计算模块416还可以从存储器404处获取权重梯度dw1以更新层1的权重。
在图5A到图6E的示例中,数据管理模块414可以基于预定义模式选择神经网络层的子集来存储中间输出,其中该子集的每一神经网络层均由预定数量的神经网络层(一个)隔开。数据管理模块414可以接收预定义模式作为训练配置的一部分。
在一些示例中,数据管理模块414还可以基于各种启发式来选择神经网络层的子集,诸如神经网络拓扑结构、存储器大小、计算系统的可用计算资源等。例如,基于神经网络拓扑结构,数据管理模块414可以确定第一层的中间输出数据比第二层的中间输出数据更小,并且确定不存储第一层更小的中间输出,其中该层重新生成所需时间可能较短。作为另一示例,数据管理模块414可以确定,虽然第一层的中间输出数据比第二层的中间输出数据更小,但第一层更复杂(例如,需要更复杂的算术操作、后处理操作等),并且需要花费比第二层更多的时间和/或计算资源来重新生成中间输出。在这种情况下,数据管理模块414可以确定不存储第二层的中间输出。
在一些示例中,数据管理模块414可以接收关于中间输出的大小和神经网络的每一层的正向传播操作的执行时间的启发信息,并基于启发信息来选择要存储中间输出的层。图7示出了用于不同层的启发信息700的示例。中间输出数据大小(例如,大小为0、大小为1等)可以反映神经网络的拓扑结构结构(例如,神经网络每一层中的若干节点),而每一层的正向传播计算时间(例如,时间为0、时间为1等)可以反映神经网络的拓扑结构结构(例如,每层中涉及的计算操作)以及可以从神经网络处理器406获取的计算资源402,以便支持正向传播操作。考虑到存储器404的大小,数据管理模块414可以基于启发信息700的中间输出大小信息来确定中间输出可以纳入存储器404的层的不同子集。此外,对于每个子集来说,数据管理模块414还可以计算非子集层重新生成中间输出的时间。数据管理模块414随后可以选择重新生成中间输出所需时间最短的子集。通过此类安排,数据管理模块414为了优化训练操作,可以使选择适应于不同神经网络拓扑结构、可用计算资源、可用存储器资源等。
图8示出了训练神经网络方法800的流程图。神经网络(诸如图2A所示的预测模型)至少包括第一层和第二层。方法800可以由神经网络处理器(例如,神经网络处理器406)结合训练模块(例如,训练模块400)并与存储器(例如,存储器404)耦合来执行。存储器404可以包括神经网络处理器406的片上存储器和/或片外存储器(例如,HBM)。
在步骤802中,神经网络处理器406可以基于输入数据对神经网络的第一层执行第一正向传播操作,从而产生第一中间输出。第一层可以为输入层(例如,输入层207)或中间层(例如,中间层209、211等)。如上所述,正向传播管理模块410可以控制神经网络处理器406的计算资源402,以便对从层1开始到层n(最高层)结束的每一层依次执行正向传播操作,例如图3A的操作302a-302n,以及在每一层发出正向传播操作的状态信号。作为正向顺序传播操作的一部分,正向传播管理模块410可以控制神经网络处理器406对第一层执行第一正向传播操作。数据管理模块414还可以控制神经网络处理器406从存储器404获取第一传播操作的输入数据,并将第一中间输出存储于存储器404。
在步骤804中,神经网络处理器406可以基于第一中间输出对神经网络的第二层执行第二正向传播操作以生成第二中间输出。正向传播管理模块410可以控制神经网络处理器406对第二层执行第二正向传播操作。数据管理模块414还可以控制神经网络处理器406从存储器404获取第一中间输出,作为第二正向传播操作的输入。
如上所述,数据管理模块414可以选择层的子集,其中中间输出在正向传播操作结束时和损失梯度操作之前将保留在存储器404中,而其他层的中间输出则不保留。此类设置可以缩小存储于存储器404中的中间输出的数据总大小,反之又可以增加由存储器404支持的批处理大小。选择用于保留中间输出的层的子集可以基于预定模式(例如,存储每一层的中间输出)、启发式(例如,正向传播操作的完成时间、每一层的中间输出的数据大小等)或其他合适的标准,如上文关于图6A-图7的解释。作为步骤804的一部分,数据管理模块414可以基于在正向传播操作结束时不保留第一中间输出的判断,控制神经网络处理器406(通过正向传播管理模块410)利用第二中间输出覆盖第一中间输出。
在步骤806中,神经网络处理器406可以基于第二中间输出执行损失梯度操作,以生成输出误差梯度。如上所述,损失梯度操作(诸如损失梯度操作304)可以将第二层的第二中间输出数据与参考输出数据进行比较,以生成输出误差梯度。输出误差梯度可以相对于第二中间输出的每个数据元素,测量由第二中间输出和参考输出数据之间的差表示的输出误差偏导数。在一些示例中,训练的目标是尽可能减少输出误差。反向传播管理模块412可以控制神经网络处理器406来执行损失梯度操作,而数据管理模块414可以控制神经网络处理器406(通过反向传播管理模块412)从存储器404处获取第二中间输出。在一些示例中,损失梯度操作也可以由计算模块416执行。
在步骤808中,神经网络处理器406可以基于存储器404的输入数据重复第一正向传播操作,以重新生成第一中间输出。第一中间输出重新生成为第一反向传播操作的输入。但是,由于第一中间输出并未存储在存储器404中,因此数据管理模块414可以控制正向传播管理模块410来重复第一正向传播,以重新生成第一中间输出并将第一中间输出存储于存储器404中。第二中间输出已被损失梯度操作消耗,因此数据管理模块414可以控制神经网络处理器406利用存储器404中的第一中间输出覆盖第二中间输出。
在步骤810中,神经网络处理器406可以基于重复的第一正向传播操作和第一数据梯度的第一中间输出,对第二层执行第一反向传播操作,以生成第一数据梯度和用于更新第二层权重的第一权重梯度。如上所述,第一反向传播操作可以与第二层相关联。反向传播管理模块412可以控制神经网络处理器406来执行第一反向传播操作,而数据管理模块414可以控制神经网络处理器406(通过反向传播管理模块412)从存储器404处获取第一中间输出,并将第一数据梯度和第一权重梯度存储于存储器404中。第一数据梯度可以作为第一层后续反向传播操作的输入,而第一权重梯度可以用于更新第二层的权重,如图3A和图6B—图6E所示。可以由神经网络处理器406和/或计算模块416更新权重。
在步骤812中,神经网络处理器406可以基于输入数据和第二数据梯度对第一层执行第二反向传播操作,以生成用于更新第一层权重的第二权重梯度。反向传播管理模块412可以控制神经网络处理器406执行第二反向传播操作,而数据管理模块414可以控制神经网络处理器406(通过反向传播管理模块412)从存储器404处获取输入数据和第一数据梯度,并将第二权重梯度存储于存储器404中。在第一层之前存在另一层的情况下,第二反向传播操作还可以为前一层生成第二数据梯度。可以由神经网络处理器406和/或计算模块416更新第一层的权重。
图9为示出可以包括图4的神经网络处理器406且可以由训练模块400控制以执行训练操作的集成电路设备的示例框图。图9的示例示出了加速器902。在各种示例中,针对一组输入数据(例如,输入数据950),加速器902可以使用处理引擎阵列910、激活引擎916和/或池化引擎918进行计算。在一些示例中,示例加速器902可以为处理器的集成电路元件,例如神经网络处理器。处理器可以具有其他集成电路元件,包括附加加速器引擎。
在各种实施方式中,存储器子系统904可以包括多个存储器组914。在这些实施方式中,各个存储器组914均可以独立访问,这意味着其中一个存储器组的读取并不依赖于另一个存储器组的读取。同样地,写入一个存储器组不会对写入另一个存储器组产生影响或限制。在某些情况下,每个存储器组均可以同时读取和写入。可以利用各种技术来实现拥有可独立访问的存储器组914。例如,每个存储器组均可以为物理上独立的存储器元件,该存储器元件具有地址空间,而该地址空间与其他存储器元件的地址空间是分离且独立的。在本示例中,每个存储器组可以具有至少一个读取通道,并且可以具有至少一个可以同时使用的单独写入通道。在这些示例中,存储器子系统904可以允许同时访问多个存储器组的读取或写入通道。作为另一示例,存储器子系统904可以包括仲裁逻辑,使得例如多个存储器组914的输出之间的仲裁可以导致多个存储器组的输出被使用。在这些和其他示例中,尽管由存储器子系统904进行了全局管理,但每个存储器组均可以独立于任何其他存储器组进行操作。
让存储器组914实现可以独立访问能提高加速器902的效率。例如,可以同时读取值并将其提供给处理引擎阵列910的每一行,从而可以在一个时钟周期中使用整个处理引擎阵列910。作为另一示例,读取存储器组914的同时,可以将处理引擎阵列910计算的结果写入存储器子系统904。与此相反的是,单个存储器在同一时间内仅可以进行一次读操作或写操作。对于单个存储器,例如,在可启动处理引擎阵列910之前,可能需要多个时钟周期来读取处理引擎阵列910的每一行输入数据。
在一些实施方式中,能够为多个客户端提供服务意味着存储器子系统904的存储器组至少与客户端一样多。在某些情况下,处理引擎阵列910的每一行均可以视为单独的客户端。在某些情况下,处理引擎阵列910的每一列均可以输出结果,使得每一列可视为单独的写客户端。在某些情况下,处理引擎阵列910的输出可写入存储器组914,存储器组914随后可以为处理引擎阵列910提供输入数据。作为另一个示例,激活引擎916和池化引擎918可以包括多个执行通道,每个执行通道均可为独立的存储器客户端。例如,存储器组914可以使用静态随机存取存储器(SRAM)来实现。
在各种实施方式中,存储器子系统904可以包括控制逻辑。例如,控制逻辑可以跟踪每个存储器组914的地址空间,识别要读取或写入的存储器组914,和/或在存储器组914之间移动数据。在一些实施方式中,存储器组914可以硬连线至特定客户端。例如,一组存储器组914可以进行硬连线以实现向处理引擎阵列910的行提供值,其中每行均有一个存储器组提供服务。作为另一个示例,一组存储器组可以进行硬连线以接收处理引擎阵列910的列值,其中一个存储器组接收每列的数据。
处理引擎阵列910是示例加速器902的计算矩阵。处理引擎阵列910可以例如执行并行集成、卷积、关联和/或矩阵乘法等。处理引擎阵列910包括按行和列排列的多个处理引擎911,使得由一个处理引擎911输出的结果可以直接输入另一个处理引擎911中。因此,不是位于处理引擎阵列910外缘上的处理引擎911可以从其他处理引擎911接收要操作的数据,而非存储器子系统904。
在各种示例中,处理引擎阵列910使用脉动阵列执行,其中数据定期从不同方向到达每个处理引擎911。在一些示例中,输入数据可以从左侧流入处理引擎阵列910,并且可以在顶部加载权重值。在一些示例中,权重和输入数据可以从左侧流动,部分和可以从上到下流动。在这些和其他示例中,乘法及累积操作作为对角线波面在处理引擎阵列910中移动,数据则在阵列中向右和向下移动。控制信号与权重可以同时在左侧被输入,并且可以随着计算而上下流动。
在各种实施方式中,处理引擎阵列910中的列数确定了处理引擎阵列910的计算能力,并且行数确定了实现处理引擎阵列910的最大利用率所需的存储器带宽。处理引擎阵列910可具有例如64列和428行,或一些其他的列数和行数。
在图9的插图中示出了处理引擎911的示例。如该示例所示,处理引擎911可包括乘法器—累加器电路。左侧的输入可以包括例如输入数据i和权重值w,其中输入数据是取自一组输入数据或一组中间结果的值,并且权重值取自将神经网络的一层连接到下一层的一组权重值。一组输入数据可以是,例如,用于身份识别或目标识别而提交的图像,用于语音识别而提供的音频剪辑,用于自然语言处理或机器翻译的一串文本,或需要通过分析来确定下一步行动的游戏的当前状态等。在一些示例中,输入数据和权重值被输出到右侧,以便输入到下一个处理引擎911。
在所示示例中,上面的输入可以包括从另一处理引擎911或从由处理引擎阵列910进行的上一轮计算提供的部分和p_in。开始计算新的输入数据集时,处理引擎阵列910的顶行可以接收p_in的固定值,例如零。如本示例所示,将i与w相乘,结果与p_in相加,产生一个新的部分和p_out,该部分和可以输入到另一个处理引擎911中。实现处理引擎911的各种其他实施方式也是可能的。
处理引擎阵列910中最后一行的输出可以临时存储于结果缓冲器912中。结果可以是可被写入存储器组914以提供给处理引擎阵列910来实现额外计算的中间结果。或者,结果可以是最终结果,一旦将其写入存储器组914,就可以通过通信结构920从存储器子系统904读取,并由系统输出。
在一些实施方式中,加速器902包括激活引擎916。在这些实施方式中,激活引擎916可以将处理引擎阵列910的结果组合成一个或多个输出激活。例如,对于卷积神经网络来说,可以将多个信道的卷积相加,以产生单个信道的输出激活。在其他示例中,可能需要累积处理引擎阵列910中的一个或多个列的结果来产生神经网络中单个节点的输出激活。在一些示例中,可以绕过激活引擎916。
在各种示例中,激活引擎916可以包括多个独立的执行通道。在这些示例中,执行通道可以对应于处理引擎阵列910的列,并且可以对列的输出执行操作,其结果可以存储于存储器子系统904中。在这些示例中,激活引擎916可以执行1到n个并行计算,其中n等于处理引擎阵列910中的列数。在某些情况下,可以同时进行一次或多次计算。每个执行通道可以执行的计算示例包括指数、平方、平方根、恒等式、二进制步骤、双极步骤、S形曲线和斜变等。
在一些实施方式中,加速器902可以包括池化引擎918。池化是处理引擎阵列910的列输出的组合。组合可以包括,例如,计算最大值、最小值、平均值、中值、总和、乘积或其他逻辑或数学组合。在各种示例中,池化引擎918可以包括多个执行通道,这些执行通道可以对处理引擎阵列910相应列的值进行操作。在这些示例中,池化引擎918可以在1和n个并行计算之间执行,其中n等于处理引擎阵列910中的列数。在各种示例中,池化引擎918的执行通道可以进行并行和/或同时操作。在一些示例中,可以绕过池化引擎918。
在本文中,激活引擎916和池化引擎918可以统称为执行引擎。处理引擎阵列910是执行引擎的另一示例。执行引擎的另一示例是可以位于加速器902外部的直接存储器访问(DMA)引擎。
输入数据950可以通过通信结构920到达。通信结构920可以将加速器902连接到处理器的其他元件,例如可以从输入/输出(I/O)设备、存储驱动器或网络接口获取输入数据950的DMA引擎。输入数据950可以是例如一维数据(诸如字符串或数字序列等),或二维数据(诸如图像的像素值阵列或音频信号的频率和振幅值的阵列等)。在一些示例中,输入数据950可以是三维的,例如自动驾驶汽车所使用的情境信息或虚拟现实数据可能就是这种情况。在一些实施方式中,存储器子系统904可以包括用于输入数据950的单独缓冲器。在一些实施方式中,当加速器902接收到输入数据950时,可以将输入数据950存储于存储器组914中。
在一些示例中,加速器902可以实现神经网络处理引擎。在这些示例中,对于一组输入数据950来说,加速器902可以执行神经网络,从而执行神经网络训练过的任务。对一组输入数据执行神经网络可以称之为推理或执行推理。
神经网络的权重可与神经网络将在其上运行的输入数据950一起存储于存储器子系统904中。神经网络还可包括指令,该指令可对处理引擎阵列910进行编程以对权重和输入数据执行各种计算。指令还可以存储于存储器子系统904、存储器组914或单独的指令缓冲器中。处理引擎阵列910可以输出表示神经网络的各层输出的中间结果。在某些情况下,激活引擎916和/或池化引擎918可被启用来实现神经网络的某些层所要求的计算。加速器902可以将中间结果存储于存储器子系统904中,以便输入处理引擎阵列910中,从而计算神经网络下一层的结果。处理引擎阵列910可以进一步输出神经网络最后一层的最终结果。最终结果可以存储于存储器子系统904中,然后复制到主机处理器存储器或另一个位置处。
图10包括示出其中可以使用加速引擎1060的主机系统1000的示例框图。图10的加速引擎1060是可以包括一个或多个加速器的设备示例,如图9所示。图10的示例主机系统1000包括加速引擎1060、主机处理器1072、DRAM 1030或处理器存储器、输入/输出设备1032和支持系统1074。在各种实施方式中,主机系统1000可以包括本文未示出的其他硬件。
主机处理器1072是能够执行程序指令的通用集成电路。在一些示例中,主机处理器1072可以包括多个处理内核。多核处理器可以包括位于同一处理器内的多个处理单元。在一些示例中,主机系统1000可以包括多个主机处理器1072。在一些示例中,主机处理器1072和加速引擎1060可以是一个芯片,例如位于同一封装中的一个或多个集成电路。
在各种示例中,主机处理器1072可以通过一个或多个通信信道与主机系统1000中的其他元件通信。例如,主机系统1000可以包括主机处理器总线,例如,主机处理器1072可以使用该总线与DRAM 1030通信。作为另一示例,主机系统1000可以包括诸如基于PCI的总线等的输入/输出总线,例如,主机处理器1072可以通过该总线与加速引擎1060和/或输入/输出设备1032通信。在各种示例中,主机系统1000可选择性地或附加地包括其他通信信道或总线,例如串行总线、电源管理总线、存储设备总线等。
在一些示例中,在主机处理器1072上执行的软件程序可以接收或生成输入,以便由加速引擎1060进行处理。在一些示例中,这些程序可以选择一个合适的神经网络来执行给定输入。例如,程序可以用于语言翻译,并且可以选择一个或多个能够进行语音识别和/或机器翻译的神经网络。在这些和其他示例中,这些程序可以使用神经网络配置加速引擎1060,以执行和/或可选择先前已配置为执行所需神经网络的加速引擎1060上的神经网络处理引擎。在一些示例中,一旦加速引擎1060已经开始对输入数据进行推理,则主机处理器1072就可以管理数据(诸如权重、指令、中间结果、条件层结果和/或最终结果)进入或离开加速引擎1060的移动情形。
在一些示例中,使用加速引擎1060进行推理的软件程序可以从加速引擎1060的条件层和/或存储位置(例如在DRAM 1030中)读取结果。在这些示例中,该程序可以决定神经网络下一步应该采取什么行动。例如,程序可以决定终止推理。作为另一个示例,程序可以确定改变推理方向,其中该推理可由低级别代码和/或神经网络处理器转到下一层执行。在这些和其他示例中,神经网络的执行流程可以通过软件来进行协调。在一些示例中,软件程序还可以使用加速引擎1060来执行训练操作。软件程序可以包括例如训练模块400,并在主机处理器1072中执行。
DRAM 1030是主机处理器1072使用的存储器,该存储器用于存储主机处理器1072正在执行中的程序代码以及正在操作中的值。在一些示例中,神经网络的数据(例如权重值、指令和其他数据)可以全部或部分存储于DRAM 1030中。DRAM是处理器存储器的常用术语,尽管DRAM是易失性存储器,但处理器存储器可为易失性存储器和/或非易失性存储器。尽管本文没有说明,但是主机系统1000可以包括用于其他目的的其他易失性存储器和非易失性存储器。例如,主机系统1000可以包括只读存储器(ROM),该只读存储器(ROM)用于存储在通电时启动主机系统1000的启动代码和/或基本输入/输出系统(BIOS)代码。
尽管本文未示出,但DRAM 1030可以存储各程序指令,这些程序可被加载到主机处理器1072中并由主机处理器1072执行。例如,DRAM 1030可以存储用于操作系统、一个或多个数据存储器、一个或多个应用程序、一个或多个驱动程序和/或用于实现本文公开特征的服务程序的指令。
操作系统可以管理和统筹主机系统1000的整体操作,例如调度任务、执行应用程序和/或控制器外围设备等操作。在一些示例中,主机系统1000可以承载一个或多个虚拟机。在这些示例中,每个虚拟机可以被配置为执行自身的操作系统。操作系统的示例包括Unix、Linux、Windows、macos、iOS、Android等。操作系统可选择地或附加地为专有操作系统。
数据存储器可以包括由操作系统、应用程序或驱动程序使用和/或操作的永久或临时数据。此类数据的示例包括网页、视频数据、音频数据、图像、用户数据等。在一些示例中,数据存储器中的信息可以通过网络提供给用户设备。在某些情况下,数据存储器可以附加地或选择性地包括存储的应用程序和/或驱动程序。数据存储器可附加地或选择性地存储标准的和/或专有的软件库和/或标准的和/或专有的应用程序用户界面(API)库。存储在数据存储器中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
驱动程序可以包括在主机系统1000中的元件之间提供通信的程序。例如,一些驱动程序可以提供操作系统与外围设备或输入/输出设备1032之间的通信。一些驱动程序可附加地或选择性地提供应用程序与操作系统之间的通信,和/或应用程序与主机系统1000可访问的外围设备之间的通信。在许多情况下,驱动程序可以包括提供熟知功能的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序、固态设备驱动程序等)。在其他情况下,驱动程序可提供专有或专用功能。
输入/输出设备1032可以包括用于连接到用户输入和输出设备的硬件,诸如键盘、鼠标、笔、平板电脑、语音输入设备、触摸输入设备、显示器或监视器、扬声器和打印机等设备。输入/输出设备1032还可以包括用于连接到网络1080的存储驱动器和/或网络接口。例如,在各种示例中,主机系统1000可以使用网络接口与存储设备、用户终端、其他计算设备或服务器和/或其他网络进行通信。
在各种示例中,输入/输出设备1032中的一个或多个可以是存储设备。在这些示例中,存储设备包括非易失性存储器并且可以存储程序指令和/或数据。存储设备的示例包括磁存储器、光盘、固态磁盘、闪存和/或带存储器等。存储设备可以与主机系统1000一起被封装在同一机箱中,也可以位于外部机柜中。存储设备可以是固定的(例如,通过螺钉附接)或可移动的(例如,具有物理释放机构,也可能具有热插拔机构)。
存储设备、动态随机存取存储器1030和主机系统1000中的任何其他存储器元件都是计算机可读存储介质的示例。计算机可读存储介质是能够以诸如主机处理器1072之类的设备可以读取的格式存储数据的物理介质。计算机可读存储介质可以是非暂时性的。非暂时性计算机可读介质可以在介质没有通电时保留存储在其上的数据。非暂时性计算机可读介质的示例包括ROM设备、磁盘、磁带、光盘、闪存设备和固态驱动器等。如本文所使用的,计算机可读存储介质不包括计算机可读通信介质。
在各种示例中,存储在计算机可读存储介质上的数据可以包括程序指令、数据结构、程序模块、库、其他软件程序元件和/或可以在数据信号内传输的其他数据,诸如载波或其他传输方式。计算机可读存储介质可附加地或选择性地包括可利用软件程序操作或操纵的文档、图像、视频、音频和其他数据。
在各种实现方式中,支持系统1074可以包括用于协调加速引擎1060的操作的硬件。例如,支持系统1074可以包括微处理器,该微处理器协调加速引擎1060的活动,包括在加速引擎1060上移动数据。在该示例中,微处理器可以是能执行微码的集成电路。微码是能使集成电路在集成电路可以执行的操作中具有某种灵活性的程序代码,但是由于程序代码使用有限的指令集,因此微处理器的能力可能比主机处理器1072更有限。在一些示例中,微处理器执行的程序存储在微处理器的硬件上,或存储在主机系统1000中的非易失性存储器芯片上。在一些示例中,微处理器和加速引擎1060可以在一个芯片上,诸如在同一芯片上和同一程序包中的一个集成电路。
在一些示例中,当在主机处理器1072上执行的程序请求执行神经网络时,支持系统1074可负责从主机处理器1072获取指令。例如,主机处理器1072可以向支持系统1074提供一组输入数据和将对该组输入数据执行的任务。在该示例中,支持系统1074可以识别能够执行任务的神经网络,并且可以对加速引擎1060编程以对输入数据集执行神经网络。在一些示例中,支持系统1074只需要选择神经网络处理器的适当神经网络处理引擎。在一些示例中,支持系统1074可能需要在加速引擎1060可以开始执行神经网络之前将用于神经网络的数据加载到加速引擎1060上。在这些和其他示例中,支持系统1074可以进一步接收执行神经网络的输出,并将输出反馈给主机处理器1072。
在一些示例中,支持系统1074的操作可以由主机处理器1072处理。在这些示例中,可能不需要支持系统1074,并且可以从主机系统1000中删除。
在各种示例中,主机系统1000可以包括表示用户设备、服务提供商计算机或第三方计算机的主机系统、处理器节点、存储子系统和输入/输出机箱的组合。
用户设备可以包括用于访问应用程序的计算设备(例如,网络浏览器或移动设备应用程序)。在一些示例中,应用程序可以由计算资源服务或服务提供商托管、管理和/或提供。应用程序可使得用户能够与服务提供商计算机交互以,例如,访问网页内容(例如,网页、音乐、视频等)。用户设备可以是诸如移动电话、智能电话、个人数字助理(PDA)、手提电脑、上网本、台式电脑、瘦客户端设备、平板电脑、电子图书(电子书)阅读器、游戏机等的计算设备。在一些示例中,用户设备可以通过一个或多个网络与服务提供商计算机通信。另外,用户设备可以是由服务提供商计算机(例如,与服务提供商计算机集成的控制台设备)管理、控制的分布式系统的一部分或者服务提供商计算机的一部分。
主机系统1000还可以表示一个或多个服务提供商计算机。服务提供商计算机可以提供配置为在用户设备上运行的本机应用程序,用户可以与之交互。在一些示例中,服务提供商计算机可以提供计算资源,例如,但不限于客户端实体、低延迟数据存储、持久数据存储、数据访问、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机还可操作以提供web托管、数据库、计算机应用程序开发和/或实现平台、前述的组合等。在一些示例中,服务提供商计算机可以被提供为在托管的计算环境中实现的一个或多个虚拟机。托管的计算环境可以包括一个或多个快速供应和释放的计算资源。这些计算资源可包括计算、联网和/或存储设备。托管的计算环境也可以被称为云计算环境。服务提供商计算机可以包括一个或多个服务器(可能布置在集群中)、作为服务器农场或作为彼此不关联的单个服务器,并且可以托管应用程序和/或基于云的软件服务。这些服务器可以配置为集成的分布式计算环境的一部分。在一些示例中,服务提供商计算机可附加地或选择性地包括计算设备,诸如移动电话、智能电话、个人数字助理(PDA)、手提电脑、台式电脑、上网本、服务器计算机、瘦客户端设备、平板电脑、游戏机等。在某些情况下,服务提供商计算机可以与一台或多台第三方计算机通信。
本文所述的模块可以是软件模块、硬件模块或其适当组合。如果所述模块是软件模块,则所述模块可以体现在非暂时性计算机可读介质上并由本文所述的任何计算机系统中的处理器处理。应注意的是,所描述的过程和架构可以在任何用户交互之前以实时或异步模式执行。这些模块可以以上图中建议的方式配置,和/或本文所述的功能可以由作为单独模块存在的一个或多个模块提供,和/或本文所述的模块功能可以分布在多个模块上。
因此,本说明书和附图将认为具有说明意义,而不具有限制性。然而,很明显,在不违背权利要求中所述更广泛的公开精神和范围的情况下可作出各种修改和变更。
其他变化在本公开的精神范围内。因此,虽然所公开的技术易受到各种修改和替代解释的影响,但在附图中示出了其某些图示示例,并且已在上文中详细描述。然而,需要清楚的是这并不是要将本公开限制在已公开的具体形式之中,相反,其意图是涵盖所附权利要求限定的本公开的精神和范围内的所有修改、替代解释和等同项。
描述本公开示例的上下文(尤其是下文的权利要求书)中所使用的词语“一个”、“这个”及类似指示对象,除非本文中另有说明或以其他方式与上下文明显矛盾,否则均将视为包括一个及多个。除非另有说明,否则术语“包括”、“具有”、“含有”和“包含”应视为开放式术语(即,指的是“包括但不限于”)。术语“连接”应视为部分或全部包含在、附接至或连接在一起,即使存在某种干扰。本文中列举的数值范围仅用作单独引用介乎该范围之内的每个单独数值的简化方法,除非本文另有说明,而且每个单独数值均纳入本发明的说明中,就像是单独在此处列举一样。本文所述的所有方法,除非本文中另有说明或以其他方式与上下文明显矛盾,否则均可以以合适的顺序实施。本文所提供的任何及所有示例或示例性语言(例如:“诸如”)仅旨在更好地举例说明本公开,而且除非另有说明,均不会限制本公开的范围。说明书中的语言均不应视作表明任何对本公开实际应用至关重要的未陈述元素。
除非另有特别说明,否则诸如短语“X、Y或Z中的至少一个”之类的析取语言意在便于在通常用于表示项、术语等可以是X、Y或Z或其任何组合(例如X、Y和/或Z)的上下文中被理解。因此,这样的析取语言通常不用于,也不应该暗示某些示例要求X中的至少一个、Y中的至少一个或Z中的至少一个出现。
本文描述了本公开的各种示例,包括发明人已知的用于实施本公开的最佳方式。在阅读上述描述之后,这些示例的变化对于本领域的普通技术人员而言是显而易见的。发明人期望所属领域的技术人员酌情采用这种变化,并且发明人意欲实施本公开,而不是如本文特别描述的那样。因此,本公开包括适用法律允许的本发明所附权利要求中所述主题的所有修改和等同项。此外,除非本文中另有说明或以其他方式与上下文明显矛盾,否则本公开包含上述元素在其所有可能变化中的任何组合。
Claims (20)
1.一种神经网络训练方法,所述神经网络至少包括第一层和第二层,所述方法包括:
基于对所述第一层的输入数据和所述第一层的第一权重,对所述第一层执行第一正向传播操作以生成第一中间输出;
基于所述第一中间输出和所述第二层的第二权重,对所述第二层执行第二正向传播操作以生成第二中间输出,其中由于存储器没有足够的容量将所述第一中间输出和所述第二中间输出存储在一起,因此在所述第二正向传播操作完成之后,所述第二中间输出而不是所述第一中间输出被存储在所述存储器中;
从所述存储器中获得所述第二中间输出;
基于从所述存储器中获得的所述第二中间输出并基于第二参考中间输出,执行损失梯度操作以生成第一数据梯度;
基于所述输入数据,重复所述第一正向传播操作以重新生成所述第一中间输出;
基于所述重新生成的第一中间输出和所述第一数据梯度,对所述第二层执行第一反向传播操作,以生成所述第二层的第二数据梯度和第一权重梯度;
基于所述第一权重梯度,更新所述第二权重;
基于所述输入数据和所述第二数据梯度,对所述第一层执行第二反向传播操作,以生成所述第一层的第二权重梯度;以及
基于所述第二权重梯度,更新所述第一权重。
2.根据权利要求1所述的方法,进一步包括:在所述第二正向传播操作期间,用所述存储器中的所述第二中间输出覆盖所述第一中间输出。
3.根据权利要求1所述的方法,其中从所述神经网络的另一层处接收所述输入数据。
4.根据权利要求1所述的方法,进一步包括:在所述第二正向传播操作之后,选择在所述存储器中保留所述第二中间输出而不是所述第一中间输出,
其中所述选择基于以下至少一项:所述第一中间输出的第一大小、所述第二中间输出的第二大小、所述第一正向传播操作的第一计算时间或所述第二正向传播操作的第二计算时间。
5.一种方法,包括:
基于输入数据,对神经网络的第一层执行第一正向传播操作以生成第一中间输出;
基于所述第一中间输出,对所述神经网络的第二层执行第二正向传播操作以生成第二中间输出;
基于所述第二中间输出,执行损失梯度操作以生成第一数据梯度;
重复所述第一正向传播操作以生成所述第一中间输出;
基于来自所述重复的第一正向传播操作的所述第一中间输出和所述第一数据梯度,对所述第二层执行第一反向传播操作,以生成第二数据梯度和第一权重梯度,所述第一权重梯度用于更新所述第二层的权重;以及
基于所述输入数据和所述第二数据梯度,对所述第一层执行第二反向传播操作,以生成用于更新所述第一层的权重的第二权重梯度。
6.根据权利要求5所述的方法,其中在所述损失梯度操作之后和所述第一反向传播操作之前重复所述第一正向传播操作。
7.根据权利要求5所述的方法,进一步包括:
在所述第二正向传播操作完成之后和所述损失梯度操作之前,将所述第二中间输出而不是所述第一中间输出存储在存储器中;以及
从所述存储器中获得所述第二中间输出,作为所述损失梯度操作的输入。
8.根据权利要求7所述的方法,进一步包括:
在所述第一正向传播操作完成之后,将所述第一中间输出存储在所述存储器中;
从所述存储器中获得所述第一中间输出,作为所述第二正向传播操作的输入;以及
在所述第二正向传播操作完成之后和所述损失梯度操作之前,用所述存储器中的所述第二中间输出覆盖所述第一中间输出。
9.根据权利要求7所述的方法,进一步包括:
在所述损失梯度操作之后,用所述存储器中的所述第一中间输出覆盖所述第二中间输出;以及
从所述存储器中获得所述第一中间输出,作为所述第一反向传播操作的输入。
10.根据权利要求7所述的方法,其中所述存储器的存储容量低于所述输入数据、所述第一中间输出和所述第二中间输出的总大小。
11.根据权利要求7所述的方法,其中所述第一正向传播操作、所述第二正向传播操作、所述第一反向传播操作和所述第二反向传播操作由神经网络处理器执行;以及
其中所述存储器为所述神经网络处理器的片上存储器。
12.根据权利要求7所述的方法,其中所述第一正向传播操作、所述第二正向传播操作、所述第一反向传播操作和所述第二反向传播操作由神经网络处理器执行;以及
其中所述存储器为与所述神经网络处理器耦合的片外存储器。
13.根据权利要求7所述的方法,其中所述神经网络包括多层,所述多层包含所述第一层和所述第二层;
其中所述第二中间输出,而不是所述第一中间输出,在所述第二正向传播操作完成之后和所述损失梯度操作之前基于训练配置存储在所述存储器中,所述训练配置表示在所述多层的所述正向传播操作完成之后和所述损失梯度操作之前,将所述中间输出存储在所述存储器中的所述多层的子集,所述子集包括所述第二层。
14.根据权利要求13所述的方法,其中所述多层的所述子集的每一层由所述神经网络的固定数量层隔开。
15.根据权利要求13所述的方法,其中所述多层的所述子集包括第三层和第四层;
其中所述第二层和所述第三层由所述神经网络的第一数量层隔开;以及
其中所述第三层和所述第四层由所述神经网络的第二数量层隔开。
16.根据权利要求7所述的方法,进一步包括:在所述第二正向传播操作之后,选择在所述存储器中保留所述第二中间输出而不是所述第一中间输出,
其中,所述选择基于以下至少一项:所述第一正向传播操作的第一计算时间短于所述第二正向传播操作的第二计算时间,或者,所述第一正向传播操作所需的第一计算资源小于所述第二正向传播操作所需的第二计算资源。
17.根据权利要求5所述的方法,其中从所述神经网络的另一层处接收所述输入数据。
18.一种装置,包括:
存储指令的存储器;以及
硬件处理器,被配置为执行所述指令以:
控制神经网络处理器执行损失梯度操作,以生成数据梯度;
在所述损失梯度操作完成之后,控制所述神经网络处理器执行正向传播操作,以生成中间输出;
基于所述数据梯度和所述中间输出控制所述神经网络处理器执行反向传播操作,以生成权重梯度;
从所述神经网络处理器中接收所述权重梯度;并且
基于所述权重梯度更新神经网络的权重。
19.根据权利要求18所述的装置,其中所述正向传播操作为第一正向传播操作;
其中所述中间输出为第一中间输出;
其中所述存储器为第一存储器;以及
其中在所述损失梯度操作之前,所述硬件处理器被配置为执行所述指令以:
控制所述神经网络处理器执行所述第一正向传播操作,以生成所述第一中间输出;
控制所述神经网络处理器基于所述第一中间输出执行第二正向传播操作,以生成第二中间输出;并且
控制所述神经网络处理器在所述第二传播操作完成之后将所述第二中间输出而不是所述第一中间输出存储在第二存储器中。
20.一种存储指令的非暂时性计算机可读存储介质,在由处理器执行时使所述处理器:
控制神经网络处理器执行损失梯度操作,以生成数据梯度;
在所述损失梯度操作完成之后,控制所述神经网络处理器执行正向传播操作,以生成中间输出;
基于所述数据梯度和所述中间输出控制所述神经网络处理器执行反向传播操作,以生成权重梯度;
从所述神经网络处理器中接收所述权重梯度;并且
基于所述权重梯度更新神经网络的权重。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/836,421 | 2020-03-31 | ||
US16/836,421 US11610128B2 (en) | 2020-03-31 | 2020-03-31 | Neural network training under memory restraint |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113469354A true CN113469354A (zh) | 2021-10-01 |
CN113469354B CN113469354B (zh) | 2024-05-21 |
Family
ID=77659281
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110342087.0A Active CN113469354B (zh) | 2020-03-31 | 2021-03-30 | 受存储器限制的神经网络训练 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11610128B2 (zh) |
CN (1) | CN113469354B (zh) |
DE (1) | DE102021107510A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11631019B2 (en) * | 2020-03-30 | 2023-04-18 | Seechange Technologies Limited | Computing networks |
TWI766568B (zh) * | 2020-04-17 | 2022-06-01 | 神盾股份有限公司 | 用於執行卷積神經網路運算的處理裝置與其操作方法 |
CN111935179B (zh) * | 2020-09-23 | 2021-01-12 | 支付宝(杭州)信息技术有限公司 | 一种基于可信执行环境的模型训练方法和装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3374933A2 (en) * | 2015-11-09 | 2018-09-19 | Google LLC | Training neural networks represented as computational graphs |
JP6728496B2 (ja) * | 2016-11-04 | 2020-07-22 | ディープマインド テクノロジーズ リミテッド | 強化学習を使用した環境ナビゲーション |
CN108345939B (zh) * | 2017-01-25 | 2022-05-24 | 微软技术许可有限责任公司 | 基于定点运算的神经网络 |
US11842280B2 (en) * | 2017-05-05 | 2023-12-12 | Nvidia Corporation | Loss-scaling for deep neural network training with reduced precision |
US20180322386A1 (en) * | 2017-05-05 | 2018-11-08 | Intel Corporation | Fine-grain compute communication execution for deep learning frameworks |
US11961001B2 (en) * | 2017-12-15 | 2024-04-16 | Nvidia Corporation | Parallel forward and backward propagation |
CN109858046B (zh) * | 2018-02-09 | 2024-03-08 | 谷歌有限责任公司 | 利用辅助损失来学习神经网络中的长期依赖性 |
US11429862B2 (en) * | 2018-03-20 | 2022-08-30 | Sri International | Dynamic adaptation of deep neural networks |
CN110334799B (zh) * | 2019-07-12 | 2022-05-24 | 电子科技大学 | 基于存算一体的神经网络推理与训练加速器及其运行方法 |
-
2020
- 2020-03-31 US US16/836,421 patent/US11610128B2/en active Active
-
2021
- 2021-03-25 DE DE102021107510.6A patent/DE102021107510A1/de active Pending
- 2021-03-30 CN CN202110342087.0A patent/CN113469354B/zh active Active
-
2023
- 2023-02-21 US US18/112,036 patent/US20230196113A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US11610128B2 (en) | 2023-03-21 |
CN113469354B (zh) | 2024-05-21 |
DE102021107510A1 (de) | 2021-09-30 |
US20230196113A1 (en) | 2023-06-22 |
US20210304010A1 (en) | 2021-09-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230334294A1 (en) | Multi-memory on-chip computational network | |
US11816559B2 (en) | Dilated convolution using systolic array | |
CN113469354B (zh) | 受存储器限制的神经网络训练 | |
CN107341547B (zh) | 一种用于执行卷积神经网络训练的装置和方法 | |
US11144823B1 (en) | Method and system for hierarchical weight-sparse convolution processing | |
JP7451614B2 (ja) | オンチップの計算ネットワーク | |
US20210304008A1 (en) | Speculative training using partial gradients update | |
WO2022002157A1 (en) | Method and system for balanced-weight sparse convolution processing | |
US11144291B1 (en) | Loop-oriented neural network compilation | |
US11567778B2 (en) | Neural network operation reordering for parallel execution | |
US11941528B2 (en) | Neural network training in a distributed system | |
US11435941B1 (en) | Matrix transpose hardware acceleration | |
US11562554B1 (en) | Workload reduction for non-maximum suppression operation | |
CN114761920A (zh) | 具有可重构指令集的硬件加速器 | |
US11461662B1 (en) | Compilation time reduction for memory and compute bound neural networks | |
US11636569B1 (en) | Matrix transpose hardware acceleration | |
CN118043821A (zh) | 混合稀疏压缩 | |
WO2023019397A1 (en) | Hardware adaptive multi-model scheduling | |
US11468304B1 (en) | Synchronizing operations in hardware accelerator | |
US11704562B1 (en) | Architecture for virtual instructions | |
US11372677B1 (en) | Efficient scheduling of load instructions | |
US11868872B1 (en) | Direct memory access operation for neural network accelerator | |
US11841792B1 (en) | Instructions with multiple memory access modes | |
JP2024502225A (ja) | ワークロードが平準化された活性化スパース性を用いた畳込みのための方法およびシステム | |
US11809981B1 (en) | Performing hardware operator fusion |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |