最新用于执行人工神经网络正向运算的装置和方法与流程

将乐信息网 http://www.jianglexinxi.cn 2020-10-18 15:47 出处:网络
如下介绍的最新用于执行人工神经网络正向运算的装置和方法与流程,相信小伙伴们一定很好奇,下面小编为大家带来了。

如下介绍的最新用于执行人工神经网络正向运算的装置和方法与流程,相信小伙伴们一定很好奇,下面小编为大家带来了。


本申请是针对申请号为:201610037645.1(发明创造名称:用于执行人工神经网络正向运算的装置和方法,申请日:2016年1月20日)提出的分案申请。

本申请涉及人工神经网络技术领域,特别是涉及一种用于执行人工神经网络正向运算的装置和方法。



背景技术:

多层人工神经网络被广泛应用于模式识别,图像处理,函数逼近和优化计算等领域,多层人工网络在近年来由于其较高的识别准确度和较好的可并行性,受到学术界和工业界越来越广泛的关注。

一种支持多层人工神经网络正向运算的已知方法是使用通用处理器。该方法通过使用通用寄存器堆和通用功能部件执行通用指令来支持上述算法。该方法的缺点之一是单个通用处理器的运算性能较低,无法满足通常的多层人工神经网络运算的性能需求。而多个通用处理器并行执行时,通用处理器之间相互通信又成为了性能瓶颈。另外,通用处理器需要把多层人工神经网络正向运算译码成一长列运算及访存指令序列,处理器前端译码带来了较大的功耗开销。

另一种支持多层人工神经网络反向训练的已知方法是使用图形处理器(gpu)。该方法通过使用通用寄存器堆和通用流处理单元执行通用simd指令来支持上述算法。由于gpu是专门用来执行图形图像运算以及科学计算的设备,没有对多层人工神经网络运算的专门支持,仍然需要大量的前端译码工作才能执行多层人工神经网络运算,带来了大量的额外开销。另外gpu只有较小的片上缓存,多层人工神经网络的模型数据(权值)需要反复从片外搬运,片外带宽成为了主要性能瓶颈。另外,gpu只有较小的片上缓存,多层人工神经网络的模型数据(权值)需要反复从片外搬运,片外带宽成为了主要性能瓶颈,同时带来了巨大的功耗开销。



技术实现要素:

本发明的一个方面提供了一种用于执行人工神经网络正向运算的装置,所述装置包括控制器单元、主运算模块、数据通路模块以及从运算模块;所述控制器单元,用于读取指令,并对所述指令进行译码,得到微指令,所述微指令用于对所述主运算模块、所述数据通路模块或所述从运算模块的行为进行控制;所述主运算模块,用于将输入神经元数据传输至所述数据通路模块;所述数据通路模块,用于将所述输入神经元数据传输至所述从运算模块,以及将所述从运算模块得到的输出神经元数据拼成中间结果向量;所述主运算模块,还用于根据所述中间结果向量进行后续处理。

本发明的另一个方面提供了一种使用上述装置执行单层人工神经网络正向运算的方法。

本发明的另一方面提供了一种使用上述装置执行多层人工神经网络正向运算的方法。

附图说明

图1示出了根据本发明实施例的用于执行人工神经网络正向运算的装置的整体结构的示例框图;

图2示意性示出了根据本发明实施例的用于执行人工神经网络正向运算的装置中h树模块数据通路模块的结构;

图3示出了根据本发明实施例的用于执行人工神经网络正向运算的装置中主运算模块结构的示例框图;

图4示出了根据本发明实施例的用于执行人工神经网络正向运算的装置中从运算模块结构的示例框图;

图5示出了根据本发明实施例的神经网络正向运算过程的示例框图;

图6示出了根据本发明实施例的单层人工神经网络运算的流程图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

根据本发明实施例的多层人工神经网络的正向运算,包括两层或者两层以上的多个神经元。对于每一层来说,输入神经元向量首先和权值向量进行点积运算,结果经过激活函数得到输出神经元。其中激活函数可以是sigmoid函数,tanh、relu、softmax函数等。

