在集成电路中实现神经网络的系统和方法与流程

文档序号:20686491发布日期:2020-05-08 18:52阅读:502来源:国知局
在集成电路中实现神经网络的系统和方法与流程

本公开的示例通常涉及集成电路(ic),特别涉及ic中的神经网络。



背景技术:

机器学习能力正快速发展。例如,神经网络(neuralnetworks,nn)可以用于数据中心及可嵌入应用。通常,神经网络需要在充分大的数据集中训练,并且训练是基于使用通用图形处理单元(generalpurposegraphicsprocessingunits,gpgpu)的浮点算法执行的。这种依赖于网络的大小和训练数据集的大小的训练可能进行很长时间。一般地,训练数据集包括输入/输出对。神经网络训练的目标是为了产生能使训练集中的每个输入映射到相应的输出的模型。在真实的使用案例中,这个模型也可以推广到不属于该训练集的数据。

因此,一种实现神经网络训练的改进方式是值得期待和有用的。



技术实现要素:

在根据本公开的一些实施例中,一种神经网络系统,包括输入层、在输入层之后的一个或多个隐藏层和在一个或多个隐藏层之后的输出层。输入层被配置为:接收包括批次序列的第一训练集;以及向输入层的后一层提供分别与批次序列相关联的多个输出激活。一个或多个隐藏层包括第一隐藏层,第一隐藏层被配置为:从第一隐藏层的前一层接收与第一批次相关联的第一输入激活;接收与第一批次之前的第二批次相关联的第一输入梯度,其中第一和第二批次具有与至少两个批次相关联的延迟因数;以及基于第一输入激活和第一输入梯度,向第一隐藏层的后一层提供与第一批次相关联的第一输出激活。输出层配置为:从输出层的前一层接收第二输入激活;以及基于第二输入激活和第一训练集,向输出层的前一层提供第一输出梯度。

在一些实施例中,第一隐藏层被配置为基于第一输入激活和第一输入梯度,向第一隐藏层的前一层提供与第二批次相关联的第二输出梯度

在一些实施例中,第一隐藏层被配置为基于与第二批次和第一输入梯度相关联的第三输入激活,生成与第二批次相关联的第一权重;和基于第一输入激活、第一输入梯度和第一权重,生成与第一批次相关联的第一输出激活。

在一些实施例中,第一隐藏层被配置为基于于第一输入激活、第一输入梯度和第一权重,生成第二输出梯度。

在一些实施例中,第一隐藏层被配置为基于第一批次和第二批次之间的延迟因数调整学习率;以及通过将学习率应用于与第二批次相关联的第一输入梯度,生成与第二批次相关联的第一权重。

在一些实施例中,还包括预处理单元,预处理单元被配置为接收具有第一大小的原始训练集;以及基于原始训练集生成第一训练集,其中第一训练集具有大于第一大小的第二大小。

在一些实施例中,第一隐藏层被配置为从第一隐藏层的后一层接收第一输入梯度。

在一些实施例中,第一隐藏层被耦接到合成梯度生成器,合成梯度生成器被配置为使用与第二批次之前的第三批次相关联的第二输入梯度来生成第一输入梯度估计;以及向第一隐藏层提供第一输入梯度估计作为第一输入梯度。

在一些实施例中,合成梯度生成器被配置为从第一隐藏层的后一层接收第二输入梯度;基于第一输入梯度估计和第二输入梯度,生成梯度估计误差;以及基于梯度估计误差,使用机器学习算法生成第二输入梯度估计。

在一些实施例中,第一输入激活、第一输出激活、第二输入激活和第一输出梯度包括二进制值。

在一些实施例中,该神经网络系统包括对数数据表示,对数数据表示被配置为在对数域中量化第一输入激活、第一输出激活、第二输入激活和第一输出梯度。

在一些实施例中,神经网络系统包括第一和第二集成电路(ic)。第一ic被配置为实现包括输入层、一个或多个隐藏层和输出层的多层中的第一层。第一ic具有根据第一层的第一计算能力要求的第一计算能力,并且第二ic被配置为实现该多个层中的第二层,其中,该第二ic具有根据第二层的第二计算能力要求的第二计算能力。

在一些实施例中,该神经网络系统还包括多个加速器。每个加速器被配置为实现输入层、一个或多个隐藏层和输出层中的一层。每个加速器被配置为具有基于相应层的计算能力和存储能力。

在一些实施例中,一种方法包括通过输入层,接收包括批次序列的第一训练集;通过输入层,向输入层的后一层提供分别与批次序列相关联的多个输出激活;通过第一隐藏层,从第一隐藏层的前一层接收与第一批次相关联的第一输入激活;通过第一隐藏层,接收与第一批次之前的第二批次相关联的第一输入梯度,其中第一和第二批次具有与至少两个批次相关联的延迟因数;通过第一隐藏层,基于第一输入激活和第一输入梯度,向第一隐藏层的后一层提供与第一批次相关联的第一输出激活;通过第一隐藏层之后的输出层,从输出层的前一层接收第二输入激活;以及通过输出层,基于第二输入激活和第一训练集,向输出层的前一层提供第一输出梯度。

在一些实施例中,该方法包括通过第一隐藏层,基于第一输入激活和第一输入梯度,向前一层提供与第二批次相关联的第二输出梯度。

在一些实施例中,该方法包括通过第一隐藏层,基于与第二批次和第一输入梯度相关联的第三输入激活,生成与第二批次相关联的第一权重;和通过第一隐藏层,基于第一输入激活、第一输入梯度和第一权重,生成与第一批次相关联的第一输出激活。

在一些实施例中,该方法包括通过第一隐藏层,基于于第一输入激活、第一输入梯度和第一权重生成第二输出梯度。

在一些实施例中,该方法包括通过第一隐藏层,基于第一批次和第二批次之间的延迟因数调整学习率;以及通过第一隐藏层,通过将学习率应用于与第二批次相关联的第一输入梯度,生成与第二批次相关联的第一权重。

