支持离散数据表示的人工神经网络反向训练装置和方法与流程

文档序号:12306162阅读:269来源:国知局
支持离散数据表示的人工神经网络反向训练装置和方法与流程

本发明总体上涉及人工神经网络,具体地涉及一种用于执行人工神经网络反向训练的装置和方法。本发明中的数据支持离散形式表示,并通过离散数据的位操作代替了连续数据的乘法等操作。



背景技术:

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

一种支持多层人工神经网络反向训练的已知方法是使用通用处理器。该方法通过使用通用寄存器堆和通用功能部件执行通用指令来支持上述算法。另一种支持多层人工神经网络反向训练的已知方法是使用图形处理器(gpu)。该方法通过使用通用寄存器堆和通用流处理单元执行通用simd指令来支持上述算法。

这两种装置在数据存储和运算上都是使用的连续数据。连续数据的存储需要较多的资源,例如一个32位的浮点数据,就需要32个比特位来存储该数据。在连续数据的运算上,所需要的加法器、乘法器等功能部件的实现也较为复杂。

离散数据表示指通过特定的数字来代替不连续的真实数据的存储方式。例如,可以通过0、1、2、3四个数字分别代表真实数字-1、-1/8、1/8、1四个数字。通过这种类似于索引的表示方式,可以用形式上连续的数字代替不连续离散化的真实数据。目前的多层人工神经网络在数据表示上的已知方法是用浮点数或者定点数这样的连续数据表示。因为多层神经网络权值的精度较高和数量较大,连续数据的表示方式带来更大的存储和功耗开销。而通过离散数据表示的方式,可以通过 数据按位的异或、移位等运算代替连续数据的乘法运算。从而大大减少乘法器部件的数量。



技术实现要素:

本发明的一个方面提供了一种支持离散数据表示的用于执行人工神经网络反向训练的装置,包括指令缓存单元、控制器单元、数据访问单元、互联模块、主运算模块、多个从运算模块,其中:

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

控制器单元用于从指令缓存单元读取指令,并将该指令译码成控制互联模块、主运算模块、以及从运算模块行为的微指令;

数据访问单元用于从内存向主运算模块和各从运算模块的相应数据缓存单元中写离散表示或连续表示的数据或从所述数据缓存单元向内存读离散表示或连续表示的数据;

在每层神经网络反向训练开始计算的阶段,主运算模块通过互联模块向所有的从运算模块传输本层的输入梯度向量,在从运算模块的计算过程完成后,互联模块逐级将各从运算模块的输出梯度向量部分和两两相加得到本层的输出梯度向量;

主运算模块用于在每一层的计算过程中,利用本层的输出梯度向量完成后续计算,当输入数据是离散数据与连续数据的混合数据时,从运算模块针对不同离散数据采取预先设置的相应计算方式;以及

每个从运算模块利用相同的输入梯度向量和各自的离散或连续的权值数据,并行地计算出相应的输出梯度向量部分和,当输入数据是离散数据与连续数据的混合数据时,从运算模块针对不同离散数据采取预先设置的相应计算方式。

可选地,离散数据表示指用特定的离散数字代替真实的连续数据的表示方式。

可选地,多个从运算模块利用相同的输入梯度向量并行地计算出各自权值的梯度并使用计算得到的各自权值的梯度来更新各自的权值数据。

可选地,主运算模块将每一层的输出梯度向量与下一层的激活函数求导值对位相乘,作为下一层的输入梯度向量。

可选地,互联模块构成主运算模块和所述多个从运算模块之间的连续或离散化的数据通路,可以实现成不同的互联拓扑。在一种实施方式中,互联模块具有h树型的结构,h树是由多个节点构成的二叉树通路,每个节点将上游的数据同样地发给下游的两个节点,将下游的两个节点返回的连续或离散化的数据相加,并返回给上游的节点。

可选地,主运算模块包括运算单元、数据依赖关系判断单元和支持离散数据表示的神经元缓存单元,其中:

支持离散数据表示的神经元缓存单元用于缓存主运算模块在计算过程中用到的离散或连续的输入数据和输出数据;

运算单元完成主运算模块的各种运算功能,当输入数据是离散数据与连续数据的混合数据时,针对不同离散数据采取预先设置的相应计算方式;

数据依赖关系判断单元是运算单元读写神经元缓存单元的端口,保证对神经元缓存单元中离散或连续的数据读写不存在一致性冲突,并且负责从神经元缓存单元读取输入梯度向量通过互联模块发送给从运算模块;以及

