CN109993276B - 用于执行人工神经网络反向训练的装置和方法 - Google Patents
用于执行人工神经网络反向训练的装置和方法 Download PDFInfo
- Publication number
- CN109993276B CN109993276B CN201711499068.9A CN201711499068A CN109993276B CN 109993276 B CN109993276 B CN 109993276B CN 201711499068 A CN201711499068 A CN 201711499068A CN 109993276 B CN109993276 B CN 109993276B
- Authority
- CN
- China
- Prior art keywords
- data
- unit
- power
- module
- operation module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Artificial Intelligence (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Complex Calculations (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本公开提供了一种用于执行人工神经网络反向训练的装置,包括H树模块、主运算模块、多个从运算模块、以及幂次转换模块。本公开还提供了一种用于执行人工神经网络反向训练的方法。本公开用于执行人工神经网络反向训练的装置及方法,减小了神经网络存储资源和计算资源的开销,有利于提高神经网络的运算速度。
Description
技术领域
本公开总体上涉及人工神经网络,具体地涉及一种用于执行人工神经网络反向训练的装置和方法。
背景技术
多层人工神经网络被广泛应用于模式识别,图像处理,函数逼近和优化计算等领域,多层人工网络在近年来由于其较高的识别准确度和较好的可并行性,受到学术界和工业界越来越广泛的关注。
一种支持多层人工神经网络反向训练的已知方法是使用通用处理器。该方法通过使用通用寄存器堆和通用功能部件执行通用指令来支持上述算法。该方法的缺点之一是单个通用处理器的运算性能较低,无法满足通常的多层人工神经网络运算的性能需求。而多个通用处理器并行执行时,通用处理器之间相互通信又成为了性能瓶颈。另外,通用处理器需要把多层人工神经网络反向运算译码成一长列运算及访存指令序列,处理器前端译码带来了较大的功耗开销
另一种支持多层人工神经网络反向训练的已知方法是使用图形处理器(GPU)。该方法通过使用通用寄存器堆和通用流处理单元执行通用SIMD指令来支持上述算法。由于GPU是专门用来执行图形图像运算以及科学计算的设备,没有对多层人工神经网络运算的专门支持,仍然需要大量的前端译码工作才能执行多层人工神经网络运算,带来了大量的额外开销。另外GPU只有较小的片上缓存,多层人工神经网络的模型数据(权值)需要反复从片外搬运,片外带宽成为了主要性能瓶颈。另外,GPU只有较小的片上缓存,多层人工神经网络的模型数据(权值)需要反复从片外搬运,片外带宽成为了主要性能瓶颈,同时带来了巨大的功耗开销。
发明内容
本公开的一个方面提供了一种用于执行人工神经网络反向训练的装置,包括H树模块、主运算模块、多个从运算模块、以及幂次转换模块;其中:H树模块,用于在每层神经网络反向训练开始计算的阶段,主运算模块通过H树模块向所有的从运算模块传输本层的输入梯度向量,在从计算模块的计算过程完成后,H树模块逐级将各从计算模块的输出梯度向量部分和两两相加得到本层的输出梯度向量;主运算模块,用于在每一层的计算过程中,利用本层的输出梯度向量完成后续计算;多个从运算模块,用于利用相同的输入梯度向量和各自的权值数据,并行地计算出相应的输出梯度向量部分和;以及幂次转换模块,其包括第一幂次转换单元和/或第二幂次转换单元;所述第一幂次转换单元用于将一格式数据转换为幂次数据,所述第二幂次转换单元用于将幂次数据转换为一格式数据。
在一些实施例中,所述格式数据为浮点数据和/或定点数据。
在一些实施例中,所述第一幂次转换单元用于选择性的将所述主运算模块和/或从运算模块的的输入数据、中间数据或输出数据转换为幂次数据;所述第二幂次转换单元用于选择性的将所述主运算模块和/或从运算模块的输入数据、中间数据或输出数据中的幂次数据转换为一格式数据。
在一些实施例中,所述主运算模块包括:第一运算单元,用于接收来自H树模块的输出梯度向量,完成主运算模块的各种运算功能;该第一运算单元包括:向量加法单元及激活单元;其中,向量加法单元用于实现人工神经网络卷积层反向训练运算中的加偏置操作,所述向量加法单元的输入为从外部地址空间读取出来的偏置向量,以及通过所述H树模块从从运算模块传送回来的中间结果,输出为偏置向量与中间结果相加后的偏置结果;激活单元用于实现人工神经网络激活函数导函数乘法操作,所述激活单元的输入为通过所述H树模块从从运算模块传送回来的中间结果,或向量加法单元输出的偏置结果,输出为所述中间结果或偏置结果与激活函数导函数相乘后的输出数据。
在一些实施例中,所述主运算模块还包括:数据依赖关系判断单元和神经元缓存单元;其中,神经元缓存单元用于缓存主运算模块在计算过程中用到的输入数据和输出数据;数据依赖关系判断单元是运算单元读写神经元缓存单元的端口,用于保证对神经元缓存单元中数据读写不存在一致性冲突,并且负责从神经元缓存单元读取输入梯度向量通过H树模块发送给从运算模块。
在一些实施例中,所述幂次转换模块,包括第一幂次转换单元,用于将主运算模块的输出数据转换成幂次数据,各所述从运算模块通过H树模块接收经所述第一幂次转换单元传输的幂次数据并进行计算。
在一些实施例中,每个所述从运算模块包括第二运算单元,用于接收控制器单元发出的微指令并进行算数逻辑运算;所述第二运算单元包括:向量加法单元及累加单元;该累加单元用于实现所述向量加法单元的输出数据的累加;其中,所述幂次转换模块包括:第一幂次转换单元,用于将向量加法单元的输入数据转换成幂次数据,以及第二幂次转换单元,用于将向量加法单元的输出数据、即累加单元的输入数据转换成一格式数据。
在一些实施例中,每个所述从运算模块包括第二运算单元,用于接收控制器单元发出的微指令并进行算数逻辑运算;所述第二运算单元包括:向量加法单元及累加单元;该累加单元用于实现所述向量加法单元的输出数据的累加;其中,所述幂次转换模块包括:一第一幂次转换单元,用于将主运算模块的输出数据转换为幂次数据,并发送至各从运算模块;以及多个第二幂次转换单元,每个所述第二幂次转换单元用于将一从运算模块的向量加法单元的输出数据转换为一格式数据,并发送至该一从运算模块的累加单元。
在一些实施例中,每个所述从运算模块,还包括:数据依赖关系判定单元、神经元缓存单元、权值缓存单元和权值梯度缓存单元,其中:数据依赖关系判断单元用于负责计算过程中对神经元缓存单元、权值缓存单元和权值梯度缓存单元的读写操作,保证对神经元缓存单元、权值缓存单元和权值梯度缓存单元的读写不存在一致性冲突;神经元缓存单元用于缓存输入梯度向量数据以及该从运算模块计算得到的输出梯度向量部分和;权值缓存单元用于缓存该从运算模块在计算过程中需要的权值向量,对于每一个从运算模块,所述权值向量是权值矩阵中与该从运算模块相对应的列;权值梯度缓存单元用于缓存相应从运算模块在更新权值过程中需要的权值梯度数据,每个从运算模块存储的权值梯度数据与其存储的权值向量相对应。
在一些实施例中,所述的装置,还包括:指令缓存单元,用于缓存指令;控制器单元,用于从所述指令缓存单元读取指令,并将该指令译码成控制H树模块、主运算模块、以及从运算模块行为的微指令;以及直接内存访问单元,用于从外部地址空间向主运算模块和各从运算模块的相应数据缓存单元中写数据或从所述数据缓存单元向外部地址空间读数据;其中,所述指令缓存单元、控制器单元、直接内存访问单元、H树模块、主运算模块和从运算模块的至少其中之一采用专用集成电路ASIC。
在一些实施例中,所述多个从运算模块利用相同的输入梯度向量并行地计算出各自权值的梯度并使用计算得到的各自权值的梯度来更新各自的权值;所述主运算模块将每一层的输出梯度向量与下一层的激活函数求导值对位相乘,作为下一层的输入梯度向量;所述H树模块构成主运算模块和所述多个从运算模块之间的数据通路,并具有H树型的结构,H树是由多个节点构成的二叉树通路,每个节点将上游的数据同样地发给下游的两个节点,将下游的两个节点返回的数据相加,并返回给上游的节点。
根据本公开的另一个方面,还提供了一种执行人工神经网络反向训练的方法,包括:H树模块在每层神经网络反向训练开始计算的阶段,主运算模块通过H树模块向所有的从运算模块传输本层的输入梯度向量,在从计算模块的计算过程完成后,H树模块逐级将各从计算模块的输出梯度向量部分和两两相加得到本层的输出梯度向量;主运算模块在每一层的计算过程中利用本层的输出梯度向量完成后续计算;多个从运算模块利用相同的输入梯度向量和各自的权值数据,并行地计算出相应的输出梯度向量部分和;以及利用第一幂次转换单元将一格式数据转换为幂次数据,和/或利用第二幂次转换单元将幂次数据转换为一格式数据。
在一些实施例中,所述格式数据为浮点数据和/或定点数据。
在一些实施例中,利用第一幂次转换单元选择性的将所述主运算模块和/或从运算模块的的输入数据、中间数据或输出数据转换为幂次数据;和/或利用所述第二幂次转换单元选择性的将所述主运算模块和/或从运算模块的输入数据、中间数据或输出数据中的幂次数据转换为一格式数据。
在一些实施例中,利用第一幂次转换单元将主运算模块的输出数据转换成幂次数据;各所述从运算模块通过H树模块接收经所述第一幂次转换单元传输的幂次数据并进行计算。
在一些实施例中,利用第一幂次转换单元将从运算模块的向量加法单元的输入数据转换成幂次数据;向量加法单元接收所述第一幂次转换单元发送的幂次数据并进行加法运算;利用第二幂次转换单元将向量加法单元的输出数据、即累加单元的输入数据转换成一格式数据;累加单元接收所述第二幂次转换单元发送的一格式数据,并进行累加运算。
附图说明
为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:
图1示出了根据本公开第一实施例的用于执行人工神经网络反向训练的装置示例框图。
图2示出了根据本公开第二实施例的用于执行人工神经网络反向训练的装置示例框图。
图3示出了根据本公开第三实施例的用于执行人工神经网络反向训练的装置示例框图。
图4示意性示出了根据本公开实施例的用于执行人工神经网络反向训练的装置中H树模块的结构。
图5示出了根据本公开实施例的用于执行人工神经网络反向训练的装置中主运算模块结构的示例框图。
图6示出了根据本公开实施例的用于执行人工神经网络反向训练的装置中主运算模块结构的另一示例框图。
图7示出了根据本公开实施例的用于执行人工神经网络反向训练的装置中从运算模块结构的示例框图。
图8示出了根据本公开实施例的用于执行人工神经网络反向训练的装置中从运算模块结构的另一示例框图。
图9.1为依据本公开实施例的编码表的示意图。
图9.2为依据本公开实施例的编码表的另一示意图。
图9.3为依据本公开实施例的编码表的另一示意图。
图9.4为依据本公开实施例的编码表的另一示意图。
图9.5为依据本公开实施例的幂次数据的表示方法示意图。
图10为依据本公开实施例的权值与幂次神经元的乘法操作示意图。
图11为依据本公开实施例的权值与幂次神经元的乘法操作示意图。
图12示出了根据本公开实施例的神经网络反向训练过程的示例框图。
图13示出了根据本公开实施例的单层人工神经网络运算的流程图。
具体实施方式
根据结合附图对本公开示例性实施例的以下详细描述,本公开的其它方面、优势和突出特征对于本领域技术人员将变得显而易见。
在本公开中,术语“包括”和“含有”及其派生词意为包括而非限制;术语“或”是包含性的,意为和/或。
在本说明书中,下述用于描述本公开原理的各种实施例只是说明,不应该以任何方式解释为限制公开的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本公开的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不背离本公开的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同参考数字用于相似功能和操作。
本公开提供了一种用于执行人工神经网络反向训练的装置。首先简单介绍下所述神经网络,举例而言,假设神经网络包括三层:输入层、中间层和输出层,其中:输入层各神经元负责接收来自外界的输入数据,并传递给中间层各神经元;中间层负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构,最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程;输出层向外界输出信息处理结果。误差的反向传播阶段:误差通过输出层,按误差梯度下降的方式修正各层权值,向中间层、输入层逐层反传。
根据本公开的多层人工神经网络的反向训练,包括两层或者两层以上的多个神经元。对于每一层来说,首先对输入梯度向量进行加权求和计算出本层的输出梯度向量。该输出梯度向量乘以下一层在正向运算时的激活函数的导数值可以得到下一层的输入梯度向量。将输入梯度向量与正向运算时的输入神经元对位相乘得到本层权值的梯度,然后可以根据所得到的本层权值的梯度来更新本层的权值。
本公开所述用于执行人工神经网络反向训练的装置可包括H树模块、主运算模块、多个从运算模块、以及幂次转换模块;其中:
H树模块,用于在每层神经网络反向训练开始计算的阶段,主运算模块通过H树模块向所有的从运算模块传输本层的输入梯度向量,在从计算模块的计算过程完成后,H树模块逐级将各从计算模块的输出梯度向量部分和两两相加得到本层的输出梯度向量;
主运算模块,用于在每一层的计算过程中,利用本层的输出梯度向量完成后续计算;
多个从运算模块,用于利用相同的输入梯度向量和各自的权值数据,并行地计算出相应的输出梯度向量部分和;以及
幂次转换模块,其包括第一幂次转换单元和/或第二幂次转换单元;所述第一幂次转换单元用于将一格式数据转换为幂次数据,所述第二幂次转换单元用于将幂次数据转换为一格式数据。
由此,所述用于执行人工神经网络反向训练的装置可以在从运算单元进行充分的权值复用,同时在主运算单元可以对输入输出数据进行激活运算等操作,从而极大的适配神经网络运算。而且通过将数据幂次化,从而将数据运算由乘法运算转化为加法运算,数据幂次转换再利用从运算单元进行权值复用,提升了装置的整体性能。
在一具体实施例中,如图1所示,所述幂次转换模块,可包括一幂次转换单元,设置于所述主运算模块中,用于将所述主运算模块的输出数据转换为幂次数据,转换得到的幂次数据可输入各从运算模块,用于从运算模块的计算。
在一具体实施例中,如图2所示,所述幂次转换模块,可包括多个幂次转换单元,分别设置于各所述从运算模块中,用于将所述从运算模块的输入数据转换为幂次数据,将从运算模块的中间数据或输出数据转换为一格式数据。
需要说明的是,所述幂次转换单元可以将幂次数据转换为一格式数据,也可以将一格式数据转换为幂次数据;所述幂次转换单元可选择性的设置在所述主运算模块内,各所述从运算模块内、或者设置在所述主运算模块的输出端、所述从运算模块的输入端、从运算模块的输出端等。所述装置可包括多个幂次转换单元分别用于执行各部分幂次数据转换(将幂次数据转换为一格式数据,或将一格式数据转换为幂次数据),也可仅包括一幂次转换单元,同时用于执行各部分幂次数据转换。
利用幂次数据表示方法,可以减小存储网络数据所需的存储空间,同时,该数据表示方法可简化神经元与权值数据的乘法操作,减小了神经网络存储资源和计算资源的开销,降低了对运算器的设计要求,加快的神经网络的运算速度。
在一具体实施例中,如图3所示,该装置包括指令缓存单元1、控制器单元2、直接内存访问单元3、H树模块4、主运算模块5和多个从运算模块6。指令缓存单元1、控制器单元2、直接内存访问单元3、H树模块4、主运算模块5和从运算模块6均可以通过硬件电路(例如专用集成电路ASIC)实现。
指令缓存单元1通过直接内存访问单元3读入指令并缓存读入的指令。
控制器单元2从指令缓存单元1中读取指令,将指令译成控制其他模块行为的微指令,所述其他模块例如直接内存访问单元3、主运算模块5和从运算模块6等。
直接内存访问单元3能够访存外部地址空间,直接向装置内部的各个缓存单元读写数据,完成数据的加载和存储。
本实施例中,所述装置中幂次转换模块(图3中未示出)的具体设置方式如图8中所示(幂次转换单元设置于各从运算模块的运算单元中),当然也可以与前述实施例相同,此处不再赘述。
图4示意性示出了H树模块4的结构。H树模块4构成主运算模块5和多个从运算模块6之间的数据通路,并具有H树型的结构。H树是由多个节点构成的二叉树通路,每个节点将上游的数据同样地发给下游的两个节点,将下游的两个节点返回的数据进行合并,并返回给上游的节点。例如,在神经网络反向运算过程中,下游两个节点返回的向量会在当前节点相加成一个向量并返回给上游节点。在每层人工神经网络开始计算的阶段,主运算模块5内的输入梯度通过H树模块4发送给各个从运算模块6;当从运算模块6的计算过程完成后,每个从运算模块6输出的输出梯度向量部分和会在H树模块4中逐级两两相加,即对所有输出梯度向量部分和求和,作为最终的输出梯度向量。
图5示出了根据本公开实施例的用于执行人工神经网络反向训练的装置中主运算模块5的结构的示例框图。如图5所示,主运算模块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,来控制其行为。
所述主运算模块的运算单元51(以示区分,称第一运算单元),用于接收来自H树模块的输出梯度向量,完成主运算模块的各种运算功能;如图6所示,该第一运算单元包括:向量加法单元及激活单元;其中,向量加法单元用于实现人工神经网络卷积层反向训练运算中的加偏置操作,所述向量加法单元的输入为从外部地址空间读取出来的偏置向量,以及通过所述H树模块从从运算模块传送回来的中间结果,输出为偏置向量与中间结果相加后的偏置结果;激活单元用于实现人工神经网络激活函数导函数乘法操作,所述激活单元的输入为通过所述H树模块从从运算模块传送回来的中间结果,或向量加法单元输出的偏置结果,输出为所述中间结果或偏置结果与激活函数导函数相乘后的输出数据。
图7示出了根据本公开实施例的用于执行人工神经网络反向训练的装置中从运算模块6的结构的示例框图。如图7所示,每个从运算模块6包括:运算单元61(以示区分,称第二运算单元)、数据依赖关系判定单元62(以示区分,称第二数据依赖关系判断单元)、第二存储单元(神经元缓存单元)63、第三存储单元(权值缓存单元)64。进一步的,还可包括权值梯度缓存单元65。
运算单元61接收控制器单元2发出的微指令并进行算数逻辑运算。
数据依赖关系判断单元62负责计算过程中对缓存单元的读写操作。数据依赖关系判断单元62保证对缓存单元的读写不存在一致性冲突。具体地,数据依赖关系判断单元62判断尚未执行的微指令与正在执行过程中的微指令的数据之间是否存在依赖关系,如果不存在,允许该条微指令立即发射,否则需要等到该条微指令所依赖的所有微指令全部执行完成后该条微指令才允许被发射。例如,所有发往数据依赖关系单元62的微指令都会被存入数据依赖关系单元62内部的指令队列里,在该队列中,读指令的读取数据的范围如果与队列位置靠前的写指令写数据的范围发生冲突,则该指令必须等到所依赖的写指令被执行后才能够执行。
神经元缓存单元63缓存输入梯度向量数据以及该从运算模块6计算得到的输出梯度向量部分和。
权值缓存单元64缓存该从运算模块6在计算过程中需要的权值向量。对于每一个从运算模块,都只会存储权值矩阵中与该从运算模块6相对应的列。
权值梯度缓存单元65缓存相应从运算模块在更新权值过程中需要的权值梯度数据。每一个从运算模块6存储的权值梯度数据与其存储的权值向量相对应。
如图8所示,每个所述从运算模块包括的运算单元(以示区分,称第二运算单元),包括:向量加法单元及累加单元;该累加单元用于实现所述向量加法单元的输出数据的累加。
可选的,所述幂次转换模块用于将向量加法单元的输入数据转换成幂次数据,以及将向量加法单元的输出数据、即累加单元的输入数据转换成格式数据。或所述幂次转换模块包括第一幂次转换单元,用于将向量加法单元的输入数据转换成幂次数据,以及第二幂次转换单元,用于将将向量加法单元的输出数据、即累加单元的输入数据转换成格式数据。或所述幂次转换模块包括:一第一幂次转换单元,用于将主运算模块的输出数据转换为幂次数据,并发送至各从运算模块;以及多个第二幂次转换单元,每个所述第二幂次转换单元用于将一从运算模块的向量加法单元的输出数据转换为格式数据,并发送至该一从运算模块的累加单元。
其中,如图8所示,格式数据经一幂次转换单元转换为幂次数据输入从运算模块6的向量加法单元(未图示),在向量加法单元中完成加法运算之后,输出数据至另一幂次转换单元(图8中所示幂次转换单元),该另一幂次转换单元将幂次数据转换为格式数据,格式数据输入累加单元进行累加计算,在所述从运算模块中,利用转换单元将从运算模块的输入数据转换为幂次数据,从而将乘法运算转换为加法运算,因而可以直接利用加法单元完成操作无需乘法单元,减小了神经网络存储资源和计算资源的开销,有利于提高神经网络的运算速度。而且数据转换成幂次之后,其数据宽度小于原始宽度,从而节省主运算模块向从运算模块传输数据的带宽。
从运算模块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基于输出梯度向量进行后续计算,例如将输出梯度向量加上正向运算时的激活函数的导数得到下一层的输入梯度值。正向运算时的激活函数的导数是在反向运算开始时已有的数据,可以通过直接内存访存单元缓存在主运算模块中。
本公开装置通过设置幂次运算转换单元,从而从运算单元中无需使用乘法器,使用已有的加法器即可完成之前的乘法运算,从而极大的节省了硬件开销。
上述各实施例中,幂次转换操作有多种可选方式,下面列举本实施例所采用的三种幂次转换操作:
第一种幂次转换方法:
sout=sin
其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout,表示对数据x做取下整操作。
第二种幂次转换方法:
sout=sin
其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout,表示对数据x做取上整操作。
第三种幂次转换方法:
sout=sin
dout+=[log2(din+)]
其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据;sin为输入数据的符号,sout为输出数据的符号;din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout;[x]表示对数据x做四舍五入操作。
所述幂次数据包括幂次神经元数据及幂次权值数据。其中,所述幂次神经元数据表示神经元数据的数值采用其幂指数值形式表示,具体为,幂次神经元数据包括符号位和幂次位,符号位用一位或多位比特位表示神经元数据的符号,幂次位用m位比特位表示神经元数据的幂次位数据,m为大于1的正整数。可利用一外部存储单元或内部缓存单元预存有编码表,提供幂次神经元数据的每个幂次位数据对应的指数数值。编码表设置一个或者多个幂次位数据(即置零幂次位数据)为指定对应的幂次神经元数据为0。也就是说,当幂次神经元数据的幂次位数据是编码表里的置零幂次位数据时候,表示该幂次神经元数据为0。
编码表的对应关系可以是任意的。
例如,编码表的对应关系可以是乱序的。如图9.1所示一种m为5的编码表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为3。幂次位数据为00010的时候对应指数数值为4。幂次位数据为00011的时候对应指数数值为1。幂次位数据为00100的时候对应幂次神经元数据为0。
编码表的对应关系也可以是正相关的,可利用一外部存储单元或内部缓存单元预存一个整数值x和一个正整数值y,最小的幂次位数据对应指数数值为x,其他任意一个或多个幂次位数据对应幂次神经元数据为0。x表示偏置值,y表示步长。在一种实施例情况下,最小的幂次位数据对应指数数值为x,最大的幂次位数据对应幂次神经元数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据+x)*y。通过预设定不同的x和y以及通过改变x和y的数值,幂次的表示范围变得可配,可以适用于需要不同数值范围的不同的应用场景。因此,本神经网络运算装置的应用范围更加广泛,使用更加灵活可变,可根据用户需求来做调整。
在一种实施例里,y为1,x的数值等于-2m-1。由此幂次神经元数据所表示的数值的指数范围为-2m-1~2m-l-1。
在一种实施例里,如图9.2所示一种m为5,x为0,y为1的编码表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为1。幂次位数据为00010的时候对应指数数值为2。幂次位数据为00011的时候对应指数数值为3。幂次位数据为11111的时候对应幂次神经元数据为0。如图9.3所示另一种m为5,x为0,y为2的编码表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为2。幂次位数据为00010的时候对应指数数值为4。幂次位数据为00011的时候对应指数数值为6。幂次位数据为11111的时候对应幂次神经元数据为0。
编码表的对应关系可以是负相关的,可利用一外部存储单元或内部缓存单元预存一个整数值x和一个正整数值y,最大的幂次位数据对应指数数值为x,其他任意一个或多个幂次位数据对应幂次神经元数据为0。x表示偏置值,y表示步长。在一种实施例情况下,最大的幂次位数据对应指数数值为x,最小的幂次位数据对应幂次神经元数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据-x)*y。通过预设定不同的x和y以及通过改变x和y的数值,幂次的表示范围变得可配,可以适用于需要不同数值范围的不同的应用场景。因此,本神经网络运算装置的应用范围更加广泛,使用更加灵活可变,可根据用户需求来做调整。
在一种实施例里,y为1,x的数值等于2m-1。由此幂次神经元数据所表示的数值的指数范围为-2m-1-1~2m-1。
如图9.4所示一种m为5的编码表的部分内容,幂次位数据为11111的时候对应数数值为0。幂次位数据为11110的时候对应指数数值为1。幂次位数据为11101的时候对应指数数值为2。幂次位数据为11100的时候对应指数数值为3。幂次位数据为00000的时候对应幂次神经元数据为0。
编码表的对应关系可以是幂次位数据最高位代表置零位,幂次位数据其他m-1位对应指数数值。当幂次位数据最高位为0时,对应幂次神经元数据为0;当幂次位数据最高位为1时,对应幂次神经元数据不为0。反之亦可,即当幂次位数据最高位为1时,对应幂次神经元数据为0;当幂次位数据最高位为0时,对应幂次神经元数据不为0。用另一种语言来描述,即幂次神经元数据的幂次位被分出一个比特来指示幂次神经元数据是否为0。
在一个具体实例图9.5所示,符号位为1位,幂次位数据位为7位,即m为7。编码表为幂次位数据为11111111的时候对应幂次神经元数据为0,幂次位数据为其他数值的时候幂次神经元数据对应相应的二进制补码。当幂次神经元数据符号位为0,幂次位为0001001,则其表示具体数值为29,即512;幂次神经元数据符号位为1,幂次位为1111101,则其表示具体数值为-2-3,即-0.125。相对于浮点数据,幂次数据只保留数据的幂次位,极大减小了存储数据所需的存储空间。
通过幂次数据表示方法,可以减小存储神经元数据所需的存储空间。在本实施例所提供示例中,幂次数据为8位数据,应当认识到,该数据长度不是固定不变的,在不同场合下,根据数据神经元的数据范围采用不同的数据长度。
其中,所述幂次神经元与权值乘法操作具体为,幂次神经元数据符号位与权值数据符号位做异或操作;编码表的对应关系为乱序的情况下查找编码表找出幂次神经元数据幂次位对应的指数数值,编码表的对应关系为正相关的情况下记录编码表的指数数值最小值并做加法找出幂次神经元数据幂次位对应的指数数值,编码表的对应关系为负相关的情况下记录编码表的最大值并做减法找出幂次神经元数据幂次位对应的指数数值;将指数数值与权值数据幂次位做加法操作,权值数据有效位保持不变。
具体实例一如图10所示,权值数据为16位浮点数据,符号位为0,幂次位为10101,有效位为0110100000,则其表示的实际数值为1.40625*26。幂次神经元数据符号位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次神经元数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元为000110,则其表示的实际数值为64,即26。权值的幂次位加上幂次神经元的幂次位结果为11011,则结果的实际数值为1.40625*212,即为神经元与权值的乘积结果。通过该运算操作,使得乘法操作变为加法操作,减小计算所需的运算量。
具体实例二如图11所示,权值数据为32位浮点数据,符号位为1,幂次位为10000011,有效位为10010010000000000000000,则其表示的实际数值为-1.5703125*24。幂次神经元数据符号位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次神经元数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元为111100,则其表示的实际数值为-2-4。(权值的幂次位加上幂次神经元的幂次位结果为01111111,则结果的实际数值为1.5703125*20,即为神经元与权值的乘积结果。
根据本公开实施例,还提供了在前述装置上执行人工神经网络正向运算的指令集。指令集中包括CONFIG指令、COMPUTE指令、IO指令、NOP指令、JUMP指令和MOVE指令,其中:
CONFIG指令在每层人工神经网络计算开始前配置当前层计算需要的各种常数;
COMPUTE指令完成每层人工神经网络的算术逻辑计算;
IO指令实现从外部地址空间读入计算需要的输入数据以及在计算完成后将数据存回至外部空间;
NOP指令负责清空当前装至内部所有微指令缓存队列中的微指令,保证NOP指令之前的所有指令全部指令完毕。NOP指令本身不包含任何操作;
JUMP指令负责控制器将要从指令缓存单元读取的下一条指令地址的跳转,用来实现控制流的跳转;
MOVE指令负责将装置内部地址空间某一地址的数据搬运至装置内部地址空间的另一地址,该过程独立于运算单元,在执行过程中不占用运算单元的资源。
图12示出了根据本公开实施例的神经网络反向训练过程的示例框图。计算输出梯度向量的过程为out_gradient=w*in_gradient,其中权值矩阵w和输入梯度向量in_gradient的矩阵向量乘法可以划分为不相关的并行计算子任务,每个从运算模块6计算出输出梯度向量的部分和,所有的部分和在H树模块4中完成求和运算得到最后的输出梯度向量。图12中上一层的输出梯度向量input gradient乘以对应的激活函数导数得到本层的输入数据,再与权值矩阵相乘得到输出梯度向量。计算权值更新梯度的过程为dw=x*in_gradient,其中每个从运算模块6计算本模块对应部分的权值的更新梯度。从运算模块6将输入梯度和正向运算时的输入神经元相乘计算出权值更新梯度dw,然后使用w、dw和上一次更新权值时使用的权值更新梯度dw’根据指令设置的学习率更新权值w。
参考图12所示,input gradient(图12中的[input gradient0,...,inputgradient3])是第n+1层的输出梯度向量,该向量首先要与正向运算过程中第n层的导数值(图12中的[f’(out0),...,f’(out3)])相乘,得到第n层的输入梯度向量,该过程在主运算模块5中完成,由H树模块4发往从运算模块6,暂存在从运算模块6的神经元缓存单元63中。然后,输入梯度向量与权值矩阵相乘得到第n层的输出梯度向量。在这个过程中,第i个从运算模块计算输入梯度向量中第i个标量和权值矩阵中列向量[w_i0,...,w_iN]的乘积,得到的输出向量在H树模块4中逐级两两相加得到最后的输出梯度向量output gradient(图12中的[output gradient0,...,output gradient3])。
同时,从运算模块6还需要更新本模块中存储的权值,计算权值更新梯度的过程为dw_ij=x_j*in_gradient_i,其中x_j是正向运算时第n层的输入(即第n-1层的输出)向量的第j个元素,in_gradient_i是反向运算第n层的输入梯度向量(即图12中input gradient与导数f’的乘积)的第i个元素。正向运算时第n层的输入是在反向训练开始时就存在的数据,通过H树模块4送往从运算模块6并暂存在神经元缓存单元63中。则,在从运算模块6中,在完成输出梯度向量部分和的计算后,将输入梯度向量第i个标量和正向运算第n层的输入向量相乘,得到更新权值的梯度向量dw并据此更新权值。
图13是示出根据一个实施例的单层人工神经网络反向训练流程图。该流程图描述利用本公开的装置和指令集实现图12所示的一种单层神经网络反向训练的过程。其中,神经网络第一层输入幂次数据可通过存储装置从外部地址读入,若外部地址读入的数据已经为幂次数据则直接传入存储装置,否则先通过幂次转换单元转换为幂次数据,此后各层神经网络的输入幂次数据可由在该层之前的一层或多层神经网络的输出幂次数据提供。
另外,本公开还提供了一种执行人工神经网络反向训练的方法,也即使用人工神经网络运算装置(最上位的概念)实现神经网络训练的方法;具体来说,主要包括以下内容:
1、神经网络训练的步骤;其是对一个(多层)神经网络中的各层依次执行正向运算,然后按照相反的层的顺序依次执行反向运算,最后用计算得到的权值的梯度去更新权值;这就是神经网络的训练的依次迭代,整个训练过程需要重复执行这个过程多次;
2、层的反向运算;每一层的反向运算需要执行两部分运算:一部分是使用输出神经元梯度和输入神经元计算出权值的梯度(用于在“权值更新”步骤更新本层的权值),另一部分是使用输出神经元梯度和权值,计算出输入神经元梯度(用于作为反向运算中下一层的输出神经元梯度以供其进行反向运算);
3、权值更新;在执行完神经网络的反向运算之后,就计算出了各层的权值的梯度,在这个步骤中,所述装置的第一输入缓存和第二输入缓存分别用于存储本层的权值和权值的梯度,然后在运算单元中使用权值梯度对权值进行更新;
具体的,所述执行人工神经网络反向训练的方法,包括:
H树模块在每层神经网络反向训练开始计算的阶段,主运算模块通过H树模块向所有的从运算模块传输本层的输入梯度向量,在从计算模块的计算过程完成后,H树模块逐级将各从计算模块的输出梯度向量部分和两两相加得到本层的输出梯度向量;
主运算模块在每一层的计算过程中利用本层的输出梯度向量完成后续计算;以及
多个从运算模块利用相同的输入梯度向量和各自的权值数据,并行地计算出相应的输出梯度向量部分和;以及
利用第一幂次转换单元将一格式数据转换为幂次数据,和/或利用第二幂次转换单元将幂次数据转换为一格式数据。
更具体而言,所述执行人工神经网络反向训练的方法,包括:
步骤S1,在指令缓存单元1的首地址处预先存入一条IO指令。
步骤S2,运算开始,控制器单元2从指令缓存单元1的首地址读取该条IO指令,根据译出的微指令,直接内存访问单元3从外部地址空间读取与该单层人工神经网络反向训练有关的所有指令,并将其缓存在指令缓存单元1中。
步骤S3,控制器单元2接着从指令缓存单元读入下一条IO指令,根据译出的微指令,直接内存访问单元3从外部地址空间读取主运算模块5需要的所有数据至主运算模块5的神经元缓存单元53,所述数据包括之前正向运算时的输入神经元和激活函数导数值以及输入梯度向量。
步骤S4,控制器单元2接着从指令缓存单元读入下一条IO指令,根据译出的微指令,直接内存访问单元3从外部地址空间读取从运算模块6需要的所有权值数据和权值梯度数据,并分别存储到相应的从运算模块6的权值缓存单元64和权值梯度缓存单元65。可选的,幂次转换单元将直接内存访问单元3读取的所述数据中格式数据转换为幂次数据,(幂次转换操作)之后再分别存储到相应的从运算模块6的权值缓存单元64和权值梯度缓存单元65。而对于其中的幂次数据,则直接存入所述直接内存访问单元3。
步骤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运算性能不足,前端译码开销大的问题。有效提高了对多层人工神经网络正向运算的支持。
通过采用针对多层人工神经网络反向训练的专用片上缓存,充分挖掘了输入神经元和权值数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络正向运算性能瓶颈的问题。
虽然上述实施例中是以浮点数据转换为幂次数据为例介绍幂次转换单元,但本领域技术人员应当可以理解的是,其他格式数据转换为幂次数据,以及幂次数据转换为格式数据的过程与之类似,此处不再赘述。
需要说明的是,本公开中提到的输入神经元和输出神经元并非是指整个神经网络的输入层中神经元和输出层中神经元,而是对于网络中任意相邻的两层,处于网络前馈运算下层中的神经元即为输入神经元,处于网络前馈运算上层中的神经元即为输出神经元。以卷积神经网络为例,设一个卷积神经网络有L层,K=1,2,...,L-1,对于第K层和第K+1层来说,我们将第K层称为输入层,其中的神经元为所述输入神经元,第K+1层称为输出层,其中的神经元为所述输出神经元。即除最顶层外,每一层都可以作为输入层,其下一层为对应的输出层。
前面的附图中所描绘的进程或方法可通过包括硬件(例如,电路、专用逻辑等)、固件、软件(例如,被具体化在非瞬态计算机可读介质上的软件),或两者的组合的处理逻辑来执行。虽然上文按照某些顺序操作描述了进程或方法,但是,应该理解,所描述的某些操作能以不同顺序来执行。此外,可并行地而非顺序地执行一些操作。
在前述的说明书中,参考其特定示例性实施例描述了本公开的各实施例。显然,可对各实施例做出各种修改,而不背离所附权利要求所述的本公开的更广泛的精神和范围。相应地,说明书和附图应当被认为是说明性的,而不是限制性的。
Claims (18)
1.一种用于执行人工神经网络反向训练的装置,包括H树模块、主运算模块、多个从运算模块、以及幂次转换模块;其中:
H树模块,用于在每层神经网络反向训练开始计算的阶段,主运算模块通过H树模块向所有的从运算模块传输本层的输入梯度向量,在从计算模块的计算过程完成后,H树模块逐级将各从计算模块的输出梯度向量部分和两两相加得到本层的输出梯度向量;
主运算模块,用于在每一层的计算过程中,利用本层的输出梯度向量完成后续计算;
多个从运算模块,用于利用相同的输入梯度向量和各自的权值数据,并行地计算出相应的输出梯度向量部分和;以及
幂次转换模块,其包括第一幂次转换单元和/或第二幂次转换单元;所述第一幂次转换单元用于将一格式数据转换为幂次数据,所述第二幂次转换单元用于将幂次数据转换为一格式数据;
所述幂次数据包括符号位和幂次位,符号位用一位或多位比特位表示数据的符号,幂次位用m位比特位表示数据的幂次位数据,m为大于1的正整数;
所述装置还包括一外部存储单元或内部缓存单元,用于预存编码表,提供幂次神经元数据的每个幂次位数据对应的指数数值;所述编码表设置一个或者多个幂次位数据为指定对应的幂次神经元数据为0;
其中,所述幂次神经元与权值乘法操作具体为,幂次神经元数据符号位与权值数据符号位做异或操作;若编码表的对应关系为乱序,则查找编码表找出幂次神经元数据幂次位对应的指数数值;若编码表的对应关系为正相关,则记录编码表的指数数值最小值并做加法找出幂次神经元数据幂次位对应的指数数值;若编码表的对应关系为负相关,则记录编码表的最大值并做减法找出幂次神经元数据幂次位对应的指数数值;以及将指数数值与权值数据幂次位做加法操作,权值数据有效位保持不变。
2.根据权利要求1所述的装置,其中,所述格式数据为浮点数据和/或定点数据。
3.根据权利要求1所述的装置,其中,所述第一幂次转换单元用于选择性的将所述主运算模块和/或从运算模块的的输入数据、中间数据或输出数据转换为幂次数据;所述第二幂次转换单元用于选择性的将所述主运算模块和/或从运算模块的输入数据、中间数据或输出数据中的幂次数据转换为一格式数据。
4.根据权利要求1所述的装置,其中,所述主运算模块包括:第一运算单元,用于接收来自H树模块的输出梯度向量,完成主运算模块的各种运算功能;该第一运算单元包括:向量加法单元及激活单元;其中,向量加法单元用于实现人工神经网络卷积层反向训练运算中的加偏置操作,所述向量加法单元的输入为从外部地址空间读取出来的偏置向量,以及通过所述H树模块从从运算模块传送回来的中间结果,输出为偏置向量与中间结果相加后的偏置结果;
激活单元用于实现人工神经网络激活函数导函数乘法操作,所述激活单元的输入为通过所述H树模块从从运算模块传送回来的中间结果,或向量加法单元输出的偏置结果,输出为所述中间结果或偏置结果与激活函数导函数相乘后的输出数据。
5.根据权利要求4所述的装置,其中,所述主运算模块还包括:数据依赖关系判断单元和神经元缓存单元;其中,神经元缓存单元用于缓存主运算模块在计算过程中用到的输入数据和输出数据;
数据依赖关系判断单元是运算单元读写神经元缓存单元的端口,用于保证对神经元缓存单元中数据读写不存在一致性冲突,并且负责从神经元缓存单元读取输入梯度向量通过H树模块发送给从运算模块。
6.根据权利要求4或5所述的装置,其中,所述幂次转换模块,包括第一幂次转换单元,用于将主运算模块的输出数据转换成幂次数据,各所述从运算模块通过H树模块接收经所述第一幂次转换单元传输的幂次数据并进行计算。
7.根据权利要求1所述的装置,其中,每个所述从运算模块包括第二运算单元,用于接收控制器单元发出的微指令并进行算数逻辑运算;所述第二运算单元包括:向量加法单元及累加单元;该向量加法单元用于实现向量加法和幂次数据乘法,该累加单元用于实现所述向量加法单元的输出数据的累加;其中,所述幂次转换模块包括:
第一幂次转换单元,用于将向量加法单元的输入数据转换成幂次数据,以及
第二幂次转换单元,用于将向量加法单元的输出数据、即累加单元的输入数据转换成一格式数据。
8.根据权利要求1所述的装置,每个所述从运算模块包括第二运算单元,用于接收控制器单元发出的微指令并进行算数逻辑运算;所述第二运算单元包括:向量加法单元及累加单元;该向量加法单元用于实现向量加法和幂次数据乘法,该累加单元用于实现所述向量加法单元的输出数据的累加;其中,所述幂次转换模块包括:
一第一幂次转换单元,用于将主运算模块的输出数据转换为幂次数据,并发送至各从运算模块;以及
多个第二幂次转换单元,每个所述第二幂次转换单元用于将一从运算模块的向量加法单元的输出数据转换为一格式数据,并发送至该一从运算模块的累加单元。
9.根据权利要求7或8所述的装置,其中,每个所述从运算模块,还包括:数据依赖关系判定单元、神经元缓存单元、权值缓存单元和权值梯度缓存单元,其中:
数据依赖关系判断单元用于负责计算过程中对神经元缓存单元、权值缓存单元和权值梯度缓存单元的读写操作,保证对神经元缓存单元、权值缓存单元和权值梯度缓存单元的读写不存在一致性冲突;
神经元缓存单元用于缓存输入梯度向量数据以及该从运算模块计算得到的输出梯度向量部分和;
权值缓存单元用于缓存该从运算模块在计算过程中需要的权值向量,对于每一个从运算模块,所述权值向量是权值矩阵中与该从运算模块相对应的列;
权值梯度缓存单元用于缓存相应从运算模块在更新权值过程中需要的权值梯度数据,每个从运算模块存储的权值梯度数据与其存储的权值向量相对应。
10.根据权利要求1所述的装置,还包括:
指令缓存单元,用于缓存指令;
控制器单元,用于从所述指令缓存单元读取指令,并将该指令译码成控制H树模块、主运算模块、以及从运算模块行为的微指令;以及
直接内存访问单元,用于从外部地址空间向主运算模块和各从运算模块的相应数据缓存单元中写数据或从所述数据缓存单元向外部地址空间读数据;其中,
所述指令缓存单元、控制器单元、直接内存访问单元、H树模块、主运算模块和从运算模块的至少其中之一采用专用集成电路ASIC。
11.根据权利要求1至5中任一项所述的装置,其中,
所述多个从运算模块利用相同的输入梯度向量并行地计算出各自权值的梯度并使用计算得到的各自权值的梯度来更新各自的权值;
所述主运算模块将每一层的输出梯度向量与下一层的激活函数求导值对位相乘,作为下一层的输入梯度向量;
所述H树模块构成主运算模块和所述多个从运算模块之间的数据通路,并具有H树型的结构,H树是由多个节点构成的二叉树通路,每个节点将上游的数据同样地发给下游的两个节点,将下游的两个节点返回的数据相加,并返回给上游的节点。
12.根据权利要求1所述的装置,其中,最小的幂次位数据对应指数数值为x,最大的幂次位数据对应幂次神经元数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据+x)*y。
13.一种执行人工神经网络反向训练的方法,包括:
H树模块在每层神经网络反向训练开始计算的阶段,主运算模块通过H树模块向所有的从运算模块传输本层的输入梯度向量,在从计算模块的计算过程完成后,H树模块逐级将各从计算模块的输出梯度向量部分和两两相加得到本层的输出梯度向量;
主运算模块在每一层的计算过程中利用本层的输出梯度向量完成后续计算;
多个从运算模块利用相同的输入梯度向量和各自的权值数据,并行地计算出相应的输出梯度向量部分和;以及
利用第一幂次转换单元将一格式数据转换为幂次数据,和/或利用第二幂次转换单元将幂次数据转换为一格式数据;
所述幂次数据包括符号位和幂次位,符号位用一位或多位比特位表示数据的符号,幂次位用m位比特位表示数据的幂次位数据,m为大于1的正整数;
利用一外部存储单元或内部缓存单元,用于预存编码表,提供幂次神经元数据的每个幂次位数据对应的指数数值;所述编码表设置一个或者多个幂次位数据为指定对应的幂次神经元数据为0;
其中,所述幂次神经元与权值乘法操作具体为,幂次神经元数据符号位与权值数据符号位做异或操作;若编码表的对应关系为乱序,则查找编码表找出幂次神经元数据幂次位对应的指数数值;若编码表的对应关系为正相关,则记录编码表的指数数值最小值并做加法找出幂次神经元数据幂次位对应的指数数值;若编码表的对应关系为负相关,则记录编码表的最大值并做减法找出幂次神经元数据幂次位对应的指数数值;以及将指数数值与权值数据幂次位做加法操作,权值数据有效位保持不变。
14.根据权利要求13所述的方法,其中,所述格式数据为浮点数据和/或定点数据。
15.根据权利要求14所述的方法,其中,利用第一幂次转换单元选择性的将所述主运算模块和/或从运算模块的的输入数据、中间数据或输出数据转换为幂次数据;和/或利用所述第二幂次转换单元选择性的将所述主运算模块和/或从运算模块的输入数据、中间数据或输出数据中的幂次数据转换为一格式数据。
16.根据权利要求13所述的方法,其中,利用第一幂次转换单元将主运算模块的输出数据转换成幂次数据;各所述从运算模块通过H树模块接收经所述第一幂次转换单元传输的幂次数据并进行计算。
17.根据权利要求16所述的方法,其中,利用第一幂次转换单元将从运算模块的向量加法单元的输入数据转换成幂次数据;向量加法单元接收所述第一幂次转换单元发送的幂次数据并进行加法运算和幂次数据乘法运算;利用第二幂次转换单元将向量加法单元的输出数据、即累加单元的输入数据转换成一格式数据;累加单元接收所述第二幂次转换单元发送的一格式数据,并进行累加运算。
18.根据权利要求13所述的方法,其中,最小的幂次位数据对应指数数值为x,最大的幂次位数据对应幂次神经元数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据+x)*y。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711499068.9A CN109993276B (zh) | 2017-12-29 | 2017-12-29 | 用于执行人工神经网络反向训练的装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711499068.9A CN109993276B (zh) | 2017-12-29 | 2017-12-29 | 用于执行人工神经网络反向训练的装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109993276A CN109993276A (zh) | 2019-07-09 |
CN109993276B true CN109993276B (zh) | 2021-10-26 |
Family
ID=67110295
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711499068.9A Active CN109993276B (zh) | 2017-12-29 | 2017-12-29 | 用于执行人工神经网络反向训练的装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109993276B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112561050B (zh) * | 2019-09-25 | 2023-09-05 | 杭州海康威视数字技术股份有限公司 | 一种神经网络模型训练方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111353588B (zh) * | 2016-01-20 | 2024-03-05 | 中科寒武纪科技股份有限公司 | 用于执行人工神经网络反向训练的装置和方法 |
CN106991477B (zh) * | 2016-01-20 | 2020-08-14 | 中科寒武纪科技股份有限公司 | 一种人工神经网络压缩编码装置和方法 |
CN109358900B (zh) * | 2016-04-15 | 2020-07-03 | 中科寒武纪科技股份有限公司 | 支持离散数据表示的人工神经网络正向运算装置和方法 |
CN107301454B (zh) * | 2016-04-15 | 2021-01-22 | 中科寒武纪科技股份有限公司 | 支持离散数据表示的人工神经网络反向训练装置和方法 |
-
2017
- 2017-12-29 CN CN201711499068.9A patent/CN109993276B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109993276A (zh) | 2019-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106991478B (zh) | 用于执行人工神经网络反向训练的装置和方法 | |
CN109242094B (zh) | 用于执行人工神经网络正向运算的装置和方法 | |
CN107729990B (zh) | 支持离散数据表示的用于执行正向运算的装置及方法 | |
CN111310904B (zh) | 一种用于执行卷积神经网络训练的装置和方法 | |
CN107301453B (zh) | 支持离散数据表示的人工神经网络正向运算装置和方法 | |
CN107316078B (zh) | 用于执行人工神经网络自学习运算的装置和方法 | |
CN107341542B (zh) | 用于执行循环神经网络和lstm运算的装置和方法 | |
CN109376861B (zh) | 一种用于执行全连接层神经网络训练的装置和方法 | |
CN107301454B (zh) | 支持离散数据表示的人工神经网络反向训练装置和方法 | |
WO2017124644A1 (zh) | 一种人工神经网络压缩编码装置和方法 | |
EP3444757B1 (en) | Discrete data representation supported device and method for forward operation of artificial neural network | |
WO2017185347A1 (zh) | 用于执行循环神经网络和lstm运算的装置和方法 | |
CN107886166B (zh) | 一种执行人工神经网络运算的装置和方法 | |
WO2017185248A1 (zh) | 用于执行人工神经网络自学习运算的装置和方法 | |
WO2017177446A1 (zh) | 支持离散数据表示的人工神经网络反向训练装置和方法 | |
CN109993276B (zh) | 用于执行人工神经网络反向训练的装置和方法 | |
CN110097181B (zh) | 用于执行人工神经网络正向运算的装置和方法 | |
CN113570053A (zh) | 一种神经网络模型的训练方法、装置以及计算设备 | |
US20190073584A1 (en) | Apparatus and methods for forward propagation in neural networks supporting discrete data | |
US11995554B2 (en) | Apparatus and methods for backward propagation in neural networks supporting discrete data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100190 room 644, comprehensive research building, No. 6 South Road, Haidian District Academy of Sciences, Beijing Applicant after: Zhongke Cambrian Technology Co., Ltd Address before: 100190 room 644, comprehensive research building, No. 6 South Road, Haidian District Academy of Sciences, Beijing Applicant before: Beijing Zhongke Cambrian Technology Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |