神经网络计算系统和方法与流程

文档序号:15230349发布日期:2018-08-21 19:20阅读:230来源:国知局

本披露涉及人工神经网络处理技术领域,更具体地涉及一种神经网络计算系统和方法。



背景技术:

多层人工神经网络被广泛应用于模式识别、图像处理、函数逼近和优化计算等领域。特别是近年来由于反向传播训练算法,以及预训练算法的研究不断深入,多层人工神经网络由于其较高的识别准确度和较好的可并行性,受到学术界和工业界越来越广泛的关注。

随着人工神经网络计算量和访存量的急剧增大,现有技术中通常采用通用处理器来对多层人工神经网络运算、训练算法及其压缩编码进行处理,通过使用通用寄存器堆和通用功能部件执行通用指令来支持上述算法。采用通用处理器的缺点之一是单个通用处理器的运算性能较低,无法满足通常的多层人工神经网络运算的性能需求。而多个通用处理器并行执行时,通用处理器之间相互通讯又成为了性能瓶颈;此外,通用处理器需要把多层人工神经网络运算译码成一长列运算及访存指令序列,处理器前端译码带来了较大的功耗开销。另一种支持多层人工神经网络运算、训练算法及其压缩编码的已知方法是使用图形处理器(gpu)。该方法通过使用通用寄存器堆和通用流处理单元执行通用simd指令来支持上述算法。由于gpu是专门用来执行图形图像运算以及科学计算的设备,没有对多层人工神经网络运算的专门支持,仍然需要大量的前端译码工作才能执行多层人工神经网络运算,带来了大量的额外开销。另外gpu只有较小的片上缓存,多层人工神经网络的模型数据(权值)需要反复从片外搬运,片外带宽成为了主要性能瓶颈,同时带来了巨大的功耗开销。



技术实现要素:

针对上述现有技术的不足,本披露的目的在于提供一种神经网络计算系统和方法。

根据本披露的一方面,提供一种神经网络计算系统,包括i/o接口、内存、人工神经网络芯片和中央处理器cpu:

i/o接口,用于i/o数据;

内存,用于暂存多层人工神经网络模型和神经元数据;

人工神经网络芯片,用于执行多层人工神经网络运算及其反向传播训练算法,接受来自中央处理器cpu的数据和程序,执行上述多层人工神经网络运算及其反向传播训练算法;

中央处理器cpu,用于进行数据搬运以及人工神经网络芯片启动停止控制,作为人工神经网络芯片与外部控制的接口,并接收人工神经网络芯片执行后的结果。

在进一步的方案中,所述人工神经网络芯片包括:控制器单元,用于读取指令,并将其译码成运算单元的指令;以及运算单元,用于根据所述控制器单元的指令对数据执行相应的运算。

在进一步的方案中,所述人工神经网络芯片还包括:内存接口单元,用于输入所述数据和指令;以及指令缓存,用于对指令进行缓存。

在进一步的方案中,所述运算单元用于执行以下至少一种运算:将输入的神经元和权值数据相乘;执行加法树运算,用于将第一步处理后的加权输出神经元通过加法树逐级相加,或者将输出神经元通过和偏置相加得到加偏置输出神经元;执行激活函数运算,得到最终输出神经元。

在进一步的方案中,所述运算单元中对于输入的权值数据表示如下:若是正向运算过程,则所述权值数据w1由k比特数据表示,其中包括1比特符号位、m比特控制位以及n比特数据位,即k=1+m+n;其中k、m、n均为自然数;若是反向运算过程,则所述权值数据w2使用浮点数表示。

在进一步的方案中,所述w1是从w2转换而来,其中反向运算过程的权值数据w2具有len位有效数字,正向运算过程的权值数据w1中的n表示w1中的有效数字位数,n≤len;控制位m用于指定w1的有效数字在原权值数据中的起始位置。

在进一步的方案中,所述人工神经网络芯片还包括dma,用于在所述内存接口单元与所述指令缓存和/或所述运算单元之间进行数据或者指令读写。

在进一步的方案中,所述人工神经网络芯片还包括:输入神经元缓存,用于缓存输入到所述运算单元的输入神经元数据;权值缓存,用于缓存权值数据;以及所述输入神经元缓存和权值缓存均通过所述dma输入。

在进一步的方案中,所述用于压缩编码的人工神经网络芯片还包括:输出神经元缓存,用于缓存所述运算单元输出的输出神经元。