在一些实施例中,该方法包括接收具有第一大小的原始训练集;以及基于原始训练集生成第一训练集,其中第一训练集具有大于第一大小的第二大小。

在一些实施例中,该第一输入梯度是从合成梯度生成器接收的第一输入梯度估计。

通过阅读以下具体实施方式和附图,本公开的其他方面和特征是显而易见的。

附图说明

图1是示出了根据本公开的一些实施例的用于ic的示例性架构的框图。

图2是示出了根据本公开的一些实施例的示例性神经网络系统的框图。

图3是示出了根据本公开的一些实施例的神经网络系统的示例性层的框图。

图4是示出了根据本公开的一些实施例的前向路径处理元件的框图。

图5是示出了根据本公开的一些实施例的反向路径处理元件的框图。

图6是示出了根据本公开的一些实施例的实现延迟的模型自适应方案的神经网络系统的框图。

图7是示出了根据本公开的一些实施例的图6的神经网络系统的层的框图。

图8是示出了根据本公开的一些实施例的用于训练神经网络系统的方法的流程图。

图9a是示出了根据本公开的一些实施例的合成梯度发生器的框图。

图9b是示出了根据本公开的一些实施例的合成梯度发生器的框图。

图10是示出了根据本公开的一些实施例的实现反向传播计算的二值化神经网络系统的一部分的框图。

图11是示出了根据本公开的一些实施例的使用多个计算单元实现的神经网络系统的框图。

图12是示出了根据本公开的一些实施例的使用单个处理阵列实现的神经网络系统的框图。

图13是示出了根据本公开的一些实施例的使用两个处理阵列实现的神经网络系统的框图。

具体实施方式

在下文中参考附图描述各种实施例,在附图中示出了示例性实施例。然而,所要求保护的发明可以以不同的形式实施,并且不应被解释为限于本文阐述的实施例。贯穿全文,相似的参考标号指代相似的元件。因此,相对于每个附图的描述,本文将不再详细描述相似的元件。还应注意,附图仅旨在更好地描述实施例。附图并不旨在作为所要求保护的发明的详尽描述或对所要求保护的发明的范围的限制。另外,示出的实施例不必具有所示的所有方面或优点。结合特定实施例描述的方面或优点不必限于该实施例,并且即使未如此示出或未如此明确地描述,也可以在任何其他实施例中实践。这些特征、功能和优点可以在各种实施例中独立地实现,或者还可以在其他实施例中组合。

在描述在几个附图中示意性地描绘的示例性实施例之前,本文先提供整体介绍以便于进一步理解。人工神经网络(以下也称为神经网络)是受大脑神经网络结构启发的计算模型。该神经网络包括输入层、多个隐藏层和输出层。每一层可包括一个或多个基本处理元件(processingelements,pe),也称为神经元(neurons)。这些层及其神经元相互连接,通过这些,神经网络可以执行高度复杂的计算。通过将权重施加到连接到该特定神经元的其他神经元的输出上,生成这些其他神经元的输出的加权和,并将激活函数(activationfunction)施加到加权和,可以获得特定神经元的激活(例如,输出)。在一些实施例中,可以在处理一个批次(batch)的数据(例如,图像识别中的多个图像)之后,使用反向传播学习方法来计算每个神经元的误差组成(errorcontribution)。可以将这种误差组成计算为损失函数的梯度,其中误差在输出层中计算并通过网络层分配回来。然后可以通过使用梯度来更新权重。

如上所述,通常需要在充分大的训练数据集上训练神经网络。训练数据集可以包括多个子集(批次)。典型的训练算法可能具有各种依赖性(dependencies)。这样的依赖性可能导致停转,并给使用多个加速器来实现神经网络带来困难。由于在神经网络的前向路径和反向路径之间存在依赖性,在一些实施例中,一层一层地执行每个批次的前向路径,以减少处理相邻批次之间的时间差。此外,可以基于使用gpgpu的浮点算法执行训练。然而,根据神经网络的大小和训练数据集的大小,这样的训练可能花费很长时间(例如,数小时到数周)。

已经发现,可以使用各种技术来去除训练算法中的依赖性,这可以防止或减少停转并且允许使用多个加速器(例如,多个gpu、多个fpga、多个专用集成电路asic、单个fpga中的多个加速器(例如,脉动阵列))来实现。例如,在训练期间,可以使用延迟的模型自适应方案来去除激活(例如,由前向路径计算的)和梯度(例如,由反向路径计算的)之间的依赖性。这样的延迟的模型自适应允许并行执行神经网络训练的前向路径和反向路径。这是通过在每个层的输出激活、权重更新和梯度计算之间引入延迟来实现的。这样就允许独立执行每个层的计算,而无需不同批次的输入。对于更多示例,合成梯度(例如,由机器学习算法生成的梯度估计)可以用于为神经网络的每一层提供梯度,从而去除训练期间所涉梯度的依赖性。

还已经发现,通过去除基于浮点算法的神经网络中的显著的冗余,可以提高训练效率,而对准确性的影响很小或没有影响。例如,具有降低的精度(例如,基于二进制算法)的数据类型可以用于神经网络的训练。使用二进制数据类型(例如,二进制权重、二进制激活和/或二进制梯度)的神经网络可以被称为二值化神经网络。这样的二值化神经网络可以有效地映射到可编程ic,例如现场可编程门阵列(fpga)。此外,定制数据表示(例如,使用对数算法或具有或不具有随机量化的定点算法的表示)可用于改善神经网络的硬件实现。

考虑到以上的整体理解,下面描述用于实现神经网络的各种实施例。在本公开的各种应用中可以存在各种优点。所有实施例都不需要特别的优点,并且不同的实施例可以提供不同的优点。在一些实施例中,优点之一在于通过去除神经网络的层之间的依赖性(例如,通过使用延迟的模型自适应方案和/或合成梯度),可以使用多个计算单元(例如,加速器),实施神经网络,这可以减少神经网络的训练时间。例如,可以基于相应层的不同计算和存储需求来配置加速器,这可以提高加速器利用率。

