利用硬件计算效率优化神经网络
文献发布时间:2023-06-19 11:11:32
技术领域
本公开总体涉及使用硬件计算效率来优化计算系统中的神经网络。
背景
机器学习探索从数据中学习的算法的设计。机器学习算法适应输入建立模型,然后可以用于新数据进行预测。机器学习与统计学、人工智能和优化有着密切的联系,并且经常被用在难以制定明确的基于规则的算法的任务中。人工神经网络是能够进行机器学习的计算工具。在下文中称为神经网络的人工神经网络中,被称为“神经元”的互连计算单元被允许适应训练数据,并且随后一起工作以在某种程度上类似于生物神经网络中的处理的模型中产生预测。神经网络可以包括一组层,第一层是被配置为接收输入的输入层。输入层包括连接到第二层中所包括的神经元的神经元,第二层可以被称为隐藏层。隐藏层的神经元可以连接到另一个隐藏层或输出层。在一些神经网络中,一层中的每个神经元都与下一层中的每个神经元相连。这种神经网络被称为完全连接网络。训练数据用于让每个连接承担表征连接强度的权重。一些神经网络包括完全连接的层和不完全连接的层。卷积神经网络中的完全连接层可以称为密集连接层。在一些神经网络中,信号严格地以一条路径从输入层传播到输出层,这意味着不存在向输入层反向传播的连接。这种神经网络被称为前馈神经网络。如果确实存在向输入层反向传播的连接,则所讨论的神经网络可以被称为循环神经网络。
特定实施例的概述
本公开讨论了一种能够促进计算运算(包括精确的对数线性乘加(ELMA)计算运算)的执行的计算设备。在高级别上,由计算设备执行ELMA计算运算可以使用数学转换来执行更快的硬件计算,而不使用硬件乘法器。例如,考虑由计算设备执行计算功能c+ab。在一些示例中,计算设备可以将二进制数表示a和b转换成对数数字表示(以二进制表示),而不是由计算设备使用二进制数表示来执行乘法运算。在一些示例中,计算设备可以接收对数数字表示a和b。然后,计算设备可以对对数数字表示执行额外的计算(例如,对数数字表示线性域中值的某个固定基数的指数),以生成对数数字表示乘积,在计算设备的硬件中实现该乘积在计算上成本较低。计算设备可以将对数数字表示乘积近似为线性域表示乘积。计算设备然后可以执行附加操作来将线性数字表示c添加到线性域表示乘积ab。计算设备可以通过使用累加器(例如,Kulisch累加器)将线性数字表示c加到线性表示乘积ab来执行附加计算。
本说明书中描述的主题的创新方面可以体现在一种系统中,该系统包括处理器,该处理器被配置为接收对要执行的运算的请求,确定该运算与机器学习算法相关联,并且作为响应,将该运算路由到被配置为执行该运算的计算电路,其中该计算电路包括:对数乘法计算模块,该对数乘法计算模块被配置为将第三对数域数(log-domain number)确定为与该运算相关联的第一对数域数和第二对数域数的线性域乘积,其中该确定基于第一对数域数和第二对数域数的总和;转换计算模块,其被配置为将第三对数域数转换成近似于第三对数域数的第一线性域数(linear-domain number);以及求和计算模块,其被配置为生成求和结果,作为第一线性域数和与运算相关联的第二线性域数的总和。
这些方面的其他实施例包括相应的方法、装置和计算机程序,其被配置为执行编码在计算机存储设备上的方法的动作。
这些和其他实施例可以各自可选地包括一个或更多个以下特征。例如,转换计算模块还被配置为接收第三线性域数,将第三线性域数转换为第四对数域数,并输出第四对数域数。转换计算模块还被配置为:识别存储对数域数和近似的线性数之间的对应关系的查找表(LUT);以及基于LUT识别对应于第三对数域数的第一线性域数。求和模块包括Kulisch累加器。求和模块包括浮点累加器。
本说明书中描述的主题的创新方面可以体现在一种方法中,该方法包括接收对要执行的运算的请求;确定该运算与机器学习算法相关联,并且作为响应,将该运算路由到计算电路;以及在计算电路处执行运算,包括:将第三对数域数确定为与运算相关联的第一对数域数和第二对数域数的线性域乘积,其中确定基于第一对数域数和第二对数域数的总和;将第三对数域数转换成近似于第三对数域数的第一线性域数;以及将第一线性域数和与该运算相关联的第二线性域数求和作为第三线性域数。
这些方面的其他实施例包括相应的系统、装置和计算机程序,其被配置为执行被编码在计算机存储设备上的方法的动作。
这些和其他实施例可以各自可选地包括一个或更多个以下特征。例如,将第三线性域数转换成第四对数域数;以及输出第四对数域数。将第三对数域数转换成第一线性域数还包括:识别存储对数域数和近似线性数之间的对应关系的查找表(LUT);基于LUT识别对应于第三对数域数的第一线性域数;以及输出第一线性域数。第一线性数和第二线性数的总和是用Kulisch累加器确定的。使用浮点累加器来确定第一线性数和第二线性数的总和。
本文公开的实施例仅仅是示例,并且本公开的范围不限于它们。特定实施例可以包括本文公开的实施例的组件、元件、特征、功能、操作或步骤中的全部、一些,或不包括这些组件、元件、特征、功能、操作或步骤。根据本发明的实施例在所附权利要求中具体公开,涉及方法、存储介质、系统和计算机程序产品,其中在一个权利要求类别(例如方法)中提到的任何特征,也可以在另一个权利要求类别(例如系统)中要求保护。在所附权利要求中的从属性或往回引用仅为了形式原因而被选择。然而,也可以要求保护由对任何先前权利要求的有意往回引用(特别是多个从属关系)而产生的任何主题,从而权利要求及其特征的任何组合被公开了并且可以被要求保护,而不管所附权利要求中选择的从属关系如何。可以被要求保护的主题不仅包括如在所附权利要求中阐述的特征的组合,而且还包括在权利要求中的特征的任何其他组合,其中,在权利要求中提到的每个特征可以与在权利要求中的任何其他特征或其他特征的组合相结合。此外,本文描述或描绘的实施例和特征中的任一个可以在单独的权利要求中和/或以与本文描述或描绘的任何实施例或特征的任何组合或以与所附权利要求的任何特征的任何组合被要求保护。
附图简述
图1示出了用于针对神经网络执行机器学习操作的示例计算环境。
图2示出了用于针对神经网络执行机器学习操作的示例流程图。
图3示出了用于调整针对神经网络的机器学习操作内的值的示例流程图。
图4示出了示例计算机系统。
示例实施例的描述
图1示出了用于针对神经网络执行机器学习操作的计算系统100。计算系统100可以包括处理器模块102和计算电路104。计算电路104可以包括对数乘法计算模块106、转换计算模块108、求和计算模块110和指数调整计算模块180。简而言之,计算系统100可以促进计算运算的执行,包括精确的对数线性乘加(ELMA)计算运算。
在一些实施方式中,处理器模块102可以接收将要由计算系统100执行的运算122的请求120。处理器模块102可以评估运算122,并确定运算122与神经网络架构126的机器学习算法124相关联。
响应于确定运算122与机器学习算法124相关联,处理器模块102将运算122路由到计算电路104。计算电路104被配置成执行运算122。具体地,运算122可以与第一对数域数130a和第二对数域数130b(统称为对数域数130)相关联。在一些示例中,对数域数130在此可以表示为前缀为b的二进制基数固定点数和由句点指示的基数点(如果有的话)。例如,表示b011编码数字3,其在对数域中表示线性域值2
对数域数130可以是未压缩的对数域数。未压缩的(X,Y)n位对数域数130可以包括i)具有X个非小数位和Y个小数位的n位二进制补码带符号定点值V;ii)符号标志S,其指示对数域数130的符号;iii)零标志Z,其指示对数域数130是否为零;以及iv)无穷大标志I,其指示对数域数130是否表示正的或负的无穷大(或者如果该数表示如除以零的未定义运算的结果,则为非数字标记值)。此外,n位值V可以表示为bX.Y,带有所指示的二进制基数分隔符(在非小数部分和小数部分之间)。当无穷大标志I被标记为真时,未压缩的数字代表正或负的无穷大,或者非数字标记值。当无穷大标志I被标记为假时,所表示的数字既不是正无穷大也不是负无穷大,也不是非数字标记值,此时检查零标志Z以确定该值(即无穷大标志I如果被标记为真,则优先于零标志Z)。当无穷大标志I标记为假,并且零标志Z标记为真时,表示的数字有零值;并且当无穷大标志I被标记为假并且零标志Z被标记为假时,所表示的数字是正常值(不是正/负无穷大、非数字标记值或零中的任何一个)。当符号标志S标记为真时,该数字具有值+2^V(例如,2的带符号定点值V的幂),并且当符号标志S标记为假时,该数字具有值-2^V。例如,4位对数域数{V:b01.10,S:b1,Z:b0,I:b0}表示实数-2^(1+1/2),或者值-(2×sqrt(2))。例如,4位对数{V:b11.10,S:b1,Z:b0,I:b0}代表实数-2^(-1+1/2)或-sqrt(2)。
在一些实施方式中,对数乘法计算模块106接收对数域数130(例如,表示对数域数130的数据)。对数乘法计算模块106被配置为基于第一对数域数130a和第二对数域数130b的其总和(即,未压缩的对数的值V,其表示线性域中的数的指数)来确定对数域数130的乘积(在线性域中)。对数乘法计算模块106可以输出表示对数域数130的乘积(在线性域中)的第三对数域数132。具体而言,对数域数130的总和(表示它们在线性域中的乘积)(例如,n位未压缩的对数域数)是第三对数域数132(例如,未压缩的n+1位对数域数)。第三对数域数132的n+1带符号定点值V是对数域数130的定点值V的总和。这个值V具有X+1个非小数位和Y个小数位。+1表示由对数乘法计算模块106对两个大数字或两个小数字(例如,对数域数130)的乘法所暗示的附加动态范围的保持。如果对数乘法计算模块106确定对数域数130的Z标志的逻辑或为真(即,Z标志中的任一个为零),则第三对数域数132的n+1个带符号定点值被忽略,因为乘积为零。第三对数域数132的符号标志S是对数域数130的符号标志S的异或;零标志Z是对数域数130的零标志Z的逻辑或;无穷大标志I是对数域数130的无穷大标志I的逻辑或。
例如,第一对数域数130a可以由4位对数数字表示为{V:b01.10,S:b1,Z:b0,I:b0},第二对数域数130可以由4位对数数字{V:b10.00,S:b0,Z:b0,I:b0}表示。对数域数130(例如,{V:b01.10,S:b1,Z:b0,I:b0}和{V:b10.00,S:b0,Z:b0,I:b0})的乘积是第三对数域数132,其由5位对数表示为{V:b111.10,S:b1,Z:b0,I:b0}。作为第三对数域数132的这个5位对数数字可以表示实数2^-0.5,或-1/sqrt(2)。
在一些实施方式中,转换计算模块108可以接收第三对数域数132(例如,表示第三对数域数132的数据)。转换计算模块108被配置成将第三对数域数132转换成第一线性域数134,作为第三对数域数132的近似值。转换计算模块108可以输出第一线性域数134。具体而言,第三对数域数132可以是n位未压缩对数{X.Y,S,Z,I},转换计算模块108将其转换为第一线性域数134作为线性域浮点数(X,alpha),其中X表示从第三对数域数132保留的基数为2的线性域指数的整数部分,alpha表示浮点有效数小数位的数量,该浮点有效数小数位近似于由对数域值表示的线性域指数的小数部分(或者,换句话说,X是浮点指数,alpha是有效数小数位)。参数alpha可以有任何大于零的值,在某些示例中,设置为Y+1的值。这使得每个对数小数0.Y都有唯一的线性小数表示。
在一些示例中,转换计算模块108使用函数p(t)=(2^f)-1将2^Y个可能对数小数(例如,b0.000...0至b0.111...1)转换到线性小数,其中f是由Y个对数小数位表示的对数小数。在一些示例中,转换计算模块108与(例如,表大小为(2^y×alpha)位的)查找表(LUT)140通信。转换计算模块108可以经由明确列出的映射来访问LUT 140以执行函数p(y)。在一些示例中,转换计算模块108可以执行分段线性近似来执行函数p(y)。在一些示例中,转换计算模块108可以执行一次生成一个或更多个p(f)的位的计算机实现的算法。
第一线性域数134可以是(A,B)n位线性浮点数,其包括i)具有隐式偏置的无符号数或表示指数的带符号二进制补码数,例如,表示指数的A位带符号整数E;ii)B位无符号整数F,其表示无符号定点有效数小数(即,无符号整数是在[0,1-1/(2^b)]范围内的小数值);iii)其中n是A+B(并且线性浮点值可以以n位编码);iv)符号标志S指示浮点数的符号;v)零标志Z指示浮点数是否为零;和vi)无穷大标志I指示浮点数是否表示正或负无穷大或非数字标记标志。
因此,浮点A指数是第三对数域数132的X部分。浮点B小数可以由转换计算模块108使用函数p(y)生成,浮点B小数的大小为alpha位。这表示第一线性域数134的带前导的1(以规范化形式)的无符号浮点有效数。第一线性域数134的标志S、Z和I的值与对于第三对数域数132的值相同。
例如,第三对数域数132可以表示为{V:b111.10,S:b1,Z:b0,I:b0}(即-1/sqrt(2),约为-0.707...)且alpha等于3。转换计算模块108可以将第三对数域数132的这个示例转换成表示为{A:b111,B:b011,S:b1,Z:b0,I:b0}的第一线性域数134。这是对数域小数b0.10为(2^(b0.10)-1)的线性域近似。转换计算模块108可以将其四舍五入到3位(通过四舍五入到最接近的偶数),产生b0.011,即有效数b1.011。第一线性域数134的这个示例近似于第三对数域数132,例如,2^-1×-(b1.011)=1/2×-1.375=-0.6875。
在一些示例中,转换计算模块108被配置为识别存储对数域数和近似线性域数之间的对应关系的LUT 140。例如,转换计算模块108可以存储第三对数域数132和第三对数域数132的作为第一线性域数134的近似之间的对应关系。转换计算模块108然后可以基于LUT140识别对应于第三对数域数132的第一线性域数134。
在一些实施方式中,求和计算模块110可以从转换计算模块108接收第一线性域数134。求和计算模块110还可以接收与运算122相关联的第二线性域数136(例如,表示第二线性域数136的数据)。在一些示例中,第二线性域数136是求和计算模块110对线性域数的累加的运行求和,例如,先前求和。求和计算模块110可以被配置为对第一线性域数134(例如,加数)和第二线性域数136(例如,累加器)求和。求和计算模块110可以输出第三线性域数138作为第一线性域数134和第二线性域数136的求和结果。
在一些示例中,求和计算模块110可以是线性累加器,其可以存储许多线性域数的总和(例如,许多对数域数的乘积的总和)。在一些示例中,求和计算模块110可以是定点累加器,例如用于精确对数线性乘加(ELMA)累加的Kulisch累加器,或者用于浮点对数线性乘加(FLMA)累加的线性浮点累加器。
具体地说,对于ELMA累加,第三线性域数138(例如,Kulisch累加)可以包括i)一个带符号的二进制补码定点值V,其具有M个非小数位和N个小数位(M+N个总位),表示为bM.N,和ii)无穷大标志I,其指示Kulisch累加器的正或负无穷大。对于bM.N和无穷大标志I,Kulisch累加器的初始值为零。
例如,对于6位的M值和5位的N值,Kulisch累加器的初始值为{V:b000000.00000,I:b0}。第一线性域数134可以具有{A:b111,B:b011,S:b1,Z:b0,I:b0}的值。求和计算模块110可以将第一线性域浮点数134的定点扩展形成为M.N位的带符号定点数,与Kulisch累加器的大小相同。
求和计算模块110将有效数表示为带符号的定点数(增加一个附加位)。因此,求和计算模块110将b1.011转换为b01.011,然后,由于该值为负(Z:b1),求和计算模块110取b01.011的二进制补码,结果为b10.101。
求和计算模块110用最低有效位上的零来扩展该值,以形成6位.5位数,从而得到b101010.00000(例如数字-22)。这是原始浮点有效数的定点表示,指数值为+4。例如,求和计算模块110可以通过因子2^(M-2)来调整有效数。继续上面的示例,当M-2被加到原始指数上时,求和计算模块110确定指数具有值+4,或者(6-2)+0=4。
求和计算模块110将加数定点数(例如,第一线性域数134)向右朝向最低有效位(例如,(+4-(-1))=5数位)移动,以调整定点表示,进而匹配上面指示的原始指数,例如-1。当定点值带符号时,求和计算模块110经由符号扩展(例如,复制最高有效位的值)移动求和的定点数(例如,第一线性域数134),导致值b111111.01010(其是-0.6875的值)。如果求和计算模块110确定浮点加数(例如,第一线性域数134)的零标志Z被标记为真,则求和计算模块110忽略该值,并且扩展的定点表示为零——继续该示例,扩展的定点表示为b000000.00000。
在一些示例中,求和计算模块110存储先前的总和(例如,第三线性域数138),并且在每次累加之后,将先前的总和与附加的线性域数(例如,累加器)相加。
在一些示例中,第三线性域数138的无穷大标志I是先前累加值(如果有的话)的无穷大标志I和第一线性域数134的无穷大标志I的逻辑或。
另外,对于FLMA累加,求和计算模块110可以包括浮点加法器,近似对数值的线性域总和保持在浮点表示中。求和计算模块110的浮点累加器可以包括指数位E和小数有效位F。
在一些示例中,对于后续累加,第三线性域数138可以变成第二线性域数136,使得转换计算模块108可以被配置为将第一线性域数134和第二线性域数136求和,如上所述。
图2示出了用于针对神经网络执行机器学习操作的示例方法200。该方法可以在步骤202开始,其中处理器模块102接收对要执行的运算122的请求120。在步骤204,处理器模块102确定运算122与机器学习算法124相关联。在步骤206,响应于确定运算122与机器学习算法124相关联,处理器模块102将运算122路由到计算电路104。在步骤208,计算电路104执行运算122。在步骤210,对数乘法计算模块106将与运算122相关联的第一对数域数130a和第二对数域数130b的(线性域)乘积确定为第一对数域数130a和第二对数域数130b的总和,其被输出为第三对数域数132。在步骤212,转换计算模块108将第三对数域数132转换成第一线性域数134,作为第三对数域数132的近似。在步骤214,求和计算模块110对与运算122相关联的第一线性域数134和第二线性域数136求和。在步骤216,求和计算模块110输出第三线性域数138作为求和结果。
在适当的情况下,特定实施例可以重复图2的方法的一个或更多个步骤。尽管本公开将图2的方法的特定步骤描述和图示为以特定顺序发生,但是本公开设想了以任何适当顺序发生的图2的方法的任何适当步骤。此外,尽管本公开描述并示出了用于针对神经网络执行机器学习操作的示例方法(包括图2的方法的特定步骤),但是本公开设想了用于针对神经网络执行机器学习操作的任何合适的方法,包括任何合适的步骤,在适当的情况下,该方法可以包括图2的方法的所有、一些步骤或没有这些步骤。此外,尽管本公开描述并示出了执行图2的方法的特定步骤的特定组件、设备或系统,但是本公开设想了执行图2的方法的任何适当步骤的任何适当组件、设备或系统的任何适当组合。
返回参考图1,指数调整计算模块180可用于将调整因子应用于第一线性域数134和/或第三线性域数138,以确保其可在存储器中以有限数量的位编码。具体而言,指数调整计算模块180可以对数字应用调整因子,以将数字缩放成计算系统100能够适当处理的“可工作单位”。指数调整计算模块180可以将调整因子应用于第一线性域数134以及第三线性域数138(例如,取决于输出数的进一步处理的处理需求)。在一些示例中,指数调整计算模块180可以应用指数偏置因子作为调整因子,以通过m的求和来调整输入指数,或者通过n的求和来调整输出指数(根据需要检查下溢或上溢)。累加器可以是Kulisch累加器,或浮点累加器。
在一些实施方式中,指数调整模块180可以接收第一线性域数134(例如,表示第一线性域数134的数据)。指数调整模块180被配置为将调整因子182应用于第一线性域数134的指数,以生成调整后的第一线性域数。在一些示例中,第一线性域数134是浮点数。
在一些示例中,当先前已经应用了调整因子时,指数调整模块180可以将调整因子182应用于第一线性域数134,例如由计算系统100执行的线性代数运算(例如矩阵乘法或卷积)的输出。在一些情况下,第一线性域数134的指数分布在阈值(例如,界限)内,并且作为配置参数提供给指数调整模块180,并且作为响应,通过应用调整因子182来反转调整因子的任何先前应用。
在一些情况下,指数调整模块180应用调整因子182来确保第一线性域数134的n位编码被保留,并且不会遭受饱和(如在传统浮点编码中)或精度损失(如在posit型编码中)。
在一些实施方式中,指数调整模块180可以接收第三线性域数138(例如,表示第三线性域数138的数据)。指数调整模块180被配置为将调整因子184应用于第三线性域数138的指数,以生成调整后的第三线性域数。在一些示例中,第三线性域数138是浮点数。
在一些示例中,当先前已经应用了调整因子时,指数调整模块180可以将调整因子184应用于第三线性域数138,例如由计算系统100执行的线性代数运算(诸如矩阵乘法或卷积)的输出。在一些情况下,第三线性域数138的指数分布在阈值(例如,界限)内,并且作为配置参数提供给指数调整模块180,并且作为响应,通过应用调整因子184来反转调整因子的任何先前应用。
在一些情况下,指数调整模块180应用调整因子184来确保第三线性域数138的n位编码被保留,并且不受饱和(如在传统浮点编码中)或精度损失(如在posit型编码中)的影响。
在一些示例中,指数调整模块180还被配置为将调整因子184应用于第三线性域数138的指数,以控制第三线性域数138所使用的动态范围的中心。调整因子184可以是跨多个求和保持的固定值。当第三线性域数138要被重新编码成n位对数或线性浮点表示时,或者当第三线性域数138超出期望的n位编码的范围时,或者在posit型编码的情况下,超出最大精度的范围时,指数调整模块180可以使用调整因子184。在一些示例中,调整因子182、184可以具有基本相同的绝对值。在一些示例中,调整因子182是负的,而调整因子184是正的(例如,调整因子184是调整因子182的负(乘以-1)。在一些示例中,调整因子182的值不同于调整因子184(例如,没有直接关系)。
例如,第三线性域数138可以具有浮点值{A:8,B:b1.00001111,S:1,Z:0,I:0},其表示值-2^8*(b1.00001111)=-2^8×(1.05859375)=-271.0。指数调整模块180可以将调整因子184应用于-5的第三线性域数138,其与指数A求和,以生成代表值-8.4687的线性浮点数{A:3,b1.00001111,S:1,Z:0,I:0}。在一些示例中,指数调整模块180可以四舍五入该值,并以期望的n位线性浮点或对数定点表示对其进行编码。
在一些示例中,指数调整模块180可以为每个运算122独立地应用调整因子182和调整因子184。通过这样做,指数调整模块306能够将值的分布重新居中到大约1.0,用于在神经网络126中使用的计算。计算电路104可以确定神经网络126的每一层的调整因子,以便于最大化对层之间的神经网络激活的存储器内表示的处理。
图3示出了用于调整针对神经网络的机器学习操作中的值的示例方法300。该方法可以在步骤302开始,其中处理器模块102接收对要执行的运算122的请求120。在步骤304,处理器模块102确定运算122与机器学习算法124相关联。在步骤306,响应于确定运算122与机器学习算法124相关联,处理器模块102将运算122路由到计算电路104。在步骤308,计算电路104执行运算122。在步骤310,指数调整模块180将调整因子182应用于第一线性域数134,以生成调整后的第一线性域数。在步骤312,求和计算模块110将调整后的第一线性域数和与运算相关联的第二线性域数136求和,作为第三线性域数138。在步骤314,指数调整模块180将调整因子184应用于第三线性域数138。在步骤316,指数调整模块306输出调整后的第三线性域数。
在适当的情况下,特定实施例可以重复图3的方法的一个或更多个步骤。尽管本公开将图3的方法的特定步骤描述和图示为以特定顺序发生,但是本公开设想了以任何适当顺序发生的图3的方法的任何适当步骤。此外,尽管本公开描述并示出了用于调整针对神经网络的机器学习操作内的值的示例方法,包括图3的方法的特定步骤,但是本公开设想了用于调整针对神经网络的机器学习操作内的值的任何适当方法,包括任何适当步骤,在适当的情况下,该方法可以包括图3的方法的所有、一些步骤或没有这些步骤。此外,尽管本公开描述并示出了执行图3的方法的特定步骤的特定组件、设备或系统,但是本公开设想了执行图3的方法的任何适当步骤的任何适当组件、设备或系统的任何适当组合。
图4示出了示例计算机系统400。在特定实施例中,一个或更多个计算机系统400执行本文描述或示出的一个或更多个方法的一个或更多个步骤。在特定实施例中,一个或更多个计算机系统400提供本文描述或示出的功能。在特定实施例中,在一个或更多个计算机系统400上运行的软件执行本文描述或示出的一个或更多个方法的一个或更多个步骤,或者提供本文描述或示出的功能。特定实施例包括一个或更多个计算机系统400的一个或更多个部分。在本文,在适当的情况下,对计算机系统的引用可以包括计算设备,反之亦然。此外,在适当的情况下,对计算机系统的引用可以包括一个或更多个计算机系统。
本公开设想了任何合适数量的计算机系统400。本公开设想了计算机系统400采取任何合适的物理形式。作为示例而不是作为限制,计算机系统400可以是嵌入式计算机系统、片上系统(SOC)、单板计算机系统(SBC)(例如,模块上计算机(COM)或模块上系统(SOM))、台式计算机系统、膝上型或笔记本计算机系统、交互式信息亭、大型机、计算机系统网状网、移动电话、个人数字助理(PDA)、服务器、平板计算机系统、增强/虚拟现实设备、或者这些系统的两个或更多个的组合。在适当的情况下,计算机系统400可以包括一个或更多个计算机系统400;是整体式的或分布式的;跨越多个位置;跨越多台机器;跨越多个数据中心;或者驻留在云中,云可以包括在一个或更多个网络中的一个或更多个云组件。在适当的情况下,一个或更多个计算机系统400可以在没有实质性空间或时间限制的情况下执行本文描述或示出的一个或更多个方法的一个或更多个步骤。作为示例而不是作为限制,一个或更多个计算机系统400可以实时地或以批处理模式来执行本文描述或示出的一个或更多个方法的一个或更多个步骤。在适当的情况下,一个或更多个计算机系统400可以在不同的时间或在不同的位置处执行本文描述或示出的一个或更多个方法的一个或更多个步骤。
在特定实施例中,计算机系统400包括处理器402、存储器404、存储装置406、输入/输出(I/O)接口408、通信接口410和总线412。尽管本公开描述并示出了具有在特定布置中的特定数量的特定组件的特定计算机系统,但是本公开设想了具有在任何合适布置中的任何合适数量的任何合适组件的任何合适的计算机系统。
在特定实施例中,处理器402包括用于执行指令(例如构成计算机程序的那些指令)的硬件。作为示例而不是作为限制,为了执行指令,处理器402可以从内部寄存器、内部高速缓存、存储器404或存储装置406中检索(或取回)指令;将他们解码并执行它们;以及然后将一个或更多个结果写到内部寄存器、内部高速缓存、存储器404或存储装置406。在特定实施例中,处理器402可以包括用于数据、指令或地址的一个或更多个内部高速缓存。在适当的情况下,本公开设想了处理器402包括任何合适数量的任何合适的内部高速缓存。作为示例而不是作为限制,处理器402可以包括一个或更多个指令高速缓存、一个或更多个数据高速缓存、以及一个或更多个转译后备缓冲器(TLB)。在指令高速缓存中的指令可以是在存储器404或存储装置406中的指令的副本,并且指令高速缓存可以加速处理器402对那些指令的检索。在数据高速缓存中的数据可以是:在存储器404或存储装置406中的数据的副本,用于使在处理器402处执行的指令进行操作;在处理器402处执行的先前指令的结果,用于由在处理器402处执行的后续指令访问或者用于写到存储器404或存储装置406;或其他合适的数据。数据高速缓存可以加速由处理器402进行的读或写操作。TLB可以加速关于处理器402的虚拟地址转译。在特定实施例中,处理器402可以包括用于数据、指令或地址的一个或更多个内部寄存器。在适当的情况下,本公开设想了处理器402包括任何合适数量的任何合适的内部寄存器。在适当的情况下,处理器402可以包括一个或更多个算术逻辑单元(ALU);是多核处理器;或者包括一个或更多个处理器402。尽管本公开描述并示出了特定的处理器,但是本公开设想了任何合适的处理器。
在特定实施例中,存储器404包括用于存储用于使处理器402执行的指令或用于使处理器402操作的数据的主存储器。作为示例而不是作为限制,计算机系统400可以将指令从存储装置406或另一个源(例如,另一个计算机系统400)加载到存储器404。处理器402然后可以将指令从存储器404加载到内部寄存器或内部高速缓存。为了执行指令,处理器402可以从内部寄存器或内部高速缓存中检索指令并将它们解码。在指令的执行期间或之后,处理器402可以将一个或更多个结果(其可以是中间结果或最终结果)写到内部寄存器或内部高速缓存。处理器402然后可以将这些结果中的一个或更多个写到存储器404。在特定实施例中,处理器402仅执行在一个或更多个内部寄存器或内部高速缓存中或在存储器404(而不是存储装置406或其他地方)中的指令,并且仅对在一个或更多个内部寄存器或内部高速缓存中或在存储器404(而不是存储装置406或其他地方)中的数据进行操作。一个或更多个存储器总线(其可以各自包括地址总线和数据总线)可以将处理器402耦合到存储器404。如下所述,总线412可以包括一个或更多个存储器总线。在特定实施例中,一个或更多个存储器管理单元(MMU)驻留在处理器402和存储器404之间,并且便于由处理器402请求的对存储器404的访问。在特定实施例中,存储器404包括随机存取存储器(RAM)。在适当的情况下,该RAM可以是易失性存储器。在适当的情况下,该RAM可以是动态RAM(DRAM)或静态RAM(SRAM)。此外,在适当的情况下,该RAM可以是单端口RAM或多端口RAM。本公开设想了任何合适的RAM。在适当的情况下,存储器404可以包括一个或更多个存储器404。尽管本公开描述并示出了特定的存储器,但是本公开设想了任何合适的存储器。
在特定实施例中,存储装置406包括用于数据或指令的大容量存储装置。作为示例而不是作为限制,存储装置406可以包括硬盘驱动器(HDD)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(USB)驱动器、或这些中的两个或更多个的组合。在适当的情况下,存储装置406可以包括可移动或不可移动(或固定)介质。在适当的情况下,存储装置406可以在计算机系统400的内部或外部。在特定实施例中,存储装置406是非易失性固态存储器。在特定实施例中,存储装置406包括只读存储器(ROM)。在适当的情况下,该ROM可以是掩模编程ROM、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、电可变ROM(EAROM)、或闪存、或这些中的两个或更多个的组合。本公开设想了采用任何合适的物理形式的大容量存储装置406。在适当的情况下,存储装置406可以包括便于在处理器402和存储装置406之间的通信的一个或更多个存储装置控制单元。在适当的情况下,存储装置406可以包括一个或更多个存储装置406。尽管本公开描述并示出了特定的存储装置,但是本公开设想了任何合适的存储装置。
在特定实施例中,I/O接口408包括为在计算机系统400和一个或更多个I/O设备之间的通信提供一个或更多个接口的硬件、软件或两者。在适当的情况下,计算机系统400可以包括这些I/O设备中的一个或更多个。这些I/O设备中的一个或更多个可以实现在人和计算机系统400之间的通信。作为示例而不是作为限制,I/O设备可以包括键盘、小键盘、麦克风、监视器、鼠标、打印机、扫描仪、扬声器、静态摄像机、触笔、平板计算机、触摸屏、跟踪球、视频摄像机、另一个合适的I/O设备、或这些中的两个或更多个的组合。I/O设备可以包括一个或更多个传感器。本公开设想了任何合适的I/O设备以及用于它们的任何合适的I/O接口408。在适当的情况下,I/O接口408可以包括使处理器402能够驱动这些I/O设备中的一个或更多个的一个或更多个设备或软件驱动器。在适当的情况下,I/O接口408可以包括一个或更多个I/O接口408。尽管本公开描述并示出了特定的I/O接口,但是本公开设想了任何合适的I/O接口。
在特定实施例中,通信接口410包括硬件、软件或两者,为计算机系统400和一个或更多个其他计算机系统400或一个或更多个网络之间的通信(例如,基于分组的通信)提供一个或更多个接口。作为示例而不是作为限制,通信接口410可以包括用于与以太网或其他基于有线的网络进行通信的网络接口控制器(NIC)或网络适配器,或用于与无线网络(例如Wi-Fi网络)进行通信的无线NIC(WNIC)或无线适配器。本公开设想了任何合适的网络和用于它的任何合适的通信接口410。作为示例而不是作为限制,计算机系统400可以与自组织网络、个域网(PAN)、局域网(LAN)、广域网(WAN)、城域网(MAN)或互联网的一个或更多个部分、或这些中的两个或更多个的组合进行通信。这些网络中的一个或更多个的一个或更多个部分可以是有线的或无线的。作为示例,计算机系统400可以与无线PAN(WPAN)(例如,蓝牙WPAN)、WI-FI网络、WI-MAX网络、蜂窝电话网络(例如,全球移动通信系统(GSM)网络)、或其他合适的无线网络、或这些中的两个或更多个的组合进行通信。在适当的情况下,计算机系统400可以包括用于这些网络中的任一个的任何合适的通信接口410。在适当的情况下,通信接口410可以包括一个或更多个通信接口410。尽管本公开描述并示出了特定的通信接口,但是本公开设想了任何合适的通信接口。
在特定实施例中,总线412包括将计算机系统400的组件耦合到彼此的硬件、软件或两者。作为示例而不是作为限制,总线412可以包括加速图形端口(AGP)或其他图形总线、扩展工业标准体系结构(EISA)总线、前端总线(FSB)、HYPERTRANSPORT(HT)互连、工业标准体系结构(ISA)总线、INFINIBAND互连、低引脚数(LPC)总线、存储器总线,微通道体系结构(MCA)总线、外围部件互连(PCI)总线、PCI-Express(PCIe)总线、串行高级技术附件(SATA)总线、视频电子标准协会本地(VLB)总线、或任何其他合适的总线、或这些中的两个或更多个的组合。在适当的情况下,总线412可以包括一个或更多个总线412。尽管本公开描述并示出了特定总线,但是本公开设想了任何合适的总线或互连。
在本文,在适当的情况下,一个或更多个计算机可读非暂时性存储介质可以包括一个或更多个基于半导体的或其他集成电路(IC)(例如,现场可编程门阵列(FPGA)或专用IC(ASIC))、硬盘驱动器(HDD)、混合硬盘驱动器(HHD)、光盘、光盘驱动器(ODD)、磁光盘、磁光盘驱动器、软盘、软盘驱动器(FDD)、磁带、固态驱动器(SSD)、RAM驱动器、安全数字(SECURE DIGITAL)卡或驱动器、任何其他合适的计算机可读非暂时性存储介质、或这些中的两个或更多个的任何合适组合。在适当的情况下,计算机可读非暂时性存储介质可以是易失性的、非易失性的或者易失性和非易失性的组合。
本文中,除非另有明确指示或通过上下文另有指示,否则“或”是包括一切的而非排他性的。因此在本文,除非另有明确指示或通过上下文另有指示,否则“A或B”意指“A、B、或两者”。此外,除非另有明确指示或通过上下文另有指示,否则“和”既是联合的又是各自的。因此在本文,除非另有明确指示或通过上下文另有指示,否则“A和B”意指“A和B,联合地或各自地”。
本公开的范围包括本领域中的普通技术人员将理解的对本文描述或示出的示例实施例的所有改变、替换、变化、变更和修改。本公开的范围不限于本文描述或示出的示例实施例。此外,尽管本公开将本文的相应实施例描述并示为包括特定的组件、元件、特征、功能、操作或步骤,但是这些实施例中的任何一个可以包括本领域中的普通技术人员将理解的在本文任何地方描述或示出的任何组件、元件、特征、功能、操作或步骤的任何组合或置换。此外,在所附权利要求中对适合于、被布置成、能够、被配置成、实现来、可操作来、或操作来执行特定功能的装置或系统或装置或系统的组件的引用包括该装置、系统、组件,无论它或那个特定功能是否被激活、开启或解锁,只要该装置、系统或组件是这样被调整、被布置、使能够、被配置、被实现、可操作的、或操作的。此外,尽管本公开将特定实施例描述或示为提供特定优点,但是特定实施例可以提供这些优点中的一些、全部或不提供这些优点。
- 利用硬件计算效率和调整因子优化神经网络
- 利用硬件计算效率优化神经网络