来自互联模块的输出梯度向量被发送到运算单元。

可选地,每个从运算模块包括运算单元、数据依赖关系判定单元、支持离散数据表示的神经元缓存单元、支持离散数据表示的权值缓存单元和支持离散数据表示的权值梯度缓存单元,其中:

运算单元接收控制器单元发出的微指令并进行算数逻辑运算,当输入数据是离散数据与连续数据的混合数据时,针对不同离散数据采取预先设置的相应计算方式;

数据依赖关系判断单元负责计算过程中对支持离散数据表示的神经元缓存单元、支持离散数据表示的权值缓存单元和支持离散数据表示的权值梯度缓存单元的读写操作,保证对支持离散数据表示的神经元缓存单元、支持离散数据表示的权值缓存单元和支持离散数据表示 的权值梯度缓存单元的读写不存在一致性冲突;

支持离散数据表示的神经元缓存单元缓存输入支持离散表示的梯度向量数据中与该从运算模块相对应的标量数据以及该从运算模块计算得到的输出梯度向量部分和;

支持离散数据表示的权值缓存单元缓存该从运算模块在计算过程中需要的离散或连续表示的权值数据,对于每一个从运算模块,都只存储权值矩阵中与该从运算模块所存储的标量数据相对应的列;以及

支持离散数据表示的权值梯度缓存单元缓存相应从运算模块在更新权值过程中需要的权值梯度数据,每个从运算模块存储的权值梯度数据与其存储的离散或连续表示的权值数据相对应。

可选地,通过以下方式保证读写不存在一致性冲突:判断尚未执行的微指令与正在执行过程中的微指令的数据之间是否存在依赖关系,如果不存在,允许该条微指令立即发射,否则需要等到该条微指令所依赖的所有微指令全部执行完成后该条微指令才允许被发射。

可选地,运算单元包括运算决定单元和混合数据运算单元,当输入数据是混合数据时,运算决定单元根据其中的离散数据决定应对该混合数据执行何种操作,然后,混合数据运算单元根据运算决定单元的决定结果,执行相应操作。

可选地,运算单元还包括离散数据运算单元和连续数据运算单元中的至少一个,以及数据类型判断单元,当输入数据全是离散数据时,由离散数据运算单元根据输入的离散数据通过查表执行相应操作,当输入数据全是连续数据时,由连续数据运算单元执行相应操作。

可选地,该装置还包括连续离散转换单元,连续离散转换单元包括预处理模块、距离计算模块、和判断模块,假设使用m(m=2m,m≥1)个离散数据,令这些离散数据分别对应于预定区间[-zone,zone]内的m个数值,其中:

预处理模块对于输入的连续数据x使用clip(-zone,zone)运算进行预处理,得到区间[-zone,zone]内的预处理数据y,其中,如果x≤-zone则y=-zone,如果x≥zone则y=zone,如果-zone<x<zone,则预处 理数据y=x;

距离计算模块计算预处理数据y与上述各数值之间的距离;以及

判断模块82基于该距离计算并输出离散数据。

可选地,预定区间[-zone,zone]是[-1,1]或[-2,2];并且/或者m个数值的绝对值是2的幂的倒数;并且/或者判断模块执行:并且/或者输出与该预处理数据y距离最近的数值所对应的离散数据,如果有两个数值与该预处理数据距离相等,则输出二者中任一个所对应的离散数据;并且/或者计算预处理数据y分别到距离最近的两个数值中任一个的归一化概率,将这两个数值中任一个所对应的归一化概率与随机数生成模块生成的(0,1)之间的随机数z比较,如果该z小于该概率则输出该离散数据,否则输出另一离散数据。

本发明的另一个方面提供了一种使用上述装置执行单层人工神经网络反向训练的方法。通过提供的指令集,控制器控制读入运算时的输入神经元和激活函数导数值以及输入梯度,之后读入权值数据和权值梯度数据,之后读入神经网络训练精度、学习率等常数。这些数据可以采用离散数据表示或不采用。之后主从运算模块以及互联模块完成权值更新操作。特别对于离散数据表示的数据,在进行乘法操作时,根据离散数据的数值,通过对相关数据的位操作代替了乘法运算。例如权值数据用1比特的离散数据表示,0代表+1,1代表-1,通过对与权值相乘数据的符号位异或,实现了对权值的乘法运算。