图1示出了根据本发明实施例的用于执行人工神经网络正向运算的装置的整体结构的示例框图。如图1所示,该装置包括指令缓存单元1、控制器单元2、直接内存访问单元3、h树模块4、主运算模块5和多个从运算模块6。指令缓存单元1、控制器单元2、直接内存访问单元3、h树模块4、主运算模块5和从运算模块6均可以通过硬件电路(例如专用集成电路asic)实现。

指令缓存单元1通过直接内存访问单元3读入指令并缓存读入的指令。

控制器单元2从指令缓存单元1中读取指令,将指令译成控制其他模块行为的微指令,所述其他模块例如直接内存访问单元3、主运算模块5和从运算模块6等。

直接内存访问单元3能够访存外部地址空间,直接向装置内部的各个缓存单元读写数据,完成数据的加载和存储。

图2示意性示出了h树模块4的结构。h树模块4构成主运算模块5和多个从运算模块6之间的数据通路,并具有h树型的结构。h树是由多个节点构成的二叉树通路,每个节点将上游的数据同样地发给下游的两个节点,将下游的两个节点返回的数据进行合并,并返回给上游的节点。例如,在每层人工神经网络开始计算阶段,主运算模块5内的神经元数据通过h树模块4发送给各个从运算模块6;当从运算模块6的计算过程完成后,当从运算模块的计算过程完成后,每个从运算模块输出的神经元的值会在h树中逐级拼成一个完整的由神经元组成的向量,作为中间结果向量。以神经网络全连接层进行说明,假设装置中共有n个从运算模块,则中间结果向量按n分段,每段有n个元素,第i个从运算模块计算每段中的第i个元素。n个元素经过h树模块拼成长度为n的向量并返回给主运算模块。所以如果网络只有n个输出神经元,则每个从运算单元只需输出单个神经元的值,若网络有m*n个输出神经元,则每个从运算单元需输出m个神经元值。

图3示出了根据本发明实施例的用于执行人工神经网络正向运算的装置中主运算模块5的结构的示例框图。如图3所示,主运算模块5包括运算单元51、数据依赖关系判断单元52和神经元缓存单元53。

神经元缓存单元53用于缓存主运算模块5在计算过程中用到的输入数据和输出数据,运算单元51完成主运算模块5的各种运算功能,数据依赖关系判断单元52是运算单元51读写神经元缓存单元53的端口,同时能够保证神经元缓存单元中数据的读写一致性。同时,数据依赖关系判断单元52也负责将读取数据通过h树模块4发送给从计算模块,而从计算模块6的输出数据通过h树模块4直接发送给运算单元51。控制器单元2输出的指令发送给计算单元51和数据依赖关系判断单元52,来控制其行为。

图4示出了根据本发明实施例的用于执行人工神经网络正向运算的装置中从运算模块6的结构的示例框图。如图4所示,每个从运算模块6包括运算单元61、数据依赖关系判定单元62、神经元缓存单元63和权值缓存单元64。

运算单元61接收控制器单元2发出的微指令并进行算数逻辑运算。

数据依赖关系判断单元62负责计算过程中对神经元缓存单元的读写操作。数据依赖关系判断单元62执行读写操作之前会首先保证指令之间所用的数据不存在读写一致性冲突。例如,所有发往数据依赖关系单元62的微指令都会被存入数据依赖关系单元62内部的指令队列里,在该队列中,读指令的读取数据的范围如果与队列位置靠前的写指令写数据的范围发生冲突,则该指令必须等到所依赖的写指令被执行后才能够执行。

神经元缓存单元63缓存该从运算模块6的输入神经元向量数据和输出神经元值数据。

权值缓存单元64缓存该从运算模块6在计算过程中需要的权值数据。对于每一个从运算模块6,都只会存储全部输入神经元与部分输出神经元之间的权值。以全连接层为例,输出神经元按照从运算单元的个数n进行分段,每段的第n个输出神经元对应的权值存放在第n个从运算单元中。