在一些实施例中,另一个优点是降低的精度(例如,二值化神经网络)和定制数据表示(例如,对数算法表示)可以用于训练神经网络,这可以提高训练效率。这种降低的精度和定制数据表示可以用于神经网络的各种实施方式,例如,使用单个加速器(例如,单个gpu、包括单个脉动阵列的fpga)或多个加速器(例如,多个gpu、多个fpga、包括多个脉动阵列的单个fpga)的实施方式。

在一些实施例中的又一个优点是使用fpga的神经网络训练可以使用降低的功耗(例如,与gpu相比),这可以使在线训练能够进行。这种在线训练可以允许fpga的嵌入式器件不断适应环境变化,并在不重新合成(re-synthesis)神经网络的硬件实现的情况下实现准确性和吞吐量的权衡。在一些实施例中的又一个优点是通过使用预处理单元(例如,片上或片外具有神经网络的硬件实现)来人工地增加传入的训练数据集(例如,通过失真、着色、旋转、缩放),可以达到更高的训练精度。

在一些实施例中的又一个优点是在神经网络的每一层内,可以使用随机数生成器来支持随机舍入(rounding)和丢弃。通过使用下面详细描述的各种技术,可以实现更有效的神经网络训练,从而提高数据科学家的生产力并提高神经网络的准确性。

在一些实施例中的又一个优点是,出于在计算全部反向路径之前完成的全部前向路径的计算所施加的要求去除了数据依赖性,引入了可以在加速器架构(例如数据流)中利用的更高程度的并行性。

在一些实施例中的又一个优点是,通过在前向路径中引入权重的延迟以及使用梯度计算出的更新,训练可以通过使用梯度的估计而成功地工作。

通过去除数据依赖性,引入了可在加速器架构(例如数据流)中利用的更高程度的并行性。

因为以上举例描述了使用特定类型的ic实施例中的一个或多个,所以下面提供这种ic的详细描述。然而,应当理解,其他类型的ic可受益于本文描述的一个或多个实施例。

可编程逻辑器件(programmablelogicdevices,pld)是一种众所周知的集成电路类型,其可以被编程以执行指定的逻辑功能。一种类型的pld,即现场可编程门阵列(fpga),通常包括可编程片块(tiles)的阵列。这些可编程片块可以包括例如输入/输出块(input/outputblocks,iob)、可配置逻辑块(configurablelogicblocks,clb)、专用随机存取存储块(dedicatedrandomaccessmemory,bram)、乘法器(multipliers)、数字信号处理块(digitalsignalprocessing,dsp),处理器、时钟管理器、延迟锁定回路(delaylockloops,dll)等。如本文所用,“包括”和“包括了”是指包括但不限于。

每个可编程片块通常包括可编程互连和可编程逻辑。可编程互连通常包括通过可编程互连点(programmableinterconnectpoints,pip)互连的长度不同的大量互连线。可编程逻辑使用可编程元件来实现用户设计的逻辑,所述可编程元件可以包括例如函数发生器、寄存器、算术逻辑等。

通常通过将配置数据流加载到内部配置存储单元(internalconfigurationmemorycells)中来对可编程互连和可编程逻辑进行编程,该内部配置存储单元限定了可编程元件的配置方式。可以从存储器(例如,从外部prom)读取配置数据,或者由外部器件将配置数据写入fpga。然后,各个存储单元的集合状态决定fpga的功能。

pld的另一种类型是cpld,或称复杂可编程逻辑器件(complexprogrammablelogicdevice)。cpld包含两个或多个“功能块”,它们连接在一起并通过互连开关矩阵连接到输入/输出(i/o)资源。cpld的每个功能块都包括两级与/或结构,其类似于在可编程逻辑阵列(programmablelogicarrays,pla)和可编程阵列逻辑(programmablearraylogic,pal)器件中使用的结构。在cpld中,配置数据通常片上存储在非易失性存储器中。在某些cpld中,配置数据被片上存储在非易失性存储器中,然后作为初始配置(编程)序列的一部分下载到易失性存储器中。

通常,对于这些可编程逻辑器件(pld)中的每一个,器件的功能受为此目的提供给器件的配置数据控制。配置数据可以存储在易失性存储器(例如,fpga和某些cpld中常见的静态存储单元)、非易失性存储器(例如,某些cpld中的flash存储器)或任何其他类型的存储单元中。

其他pld通过应用处理层(例如金属层)进行编程,该层可编程地互连到器件上的各种元件。这些pld被称为掩膜可编程器件。也可以以其他方式来实现pld,例如,使用熔丝(fuse)或反熔丝技术。术语“pld”和“可编程逻辑器件”包括但不限于这些示例性器件,并且包括仅部分可编程的器件。例如,一种类型的pld包括硬编码晶体管逻辑和以可编程地互连到硬编码晶体管逻辑的可编程开关结构的组合。

如上所述,高级fpga可以在阵列中包括几种不同类型的可编程逻辑块。例如,图1示出了示例性fpga架构100。fpga架构100包括大量不同的可编程片块,包括多千兆位收发器(multi-gigabittransceivers,mgt)101、可配置逻辑块(clb)102、随机存取存储器块(bram)103,输入/输出块(iob)104,配置和时钟逻辑(config/clocks)105、数字信号处理块(dsp)106、专用输入/输出块(i/o)107(例如,配置端口和时钟端口)以及其他可编程逻辑108,例如数字时钟管理器、模数转换器、系统监视逻辑等。一些fpga还包括专用处理器块(proc)110。

在一些fpga中,每个可编程片块可以包括至少一个可编程互连元件(interconnectelement,int)111,其具有到相同片块内的可编程逻辑元件的输入和输出端子120的连接,如图1上部包括的示例所示。每个可编程互连元件111还可以包括到同一片块或其他片块中的相邻可编程互连元件的互连段122的连接。每个可编程互连元件111还可以包括到逻辑块(未示出)之间的通用路由资源的互连段124的连接。通用路由资源可包括各逻辑块(未示出)之间的路由信道,这些逻辑块包括互连段(例如,互连段124)的轨道和用于连接互连段的开关块(未示出)。通用路由资源的互连段(例如,互连段124)可以跨越一个或多个逻辑块。可编程互连元件111与通用路由资源一起实现了用于所示fpga的可编程互连结构(“可编程互连”)。