在进一步的方案中,所述运算单元在第三步执行的激活函数为sigmoid函数、tanh函数、relu函数或softmax函数。

在进一步的方案中,所述人工神经网络芯片为多个,多个人工神经网络芯片通过pcie总线互联,以支持更大规模的多层人工神经网络运算。

在进一步的方案中,所述中央处理器cpu为一个,作为多个人工神经网络芯片的同一个宿主,或者所述中央处理器cpu的数量与所述人工神经网络芯片数量相同,使每一个人工神经网络芯片分别有自己的宿主;或者中央处理器数量为多个,与所述多个人工神经网络芯片形成互联拓扑连接。

在进一步的方案中,所述内存为一个,作为所述多个人工神经网络芯片的共享内存;或者所述内存数量与所述人工神经网络芯片数量相同,使每个人工神经网络芯片有各自的内存;或者内存为多个,与所述多个人工神经网络芯片形成互联拓扑连接。

根据本披露的另一方面,提供一种应用以上任一所述神经网络计算系统进行运算的方法,包括:

使用i/o接口输入/输出数据;

使用内存暂存多层人工神经网络模型和神经元数据;

使用人工神经网络芯片执行多层人工神经网络运算和/或反向传播训练算法,接受来自中央处理器cpu的数据和程序,执行上述多层人工神经网络运算和/或反向传播训练算法;

使用中央处理器cpu进行数据搬运以及人工神经网络芯片启动停止控制,作为人工神经网络芯片与外部控制的接口,并接收人工神经网络芯片执行后的结果。

在进一步的方案中,还包括:使用控制器单元读取指令,并将其译码成运算单元的指令;以及使用运算单元根据所述控制器单元的指令对数据执行相应的运算。

在进一步的方案中,还包括:使用内存接口单元输入所述数据和指令;以及使用指令缓存对指令进行缓存。

在进一步的方案中,还包括使用dma在所述内存接口单元与所述指令缓存和/或所述运算单元之间进行数据或者指令读写。

在进一步的方案中,还包括:使用输入神经元缓存缓存输入到所述运算单元的输入神经元数据;使用权值缓存缓存权值数据;以及输入神经元缓存和权值缓存均通过所述dma输入。

在进一步的方案中,还包括:使用输出神经元缓存来缓存所述运算单元输出的输出神经元。

根据本披露的再一方面,提供一种应用神经网络加速器进行人工神经网络计算的方法,人工神经网络芯片包括控制器单元,用于读取指令,并将其译码成运算单元的指令;以及运算单元,用于根据所述控制器单元的指令对数据执行相应的运算包括以下步骤:

步骤1:使用将存储的浮点权值w1转换成位数较少的表示权值w2;

步骤2:使用权值w2进行正向运算;

步骤3:根据正向运算得到的误差结果进行反向运算更新浮点权值w1;

迭代执行上述三个步骤,直到得到所需要的模型。

在进一步的方案中,所述人工神经网络芯片还包括指令缓存、输入神经元缓存、权值缓存以及输出神经元缓存,指令缓存用于对指令进行缓存,输入神经元缓存用于缓存输入到所述运算单元的输入神经元数据,权值缓存用于缓存权值数据,输出神经元缓存用于缓存所述运算单元输出的输出神经元;步骤2包括以下子步骤;步骤21:控制器单元从指令缓存中读取一条多层人工神经网络运算simd指令;步骤22:所述控制器单元将所述指令译码成各个功能部件的微指令,包括输入神经元缓存是否读写以及读写次数、输出神经元缓存是否读写以及读写次数、权值神经元缓存是否读写以及读写次数、运算单元各个阶段执行何种操作。

在进一步的方案中,在子步骤s22之后,所述步骤2进一步包括子步骤:步骤23:运算单元得到从输入神经元缓存和权值缓存的输入向量,根据阶段一的操作码,决定是否执行向量乘法运算,如果执行就将结果发送到下一阶段,否则直接将输入发送到下一阶段;步骤24:所述运算单元根据阶段二的操作码,决定是否进行加法树运算,如果执行就将结果发送到下一阶段,否则直接将输入发送到下一阶段;步骤25:所述运算单元根据阶段三的操作码,决定是否进行激活函数的运算,如果执行就将结果发送给输出神经元缓存。

