一种用于执行卷积神经网络训练的装置和方法与流程

文档序号:21185035发布日期:2020-06-20 18:03阅读:213来源:国知局
一种用于执行卷积神经网络训练的装置和方法与流程

本公开涉及一种用于执行卷积神经网络训练的装置和方法,用于根据卷积神经网络反向运算指令高效灵活地执行卷积神经网络反向运算,能够很好地解决当前计算机领域越来越多的算法包含大量卷积神经网络反向运算的问题。



背景技术:

卷积神经网络是近年来广泛应用于模式识别、图像处理等领域的一种高效识别算法,它具有结构简单、训练参数少和适应性强、平移、旋转、缩放等特点。由于cnn/dnn的特征检测层通过训练数据进行学习,所以在使用cnn/dnn时,避免了显示的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。

本公开提供的卷积神经网络训练算法的流程图,如图1所示,其流程包括两个阶段:

第一阶段,向前传播阶段:

a)从样本集中取一个样本(x,yp),将x输入网络;

b)计算相应的实际输出op。

在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果):

op=fn(…(f2(f1(xpw(1))w(2))…)w(n))

第二阶段,向后传播阶段

a)算实际输出op与相应的理想输出yp的差;

b)按极小化误差的方法反向传播调整权矩阵。

在已有的计算机领域应用中,与卷积运算相关的应用十分普遍。本公开专注于卷积神经网络,目前可以执行此种运算的主流装置如下:

在现有技术中,一种进行卷积神经网络反向运算的已知方案是使用通用处理器,该方法通过通用寄存器堆和通用功能部件来执行通用指令,从而执行卷积神经网络反向运算。然而,该方法的缺点之一是单个通用处理器多用于标量计算,在进行卷积神经网络反向运算时运算性能较低。而使用多个通用处理器并行执行时,通用处理器之间的相互通讯又有可能成为性能瓶颈。

在另一种现有技术中,使用图形处理器(gpu)来进行向量计算,其中,通过使用通用寄存器堆和通用流处理单元执行通用simd指令来进行卷积神经网络反向运算。然而,上述方案中,gpu片上缓存太小,在进行大规模卷积神经网络反向运算时需要不断进行片外数据搬运,片外带宽成为了主要性能瓶颈。



技术实现要素:

(一)要解决的技术问题

本公开的目的在于,提供一种支持卷积神经网络训练的装置,解决现有技术中存在的受限于片间通讯、片上缓存不够等问题。

(二)技术方案

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

指令存储单元用于存储指令;

控制器单元用于从指令存储单元读取指令,并将该指令译码成控制互连模块、主运算模块、以及所述多个从运算模块行为的控制信号;

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

在每层神经网络反向训练开始计算的阶段,主运算模块通过互连模块向所有的从运算模块传输本层的输入数据;

每个从运算模块计算自身的卷积核与输入数据的点积作为中间结果部分和,该卷积核与该中间结果部分和相对应;

在从运算模块的计算过程完成后,互连模块逐级将各从运算模块的输出数据部分和拼接得到本层的中间结果;

主运算模块在每一层的计算过程中,利用本层的中间结果完成后续计算。

本发明的另一方面提供了一种执行卷积神经网络指令的方法。

(三)有益效果

本公开提供的卷积神经网络反向运算装置及配套指令,将参与计算的输入神经元数据、输出梯度和卷积核暂存在高速暂存存储器上(scratchpadmemory)。在仅发送同一条指令的情况下,卷积神经网络反向运算单元中可以更加灵活有效地支持不同宽度的数据,并可以解决数据存储中的相关性问题,从而提升了包含大量卷积神经网络计算任务的执行性能,。

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

附图说明

图1是卷积神经网络训练算法的流程图

图2是本公开提供的支持卷积神经网络训练装置的指令示意图。

图3示出了根据本公开实施例的用于执行人工神经网络卷积层反向运算的装置的整体结构的示例框图。

图4示意性示出了根据本公开实施例的用于执行人工神经网络卷积层反向运算的装置中互连模块的结构。

图5示出了根据本公开实施例的用于执行人工神经网络卷积层反向运算的装置中主运算模块结构的示例框图。

图6示出了根据本公开实施例的用于执行人工神经网络卷积层反向运算的装置中从运算模块结构的示例框图。

图7示出了根据本公开实施例的神经网络卷积层反向运算过程的示例框图。

具体实施方式

本公开提供一种卷积神经网络训练装置及配套指令集,包括存储单元、寄存器单元和卷积神经网络反向运算单元,存储单元中存储有数据(数据包括输入神经元数据,输出神经元数据、中间运算结果)、输入输出神经元数据梯度和卷积核,寄存器单元中存储有数据、输入输出神经元数据梯度和/或卷积核等数据存储的地址以及标量数据。为了避免歧义,训练过程中正向、反向运算的“输入”“输出”“前一层”“后一层”均是以在神经网络正向运算时的运算顺序为准。首先依据卷积窗口,通过数据选择得到当前层的输入神经元数据,其次依据卷积核和输出神经元数据梯度以及激活函数的导函数,然后依据选择得到的输入神经元数据和来自当前层的输出神经元数据梯度,计算并且更新卷积核,计算得到输入神经元数据梯度,并且存入存储器以进行前一层计算。将输入神经元数据梯度作为前一层的输出神经元数据梯度。本公开将参与计算的输入神经元数据和卷积核暂存在高速暂存存储器上,使得卷积神经网络反向运算过程中可以更加灵活有效地支持不同宽度的数据,提升包含大量卷积神经网络训练计算任务的执行性能。

