用于执行人工神经网络反向训练的装置和方法与流程

文档序号:11655059阅读:255来源:国知局
用于执行人工神经网络反向训练的装置和方法与流程

本发明总体上涉及人工神经网络,具体地涉及一种用于执行人工神经网络反向训练的装置和方法。



背景技术:

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

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

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



技术实现要素:

本发明的一个方面提供了一种用于执行人工神经网络反向训练的装置,包括指令缓存单元、控制器单元、直接内存访问单元、h树模块、主运算模块、以及多个从运算模块,其中:指令缓存单元用于缓存指令;控制器单元用于从指令缓存单元读取指令,并将该指令译码成控制h树模块、主运算模块、以及从运算模块行为的微指令;直接内存访问单元用于从内存向主运算模块和各从运算模块的相应数据缓存单元中写数据或从所述数据缓存单元向内存读数据;h树模块用于,在每层神经网络反向训练开始计算的阶段,主运算模块通过h树模块向所有的从运算模块传输本层的输入梯度向量,在从计算模块的计算过程完成后,h树模块逐级将各从计算模块的输出梯度向量部分和两两相加得到本层的输出梯度向量;主运算模块用于在每一层的计算过程中,利用本层的输出梯度向量完成后续计算;以及每个从运算模块利用相同的输入梯度向量和各自的权值数据,并行地计算出相应的输出梯度向量部分和。

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

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

附图说明

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

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

图2示意性示出了根据本发明实施例的用于执行人工神经网络反向训练的装置中h树模块的结构。

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

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

图5示出了根据本发明实施例的神经网络反向训练过程的示例框图。

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

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

具体实施方式

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

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

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

根据本发明实施例的多层人工神经网络的反向训练,包括两层或者两层以上的多个神经元。对于每一层来说,首先对输入梯度向量进行加权求和计算出本层的输出梯度向量。该输出梯度向量乘以下一层在正向运算时的激活函数的导数值可以得到下一层的输入梯度向量。将输入梯度向量与正向运算时的输入神经元对位相乘得到本层权值的梯度,然后可以根据所得到的本层权值的梯度来更新本层的权值。

图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的计算过程完成后,每个从运算模块6输出的输出梯度向量部分和会在h树模块4中逐级两两相加,即对所有输出梯度向量部分和求和,作为最终的输出梯度向量。

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

神经元缓存单元53用于缓存主运算模块5在计算过程中用到的输入数据和输出数据。运算单元51完成主运算模块的各种运算功能。数 据依赖关系判断单元52是运算单元51读写神经元缓存单元53的端口,同时能够保证对神经元缓存单元53中数据的读写不存在一致性冲突。具体地,数据依赖关系判断单元52判断尚未执行的微指令与正在执行过程中的微指令的数据之间是否存在依赖关系,如果不存在,允许该条微指令立即发射,否则需要等到该条微指令所依赖的所有微指令全部执行完成后该条微指令才允许被发射。例如,所有发往数据依赖关系单元52的微指令都会被存入数据依赖关系单元52内部的指令队列里,在该队列中,读指令的读取数据的范围如果与队列位置靠前的写指令写数据的范围发生冲突,则该指令必须等到所依赖的写指令被执行后才能够执行。同时,数据依赖关系判断单元52也负责从神经元缓存单元53读取输入梯度向量通过h树模块4发送给从运算模块6,而从运算模块6的输出数据通过h树模块4直接发送给运算单元51。控制器单元2输出的指令发送给运算单元51和依赖关系判断单元52,来控制其行为。

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

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

数据依赖关系判断单元62负责计算过程中对缓存单元的读写操作。数据依赖关系判断单元62保证对缓存单元的读写不存在一致性冲突。具体地,数据依赖关系判断单元62判断尚未执行的微指令与正在执行过程中的微指令的数据之间是否存在依赖关系,如果不存在,允许该条微指令立即发射,否则需要等到该条微指令所依赖的所有微指令全部执行完成后该条微指令才允许被发射。例如,所有发往数据依赖关系单元62的微指令都会被存入数据依赖关系单元62内部的指令队列里,在该队列中,读指令的读取数据的范围如果与队列位置靠前的写指令写数据的范围发生冲突,则该指令必须等到所依赖的写指令 被执行后才能够执行。

神经元缓存单元63缓存输入梯度向量数据以及该从运算模块6计算得到的输出梯度向量部分和。

权值缓存单元64缓存该从运算模块6在计算过程中需要的权值向量。对于每一个从运算模块,都只会存储权值矩阵中与该从运算模块6相对应的列。

权值梯度缓存单元65缓存相应从运算模块在更新权值过程中需要的权值梯度数据。每一个从运算模块6存储的权值梯度数据与其存储的权值向量相对应。

从运算模块6实现每层人工神经网络反向训练计算输出梯度向量的过程中可以并行的前半部分以及权值的更新。以人工神经网络全连接层(mlp)为例,过程为out_gradient=w*in_gradient,其中权值矩阵w和输入梯度向量in_gradient的乘法可以划分为不相关的并行计算子任务,out_gradient与in_gradient是列向量,每个从运算模块只计算in_gradient中相应的部分标量元素与权值矩阵w对应的列的乘积,得到的每个输出向量都是最终结果的一个待累加的部分和,这些部分和在h树中逐级两两相加得到最后的结果。所以计算过程变成了并行的计算部分和的过程和后面的累加的过程。每个从运算模块6计算出输出梯度向量的部分和,所有的部分和在h树模块4中完成求和运算得到最后的输出梯度向量。每个从运算模块6同时将输入梯度向量和正向运算时每层的输出值相乘,计算出权值的梯度,以更新本从运算模块6存储的权值。正向运算和反向训练是神经网络算法的两个主要过程,神经网络要训练(更新)网络中的权值,首先需要计算输入向量在当前权值构成的网络中的正向输出,这是正向过程,然后根据输出值与输入向量本身的标注值之间的差值,反向逐层训练(更新)每层的权值。在正向计算过程中会保存每一层的输出向量以及激活函数的导数值,这些数据是反向训练过程所需要的,所以在反向训练开始时,这些数据已经保证存在。正向运算中每层的输出值是反向运算开始时已有的数据,可以通过直接内存访存单元缓存在主运算模块中并通过 h树发送给从运算模块。主运算模块5基于输出梯度向量进行后续计算,例如将输出梯度向量乘以正向运算时的激活函数的导数得到下一层的输入梯度值。正向运算时的激活函数的导数是在反向运算开始时已有的数据,可以通过直接内存访存单元缓存在主运算模块中。

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

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

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

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

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

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

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