在进一步的方案中,所述人工神经网络芯片还包括指令缓存、输入神经元缓存、权值缓存以及输出神经元缓存,指令缓存用于对指令进行缓存,输入神经元缓存用于缓存输入到所述运算单元的输入神经元数据,权值缓存用于缓存权值数据,输出神经元缓存用于缓存所述运算单元输出的输出神经元;步骤3包括子步骤:步骤31:控制器单元从指令缓存中读取一条多层人工神经网络训练算法simd指令;步骤32:所述控制器单元将所述指令译码成各个运算单元的微指令,包括输入神经元缓存是否读写以及读写次数、输出神经元缓存是否读写以及读写次数、权值神经元缓存是否读写以及读写次数、运算单元各个阶段执行何种操作。

在进一步的方案中,在子步骤s32之后,所述步骤3进一步包括子步骤:步骤33:运算单元得到从输入神经元缓存和权值缓存的输入向量,根据阶段一的操作码,决定是否执行向量乘法运算,如果执行就将结果发送到下一阶段,否则直接将输入发送到下一阶段;步骤34:所述运算单元根据阶段二的操作码,决定是否进行加法树运算、向量加法运算或权值更新运算。

基于上述技术方案可知,本披露提供了一种用于执行多层人工神经网络运算、反向传播训练算法及其压缩编码的装置和方法,提高了对于多层人工神经网络运算及其反向传播训练算法的性能,同时降低了权值数据表示的位数,以达到压缩编码的目的。本披露不仅能有效减小人工神经网络的模型大小,提高人工神经网络的数据处理速度,而且能有效降低功耗,提高资源利用率;相对于现有的技术,具有显著的性能和功耗改善,并能大幅压缩权值数据。

附图说明

图1是根据本披露一实施例的神经网络正向运算的示例框图;

图2是根据本披露一实施例的神经网络反向训练算法的示例框图;

图3是根据本披露一实施例的总体结构的示例框图;

图4是根据本披露一实施例的加速器芯片结构的示例框图;

图5是根据本披露一实施例的多层人工神经网络的运算流程图;

图6是根据本披露一实施例的多层人工神经网络反向传播训练算法的流程图;

图7是根据本披露一实施例的多层人工神经网络压缩编码算法的流程图。

具体实施方式

将参考以下所讨论的细节来描述本披露的各实施例和方面,并且所附附图将说明各实施例。下列描述和附图是用于说明本披露的,并且不应当被解释为限制本披露。描述许多具体的细节以提供对本披露的各实施例的透彻理解。然而,在某些实例中,不描述公知的或寻常的细节,以便提供本披露的实施例的简洁的讨论。

说明书中提到的“一个实施例”或“一实施例”意思是结合实施例所描述的特定的特征、结构或特性能够被包括在本披露的至少一个实施例中。在本说明书的多处出现的短语“在一个实施例中”不一定全部都指同一个实施例。

本披露涉及的多层人工神经网络运算及其压缩编码,包括两层或者两层以上的多个神经元。对于每一层来说,输入神经元向量首先和权值向量进行点积运算,结果经过激活函数得到输出神经元。其中激活函数可以是sigmoid函数、tanh函数、relu函数和softmax函数等。此外,多层人工神经网络的训练算法包括正向传播、反向传播和权值更新等步骤。

在正向运算过程中,神经网络权值w1由k比特数据表示,其中包括1比特符号位、m比特控制位以及n比特数据位(k=l+m+n)。

反向运算过程中的权值w2使用浮点数表示。

正向运算过程中使用的权值数据表示方法,从反向运算过程使用的浮点权值表示(len位有效数字)转换而来,数据位存储原权值数据中的n位有效数字,n小于等于len。控制位用于指定数据位在原有效数字中的起始位置;由于正向运算过程中使用的权值数据表示方法所使用的总数据位数少于反向训练运算过程中使用的权值表示的总数据位数,从而可以达到压缩编码的作用。

本披露的用于执行人工神经网络运算、反向传播训练算法及其压缩编码的人工神经网络压缩编码装置,包括指令缓存单元、输入神经元缓存单元、权值缓存单元、控制单元、运算单元、输出神经元缓存单元、内存接口单元和直接内存访问通道单元;

其中,指令缓存单元用于缓存指令;

输入神经元缓存单元用于缓存输入神经元数据;

权值缓存单元用于缓存权值;