本发明的另一个方面提供了一种使用上述装置支持人工神经网络批归一化运算(batchnormalization)的方法。通过提供的指令集,控制器控制数据访问单元读入输入的数据,之后控制主从运算模块根据batch大小求出各自位置的均值以及方差或使用设定好的均值方差。之后控制器控制对应位置的输入数据减去均值除以方差。最后控制器控制用处理后的数据与学习参数相乘后加上另一个学习参数。

本发明的另一方面提供了一种使用上述装置执行多层人工神经网络反向训练的方法。其实现过程与单层神经网络类似,当上一层人工神经网络执行完毕后,下一层的运算指令会将主运算模块中计算出的 输出梯度向量作为下一层训练的输入梯度向量进行如上的计算过程,指令中的权值地址和权值梯度地址也会变更至本层对应的地址。

附图说明

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

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

图2示意性示出了根据本发明实施例的用于执行支持离散数据表示的人工神经网络反向训练的装置中h树模块(互联模块的一种实施方式)的结构。

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

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

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

图6示出了根据本发明实施例的离散数据表示的神经网络反向训练过程的示例框图

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

图8示出了针对离散数据的运算单元示例结构。

图9示出了连续数据和离散数据转化的连续离散转化模块的示例结构。

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

具体实施方式

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

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

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

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

对于离散数据表示的输入神经元向量或离散数据表示的权值向量的点积运算,本装置支持将点积运算转换为数据的移位、取非、异或等位运算。对于数据的表示方式,本装置支持数据离散表示或连续表示,用户可以自定义哪一个层的哪些数据采用离散表示形式或连续表示,并且可以根据具体需要自定义离散数据的位数,从而代替表示的连续数据的个数,例如设定为1比特、2比特、3比特等位数的离散数据,分别可以表示2个、4个、8个连续数据。

图1示出了根据本发明实施例的用于执行支持离散数据表示的人工神经网络反向训练的装置的整体结构的示例框图。如图1所示,该装置包括指令缓存单元1、控制器单元2、数据访问单元3、互联模块 4、主运算模块5、多个从运算模块6。根据本发明的实施例,该装置还可以包括连续离散转换模块7。指令缓存单元1、控制器单元2、数据访问单元3、h树模块4、主运算模块5和从运算模块6、连续离散转换模块7均可以通过硬件电路(包括但不限于fpga、cgra、专用集成电路asic、模拟电路和忆阻器等)实现。本装置支持将连续数据转换为离散数据以及离散数据的存储和运算。

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

控制器单元2从指令缓存单元1中读取指令,将指令译成控制其他模块行为的微指令并发送给其他模块如数据访问单元3、主运算模块5和从运算模块6等。

数据访问单元3能够访存外部地址空间(例如内存或其他存储设备),直接向装置内部的各个缓存单元读写数据,完成数据的加载和存储。该数据是离散表示的或非离散表示的。该单元用来设计可以读取离散表示的数据

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

图2示意性示出了互联模块4的一种实施方式:h树结构。h树模块4构成主运算模块5和多个从运算模块6之间的数据通路,并具有h树型的结构。h树是由多个节点构成的二叉树通路,每个节点将上游的数据同样地发给下游的两个节点,将下游的两个节点返回的数据进行合并,并返回给上游的节点。例如,在神经网络反向运算过程中,下游两个节点返回的向量会在当前节点相加成一个向量并返回给上游节点。在每层人工神经网络开始计算的阶段,主运算模块5内的输入梯度通过h树模块4发送给各个从运算模块6;当从运算模块6的计算过程完成后,每个从运算模块6输出的输出梯度向量部分和会在h树模块4中逐级两两相加,即对所有输出梯度向量部分和求和,作为最终的输出梯度向量。

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

支持离散数据表示的神经元缓存单元53用于缓存主运算模块5在计算过程中用到的输入数据和输出数据。

运算单元51完成主运算模块的各种运算功能。对于运算因子全是离散数据的情况,可以通过查表实现离散数据与离散数据的加减乘除运算。例如2位的离散数据,可以表示4个连续数据值。对于4个连续数据共有4*4=16种组合。对于每种加减乘除运算的操作,可以制作并维护该4*4的索引表,通过索引表找到对应的计算值。4种运算共需要4张4*4的索引表。