从运算模块6实现每层人工神经网络正向运算过程中可以并行的前半部分。以人工神经网络全连接层(mlp)为例,过程为y=f(wx+b),其中权值矩阵w和输入神经元向量x的乘法可以划分为不相关的并行计算子任务,out与in是列向量,每个从运算模块6只计算in中相应的部分标量元素与权值矩阵w对应的列的乘积,得到的每个输出向量都是最终结果的一个待累加的部分和,这些部分和在h树模块4中逐级两两相加得到最后的结果。所以计算过程变成了并行的计算部分和的过程和后面的累加的过程。每个从运算模块6计算出输出神经元值,所有的输出神经元值在h树模块4中拼成得到中间结果向量。每个从运算模块6只需要计算出中间结果向量y中与本模块对应的输出神经元值即可。h树模块4对所有从运算模块6输出的神经元值求和,得到最终的中间结果向量y。主运算模块5基于中间结果向量y进行后续计算,比如加偏置、池化(例如最大值池化(maxpooling)或平均值池化(avgpooling)等)、做激活和做采样等。

根据本发明实施例,还提供了在前述装置上执行人工神经网络正向运算的指令集。指令集中包括config指令、compute指令、io指令、nop指令、jump指令和move指令,其中:

config指令在每层人工神经网络计算开始前配置当前层计算需要的各种常数;

compute指令完成每层人工神经网络的算术逻辑计算;

io指令实现从外部地址空间读入计算需要的输入数据以及在计算完成后将数据存回至外部空间;

nop指令负责清空当前装至内部所有微指令缓存队列中的微指令,保证nop指令之前的所有指令全部指令完毕。nop指令本身不包含任何操作;

jump指令负责控制器将要从指令缓存单元读取的下一条指令地址的跳转,用来实现控制流的跳转;

move指令负责将装置内部地址空间某一地址的数据搬运至装置内部地址空间的另一地址,该过程独立于运算单元,在执行过程中不占用运算单元的资源。

图5示出了根据本发明实施例的神经网络正向运算过程的示例框图。在不同从运算模块6中,输入神经元向量分别与该从运算模块6的权值向量进行点积运算,得到对应的输出神经元值,所有这些输出神经元值组成中间结果向量,该中间结果向量经过加偏置向量以及激活运算得到该层神经网络的最终输出神经元向量,公式描述为out=f(w*in+b),其中out输出神经元向量、in是输入神经元向量、b是偏置向量,w是权值矩阵,f是激活函数。每个从运算模块6的权值向量是权值矩阵中与该从运算模块6相对应的列向量。h树模块将输入神经元向量[in0,…,inn]发送给所有的从运算单元,暂存在神经元缓存单元中。对于第i个从运算单元,计算其相应的权值向量[w_i0,…,w_in]与输入神经元向量的点积。从运算单元输出的结果经过h树模块拼成完整的输出向量并返回给主运算单元,在主运算单元中进行激活运算,得到最后的输出神经元向量[out0,out1,out2,…,outn]。

图5是示出根据一个实施例的单层人工神经网络正向运算流程图。该流程图描述利用本发明的装置和指令集实现图4所示的一种单层神经网络正向运算的过程。

在步骤s1,在指令缓存单元1的首地址处预先存入一条io指令。

在步骤s2,运算开始,控制器单元2从指令缓存单元1的首地址读取该条io指令,根据译出的微指令,直接内存访问单元3从外部地址空间读取相应的所有人工神经网络运算指令,并将其缓存在指令缓存单元1中。

在步骤s3,控制器单元2接着从指令缓存单元读入下一条io指令,根据译出的微指令,直接内存访问单元3从外部地址空间读取主运算模块5需要的所有数据(例如,包括输入神经元向量、插值表、常数表和偏置等)至主运算模块5的神经元缓存单元53。