图5示出了根据本发明实施例的神经网络反向训练过程的示例框图。计算输出梯度向量的过程为out_gradient=w*in_gradient,其中权值矩阵w和输入梯度向量in_gradient的矩阵向量乘法可以划分为不相关的并行计算子任务,每个从运算模块6计算出输出梯度向量的部分和,所有的部分和在h树模块4中完成求和运算得到最后的输出梯度向量。图5中上一层的输出梯度向量inputgradient乘以对应的激活函数导数得到本层的输入数据,再与权值矩阵相乘得到输出梯度向量。计算权值更新梯度的过程为dw=x*in_gradient,其中每个从运算模块6计算本模块对应部分的权值的更新梯度。从运算模块6将输入梯 度和正向运算时的输入神经元相乘计算出权值更新梯度dw,然后使用w、dw和上一次更新权值时使用的权值更新梯度dw’根据指令设置的学习率更新权值w。

参考图5所示,inputgradient(图5中的[inputgradient0,…,inputgradient3])是第n+1层的输出梯度向量,该向量首先要与正向运算过程中第n层的导数值(图5中的[f’(out0),…,f’(out3)])相乘,得到第n层的输入梯度向量,该过程在主运算模块5中完成,由h树模块4发往从运算模块6,暂存在从运算模块6的神经元缓存单元63中。然后,输入梯度向量与权值矩阵相乘得到第n层的输出梯度向量。在这个过程中,第i个从运算模块计算输入梯度向量中第i个标量和权值矩阵中列向量[w_io,…,w_in]的乘积,得到的输出向量在h树模块4中逐级两两相加得到最后的输出梯度向量outputgradient(图5中的[outputgradient0,…,outputgradient3])。

同时,从运算模块6还需要更新本模块中存储的权值,计算权值更新梯度的过程为dw_ij=x_j*in_gradient_i,其中x_j是正向运算时第n层的输入(即第n-1层的输出)向量的第j个元素,in_gradient_i是反向运算第n层的输入梯度向量(即图5中inputgradient与导数f’的乘积)的第i个元素。正向运算时第n层的输入是在反向训练开始时就存在的数据,通过h树模块4送往从运算模块6并暂存在神经元缓存单元63中。则,在从运算模块6中,在完成输出梯度向量部分和的计算后,将输入梯度向量第i个标量和正向运算第n层的输入向量相乘,得到更新权值的梯度向量dw并据此更新权值。

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

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

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

在步骤s3,控制器单元2接着从指令缓存单元读入下一条io指令,根据译出的微指令,直接内存访问单元3从外部地址空间读取主运算模块5需要的所有数据至主运算模块5的神经元缓存单元53,所述数据包括之前正向运算时的输入神经元和激活函数导数值以及输入梯度向量。

在步骤s4,控制器单元2接着从指令缓存单元读入下一条io指令,根据译出的微指令,直接内存访问单元3从外部地址空间读取从运算模块6需要的所有权值数据和权值梯度数据,并分别存储到相应的从运算模块6的权值缓存单元64和权值梯度缓存单元65。

在步骤s5,控制器单元2接着从指令缓存单元读入下一条config指令,运算单元根据译出的微指令里的参数配置运算单元内部寄存器的值,包括该层神经网络计算需要的各种常数,本层计算的精度设置、更新权值时的学习率等。

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

在步骤s7,根据compute指令译出的微指令,从运算模块6的运算单元61从权值缓存单元64读取权值向量(即该从运算模块存储的权值矩阵的部分列),完成权值向量和输入梯度向量的向量乘标量运算,将输出向量部分和通过h树返回;同时从运算模块6将输入梯度向量与输入神经元相乘,得到权值梯度存至权值梯度缓存单元65。

在步骤s8,在h树模块4中,各从运算模块6返回的输出梯度部分和被逐级两两相加得到完整的输出梯度向量。

在步骤s9,主运算模块5得到h树模块4的返回值,根据compute指令译出的微指令,从神经元缓存单元53读取正向运算时的激活函数导数值,将导数值乘以返回的输出向量,得到下一层反向训练的输入梯度向量,将其写回至神经元缓存单元53。

在步骤s10,控制器单元2接着从指令缓存单元读入下一条compute指令,根据译出的微指令,从运算模块6从权值缓存单元64读取权值w,从权值梯度缓存单元读取本次的权值梯度dw和上一次更新权值使用的权值梯度dw’,更新权值w。

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

对于多层人工神经网络,其实现过程与单层神经网络类似,当上一层人工神经网络执行完毕后,下一层的运算指令会将主运算模块中计算出的输出梯度向量作为下一层训练的输入梯度向量进行如上的计算过程,指令中的权值地址和权值梯度地址也会变更至本层对应的地址。

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

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

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

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

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