一种用于执行全连接层神经网络正向运算的装置和方法与流程

文档序号:16929720发布日期:2019-02-22 20:09阅读:140来源:国知局
一种用于执行全连接层神经网络正向运算的装置和方法与流程

本发明总体上涉及人工神经网络,具体地涉及一种用于执行全连接层人工神经网络正向运算的装置和方法。



背景技术:

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

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

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



技术实现要素:

本发明的一个方面提供了一种用于执行人工神经网络全连接层正向运算的装置,包括指令存储单元、控制器单元、数据访问单元、互连模块、主运算模块、以及多个从运算模块,其中:

指令存储单元通过数据访问单元读入指令并存储读入的指令;

控制器单元从指令存储单元中读取指令,将指令译成控制其他模块行为的控制信号,所述其他模块包括数据访问单元、主运算模块和所述多个从运算模块;

数据访问单元执行外部地址空间与所述装置之间的数据或指令读写操作;

互连模块用于连接主运算模块和从运算模块;

主运算模块用于实现人工神经网络全连接层算法中的函数激活运算;

从运算模块用于实现人工神经网络全连接层算法中的输入神经元和权值参数的乘法和加法运算;

互连模块用于所述主运算模块和所述从运算模块之间的数据传输,在神经网络全连接层正向运算开始之前,主运算模块通过互连模块将输入神经元向量输送到每一个从运算模块,在从运算模块的计算过程结束后,互连模块逐级将各从运算模块的输出神经元值拼成中间结果向量,输送回主运算模块,用于后续计算。

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

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

该装置可以应用于以下(包括但不限于)场景中:数据处理、机器人、电脑、打印机、扫描仪、电话、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备等各类电子产品;飞机、轮船、车辆等各类交通工具;电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机等各类家用电器;以及包括核磁共振仪、b超、心电图仪等各类医疗设备。

附图说明

为了更完整地理解本发明及其优势,现在将参考结合附图的以下描述,其中:

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

图2示意性示出了根据本发明实施例的用于执行人工神经网络全连接层正向运算的装置中h树模块(互连模块的一种实施方式)的结构。

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

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

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

图6示出了根据一个实施例的单层人工神经网络全连接层正向运算的一种实施方法。

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

在所有附图中,相同的装置、部件、单元等使用相同的附图标记来表示。

具体实施方式

根据结合附图对本发明示例性实施例的以下详细描述,本发明的其它方面、优势和突出特征对于本领域技术人员将变得显而易见。

在本发明中,术语“包括”和“含有”及其派生词意为包括而非限制;术语“或”是包含性的,意为和/或。

在本说明书中,下述用于描述本发明原理的各种实施例只是说明,不应该以任何方式解释为限制发明的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本发明的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不背离本发明的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同参考数字用于相似功能和操作。

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

图1示出了根据本发明实施例的用于执行人工神经网络全连接层正向运算的装置的整体结构的示例框图。如图1所示,该装置包括指令存储单元1、控制器单元2、数据访问单元3、互连模块4、主运算模块5和多个从运算模块6。指令存储单元1、控制器单元2、数据访问单元3、互连模块4、主运算模块5和从运算模块6均可以通过硬件电路(包括但不限于fpga、cgra、专用集成电路asic、模拟电路或忆阻器等)实现。

指令存储单元1通过数据访问单元3读入指令并存储读入的指令。指令存储单元1可以通过各种不同存储器件(sram、dram、忆阻器、3d-dram或非易失存储等)实现。

控制器单元2从指令存储单元1中读取指令,将指令译成控制其他模块行为的控制信号,所述其他模块例如包括数据访问单元3、主运算模块5和从运算模块6等。

数据访问单元3能够访问外部地址空间,直接向装置内部的各个存储单元写数据或指令,或从装置内部的各个存储单元向外部地址空间写数据。