对于运算因子包含离散数据和连续数据的情况,可以针对不同离散数据,为加、减、乘、除运算预先设定相应的位操作。例如,可以采取按位异或后乘2的相应位次幂之后累加求和的方式代替离散数据与连续数据的点积运算。例如,对于乘法操作,乘法因子数据如果存在离散表示的,可以通过离散数据索引相应的操作(例如,对相应数据的按位异或、取非、移位等操作)代替和该离散数据表示的连续数据的乘法操作,从而减少了乘法器部件数量。例如对于连续数据与离散数据的乘法操作,-1/2乘以16。传统的乘法器部件会将-1/2与16直接做乘法。在运算单元51中,由于离散数据的可能性较少,可以通过查找索引这样一种开关判断的方法代替了运算单元的功能。例如,可以规定-1/2的离散数据表示方法为01。如果一个运算因子是-1/2,则运算单元51接收到的离散数据为01。运算单元51便采用离散数据01对应的操作。通过对于16的8位定点数表示00010000符号位取反,向右移1位得到10001000,十进制表示为-8。对于除法操作,16除以-2。其中16是连续数据,-2是离散数据。如果规定离散数据-2二进制表示为10。运算单元便采用离散数据10对应的除法操作。通过对16的8位定点数表示0001000右移1位之后符号位取反得到10001000,十进制表示为-8得到结果。加法和减法操作与上述过程类似。根据离 散数据的二进制作为一个索引,索引到按位左移、右移、异或等操作。经过该操作后实现了与离散数据表示的真实数据的相加或者相减操作。

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

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

运算单元61接收控制器单元2发出的微指令并进行算数逻辑运算。对于运算因子全是离散数据的情况,可以通过查表实现离散数据与离散数据的加减乘除运算。例如2位的离散数据,可以表示4个连续数据值。对于4个连续数据共有4*4=16种组合。对于每种加减乘除运算的操作,可以制作并维护该4*4的索引表,通过索引表找到对应的计算值。4种运算共需要4张4*4的索引表。

对于运算因子包含离散数据和连续数据的情况,可以针对不同离 散数据,为加、减、乘、除运算预先设定相应的位操作。例如,可以采取按位异或后乘2的相应位次幂之后累加求和的方式代替离散数据与连续数据的点积运算。例如,对于乘法操作,乘法因子数据如果存在离散表示的,可以通过离散数据索引相应的操作(例如,对相应数据的按位异或、取非、移位等操作)代替和该离散数据表示的连续数据的乘法操作,从而减少了乘法器部件数量。例如对于连续数据与离散数据的乘法操作,-1/2乘以16。传统的乘法器部件会将-1/2与16直接做乘法。在运算单元51中,由于离散数据的可能性较少,可以通过查找索引这样一种开关判断的方法代替了运算单元的功能。例如,可以规定-1/2的离散数据表示方法为01。如果一个运算因子是-1/2,则运算单元51接收到的离散数据为01。运算单元51便采用离散数据01对应的操作。通过对于16的8位定点数表示00010000符号位取反,向右移1位得到10001000,十进制表示为-8。对于除法操作,16除以-2。其中16是连续数据,-2是离散数据。如果规定离散数据-2二进制表示为10。运算单元便采用离散数据10对应的除法操作。通过对16的8位定点数表示0001000右移1位之后符号位取反得到10001000,十进制表示为-8得到结果。加法和减法操作与上述过程类似。根据离散数据的二进制作为一个索引,索引到按位左移、右移、异或等操作。经过该操作后实现了与离散数据表示的真实数据的相加或者相减操作。

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

支持离散数据表示的神经元缓存单元63缓存输入梯度向量数据中与该从运算模块6相对应的标量数据以及该从运算模块6计算得到的输出梯度向量部分和。

支持离散数据表示的权值缓存单元64缓存该从运算模块6在计算过程中需要的权值数据。该数据根据用户定义可以是离散数据或离散数据。对于每一个从运算模块,都只会存储权值矩阵中与该从运算模块6所存储的标量数据相对应的列。

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

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

图8示出了运算单元的结构框图,其可用于主运算模块中的运算单元51或从运算模块中的运算单元61。运算过程中输入数据可以是离散数据或连续数据。数据类型判断单元71判断输入数据全是连续数据、全是离散数据或是既包含连续数据又包含离散数据的混合数据。当输入数据全是连续数据时,连续数据运算单元72执行相应运算。