控制单元用于从指令缓存中读取专用指令,并将其译码成微指令;

运算单元用于接受从控制器单元发出的微指令并进行算术逻辑运算;

输出神经元缓存单元用于缓存输出神经元数据;

内存接口单元用于数据读写通道;

直接内存访问通道单元用于从内存向各缓存中读写数据。

上述指令缓存单元、输入神经元缓存单元、权值缓存单元和输出神经元缓存单元等中使用的缓存可以为ram。

所述运算单元执行的运算包括神经网络计算。

在一个实施例里,计算单元包括但不仅限于:第一部分一个或多个乘法器;第二部分一个或者多个加法器(更具体的,第二个部分的加法器组成加法树);第三部分为激活函数单元;和/或第四部分向量处理单元。更具体的,向量处理单元可以处理向量运算和/或池化运算。第一部分将输入数据1(inl)和输入数据2(in2)相乘得到相乘之后的输出(out),过程为:out=in1*in2;第二部分将输入数据in1通过加法器相加得到输出数据(out)。更具体的,第二部分为加法树时,将输入数据in1通过加法树逐级相加得到输出数据(out),其中in1是一个长度为n的向量,n大于1,过称为:out=in1[1]+in1[2]+...+in1[n],和/或将输入数据(in1)通过加法数累加之后和输入数据(in2)相加得到输出数据(out),过程为:out=in1[1]+in1[2]+...+in1[n]+in2,或者将输入数据(in1)和输入数据(in2)相加得到输出数据(out),过称为:out=in1+in2;第三部分将输入数据(in)通过激活函数(active)运算得到激活输出数据(out),过程为:out=active(in),激活函数active可以是sigmoid、tanh、relu、softmax等,除了做激活操作,第三部分可以实现其他的非线性函数,可将将输入数据(in)通过运算(f)得到输出数据(out),过程为:out=f(in)。向量处理单元将输入数据(in)通过池化运算得到池化操作之后的输出数据(out),过程为out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。

所述运算单元执行运算包括第一部分是将所述输入数据1和输入数据2相乘,得到相乘之后的数据;和/或第二部分执行加法运算(更具体的,为加法树运算,用于将输入数据1通过加法树逐级相加),或者将所述输入数据1通过和输入数据2相加得到输出数据;和/或第三部分执行激活函数运算,对输入数据通过激活函数(active)运算得到输出数据;和/或第四部分执行池化运算,out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。以上几个部分的运算可以自由选择一个多个部分进行不同顺序的组合,从而实现各种不同功能的运算。

在执行人工神经网络反向训练运算时,运算过程表示如下:

将输入神经元的梯度(g)通过加权运算(f)得到输出梯度(g’),过程为:g’=f(g);

将输入梯度(g)通过更新运算(update)得到权值改变(deltaw),过程为:deltaw=update(g);

将输入权值(w)和权值改变(deltaw)相加得到输出权值(w’),过程为:w’=w+deltaw;

将输入梯度(g)通过更新运算(update)得到偏置改变(deltab),过程为:deltab=update(g);

将输入偏置(b)和偏置改变(deltab)相加得到输出偏置(b’),过程为:b’=b+deltab;

其中,在执行人工神经网络反向训练运算时,所有数据使用浮点数表示。

上述人工神经网络压缩编码装置,可用于执行卷积人工神经网络运算、池化人工神经网络运算、1rn人工神经网络运算及可用于执行全连接人工神经网络运算。

下面结合附图和具体实施例对本披露的技术方案进行进一步的阐释说明。

图3示出了根据本披露一实施例的神经网络处理系统总体结构的示意性框图。

i/o接口1,用于i/o数据需要经过cpu3发给加速器芯片,然后由加速器芯片4写入内存,加速器芯片4需要的专用程序也是由cpu3传输到加速器芯片。

内存2,用于暂存多层人工神经网络模型和神经元数据,特别是当全部模型无法在加速器片上缓存中放下时。

中央处理器cpu3,用于进行数据搬运以及加速器芯片4启动停止等基本控制,作为加速器芯片4与外部控制的接口。

加速器芯片4,也即上述的人工神经网络压缩编码装置,用于执行多层人工神经网络运算及其反向传播训练算法模块,接受来自cpu3的数据和程序,执行上述多层人工神经网络运算及其反向传播训练算法,加速器芯片4执行结果将传输回cpu3。