图1为卷积神经网络训练算法示意图,如图所示,包含卷积神经网络输入神经元数据,激活函数的导函数,输出神经元数据梯度,和卷积核。

首先,其训练的每一层计算过程,首先需要依据卷积窗口,从当前层的正向时输入神经元数据中选取出对应待运算的输入神经元数据,然后依据这部分输入神经元数据和来自当前层的输出神经元数据梯度进行向量乘向量运算,得到卷积核梯度,其卷积核梯度计算过程为dw=∑xidsi,即每个从运算模块将来自前一层的神经元数据x乘以来自后一层的神经元数据梯度ds,在卷积窗口遍历完数据之后,对进行求和,得到该卷积核对应的梯度,最后,主运算模块求解当前层所有的从运算模块的卷积核梯度对应的平方平均数当c大于阈值时t,所有梯度进行缩放dw′=dw/c*t,最后,依据新的卷积核梯度更新卷积核的值。

同时,主运算模块依据未更新的卷积核和当前层的输出神经元数据梯度,可以得到要输出到前一层的神经元数据梯度dx=h(x)∑widsi,其中,ds为与当前层的输入神经元数据x有相互关系的当前层的输出神经元数据梯度,w为该输入神经元数据x和输出神经元数据梯度ds对应的卷积核数据,h(x)为该输入神经元数据对应的激活函数的导函数的值。即将未更新的卷积核与来自后一层的数据梯度进行乘加运算,然后根据当前层的输入神经元数据对应的激活函数的导函数进行运算,得到输出给前一层的数据梯度,最后,将该梯度输出到存储器,用以进行其前一层的卷积神经网络反向运算。

卷积窗口依据卷积核的大小kx和ky,在大小为w和h的输入神经元数据集上,从最开始选取出和卷积核同样大小的输入神经元数据,然后依据卷积窗口的平移位矢sx和sy,以此先作水平平移,然后再做垂直平移,将整幅输入图像做遍历。

图2是本公开提供的指令集的格式示意图,如图2所示,卷积神经网络反向运算指令(compute指令)包括1个操作码和7个操作域,其中,操作码用于指示该卷积神经网络反向运算指令的功能,卷积神经网络反向运算单元通过识别该操作码可进行卷积神经网络反向运算,操作域用于指示该卷积神经网络反向运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,包括输入神经元数据的起始地址和数据长度,卷积核的起始地址和数据长度,输出梯度的起始地址和数据长度以及激活函数的类型。

指令集包含有不同功能的卷积神经网络compute指令以及config指令、io指令、nop指令、jump指令和move指令。在一种实施例中,compute指令包括:

卷积神经网络卷积层sigmoid导数指令。根据该指令,装置分别从高速暂存存储器的指定地址取出指定大小的输出神经元数据梯度和卷积核,根据激活函数类型,即sigmoid,在卷积神经网络反向训练运算部件中做卷积层的反向运算,然后将输出结果根据sigmoid导函数进行运算,写回到高速缓存存储器的指定地址。

卷积神经网络卷积层tanh导数指令。根据该指令,装置分别从高速暂存存储器的指定地址取出指定大小的输出神经元数据梯度和卷积核,根据激活函数类型,即tanh,在卷积神经网络反向训练运算部件中做卷积层的反向运算,然后将输出结果根据tanh导函数进行运算,写回到高速缓存存储器的指定地址。

卷积神经网络卷积层relu导数指令。根据该指令,装置分别从高速暂存存储器的指定地址取出指定大小的输出神经元数据梯度和卷积核,根据激活函数类型,即relu,在卷积神经网络反向训练运算部件中做卷积层的反向运算,然后将输出结果根据relu导函数进行运算,写回到高速缓存存储器的指定地址。

卷积神经网络group指令。根据该指令,装置分别从高速暂存存储器的指定地址取出指定大小的输出神经元数据梯度和卷积核,划分group之后,在卷积神经网络反向训练运算部件中做卷积操作,然后将输出结果做激活。

io指令实现从外部地址空间读入计算需要的输入神经元数据、输出神经元数据梯度、卷积核以及在计算完成后将数据存回至外部空间;

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

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

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

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。

图3是本公开实施例提供的卷积神经网络反向运算装置的结构示意图。如图3所示,该装置包括指令存储单元1、控制器单元2、数据访问单元3、互连模块4、主运算模块5和多个从运算模块6。指令存储单元1、控制器单元2、数据访问单元3、互连模块4、主运算模块5和从运算模块6均可以通过硬件电路(例如包括但不限于fpga、cgra、专用集成电路asic、模拟电路和忆阻器等)实现。