在步骤s4,控制器单元2接着从指令缓存单元读入下一条io指令,根据译出的微指令,直接内存访问单元3从外部地址空间读取从运算模块6需要的权值矩阵数据。

在步骤s5,控制器单元2接着从指令缓存单元读入下一条config指令,根据译出的微指令,装置配置该层神经网络计算需要的各种常数。例如,运算单元51、61根据微指令里的参数配置单元内部寄存器的值,所述参数例如包括本层计算的精度设置、激活函数的数据(例如本层计算的精度位,lrn层算法的rang参数,averagepooling层算法窗口大小的倒数等)

在步骤s6,控制器单元2接着从指令缓存单元读入下一条compute指令,根据译出的微指令,主运算模块5首先通过h树模块4将输入神经元向量发给各从运算模块6,保存至从运算模块6的神经元缓存单元63。

在步骤s7,根据compute指令译出的微指令,从运算模块6的运算单元61从权值缓存单元64读取权值向量(权值矩阵中对应于该从运算模块6的列向量),从神经元缓存单元读取输入神经元向量,完成权值向量和输入神经元向量的点积运算,将中间结果通过h树返回。

在步骤s8,在h树模块4中,各从运算模块6返回的中间结果被逐级拼成完整的中间结果向量。

在步骤s9,主运算模块5得到h树模块4的返回值,根据compute指令译出的微指令,从神经元缓存单元53读取偏置向量,与h树模块4返回的向量相加,然后再对相加结果做激活,并将最后的输出神经元向量写回至神经元缓存单元53。

在步骤s10,控制器单元接着从指令缓存单元读入下一条io指令,根据译出的微指令,直接内存访问单元3将神经元缓存单元53中的输出神经元向量存至外部地址空间指定地址,运算结束。

对于多层人工神经网络,其实现过程与单层神经网络类似,当上一层人工神经网络执行完毕后,下一层的运算指令会将主运算单元中存储的上一层的输出神经元地址作为本层的输入神经元地址。同样地,指令中的权值地址和偏置地址也会变更至本层对应的地址。

通过采用用于执行人工神经网络正向运算的装置和指令集,解决了cpu和gpu运算性能不足,前端译码开销大的问题。有效提高了对多层人工神经网络正向运算的支持。

通过采用针对多层人工神经网络正向运算的专用片上缓存,充分挖掘了输入神经元和权值数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络正向运算性能瓶颈的问题。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。


技术特征:

1.一种用于执行人工神经网络正向运算的装置,其特征在于,所述装置包括控制器电路、主运算电路、数据通路电路以及从运算电路;

所述控制器电路,用于读取指令,并对所述指令进行译码,得到微指令,所述微指令用于对所述主运算电路、所述数据通路电路或所述从运算电路的行为进行控制;

所述主运算电路,用于将输入神经元数据传输至所述数据通路电路;

所述数据通路电路,用于将所述输入神经元数据传输至所述从运算电路,以及将所述从运算电路得到的输出神经元数据拼成中间结果向量;

所述主运算电路,还用于根据所述中间结果向量进行后续处理。

2.根据权利要求1所述的装置,其特征在于,所述从运算电路的数量为多个;

多个所述从运算电路,用于根据相同的所述输入神经元数据以及各所述从运算电路所对应的不同的权值向量,并行计算出各所述从运算电路对应的输出神经元数据;

所述从运算电路对应的权值向量包括权值矩阵中与所述从运算电路相对应的列向量。

3.根据权利要求1所述的装置,其特征在于,所述数据通路电路包括多个节点;

所述将所述输入神经元数据传输至所述从运算电路,包括:将上游的所述节点的数据发给下游的所述节点,通过逐级传输将所述输入神经元数据传输至所述从运算电路;以及

所述将所述从运算电路得到的输出神经元数据拼成中间结果向量,包括:

所述从运算电路将输出神经元数据发送给下游的所述节点,所述下游的节点所述输出神经元数据进行合并,并将所述合并结果发送至上一级的所述节点,通过逐级合并将所述从运算电路的输出神经元数据拼成所述中间结果向量。