互连模块4用于连接主运算模块和从运算模块,可以实现成不同的互连拓扑(如树状结构、环状结构、网格状结构、分级互连、总线结构等)。

图2示意性示出了互连模块4的一种实施方式:h树结构。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。

其中,第一运算单元51包括向量加法单元511以及激活单元512。第一运算单元51接收来自控制器单元的控制信号,完成主运算模块5的各种运算功能,向量加法单元511用于实现人工神经网络全连接层正向计算中的加偏置操作,该部件将偏置向量与通过所述互连模块4从从运算模块6传送回来的中间结果向量相加,输出为向量相加后的值,激活运算单元512用于实现人工神经网络全连接层激活函数操作。该部件的输入为通过所述互连模块4从从运算模块6传送回来的中间结果,或向量加法单元511的输出结果,输出为进行函数激活后的神经元向量。所述偏置向量可以是从外部地址空间读入的,也可以是存储在本地的。

第一数据依赖关系判定单元52是第一运算单元51读写第一存储单元53的端口,保证第一存储单元53中数据的读写一致性。同时,第一数据依赖关系判定单元52也负责将从第一存储单元53读取的数据通过互连模块4发送给从运算模块,而从运算模块6的输出数据通过互连模块4直接发送给第一运算单元51。控制器单元2输出的指令发送给计算单元51和第一数据依赖关系判定单元52,来控制其行为。

存储单元53用于缓存主运算模块5在计算过程中用到的输入数据和输出数据。

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

第二运算单元61接收控制器单元2发出的控制信号并进行点积运算,包括向量乘单元611,以及累加运算单元612。其中,向量乘单元611用于实现神经元向量和权值向量的对位乘法,累加运算单元612用于实现将向量的每一项累加到一起的操作。

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

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

第三存储单元64缓存该从运算模块6在计算过程中需要的权值数据。根据本发明的实施例,每一个从运算模块6可以只存储全部输入神经元与部分输出神经元之间的权值。输出神经元按照从运算模块的个数n进行分段,每段的第n个输出神经元对应的权值存放在第n个从运算模块中。

从运算模块6实现人工神经网络全连接层正向运算过程中点积运算的并行性。人工神经网络全连接层的正向运算过程为y=f(wx+b),其中权值矩阵w和输入神经元向量x的乘法可以划分为不相关的并行计算子任务,in是列向量,每个从运算模块6可以只计算in列向量与权值矩阵w的对应行的点积,得到输出是中间结果向量的一维分量,这些一维分量在互连模块4中逐级拼接得到中间结果向量。所以计算过程变成了并行的计算部分和的过程和后面的拼接的过程。每个从运算模块6计算出输出神经元值,所有的输出神经元值在互连模块4中拼成得到中间结果向量。每个从运算模块6只需要计算出中间结果向量y中与本模块对应的输出神经元值即可。

根据本发明实施例,还提供了在前述装置上执行人工神经网络正向运算的指令集。指令集中包括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是激活函数(active)。每个从运算模块6的权值向量是权值矩阵中与该从运算模块6相对应的行向量。互连模块将输入神经元向量[in0,…,inn]发送给所有的从运算模块,暂存在神经元缓存单元中。对于第i个从运算模块,计算其相应的权值向量[w_i0,…,w_in]与输入神经元向量的点积。从运算模块输出的结果经过互连模块拼成完整的中间结果向量并返回给主运算模块,在主运算模块中进行激活运算,或进行加偏置和激活运算,得到最后的输出神经元向量[out0,out1,out2,…,outn]。

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

步骤s1.1,将初始指令存放到指令存储单元1;

步骤s1.2,从指令存储单元1中读取一条指令;

步骤s1.3,对上述指令进行译码;

步骤s1.4,根据译码得到的控制信号,进行相应操作;

步骤s1.5,将操作结果写回到相应存储中。

在步骤s1.1中,可以存入初始化io指令,用于搬运后续指令。