在示例实施方式中,clb102可以包括可被编程为实现用户逻辑的可配置逻辑元件(cle)112和单个可编程互连元件(int)111。bram103可以包括bram逻辑元件(bramlogicelement,brl)113以及一个或多个可编程互连元件。通常,片块中包括的互连元件的数量取决于片块的高度。在图示的例子中,bram片块具有与五个clb相同的高度,但是也可以使用其他数目(例如四个)。除了适当数量的可编程互连元件之外,dsp片块106还可以包括dsp逻辑元件(dsplogicelement,dspl)114。除了可包括可编程互连元件的一个实例之外,iob104还可包括例如输入/输出逻辑元件(iol)115的两个实例。如本领域技术人员将清楚的,例如,连接到i/o逻辑元件115的实际i/o焊盘通常不限于输入/输出逻辑元件115的区域。

在图1的示例中,靠近裸片中心(例如,由图1所示的区域105、107和108形成)的区域(水平示出)可以用于配置、时钟和其他控制逻辑。从该水平区域延伸的列109(垂直示出)或其他列可用于在fpga的整个宽向上分配时钟和配置信号。

一些利用图1中所示的架构的fpga包括其他逻辑块,这些其他逻辑块破坏(disrupt)了构成fpga很大一部分的规则柱状结构。附加逻辑块可以是可编程块和/或专用逻辑。例如,proc110跨越几列clb和bram。proc110可以包括从单个微处理器到微处理器、存储控制器、外围器件等的完整的可编程处理系统范围内的各种组件。

一方面,proc110被实现为专用电路,例如被实现为硬连线处理器,其被制造为实现ic的可编程电路的裸片的一部分。proc110可以表示多种不同的处理器类型和/或系统,其复杂程度的范围从单个处理器(例如,能够执行程序代码的单个内核)到具有一个或多个内核、模块、协同处理器、接口等的整个处理器系统。

在另一方面,从架构100中省略了proc110,并且可以用所描述的可编程块的一个或多个其他变体来代替。此外,此类的块可用于形成“软处理器”,因为可编程电路的各个块可用于形成可执行程序代码的处理器,就像proc110一样。

短语“可编程电路”可以指ic内的可编程电路元件,例如,本文描述的各种可编程或可配置电路块或片块,以及根据加载到ic中的配置数据选择性地耦接各种电路块、片块和/或元件的互连电路。例如,图1中所示的在proc110外部的部分(诸如clb102和bram103)可以被认为是ic的可编程电路。

在一些实施例中,直到将配置数据加载到ic中,才建立可编程电路的功能和连接性。一组配置数据可用于对ic(例如fpga)的可编程电路进行编程。配置数据在某些情况下被称为“配置比特流(configurationbitstream)”。通常,如果不先将配置比特流加载到ic中,可编程电路就无法运行或工作。配置比特流有效地实现或实例化了可编程电路系统内的特定电路设计。电路设计指定了例如可编程电路块的功能方面以及各种可编程电路块之间的物理连接性。

在一些实施例中,被“硬连线”或“硬化”(即不可编程)的电路被制造为ic的一部分。与可编程电路不同,硬连线电路或电路块不是在制造ic之后通过加载配置比特流实现的。硬连线电路通常被认为具有例如专用电路块和互连,这些电路块和互连在没有首先将配置比特流加载到ic(例如proc110)的情况下仍能发挥功能。

在某些情况下,硬连线电路可以具有一个或多个操作模式,操作模式可以根据存储在ic内一个或多个存储元件中的寄存器设置或值来设置或选择。例如,可以通过将配置比特流加载到ic中来设置操作模式。尽管具有这种能力,但是硬连线电路不被认为是可编程电路,因为当硬连线电路作为ic的一部分制造时,它是可操作的并且是具有特定功能的。

图1旨在说明可用于实现包括可编程电路(例如,可编程结构)的ic的示例性架构。例如,一行中逻辑块的数量、行的相对宽度、行的数量和顺序、行中包含的逻辑块的类型、逻辑块的相对大小以及包括在图1的上部的互连/逻辑实现都仅是示例性的。例如,在实际的ic中,无论clb出现在何处,通常都包括一个以上的clb相邻行,以促进用户逻辑的有效实现,但是相邻的clb行的数量随ic的整体大小而变化。此外,图1的fpga示出了可编程ic的一个示例,其可以采用本文所述的互连电路的示例。本文描述的互连电路可以用在其他类型的可编程ic中,例如cpld,或具有用于选择性地耦接逻辑元件的可编程互连结构的任何类型的可编程ic。

需要注意的是,可以实现神经网络的ic不限于图1所示的示例性ic,具有其他配置或其他类型的ic也可以实现神经网络系统。

参考图2,示出了示例性神经网络系统200。神经网络系统200包括预处理单元202、层204-0至204-(n-1)的n个层以及损失计算单元210。可以使用可编程逻辑器件、dsp块等实现这些层。在一个示例中,包括n层的神经网络系统200可以在单个ic中实现。在另一示例中,可以使用多个ic来实现神经网络系统200,其中每个ic可以实现神经网络系统200的一层或多层。每一层可以包括一个或多个神经元,每个神经元具有其对应的前向路径处理元件(processingelement,pe)和反向路径pe,这将在下面详细描述。第一层204-0可以接收输入训练集,并且可以称其为输入层204-0。输入训练集可以包括具有批次索引0、1、2、3、...、b-1的批次序列,其中b是输入训练集中的批次数。具有索引b的批次可以被称为第b批次。最后层204-(n-1)可以为输入层204-0接收的相应输入提供输出,并且可以被称为输出层204-(n-1)。层204-1至204-(n-2)可以被称为隐藏层。

