一种用于执行全连接层神经网络训练的装置和方法与流程

文档序号:12906532阅读:195来源:国知局
一种用于执行全连接层神经网络训练的装置和方法与流程

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



背景技术:

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

人工神经网络全连接层是一种常见的人工神经网络类型,就像大脑里的神经网络一样,人工神经网络全连接层由一些互相连接的节点组成,如图1所示,每个圆圈表示一个神经元,每个箭头表示两个神经元之间的连接又被称为权值,所有的输入与输出之间互相都有连接。

神经元的计算公式可以简单的描述成:其中,x表示所有和输出神经元相连接的输入神经元,w表示x和输出神经元之间对应的权值,b是一个常数。f(x)是一个非线性函数,通常称作激活函数,常用的函数如:等。

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

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



技术实现要素:

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

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

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

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

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

每个从运算模块计算输入梯度向量中相应的部分标量元素与权值矩阵的对应列的乘积,得到输出梯度向量部分和;

在从运算模块的计算过程完成后,互连模块逐级将各从运算模块的输出梯度向量部分和拼接得到本层的输出梯度向量;

主运算模块在每一层的计算过程中,利用本层的输出梯度向量完成后续计算。

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

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

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

附图说明

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

图1示出了人工神经网络全连接层的结构图。

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

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

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

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

图6示出了根据本发明实施例的人工神经网络全连接层反向训练过程的示例框图。

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

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

具体实施方式

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

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

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

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

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

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

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

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

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

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

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

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

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

第二运算单元61接收控制器单元2发出的控制信号并进行算数逻辑运算。

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

第二神经元存储单元63存储输入梯度向量数据中与该从运算模块6相对应的标量数据以及该从运算模块6计算得到的输出梯度向量部分和。

权值存储单元64存储该从运算模块6在计算过程中需要的权值数据。每一个从运算模块存储权值矩阵中与该从运算模块6所存储的标量数据相对应的列。

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

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

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

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

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

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

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

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

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

图6示出了根据本发明实施例的人工神经网络全连接层反向训练过程的示例框图。计算输出梯度向量的过程为out_gradient=w*in_gradient,其中权值矩阵w和输入梯度向量in_gradient的矩阵向量乘法可以划分为不相关的并行计算子任务,每个从运算模块6计算出输出梯度向量的部分和,所有的部分和在互连模块4中完成拼接得到最后的输出梯度向量。图6中上一层的输出梯度向量inputgradient[inputgradient0,inputgradient1,inputgradient2,inputgradient3]乘 以对应的激活函数导数[f’(out0),f’(out1),f’(out2),f’(out3)]得到本层的输入梯度向量in_gradient,再与权值矩阵w[w00,w10,w20,w30]相乘得到输出梯度向量outputgradient[outputgradient0,outputgradient1,outputgradient2,outputgradient3]。

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

计算权值更新梯度的过程如下。设x是第n层的输出神经元向量,主模块5将该输出神经元通过互连模块4传送给各个从运算模块。主运算模块5还将第n+1层的输出梯度向量in_gradient通过互连模块4传送到各个从运算模块6。每个从运算模块6将输出梯度向量in_gradient中与该从运算模块6相对应的标量数据与输出神经元向量x相乘,得到本从运算模块的第n层的原始权值更新梯度向量dw_original。在算出所有层的原始权值更新梯度向量之后,为了限制权值的梯度范围,主运算模块可以对原始权值更新梯度进行处理。首先设定一个正的常数clip_gradient;然后计算所有层的原始权值更新梯度的平方和sumsq_diff,然后对sumsq_diff进行开方得到l2norm_diff。如果l2norm_diff大于clip_gradient,则得到一个缩放因子scale_factor=clip_gradient/l2norm_diff。所有的原始权值更新梯度dw_original都分别乘以这个缩放因子seale_factor,得到权值更新梯度dw。

在得到scale_dw后,使用w、dw和上一次更新权值时使用的权值更 新梯度dw’根据指令设置的学习率α,动量m和权重衰减系数η更新权值w。一种典型的更新权值的方式是:w=η*w+α*(dw+m*dw’)。另一种典型的更新权值的方式是:w=w+α*dw。

根据本发明的实施例,每个从运算模块存储w、dw和dw’中与该从运算模块相对应的列向量。

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

在步骤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读取权值向量(即该从运算模块存储的权值矩阵的部分列),完成权值向量和输入梯度向量的向量乘标量运算,将输出向量部分和通过互连模块4返回;同时从运算模块6将输入梯度向量与输入神经元相乘,得到权值更新梯度存至权值更新梯度存储单元65。

在步骤s8,在互连模块4中,各从运算模块6返回的输出梯度部分和通过互连模块的拼接操作得到完整的输出梯度向量。

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

在步骤s10,控制器单元2接着从指令存储单元读入下一条compute指令,根据译出的控制信号,从运算模块6从权值存储单元64读取权值w,从权值更新梯度存储单元读取本次的权值更新梯度dw和上一次更新权值使用的权值更新梯度dw’,根据指令设置的学习率α,动量m和权重衰减系数η更新权值w。

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

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

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

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

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

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

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