在步骤s1.2中,可读取的指令包括但不限于config指令、compute指令、io指令、nop指令、jump指令和move指令等。

在步骤s1.3中,根据指令的操作类型(config,compute,io,nop,jump,move等)译码得到相应模块的控制信号。对于config指令,译码得到配置其余模块的配置信息。对于compute指令,译码得到主从运算模块的控制信号。对于io指令,译码得到数据访问模块的控制信号。对于nop指令,不产生实际控制信号,只用于清空当前装置内部所有控制信号存储队列中的控制信号,保证nop指令之前的所有指令全部执行完毕。对于jump指令,得到跳转指令流的控制信号。对于move指令,得到在装置内部搬运数据的控制信号。

在步骤s1.4中,上述模块2-6根据控制信号执行相应操作。以执行神经网络全连接层正向的compute指令为例,互连模块将输入神经元向量[in0,…,inn]发送给所有的从运算模块,暂存在第二存储单元63中。对于第i个从运算模块,计算其相应的权值向量[w_i0,…,w_in]与输入神经元向量的点积。从运算模块输出的结果经过互连模块拼成完整的输出向量并返回给主运算模块,在主运算模块中进行激活运算或进行加偏置和激活运算,得到最后的输出神经元向量[out0,out1,out2,…,outn]。

在步骤s1.5中,各个模块将操作结果写回到相应存储单元中。以执行神经网络全连接层正向的运算为例,主运算模块得到的输出神经元向量被写回到第一存储单元53。

图7示出单层人工神经网络全连接层正向运算的另一种更详细的实施方法。

在步骤s2.1,在指令存储单元1处预先存入一条io指令。

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

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

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

在步骤s2.5,控制器单元2接着从指令存储单元读入下一条config指令,根据译出的控制信号,配置该层神经网络计算需要的各种常数。例如,第一运算单元51、61根据控制信号里的参数配置单元内部寄存器的值,所述参数包括例如激活函数需要的数据等。步骤s2.5为可选步骤,在一些情况下可以跳过步骤s2.5直接执行下面的步骤。

在步骤s2.6,控制器单元2接着从指令存储单元读入下一条compute指令,根据译出的控制信号,主运算模块5首先通过互连模块4将输入神经元向量发给各从运算模块6,保存至从运算模块6的第二存储单元63。

在步骤s2.7,根据compute指令译出的控制信号,从运算模块6的第二运算单元61从第三存储单元64读取权值向量(权值矩阵中对应于该从运算模块6的行向量),从第二存储单元63读取输入神经元向量,完成权值向量和输入神经元向量的点积运算,将中间结果通过互连模块返回。

在步骤s2.8,在互连模块4中,各从运算模块6返回的中间结果被逐级拼成完整的中间结果向量。

在步骤s2.9,主运算模块5得到互连模块4的返回值,根据compute指令译出的控制信号,从第一存储单元53读取偏置向量,与互连模块4返回的向量通过向量加单元512相加,然后激活单元511对相加结果做激活,并将最后的输出神经元向量写回至第一存储单元53中。

在步骤s2.10,控制器单元2接着从指令存储单元读入下一条io指令,根据译出的控制信号,数据访问单元3将存储单元53中的输出神经元向量存至外部地址空间指定地址,运算结束。

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

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

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

前面的附图中所描绘的进程或方法可通过包括硬件(例如,电路、专用逻辑等)、固件、软件(例如,被具体化在非瞬态计算机可读介质上的软件),或两者的组合的处理逻辑来执行。虽然上文按照某些顺序操作描述了进程或方法,但是,应该理解,所描述的某些操作能以不同顺序来执行。此外,可并行地而非顺序地执行一些操作。

在前述的说明书中,参考其特定示例性实施例描述了本发明的各实施例。显然,可对各实施例做出各种修改,而不背离所附权利要求所述的本发明的更广泛的精神和范围。相应地,说明书和附图应当被认为是说明性的,而不是限制性的。

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