在一些实施例中,预处理单元202可以接收输入训练集220,可以在输入训练集220中人工地增加批次(例如,通过执行失真、着色、旋转、缩放、修剪和其他应用处理),并生成包括增加后的批次的预处理的训练集222。在一些示例中,增加后的批次的大小大于或等于相应原始批次的大小。当输入训练集220(例如图像)的数据速率不能充分利用实现神经网络系统200的目标器件的计算能力时,可以执行这样的预处理。输入训练集220的数据速率可能会受到用于捕获和提供输入训练集220的各种处理过程的影响。例如,它可能会受到用于捕获输入训练集220(例如图像)的源捕获设备(例如摄像机、麦克风)的速度的影响。再例如,它可能受到用于提供输入训练集220的外部存储器所造成的瓶颈的影响。当输入训练集220的数据速率低于基于目标器件的计算能力确定的阈值数据速率时,可以执行预处理。在一些示例中,在预处理之后,预处理后的训练集222的大小大于输入的训练集220。具有增大的大小的这种预处理的训练集222可以改善训练后的神经网络的质量(例如,通过提高通过神经网络训练创建的模型的通用性),并更好地利用了实现神经网络系统的目标器件的计算能力。

神经网络系统200可以实现各种训练算法。在一些实施例中,神经网络系统可以使用反向传播算法。考虑神经网络的第b批次具有权重w(b),并基于权重w(b)提供估计函数fb(xi),其中xi是待估计的输入(即待识别的图像)。对于这样的神经网络,反向传播算法包括两个处理(process):前向路径(前向传播)处理和反向路径(反向传播)处理。

在一些实施例中,前向路径处理可以包括对204-0至204-(n-1)的所有层计算激活206-0至206-(n-1)。对于包括m个样本的预处理后的训练集222,输入/输出对可以表示为{xi,yi},其中i=0,...,m-1。输出的估计值可以计算为:

其中,fb是指由给定神经网络描述的、针对给定第b批次计算的权重的模型。用于计算输出的处理可以包括:首先通过层204-0计算激活206-0,将激活206-0从层204-0传递到下一层204-1,通过层204-1计算激活206-1,以此类推,直到最后一层204-(n-1)计算激活206-(n-1)。然后可以将激活206-(n-1)发送到损失计算单元210。

在一些实施例中,反向路径处理可以包括计算梯度208-n至208-1。在图2的示例中,在从最后层204-(n-1)接收到激活206-(n-1)之后,损失计算单元210可以基于激活206-(n-1)和预处理后的训练集222,使用预定的损失函数来计算梯度208-n。在一个示例中,预定损失函数可以是次微分损失函数,例如平方折页损失(squaredhingeloss)函数,其提供为:

损失计算单元210然后可以将梯度208-n发送到最后层204-(n-1)。基于从下一层204-(i+1)接收的梯度208-(i+1)和从前一层204-(i-1)接收的激活206-(i-1),层204-i可使用损失函数来计算其梯度208-i。然后可以将计算出的梯度208-i传递到前一层204-(i-1),其可以通过迭代应用链式规则来计算每个权重处的梯度,该链式规则是用于计算两个或多个函数的部分的导数的公式。这种梯度的计算将继续进行,直到已经计算了204-(n-1)至204-0的所有层中的权重的梯度。

在一些实施例中,在反向路径处理中,权重的梯度可以用于使用梯度下降算法来更新权重。在一个示例中,在特定的层中,权重更新处理可以如下公式提供:

w(b+1)=w(b)-μgrad(b),

其中w(b)是第b批次的权重,grad(b)是第b批次的梯度,μ是称为学习率或步长的尺度因数,w(b+1)是第(b+1)批次的权重。

参考图3、4和5,示出了神经网络系统200的示例性层204-i。图3示出了层204-i,其包括用于在层204-i处执行反向传播算法的前向路径处理的前向路径单元300,以及用于在层204-i处执行反向传播算法的反向路径处理的反向路径单元302。图4示出了前向路径单元300的示例性前向路径处理元件(pe)。图5示出了反向路径单元302的示例性反向路径pe。

参考图3的示例,层204-i包括前向路径单元300和反向路径单元302。前向路径单元300包括缓冲器304和p个前向路径处理元件(pe)306-0至306-(p-1),其中p是等于或大于1的整数。缓冲器304从前一层204-(i-1)接收激活206-(i-1),并且将激活206-(i-1)发送到p个前向路径pe306-0至306-(p-1)。前向路径pe306-0至306-(p-1)可以执行激活生成函数,以基于来自前一层204-(i-1)的激活206-(i-1)生成激活206-i,并且将激活206-i发送到下一层204-(i+1)(例如,通过缓冲器308)。在一些实施例中,每个前向路径pe对应于层204-i的神经元。这样,前向路径单元300中的前向路径pe的数量p可以控制可在前向路径处理中并行计算的层204-i的神经元的数量。在一些实施例中,前向路径pe306-0至306-(p-1)可以分别从对应的反向路径pe310-0至310-(p-1)接收权重318,并基于更新后的权重318和激活206-(i-1)执行激活生成函数。

在图3的示例中,反向路径单元302包括缓冲器312和p个反向路径pe310-0至310-(p-1)。缓冲器312从下一层204-(i+1)接收梯度208-(i+1),并将梯度208-(i+1)发送到p个反向路径pe310-0至310-(p-1)。反向路径pe310-0至310-(p-1)可以执行梯度生成函数以基于来自前一层204-(i-1)的激活206-(i-1)和来自下一层204-(i+1)的梯度208-(i+1)生成梯度208-i。可以例如通过缓冲器314将梯度208-i发送到前一层204-(i-1)。在一些实施例中,每个反向路径pe对应于层204-i的神经元。这样,反向路径单元302中的反向路径pe的数量p可以控制可在反向路径处理中并行计算的层204-i的神经元的数量。在一些实施例中,反向路径pe310-0至310-(p-1)可以分别从对应的前向路径pe306-0至306-(p-1)接收激活输入316,并基于前一层204-(i-1)的激活206-(i-1)、下一层204-(i+1)的梯度208-(i+1)和激活来自相应的前向路径pe的输入316,执行梯度生成函数。