4.根据权利要求1所述的装置,其特征在于,所述数据通路电路包括多个节点构成的二叉树通路。

5.根据权利要求1所述的装置,其特征在于,所述装置还包括指令缓存电路,所述指令缓存电路用于缓存所述指令。

6.根据权利要求1所述的装置,其特征在于,

所述输入神经元数据包括输入神经元向量;和/或

所述输出神经元数据包括输出神经元向量。

7.根据权利要求1-6任一所述的装置,其特征在于,所述主运算电路根据所述中间结果向量进行后续处理,包括以下操作的一种或多种:

加偏置操作,所述加偏置操作包括在所述中间结果向量上加上偏置;

激活操作,所述激活操作包括根据激活函数对所述中间结果向量进行激活;

采样操作,所述采样操作包括将所述中间结果向量与随机数进行比较;若所述中间结果向量大于随机数,则输出1;若所述中间结果向量小于随机数,则输出0;

池化操作,所述池化操作包括最大值池化或平均值池化。

8.根据权利要求1所述的装置,其特征在于,所述主运算电路包括第一神经元缓存电路、第一运算电路以及第一数据依赖关系判断电路;

所述第一神经元缓存电路,用于缓存所述主运算电路在计算过程中用到的输入数据和输出数据;

所述第一运算电路,用于完成所述主运算电路的运算功能;

所述第一数据依赖关系判断电路,用于保证对所述第一神经元缓存电路中的读写不存在一致性冲突。

9.根据权利要求1所述的装置,其特征在于,所述从运算电路包括第二神经元缓存电路、权值缓存电路、第二运算电路以及第二数据依赖关系判断电路;

所述第二神经元缓存电路,用于缓存所述从运算电路的输入神经元数据和输出神经元数据;

所述权值缓存电路,用于缓存所述从运算电路在计算过程中需要的权值数据;

所述第二运算电路,用于接收所述控制器电路发出的所述微指令,并根据所述微指令进行算数逻辑运算;

所述第二数据依赖关系判断电路,用于保证对所述第二神经元缓存电路和所述权值缓存电路中的读写不存在一致性冲突。

10.根据权利要求8和权利要求9所述的装置,其特征在于,所述第一数据依赖关系判断电路和第二数据依赖关系判断电路,还用于:

判断未执行的微指令对应的第一数据与正在执行过程中的微指令对应的第二数据之间是否存在依赖关系;若所述第一数据与所述第二数据之间不存在依赖关系,则允许所述未执行的微指令立即执行;若所述第一数据与所述第二数据之间存在依赖关系,则在与所述未执行的微指令存在依赖关系的所有微指令全部执行完成后,允许所述未执行的微指令执行。

11.一种执行人工神经网络正向运算的方法,其特征在于,所述方法应用于执行人工神经网络正向运算的装置,所述装置包括控制器电路、主运算电路、数据通路电路以及从运算电路;所述方法包括:

所述控制器电路读取指令,并对所述指令进行译码,得到控制所述主运算电路、所述数据通路电路以及所述从运算电路行为的微指令;

所述主运算电路将输入神经元数据传输至所述数据通路电路;

所述数据通路电路将所述输入神经元数据传输至所述从运算电路,以及将所述从运算电路得到的输出神经元数据拼成中间结果向量;

所述主运算电路根据所述中间结果向量进行后续处理。

12.根据权利要求11所述的方法,其特征在于,所述从运算电路的数量为多个;

多个所述从运算电路根据相同的所述输入神经元数据以及各所述从运算电路所对应的不同的权值向量,并行计算出各所述从运算电路对应的输出神经元数据;

所述从运算电路对应的权值向量包括权值矩阵中与所述从运算电路相对应的列向量。

13.根据权利要求11所述的方法,其特征在于,所述数据通路电路包括多个节点;

所述将所述输入神经元数据传输至所述从运算电路,包括:将上游的所述节点的数据发给下游的所述节点,通过逐级传输将所述输入神经元数据传输至所述从运算电路;以及