通用系统架构。将加速器作为cpu或者gpu的协处理器来执行多层人工神经网络运算及其反向传播训练算法。

多加速器互联的系统结构。多个加速器可以通过pcie总线互联,以支持更大规模的多层人工神经网络运算,可以共用同一个宿主cpu或者分别有自己的宿主cpu,可以共享内存也可以每个加速器有各自的内存。此外其互联方式可以是任意互联拓扑。

图4示出了根据本披露一实施例的加速器芯片结构的示意性框图。

其中输入神经元缓存(2)存储一层运算的输入神经元。

其中输出神经元缓存(5)存储一层运算的输出神经元。

权值缓存(8)存储模型(权值)数据。

直接内存访问通道(7)用于从内存(6)向各ram中读写数据。

指令缓存(1)用于储存专用指令。

控制器单元(3)从指令缓存中读取专用指令,并将其译码成各运算单元的微指令。

运算单元(4)用于执行具体运算。运算单元的运算主要被分为三个阶段,第一阶段执行乘法运算,用于将输入的神经元和权值数据相乘。第二阶段执行加法树运算,当同时执行第一和第二阶段时,两阶段合起来完成了向量内积运算,当然也可以只执行第一阶段或者第二阶段。第三阶段执行激活函数运算,激活函数可以是sigmoid函数、tanh函数等。第三阶段运算的结果作为输出神经元,写回输出神经元缓存。

图5绘示出根据本披露一实施例的多层人工神经网络的运算流程图,图1为所执行运算的一个示例。

步骤1:控制器从指令缓存中读取一条多层人工神经网络运算simd指令,例如多层感知机(mlp)指令、卷积指令、池化(pooling)指令等执行专门神经网络算法的指令,或者矩阵乘指令、向量加指令、向量激活函数指令等用于执行神经网络运算的通用向量/矩阵指令。

步骤2:控制器将该指令译码成各个功能部件的微指令,包括输入神经元缓存是否读写以及读写次数,输出神经元缓存是否读写以及读写次数,权值神经元缓存是否读写以及读写次数,运算单元各个阶段执行何种操作。

步骤3:运算单元得到从输入神经元缓存和权值缓存的输入向量,根据阶段一的操作码,决定是否执行向量乘法运算,并将结果发送到下一阶段(如不进行乘法运算则直接将输入发到下一阶段)。

步骤4:运算单元得到阶段一的输出,根据阶段二的操作码,决定是否进行加法树运算,并将结果发送到下一阶段(如不进行加法树操作,则直接将输入发送到下一阶段)。

步骤5:运算单元得到阶段二的输出,根据阶段三的操作码,决定是否进行激活函数的运算,并将结果发送给输出神经元缓存。

图6绘示出根据本披露一实施例的多层人工神经网络反向传播训练算法的流程图,图2为所执行运算的一个示例。

步骤1:控制器从指令缓存中读取一条多层人工神经网络训练算法simd指令。

步骤2:控制器将该指令译码成各个运算单元的微指令,包括输入神经元缓存是否读写以及读写次数,输出神经元缓存是否读写以及读写次数,权值神经元缓存是否读写以及读写次数,运算单元各个阶段执行何种操作。

步骤3:运算单元得到从输入神经元缓存和权值缓存的输入向量,根据阶段一的操作码,决定是否执行向量乘法运算,并将结果发送到下一阶段(如不进行乘法运算则直接将输入发到下一阶段)。

步骤4:运算单元得到阶段一的输出,根据阶段二的操作码,决定是否进行加法树,向量加法或权值更新运算。

图7绘示出根据本披露一实施例的多层人工神经网络权值训练算法的流程图。

步骤1:将存储的浮点权值w1转换成位数较少的表示w2。

步骤2:使用w2进行正向运算。

步骤3:根据正向运算得到的误差结果进行反向运算更新w1。

迭代执行上述三个步骤,直到得到训练好的权值数据。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

各功能单元/模块都可以是硬件,比如该硬件可以是电路,包括数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器等等。所述计算装置中的计算模块可以是任何适当的硬件处理器,比如cpu、gpu、fpga、dsp和asic等等。所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如rram,dram,sram,edram,hbm,hmc等等。以上所述的具体实施例,对本披露的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本披露的具体实施例而已,并不用于限制本披露,凡在本披露的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本披露的保护范围之内。

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