参考图4,示出了层204-i的前向路径单元300的示例性前向路径pe306-p。前向路径pe306-p包括权重和阈值存储器402、乘加单元404和激活单元406。权重和阈值存储器402可以接收更新后的权重318(例如,从层204-i的反向路径单元302的对应反向路径pe310-p接收),并将权重318发送到乘加单元404。乘加单元404可以从前一层204-(i-1)接收激活206-(i-1),从权重和阈值存储器402接收权重318,并通过执行乘加操作(例如,通过使用硬件乘加器(multiplier–accumulator,mac)单元)来生成激活输入316。激活单元输入316可以被发送到激活单元406,该激活单元406基于激活单元输入316和权重318来生成激活206-i。然后可以将激活206-i提供给下一层204-(i+1)的输入。在一些实施例中,激活输入316也可以被发送到相应的反向路径pe310-p,以在反向路径处理中计算梯度。

在图4的示例中,可以对乘加单元404进行缩放(scaled),以针对单个点积(dotproduct)计算每个时钟周期的s个乘加。在图3的前向路径单元300中,前向路径pe的数量p控制并行计算的点积的数量。结果,单层204-i可以在前向路径处理中的每个时钟周期计算p个神经元的s个突触(synapse)。

参考图5,示出了层204-i的反向路径单元302的示例性反向路径pe310-p。反向路径pe310-p包括激活反向传播单元502。激活反向传播单元502接收梯度208-(i+1)(例如,从下一层204-(i+1)或损失计算单元210),并从相应的前向路径pe306-p接收激活输入316,并基于激活梯度函数生成梯度504。乘加单元506可以基于权重318(例如,从权重和阈值存储器514接收到的权重)和梯度504来生成梯度208-i。然后,可以将梯度208-i提供给前一层204-(i-1)。

在图5的示例中,可以对乘加单元506进行缩放,以针对单个点积计算每个时钟周期的s个乘加。在图3的反向路径单元302中,反向路径pe的数量p控制并行计算的点积的数量。结果,单层204-i可以在反向路径处理中的每个时钟周期计算p个神经元的s个突触。

在图5的示例中,也可以将梯度504发送到优化单元508。优化单元508可以基于梯度504和激活206-(i-1)(例如,来自前一层204-(i-1)或预处理单元202)来更新权重和阈值,并将更新后的权重510和阈值512发送到权重和阈值存储器514。优化单元508可以使用的优化算法包括例如随机梯度下降(stochasticgradientdescent)、批次梯度下降、批次下降、adam和/或其他可应用的优化算法。在一些实施例中,权重和阈值存储器514可以将权重和阈值318发送到相应的前向路径pe306-p。

在一些实施例中,用于训练神经网络200的训练算法(例如,反向传播算法)可能具有各种依赖性。这样的依赖性可能导致停转(stalling),并给使用多个加速器实现神经网络带来困难。例如,在反向传播算法中,在前向路径处理中,特定层204-i可能要求其批次b的权重(表示为wi(b))在其前向路径单元300为批次b计算激活(表示为acti(b))之前就已经在反向路径处理中计算出来。前向路径和反向路径之间的这种依赖性可以防止针对不同的层204-0至204-(n-1)使用多个计算单元(例如,加速器)。例如,由于依赖性,当使用多个计算单元来实现不同的层组时,这些计算单元可能会不断等待前向路径处理中的新激活输入或反向路径处理中的新梯度输入。

在一些实施例中,为了解决反向传播算法的依赖性,可以使用单个计算单元(例如,单个gpu或单个脉动阵列)来实现神经网络训练。在这样的实施例中,单个计算单元逐层计算前向路径处理(例如,从层204-0到层204-(n-1)),然后以相反的顺序逐层计算反向路径(例如,从层204-(n-1)至层204-0)。然而,在一些实施例中,层(例如,卷积神经网络(cnn)中的层)可以具有显着不同的计算和存储器需求。这样,使用单个加速器来实现所有层的“一体通用(one-size-fits-all)”的解决方案在处理特定层时通常会导致该加速器的利用率不足。

参考图6、7、8、9a、9b和10,神经网络系统200可以使用各种技术来去除反向传播算法中的依赖性。例如,图6示出了可用于去除层之间的依赖性的延迟的模型自适应方案。再例如,图9a和9b示出了合成梯度估计器,其可以用于提供梯度估计、去除层之间的依赖性以及减小层的延迟因数。在一些实施例中,通过去除层之间的依赖性,可以使用被指派为处理不同层的多个计算单元(例如,加速器)来实现神经网络。这样的实施例可以减少神经网络的训练时间,并且通过基于相应层的不同计算和存储需求而配置加速器来提高加速器利用率。

参考图6,在一些实施例中,神经网络系统600可以使用延迟的模型自适应方案来去除层之间的依赖性,从而使得能够有效地使用多个加速器(例如,多个gpu、多个fpga、包括多个脉动阵列的单个fpga)来实现神经网络系统200。除以下描述的差异外,图6的神经网络系统600基本上类似于图2的神经网络系统200。通过使用延迟的模型自适应,在层204-i中,对于具有预处理的训练集222的索引为b的批次(也称为第b批次),可以使用第b-d批次的梯度208-(i+1)(表示为gradi+1(b-d))来计算激活输出206-i(表示为acti(b))。例如,可以通过使用第b-d批次的权重wi(b-d)来计算激活输出206-iacti(b),其中可以使用gradi+1(b-d)来计算权重wi(b-d),然后可以被用于计算激活输出206-iacti(b)。这使得激活函数的计算(例如,由层204-i中的前向路径pe306-p的激活单元406执行)和权重的更新(例如,由反向路径pe310-p的优化单元508执行)之间有d-1个延迟时段。