指令存储单元1通过数据访问单元3读入指令并缓存读入的指令。

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

数据访问单元3能够访存外部地址空间,根据计算过程中所需要的如数据规模等数值,直接向装置内部的各个缓存单元读写数据、数据梯度和卷积核数值,完成如上内容的加载和存储。

互连模块4构成主运算模块和所述多个从运算模块之间的数据通路,互连模块为以下任一种结构:树状结构、环状结构、网格状结构、分级互连、总线结构。

图4示意性示出了互连模块4的一种结构。互连模块4构成主运算模块5和多个从运算模块6之间的数据通路,并且是具有h树型的结构。h树是由多个节点构成的二叉树通路,每个节点将上游的数据同样地发给下游的两个节点,将下游的两个节点返回的数据进行相加合并,并返回给上游的节点。例如,在人工神经网络卷积层训练的反向开始计算阶段,主运算模块5内的神经元数据通过互连模块4发送给各个从运算模块6;当从运算模块6的计算过程完成后,当从运算模块的计算过程完成后,首先进行卷积核更新,然后每个从运算模块输出的神经元的值会在互连模块中逐级相加合并一个完整的由神经元组成的向量,作为中间结果向量。举例说明,假设装置中共有m个从运算模块,每个从运算模块输出n个元素,该n个元素经过互连模块对应位置元素相加,合并成长度为n的向量并返回给主运算模块,即从运算模块的第一个元素相加得到中间结果的第一个元素,从运算模块的第二个元素相加得到中间结果的第二个元素。

图5示出了根据本公开实施例的用于执行人工神经网络卷积层反向运算的装置中主运算模块5的结构的示例框图。如图5所示,主运算模块5包括第一运算单元51、第一数据依赖关系判断单元52和第一存储单元53。

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

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

第一存储单元53用于缓存主运算模块5在计算过程中用到的输入输出神经元数据,输入输出神经元数据梯度和卷积核数值。

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

第二运算单元61首先根据输入神经元数据和输出神经元数据梯度,更新卷积核。然后第二运算单元61接收控制器单元2发出的控制信号并进行点积运算。第二运算单元61包括向量乘单元611,以及累加单元612。其中,向量乘单元611用于实现神经元向量和权值向量的对位乘法,累加单元612用于实现对向量每一项累加到一起的操作。

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

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

第三存储单元64缓存该从运算模块6在计算过程中需要的卷积核数据。对于每一个从运算模块6,都只会存储部分输出神经元对应的部分卷积核。输出神经元按照从运算单元的个数n进行分段,每段的第n个输出神经元对应的权值存放在第n个从运算单元中。

从运算模块6实现人工神经网络卷积核层运算过程中点积运算的并行性。当对应单个卷积窗口内部的数据时,人工神经网络卷积层中,单个卷积核对应的过程为s=s(∑wx+b),并且每个人工神经网络卷积层包涵有多个卷积核,因此,可以依据卷积核,将整个卷积层的计算任务切分成多个并行的独立的任务,输出神经元数据与输入神经元数据是列向量,每个从运算模块6计算输出神经元数据中的部分和所对应的卷积核与输入神经元数据的点积,得到的每个输出向量都是最终结果的激活前的值,这些部分和在互连模块4中逐级两两合并得到最后的结果。所以计算过程变成了并行的计算部分和的过程和后面的合并的过程。每个从运算模块6计算出输出神经元值,所有的输出神经元值在互连模块4中拼成得到中间结果向量。每个从运算模块6只需要计算出中间结果向量y中与本模块对应的输出神经元值即可。互连模块4对所有从运算模块6输出的神经元值合并,得到最终的中间结果向量y。

图7是本公开实施例提供的卷积神经网络反向运算装置执行卷积神经网络指令的流程图,如图7所示,执行卷积神经网络指令的过程包括:

在步骤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根据控制信号里的参数配置单元内部寄存器的值,所述参数包括例如激活导函数需要的数据。

在步骤s6,控制器单元2接着从指令存储单元读入下一条compute指令,根据译出的控制信号,主运算模块5首先通过互连模块4将卷积窗口内的当前层的输入神经元数据和输出神经元数据梯度向量发给各从运算模块6,保存至从运算模块6的第二存储单元63,之后,再依据指令移动卷积窗口。

在步骤s7,根据compute指令译出的控制信号,从运算模块6的第二运算单元61从第三存储单元64读取卷积核向量,从第二存储单元63读取输入神经元数据和输出神经元数据梯度,完成输出神经元数据梯度和输入神经元数据的点积运算,并更新第三存储单元64。完成更新前卷积核和输出神经元数据梯度相乘得到中间结果,并将中间结果通过互连模块返回。

在步骤s8,在互连模块4中,各从运算模块6返回的中间结果被逐级进行相加并将结果返回主运算模块。

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

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

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

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

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

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

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