当输入数据全是离散数据时,离散数据运算单元73执行相应运算。对于运算因子全是离散数据的情况,可以通过查表实现离散数据与离散数据的加减乘除运算。例如2位的离散数据,可以表示4个连续数据值。对于4个连续数据共有4*4=16种组合。对于每种加减乘除运算的操作,我们制作并维护该4*4的索引表,通过索引表找到对应的计算值。4种运算共需要4张4*4的索引表。

当输入数据是混合数据时,运算决定单元74根据其中的离散数据决定应对其执行何种操作。可以针对不同的离散数据分别预先设置相应操作。然后,混合数据运算单元75根据运算决定单元74的决定结果,执行相应操作。对于运算因子包含离散数据和连续数据的情况,可以针对不同离散数据,为加、减、乘、除运算预先设定相应的位操作。例如,可以采取按位异或后乘2的相应位次幂之后累加求和的方式代替离散数据与连续数据的点积运算。例如,对于乘法操作,乘法因子数据如果存在离散表示的,可以通过离散数据索引相应的操作(例如,对相应数据的按位异或、取非、移位等操作)代替和该离散数据表示的连续数据的乘法操作,从而减少了乘法器部件数量。例如对于连续数据与离散数据的乘法操作,-1/2乘以16。传统的乘法器部件会 将-1/2与16直接做乘法。在运算单元51中,由于离散数据的可能性较少,可以通过查找索引这样一种开关判断的方法代替了运算单元的功能。例如,可以规定-1/2的离散数据表示方法为01。如果一个运算因子是-1/2,则运算单元51接收到的离散数据为01。运算单元51便采用离散数据01对应的操作。通过对于16的8位定点数表示00010000符号位取反,向右移1位得到10001000,十进制表示为-8。对于除法操作,16除以-2。其中16是连续数据,-2是离散数据。如果规定离散数据-2二进制表示为10。运算单元便采用离散数据10对应的除法操作。通过对16的8位定点数表示0001000右移1位之后符号位取反得到10001000,十进制表示为-8得到结果。加法和减法操作与上述过程类似。根据离散数据的二进制作为一个索引,索引到按位左移、右移、异或等操作。经过该操作后实现了与离散数据表示的真实数据的相加或者相减操作。

图9示出了连续离散转换模块7的结构示意图。用户可以定义采用该模块将连续数据转换为离散数据或不采用。将连续数据输入连续离散转换模块7,输出离散数据。该连续离散转换模块7包括预处理模块81、距离计算模块82、和判断模块82。假设使用m(m=2m,m≥1)个离散数据,令这些离散数据分别对应于预定区间内的m个数值。根据本发明的实施例,该区间可以是关于零对称的区间[-zone,zone],例如[-1,1]或[-2,2]。根据本发明的实施例,该m个数值的绝对值可以是2的幂的倒数。以预处理模块81对于输入的连续数据x使用clip(-zone,zone)运算进行预处理,得到区间[-zone,zone]内的预处理数据y。其中,如果x≤-zone则y=-zone,如果x≥zone则y=zone,如果-zone<x<zone,则预处理数据y=x。距离计算模块82计算预处理数据y与上述各数值之间的距离。判断模块82基于该距离计算并输出离散数据。例如,判断模块82可以输出与该预处理数据距离最近的数值所对应的离散数据。如果有两个数值与该预处理数据y距离相等,则输出二者中任一个所对应的离散数据。或者,判断模块82可以计算预处理数据y分别到距离最近的两个数值中任一个的归一化概率,将 这两个数值中任一个所对应的归一化概率与随机数生成模块82生成的(0,1)之间的随机数z比较,如果该z小于该概率则输出该离散数据,否则输出另一离散数据。例如,用户定义产生二元离散数据,则m=2。预处理模块81对于输入的任意连续数据x执行运算clip(-1,1)得到预处理数据y。然后,距离计算模块82计算预处理数据y与数值-1、1之间的距离d1、d2,假设d1>d2。判断模块83可以输出d1对应的离散数据-1。或者,判断模块83可以计算y分别到距离最近的两个数值(由于本例中仅有两个数值,所以距离最近的两个数值即为-1和1)中任一个的归一化概率,其中y到-1的概率为p1=d2/(d1+d2),y到-2的概率为p2=d1/(d1+d2),将归一化概率p1与随机数生成模块82生成的(0,1)之间的随机数z比较,如果z小于概率p1,则输出离散数据-1,否则输出另一离散数据1。或者,将归一化概率p2与随机数z比较,如果z小于概率p2,则输出离散数据1,否则输出另一离散数据-1。根据本发明的实施例,判断模块以二进制数据的形式输出离散数据,离散数据与二进制数据之间的关系可预先设定,例如通过查找表设定。例如,可以用0代表1,1代表-1。将得到的离散数据存储回内存中。等待主从运算模块中的运算单元使用,产生相应的操作。