如图6所示,在一些实施例中,在特定时刻t0,每个层可以在预处理后的训练集222的不同批次上操作。这样,这些层可以具有不同的延迟因数(时延)d。例如,在t0时刻,层204-1接收act0(b-1)和grad2(b-2n-1),并且基于act0(b-1)和grad2(b-2n-1)进行计算以生成act1(b-1)。这样,层204-1具有的延迟因数d1为2n。再例如,在t0时刻,层204-2接收act1(b-2)和grad3(b-2n),并使用act1(b-2)和grad3(b-2n)执行计算以生成act2(b-2)。这样,层204-2具有的延迟因数d2为2n-1。在图6的示例中,随着层索引数增加,延迟因数增加。换句话说,靠近层0的层具有的延迟因数大于靠近层n-1的层的延迟因数。

在一些实施例中,层204-0至204-(n-1)中的每一个可以基于其延迟因数d来调整其学习率μ和/或步长。因此,层204-0至204-(n-1)可以具有不同的学习率。在一个示例中,层204-i的学习率可以低于在层204-i之后的层204-j,其中,层204-i的延迟因数di大于层204-j的延迟因数dj。在一些实施例中,可以使用额外的硬件来计算修正项,这些修正项可以用于确保使用延迟的模型自适应来学习的参数的稳定性,并补偿由于包含了延迟的模型自适应而引入的任何误差。

注意,神经网络系统200和600都可以利用相同类型的处理引擎,但是如上所述,这些处理引擎被调度以执行前向路径处理和反向路径处理的方式有很大不同。

参考图7,示出了实现延迟的模型自适应的层204-i的一部分。在图7的示例中,在特定时刻t0,权重梯度函数单元702从下一层204(i+1)接收第b-d批次的梯度208-(i+1)gradi+1(b-d)。权重梯度函数单元702还从延迟单元706接收延迟的激活704。延迟单元704可以通过将d个延迟时段(period)(例如,与d个批次相关联)施加到第b批次的激活206-(i-1)acti-1(b)来生成延迟激活704。权重梯度函数单元702输出权重708。权重708由优化函数710优化。附加延迟(例如,一个延迟时段)可以由延迟单元712应用到所得的优化后的权重以生成权重714(例如,图4的权重318)。权重714可以存储在存储器402中。

在前向路径300中,权重714用于生成第b批的激活206-iacti(b)。如图7中的示例所示,权重714被发送到神经元输入函数单元716(例如,图4的乘加单元404),其使用权重714对激活206-(i-1)acti-1(b)执行神经元输入函数。神经元输入函数单元716可以将激活单元输入718(例如,激活单元输入316)发送到激活单元720(例如,图4的激活单元406)。激活单元720基于激活单元输入718生成第b批次的激活206-iacti(b)。然后可以将激活206-iacti(b)提供给下一层204-(i+1)的输入。

在反向路径302中,权重714用于生成梯度208-igradi(b-d)。如图7的示例中所示,权重梯度函数单元702(例如,图5的激活反向传播单元502)接收梯度722。梯度722和权重714被发送到神经元梯度函数单元724(例如,图5的乘加单元506)。神经元梯度函数单元724可以生成第b-d批次的梯度208-igradi(b-d),并将梯度gradi(b-d)发送到前一层204-(i-1)。

参考图8,示出了用于实现使用反向传播算法训练神经网络的延迟的模型自适应的方法800。该方法开始于框802,其中神经网络的层204-i从层204-(i-1)接收激活acti-1(b-d),并从层204-(i+1)接收梯度gradi+1(b-d)。方法800可以进行到框804,在框804,基于acti-1(b-d)和gradi+1(b-d)生成权重wi(b-d)。例如,如上面参考图7所述,反向路径pe310-p可以生成wi(b-d)。方法800然后可以进行至框806,在框806,权重wi(b-d)可以用于在层204-i处的前向路径中为训练集的批次t生成激活。例如,权重wi(b-d)可以被发送到层204-i中的对应的前向路径pe306-p。然后,前向路径pe306-p可以使用权重wi(b-d)来计算acti(b),如上面参考图3和图4所讨论的。这样,通过使用延迟的模型自适应,去除了前向路径处理和反向路径处理的层之间的依赖性。

参考图9a和9b,在各个实施例中,可以使用合成梯度来去除反向传播算法中的依赖性。在图9a的示例中,示出了采用合成梯度的层204-i的反向路径pe310-p的一部分。反向路径pe310-p包括合成梯度估计器950,其包括合成梯度生成器902。合成梯度生成器902从前一层204-(i-1)接收激活206-(i-1),并且根据激活206-(i-1)和梯度估计误差908生成梯度估计904。然后可以将梯度估计904发送到反向路径pe310-p的激活反向传播单元502。可以基于梯度估计904来计算权重318,并且可以将权重318发送到相应的前向路径pe306-p以生成激活。这样,通过使用合成梯度,可以去除前向路径处理和反向路径处理的层之间的依赖性。

在图9a的示例中,可以将梯度估计904发送到梯度估计误差生成器906(例如,减法器)。在实际梯度208-(i+1)变得可用(例如,来自层204-(i+1))之后,梯度估计误差生成器906可以将梯度估计904与实际梯度208-(i+1)进行比较,以生成一个梯度估计误差908。合成梯度生成器902可以基于梯度估计误差908来改善未来的梯度估计904。例如,梯度估计误差908可以被用来生成合成梯度生成器902的训练示例,以基于机器学习算法(例如,神经网络,最小均方(leastmeansquares,lms))执行机器学习。在特定示例中,通过使用简单的lms学习算法进行机器学习,可以降低合成梯度生成器902的硬件成本。在一些示例中,合成梯度可以提供梯度估计,而不需要来自下一层的实际梯度。

参考图9b,在一些实施例中,合成梯度发生器可以与延迟的模型自适应一起使用,以去除前向和反向路径之间的依赖性,并减少早期隐藏层中引起的延迟量。在图9b的示例中,合成梯度估计器950可以从层204-i接收第(b-i+1)批次的激活206-iacti(b-i+1)。合成梯度估计器950可从后一层204-(i+1)接收第(b-d2)批次的梯度合成梯度估计器950可以基于激活206-iacti(b-i+1)和梯度生成第(b-d1)批次的梯度在一个示例中,d1小于d2。通过使用梯度可以生成而无需等待层204-(i+1)完成对第(b-d1)批次的处理,这可以减少各层中的延迟因数。