所述将所述从运算电路得到的输出神经元数据拼成中间结果向量,包括:

将下游的所述节点的数据进行合并得到合并结果,并将所述合并结果发送至上一级的所述节点,通过逐级合并将所述从运算电路的输出神经元数据拼成所述中间结果向量。

14.根据权利要求11所述的方法,其特征在于,所述数据通路电路包括多个节点构成的二叉树通路。

15.根据权利要求11所述的方法,其特征在于,所述装置还包括指令缓存电路;所述方法还包括:所述指令缓存电路缓存所述指令。

16.根据权利要求11所述的方法,其特征在于,

所述输入神经元数据包括输入神经元向量;和/或

所述输出神经元数据包括输出神经元向量。

17.根据权利要求11-16任一所述的方法,其特征在于,所述主运算电路根据所述中间结果向量进行后续处理,包括以下操作的一种或多种:

加偏置操作,所述加偏置操作包括在所述中间结果向量上加上偏置;

激活操作,所述激活操作包括根据激活函数对所述中间结果向量进行激活;

采样操作,所述采样操作包括将所述中间结果向量与随机数进行比较;若所述中间结果向量大于随机数,则输出1;若所述中间结果向量小于随机数,则输出0;

池化操作,所述池化操作包括最大值池化或平均值池化。

18.根据权利要求11所述的方法,其特征在于,所述主运算电路包括第一神经元缓存电路、第一运算电路以及第一数据依赖关系判断电路;

所述第一神经元缓存电路缓存所述主运算电路在计算过程中用到的输入数据和输出数据;

所述第一运算电路完成所述主运算电路的运算功能;

所述第一数据依赖关系判断电路保证对所述第一神经元缓存电路中数据读写不存在一致性冲突。

19.根据权利要求11所述的方法,其特征在于,所述从运算电路包括第二神经元缓存电路、权值缓存电路、第二运算电路以及第二数据依赖关系判断电路;

所述第二神经元缓存电路缓存所述输入神经元数据以及所述从运算电路计算得到的输出神经元数据;

所述权值缓存电路缓存所述从运算电路在计算过程中需要的权值向量;

所述第二运算电路接收所述控制器电路发送的所述微指令,并根据所述微指令进行算数逻辑运算;

所述第二数据依赖关系判断电路对所述第二神经元缓存电路和所述权值缓存电路的读写操作,保证对所述第二神经元缓存电路和所述权值缓存电路的读写不存在一致性冲突。

20.根据权利要求18和权利要求19所述的方法,其特征在于,所述第一数据依赖关系判断电路和所述第二数据依赖关系判断电路,还用于:

判断未执行的微指令对应的第一数据与正在执行过程中的微指令对应的第二数据之间是否存在依赖关系;若所述第一数据与所述第二数据之间不存在依赖关系,则允许所述未执行的微指令立即执行;若所述第一数据与所述第二数据之间存在依赖关系,则在与所述未执行的微指令存在依赖关系的所有微指令全部执行完成后,允许所述未执行的微指令执行。

技术总结
本申请涉及一种用于执行人工神经网络正向运算的装置,所述装置包括控制器单元、主运算模块、数据通路模块以及从运算模块,使用该装置可以实现多层人工神经网络的正向运算。对于每一层来说,首先对输入神经元数据进行加权求和计算出本层的中间结果向量,再对该中间结果向量加偏置并激活得到输出神经元数据,并将该输出神经元数据作为下一层的输入神经元数据。

技术研发人员:不公告发明人
受保护的技术使用者:中科寒武纪科技股份有限公司
技术研发日:2016.01.20
技术公布日:2020.06.26

最新用于执行人工神经网络正向运算的装置和方法与流程的相关内容如下:

本文标题:最新用于执行人工神经网络正向运算的装置和方法与流程
http://www.jianglexinxi.cn/yanergaozhi/522840.html

0

精彩评论

暂无评论...
验证码 换一张
取 消