反向训练过程中的权值数据可以用离散数据表示的,上述过程中对于权值的乘法运算根据离散数据的存储方式采用异或、取非、位移等方式代替。例如对于1比特的离散数据表示,0代表+1,1代表-1,通过对与权值相乘数据的符号位异或,实现了对权值的乘法运算。

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

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

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

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

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

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

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

图5示出了根据本发明实施例的神经网络反向训练过程的示例框图。计算输出梯度向量的过程为out_gradient=w*in_gradient,其中权值矩阵w和输入梯度向量in_gradient的矩阵向量乘法可以划分为不相关的并行计算子任务,每个从运算模块6计算出输出梯度向量的部分和,所有的部分和在互联模块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中完成,由互联模块4发往从运算模块6,暂存在从运算模块6的神经元缓存单元63中。然后,输入梯度向量与权值矩阵相乘得到第n层的输出梯度向量。在这个过程中,第i个从运算模块计算输入梯度向量中第i个标量和权值矩阵中列向量[w_i0,...,w_in]的乘积,得到的输出向量在互联模块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层的输入是在反向训练开始时就存在的数据,通过互联模块4送往从运算模块6并暂存在神经元缓存单元63中。则,在从运算模块6中,在完成输出梯度向量部分和的计算后,将输入梯度向量第i个标量和正向运算第n层的输入向量相乘,得到更新权值的梯度向量dw并据此更新权值。

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

步骤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]发送给所有的从运算模块,暂存在支持离散数据表示的神经元缓存单元中。对于第i个从运算模块,根据离散数据的二进制采取相应的操作计算相应相应的权值向量[w_i0,…,w_in]与梯度向量的点积。得到的结果与权值和激活函数的导数相乘,得到最后的输出梯度向量[out0,out1,out2,…,outn]。用中间结果的权值梯度向量更新权值、偏置等数据。

在步骤s1.5中,各个模块将操作结果写回到相应缓存中。以执行离散数据表示的神经网络反向的运算为例,主运算模块得到的输出梯度向量被写回到存储单元。更新后的权值、偏置等数据也被写回到存储单元。

图7是示出根据一个实施例的单层人工神经网络反向训练的另一种更详细的实施方法。该流程图描述利用本发明的装置和指令集实现图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通过互联模块4将输入梯度向量和正向运算时的输入神经元发给各从运算模块6,所述输入梯度向量和正向运算时的输入神经元存至从运算模块6的神经元缓存单元63。

在步骤s7,根据compute指令译出的微指令,从运算模块6的运算单元61从权值缓存单元64读取权值向量(即该从运算模块存储的权值矩阵的部分列),完成权值向量和输入梯度向量的向量乘标量运算,将输出向量部分和通过互联返回;同时从运算模块6将输入梯度向量与输入神经元相乘,得到权值梯度存至权值梯度缓存单元65。对于离散数据表示的,自定义采用异或等位运算代替点积运算或不采用。例如对于1比特的离散数据表示,0代表+1,1代表-1,通过对与权值相乘数据的符号位异或,实现了对权值的乘法运算。

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

在步骤s9,主运算模块5得到互联模块4的返回值,根据compute指令译出的微指令,从神经元缓存单元53读取正向运算时的激活函数导数值,将导数值乘以返回的输出向量,得到下一层反向训练的输入梯度向量,将其写回至神经元缓存单元53。该过程的数据可以自定义采用离散化表示数据或不采用。

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

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

对于人工神经网络批归一化运算(batchnormalization)运算步骤与上述过程相仿。通过提供的指令集,控制器完成以下过程。控制器控制数据访问单元3读入输入的梯度数据,之后控制主从运算模块根据batch大小求出各自位置的梯度均值以及梯度方差或使用设定好的均值方差。之后控制器控制对应位置的梯度数据减去梯度均值除以梯度方差。最后控制器控制用处理后的数据与学习参数相乘后加上另一个学习参数。

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

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

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

通过采用离散数据表示的方法,相较于浮点数、定点数等连续数据表示方法,大大较少了装置的存储能耗等开销、以及乘法器部件数量。可以在有限的面积上优化结构布局,提高运算速度或性能能耗比等指标。

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

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

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

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