参考图10,在一些实施例中,可以通过使用降低精度的网络(例如,二值化神经网络)和定制的数据表示(例如,对数数据表示)来提高训练效率从而提高训练神经网络系统200和600的性能。例如,当训练二值化神经网络时,在前向路径处理中,可以使用异或非电路(xnor)来执行乘法,并且可以使用位计算(bitcount)来执行累加。再例如,对数数据表示可以为硬件实现带来各种好处,例如,可以将训练算法中的乘法实现为硬件中的加法,并且可以使用查找表来实现训练算法中的加/减。

图10是实现二值化神经网络的层204-i的反向路径pe310-p的一部分。在图10的示例中,在反向路径处理中,只能在1s和-1s之间执行乘法。对于定点数据类型,乘数可以是单位函数(unityfunction)或元素级位翻转(element-wisebit-flip)加上1位值。对于对数数据类型(包括浮点数据类型),乘法变成符号位的简单位翻转。此外,可以使用特定的激活梯度函数(例如硬双曲正切(hardtanh)激活函数),以使输出1008为0或1。xnor电路1002可以接收二进制值的梯度208-(i+1)和输出1008,并生成可提供给反向路径pe310-p的优化单元508的梯度504。在图10的示例中,乘加单元506包括由二进制权重318和加法器1006控制的xnor电路1004,并且可以生成可以提供给前一层204-(i-1)的梯度208-i。这样,通过使用降低的精度数据类型和对数数据表示,反向路径pe310-p可以在不使用任何乘法器的情况下执行反向路径处理。

参考图11、12和13,可以使用各种架构来实现神经网络系统200和600,以将神经网络系统缩放到大型问题。图11的示例示出了使用多个可编程ic(例如,多个fpga)及用于这些可编程ic之间的通信的流接口的流式架构(streamingarchitecture)。图12的示例示出了使用包括单个可编程脉动阵列的单个可编程ic(例如,单个fpga)的架构。图13的示例使用包括两个脉动阵列的单个可编程ic(例如,单个fpga)。

参考图11,在一些实施例中,可以使用多个ic(例如,每个在单独的芯片上的可编程ic),及它们之间的流接口来实现流式架构1100。流式架构1100包括神经网络系统1102,该神经网络系统1102包括l个ic(例如,fpga、gpu)1106-0至1106-(l-1),其中l是正整数。ic1106-i中的每一个可用于实现一个或多个层。在图11的示例中,ic1106-0用于实现层204-0至204-2,而ic1106-(l-1)用于实现层204-(n-3)、204-(n-2)和204-(n-1)。主机1104可以将训练集220发送到神经网络系统1102,并且可以从神经网络系统1102接收学习后的权重。

参考图12,在一些实施例中,可以使用包括单个处理阵列1204和io缓冲器1206的单个ic1202来实现神经网络系统200。单个处理阵列1204可以是脉动阵列(systolicarray),并且可以被称为脉动阵列1204。脉动阵列1204可用于计算神经网络系统200的全连接层、卷积层和/或最大池化层的前向路径和/或反向路径。在一个示例中,将层204-0至204-(n-1)时分复用到脉动阵列1204上。换句话说,脉动阵列1204可配置为实现层204-0,然后实现层204-1,以此类推,直到实现层204-(n-1)。脉动阵列1204为层204-i生成的结果可以被保存,以用作到下一层的实现(例如,前向路径处理中的下一层204-(i+1)和反向路径处理中的前一层204-(i-1))的输入。

参考图13,在一些实施例中,使用包括两个脉动阵列1304和1306以及i/o缓冲器1308的单个可编程ic1302。例如,脉动阵列1304可以用于计算所有层204-0至204-(n-1)的前向路径处理,并且也被称为前向路径脉动阵列1304。再例如,脉动阵列1306可以被用于计算所有层204-(n-1)至204-0的反向路径处理,并且也可以被称为反向路径脉动阵列1306。可以调度脉动阵列1304和1306以最小化所有层204-0至204-(n-1)中的自适应延迟。

在各种实施例中,为了训练神经网络系统200和600,用户可以生成对神经网络的描述。在一些示例中,基于该描述,可以生成定制硬件。在一些示例中,可以基于该描述来加载与预定架构(例如,图11、12和/或13的架构)相对应的用于加速器的比特流(bitstream)。选择是否生成定制架构可以基于生成的性能模型、目标器件、布局及路由(placeandroute)时间估计、数据集大小、迭代次数来确定。在一些实施例中,可以在离线时生成布局及路由时间估计、数据集大小以及迭代次数。在一些实施例中,可以调度脉动阵列以最小化所有层中的自适应延迟。

应注意的是,在图2-图13中示出的各种配置(例如,层的数量n、由乘加单元在每个时钟周期计算的乘加数s、前向/反向路径pe的数量p)仅仅是示例性的,并不旨在限制所附权利要求书中具体记载的内容。本领域技术人员将理解,也可以使用其他配置。在一些实施例中,图6至图8的延迟的模型自适应方案可以与合成梯度(参考图9所述的)一起使用。在其他实施例中,延迟的模型自适应方案可以用于完全替代合成梯度,以降低合成梯度的硬件成本。在一些实施例中,一种或多种优化技术(例如,降低精度的网络、对数数据表示、其他可应用的优化技术或其组合)可以用于图11、12和13的架构中。此外,虽然二进制值被用作示例性表示,但是可以使用各种表示,包括例如三进制值、定点、浮点和log2表示。

尽管已经示出和描述了特定的实施例,但是应当理解,本文不旨在将所要求保护的发明限制于优选实施例,并且对于本领域技术人员而言显而易见的是,可以在超出要求保护的发明的精神和范围的情况下进行各种改变和修改。因此,说明书和附图应被认为是说明性而非限制性的。要求保护的发明旨在覆盖其各种替代、修改和等同物。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1