一种运算装置和方法与流程

文档序号:15934213发布日期:2018-11-14 02:07阅读:200来源:国知局

本公开涉及人工智能技术领域,尤其涉及一种支持幂次神经元表示的神经网络运算装置和方法。

背景技术

多层神经网络被广泛应用于分类识别等任务,近年来,由于其较高的识别率和较高的可并行性,受到学术界和工业界的广泛关注。

目前一些性能较好的神经网络通常都非常庞大,这也意味着这些神经网络需要大量的计算资源和存储资源。大量的计算和存储资源的开销会降低神经网络的运算速度,同时,对硬件的传输带宽以及运算器的要求也大大提高了。



技术实现要素:

(一)要解决的技术问题

鉴于上述技术问题,本公开提供了一种神经网络运算装置和方法,支持幂次神经元表示,通过神经元数据的幂次化,减小神经网络存储资源和计算资源的开销,提高神经网络的运算速度。

(二)技术方案

根据本公开的一个方面,提供了一种神经网络运算装置,包括:

第一幂次转换单元,用于将神经网络输入数据中的非幂次数据转换为幂次数据;

运算单元,用于接收神经网络运算的数据和指令并根据运算指令对其接收的神经元数据及权值数据执行神经网络运算;其中,所述运算单元接收的所述数据包括经第一幂次转换单元转换的幂次数据。

优选地,还包括:存储单元,用于存储数据和指令;其中,该存储单元与所述第一幂次转换单元连接以接收所述幂次数据。

优选地,还包括:控制单元及输出神经元缓存单元;其中

所述控制单元,与所述存储单元连接,用于控制数据和指令的交互,其接收该存储单元发送的数据和指令,并将指令译码成运算指令;

所述运算单元,与所述控制单元连接,接收该控制单元发送的数据和运算指令,并根据运算指令对其接收的神经元数据及权值数据执行神经网络运算;以及

所述输出神经元缓存单元,与所述运算单元连接,用于接收运算单元输出的神经元数据并发送至所述控制单元作为下一层神经网络运算的输入数据。

优选地,所述控制单元,包括:

数据控制模块,与所述存储单元连接,用于实现存储单元和各缓存模块之间的数据和指令交互;

指令缓存模块,与所述数据控制模块连接,用于接收该数据控制模块发送的指令;

译码模块,与所述指令缓存模块连接,用于从指令缓存模块中读取指令,并将其译码成运算指令;

输入神经元缓存模块,与所述数据控制模块连接,用于从该数据控制模块获取相应的输入神经元数据;

权值缓存模块,与所述数据控制模块连接,用于从数据控制模块获取相应的权值数据;其中,

所述运算单元,分别与所述译码模块、输入神经元缓存模块及权值缓存模块连接,接收各运算指令、神经元数据及权值数据,根据运算指令对其接收的神经元数据和权值数据执行相应的神经网络运算。

优选地,所述第一幂次转换单元用于将神经网络输入数据中的非幂次权值数据转换为幂次权值数据。

优选地,还包括:第二幂次转换单元;其中,

所述第一幂次转换单元用于将神经网络输入数据中的非幂次神经元数据及非幂次权值数据分别转换为幂次神经元数据及幂次权值数据,并发送至所述存储单元;

所述第二幂次转换单元与所述输出神经元缓存单元单元连接,用于将其接收的神经元数据转换为幂次神经元数据并发送至所述控制单元作为下一层神经网络运算的输入数据。

优选地,若神经网络输入数据为幂次数据则直接存入存储单元。

优选地,幂次数据包括幂次神经元数据、幂次权值数据;其中,

所述幂次神经元数据表示神经元数据的数值采用其幂指数值形式表示,其中,所述幂次神经元数据包括符号位和幂次位,符号位采用一位或多位比特位表示神经元数据的符号,幂次位采用m位比特位表示神经元数据的幂次位数据,m为大于1的正整数;

所述幂次权值数据表示权值数据的数值采用其幂指数值形式表示,其中,所述幂次权值数据包括符号位和幂次位,符号位采用一位或多位比特位表示权值数据的符号,幂次位采用m位比特位表示权值数据的幂次位数据,m为大于1的正整数。

优选地,所述存储单元预存有编码表,用于提供幂次神经元数据及幂次权值数据的每个幂次位数据对应的指数数值。

优选地,所述编码表设置一个或者多个幂次位数据为置零幂次位数据,其对应的幂次神经元数据及幂次权值数据为0。

优选地,所述编码表的对应关系为乱序关系、正相关关系或负相关关系。

优选地,最大的幂次位数据对应幂次神经元数据及幂次权值数据为0或最小的幂次位数据对应幂次神经元数据及幂次权值数据为0。

优选地,所述编码表的对应关系为幂次位数据最高位代表置零位,幂次位数据其他m-1位对应指数数值。

优选地,所述编码表的对应关系为正相关关系,存储单元预存一个整数值x和一个正整数值y,最小的幂次位数据对应指数数值为x,其他任意一个或多个幂次位数据对应幂次神经元数据及幂次权值数据为0;其中,x表示偏置值,y表示步长。

优选地,最小的幂次位数据对应指数数值为x,最大的幂次位数据对应幂次神经元数据及幂次权值数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据+x)*y。

优选地,y=1,x的数值=-2m-1

优选地,所述编码表的对应关系为负相关关系,存储单元预存一个整数值x和一个正整数值y,最大的幂次位数据对应指数数值为x,其他任意一个或多个幂次位数据对应幂次神经元数据及幂次权值数据为0;其中,x表示偏置值,y表示步长。

优选地,最大的幂次位数据对应指数数值为x,最小的幂次位数据对应幂次神经元数据及幂次权值数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次位数据-x)*y。

优选地,y=1,x的数值等于2m-1

优选地,非幂次神经元数据及非幂次权值数据转换成幂次神经元数据及幂次权值数据包括:

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

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据;sin为输入数据的符号,sout为输出数据的符号;din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout;[x]表示对数据x做四舍五入操作。

根据本公开的另一个方面,提供了一种神经网络运算方法,包括:

获取指令、神经元数据及幂次权值数据;

根据运算指令对神经元数据及幂次权值数据进行神经网络运算。

根据本公开的另一个方面,提供了一种神经网络运算方法,包括:

获取指令、幂次神经元数据及幂次权值数据;

根据运算指令对幂次神经元数据及幂次权值数据进行神经网络运算。

优选地,还包括:将神经网络运算后的神经元数据输出并作为下一层神经网络运算的输入数据;重复神经网络运算步骤直到神经网络最后一层运算结束。

优选地,获取指令、权值数据及神经元数据,包括:

将指令、神经元数据及权值数据输入存储单元;

数据控制模块接收该存储单元发送的指令、神经元数据及权值数据;

指令缓存模块、输入神经元缓存模块及权值缓存模块分别接收该数据控制模块发送的指令、神经元数据及权值数据;其中,若输入存储单元的权值数据为非幂次权值数据则经第一幂次转换单元转换为幂次权值数据输入所述存储单元;若输入存储单元的权值数据为幂次权值数据则直接输入所述存储单元。

优选地,输出神经元缓存单元接收所述计算单元发送的神经网络运算后得到的神经元数据并发送至所述数据控制模块作为下一层神经网络运算的输入数据。

优选地,获取指令、权值数据及神经元数据,包括:

将指令、神经元数据及权值数据输入存储单元;

数据控制模块接收该存储单元发送的指令、神经元数据及权值数据;

指令缓存模块、输入神经元缓存模块及权值缓存模块分别接收该数据控制模块发送的指令、神经元数据及权值数据;其中,若输入存储单元的神经元数据及权值数据为非幂次神经元数据及非幂次权值数据则经第一幂次转换单元转换为幂次神经元数据及幂次权值数据输入所述存储单元;若输入存储单元的神经元数据及权值数据为幂次神经元数据及幂次权值数据则直接输入所述存储单元。

优选地,输出神经元缓存单元接收所述计算单元发送的神经网络运算后得到的神经元数据;第二幂次转换单元接收输出神经元缓存单元发送的神经元数据将其转换为幂次神经元数据,并发送至所述数据控制模块作为下一层神经网络运算的输入数据。

优选地,根据运算指令对权值数据和神经元数据进行神经网络运算,包括:

译码模块从指令缓存模块中读取指令,并将其译码成各运算指令;

运算单元分别接收所述译码模块、输入神经元缓存模块及权值缓存模块发送的运算指令、神经元数据以及权值数据,并根据运算指令对神经元数据和权值数据进行神经网络运算。

优选地,通过改变存储单元预存的整数值x和正整数值y,以调整神经网络运算装置所能表示的幂次神经元数据及幂次权值数据的范围。

根据本公开的另一个方面,提供了一种神经网络运算装置的使用方法,通过改变存储单元预存的整数值x和正整数值y,以调整神经网络运算装置所能表示的幂次神经元数据及幂次权值数据的范围。

(三)有益效果

从上述技术方案可以看出,本公开神经网络运算装置和方法至少具有以下有益效果其中之一:

(1)利用幂次数据表示方法存储神经元数据及权值数据,减小存储网络数据所需的存储空间,同时,该数据表示方法简化了神经元与权值数据的乘法操作,降低了对运算器的设计要求,加快的神经网络的运算速度。

(2)将运算后得到的神经元数据转换为幂次表示的神经元数据,减小了神经网络存储资源和计算资源的开销,有利于提高神经网络的运算速度。

(3)对于非幂次神经元数据及非幂次权值数据在输入到神经网络运算装置前可先经过幂次转换,再输入神经网络运算装置,进一步减小了神经网络存储资源和计算资源的开销,提高了神经网络的运算速度。

附图说明

通过附图所示,本公开的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本公开的主旨。

图1为依据本公开第一实施例的神经网络运算装置的结构示意图。

图2为依据本公开第二实施例的神经网络运算装置的结构示意图。

图3为依据本公开第三实施例的神经网络运算方法流程图。

图3.1为依据本公开第三实施例的编码表的示意图。

图3.2为依据本公开第三实施例的编码表的另一示意图。

图3.3为依据本公开第三实施例的编码表的另一示意图。

图3.4为依据本公开第三实施例的编码表的另一示意图。

图3.5为依据本公开第三实施例的幂次数据的表示方法示意图。

图3.6为依据本公开第三实施例的神经元与幂次权值的乘法操作示意图。

图3.7为依据本公开第三实施例的神经元与幂次权值的乘法操作示意图。

图4为依据本公开第四实施例的神经网络运算方法流程图。

图4.1为依据本公开第四实施例的编码表的示意图。

图4.2为依据本公开第四实施例的编码表的另一示意图。

图4.3为依据本公开第四实施例的编码表的另一示意图。

图4.4为依据本公开第四实施例的编码表的另一示意图。

图4.5为依据本公开第四实施例的幂次数据的表示方法示意图。

图4.6为依据本公开第四实施例的幂次神经元与幂次权值的乘法操作示意图。

具体实施方式

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

需要说明的是,在附图或说明书描述中,相似或相同的部分都使用相同的图号。附图中未绘示或描述的实现方式,为所属技术领域中普通技术人员所知的形式。另外,虽然本文可提供包含特定值的参数的示范,但应了解,参数无需确切等于相应的值,而是可在可接受的误差容限或设计约束内近似于相应的值。实施例中提到的方向用语,例如“上”、“下”、“前”、“后”、“左”、“右”等,仅是参考附图的方向。因此,使用的方向用语是用来说明并非用来限制本公开的保护范围。

一、第一实施例

本公开提供了一种神经网络运算装置。图1为依据本实施例神经网络运算装置的示意图。请参照图1,本实施例神经网络运算装置,包括:

存储单元1,用于存储数据和指令;

控制单元,与所述存储单元连接,用于控制数据和指令的交互,其接收该存储单元发送的数据和指令,并将指令译码成运算指令;

运算单元7,与所述控制单元连接,接收该控制单元发送的数据和运算指令,并根据运算指令对其接收的神经元数据及权值数据执行神经网络运算;

输出神经元缓存单元8,与所述运算单元连接,用于接收运算单元输出的神经元数据;并将其发送至所述控制单元。由此可作为下一层神经网络运算的输入数据;以及

幂次转换单元9,其与所述存储单元连接,用于将神经网络输入数据中非幂次权值数据转换为幂次权值数据,并发送至所述存储单元。而对于神经网络输入数据中的幂次权值数据,则直接存入存储单元。

具体的,所述控制单元包括:

数据控制模块2,与所述存储单元连接,用于存储单元和各缓存模块之间的数据和指令交互;

指令缓存模块3,与所述数据控制模块连接,用于接收数据控制模块发送的指令;

译码模块4,与所述指令缓存模块连接,用于从指令缓存模块中读取指令,并将其译码成各运算指令;

输入神经元缓存模块5,与所述数据控制模块连接,用于接收数据控制模块发送的神经元数据;

权值缓存模块6,与所述数据控制模块连接,用于接收从数据控制模块发送的权值数据。

进一步的,所述运算单元7,分别与所述译码模块、输入神经元缓存模块及权值缓存模块连接,接收各运算指令、神经元数据及权值数据,用于根据各运算指令对其接收的神经元数据和权值数据执行相应的运算。所述输出神经元缓存单元8,与所述运算单元连接,用于接收运算单元输出的神经元数据;并将其发送至所述控制单元的数据控制模块2。由此可作为下一层神经网络运算的输入数据

其中,存储单元从外部地址空间接收数据和指令,该数据包括神经网络权值数据、神经网络输入数据等。

进一步的,幂次转换操作有多种可选方式。下面列举本实施例所采用的三种幂次转换操作:

第一种幂次转换方法:

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

其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据;sin为输入数据的符号,sout为输出数据的符号;din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正数部分,dout+=dout×sout;[x]表示对数据x做四舍五入操作。

二、第二实施例

本公开还提供了另一种神经网络运算装置。图2为依据本实施例神经网络运算装置的示意图。请参照图2,本实施例神经网络运算装置,包括:

存储单元101,用于存储数据和指令;该存储单元从外部地址空间接收数据和指令,该数据包括神经网络权值数据、神经网络输入数据等。

控制单元,与所述存储单元连接,用于控制数据和指令的交互,其接收该存储单元发送的数据和指令,并将指令译码成运算指令;

运算单元107,与所述控制单元连接,接收该控制单元发送的数据和运算指令,并根据运算指令对其接收的权值数据和神经元数据执行神经网络运算;

输出神经元缓存单元108,与所述运算单元连接,用于接收运算单元输出的神经元数据,并将其发送至所述控制单元;

幂次转换单元109,其与所述存储单元连接,用于将神经网络输入数据中非幂次神经元数据及非幂次权值数据分别转换为幂次神经元数据及幂次权值数据,并发送至所述存储单元。而对于神经网络输入数据中的幂次神经元数据及幂次权值数据,则直接存入存储单元;以及

幂次转换单元110,其与所述输出神经元缓存单元108连接,用于将神经网络运算后的神经元数据转换为幂次神经元数据,并发送至所述控制单元。

进一步的,所述控制单元包括:

数据控制模块102,与所述存储单元连接,用于存储单元和各缓存模块之间的数据和指令交互;

指令缓存模块103,与所述数据控制模块连接,用于接收数据控制模块发送的指令;

译码模块104,与所述指令缓存模块连接,用于从指令缓存模块中读取指令,并将其译码成各运算指令;

输入神经元缓存模块105,与所述数据控制模块连接,用于接收数据控制模块发送的神经元数据;

权值缓存模块106,与所述数据控制模块连接,用于接收从数据控制模块发送的权值数据。

具体的,所述运算单元107,分别与所述译码模块、输入神经元缓存模块及权值缓存模块连接,接收各运算指令、神经元数据及权值数据,用于根据各运算指令对其接收的神经元数据和权值数据执行相应的运算。

所述幂次转换单元110,与所述数据控制模块连接,用于将神经网络运算后的神经元数据转换为幂次神经元数据,并发送至所述控制单元的数据控制模块102。通过幂次转换单元110获得的幂次神经元数据可作为神经网络运算下一层的输入神经元。

另外,所述幂次转换的具体操作方法与前述实施例相同,此处不再赘述。

三、第三实施例

另外,本公开实施例还提供了一种神经网络运算方法,图3为本实施例神经网络运算方法的流程图。具体而言,本公开实施例的神经网络为多层神经网络,对于每层神经网络可按图3所示的运算方法进行运算,其中,神经网络第一层输入幂次权值数据可通过存储单元从外部地址读入,若外部地址读入的权值数据已经为幂次权值数据则直接传入存储单元,否则先通过幂次转换单元转换为幂次权值数据。请参照图3,本实施例单层神经网络运算方法,包括:

步骤s1,获取指令、神经元数据及幂次权值数据。

其中,所述步骤s1包括以下子步骤:

s11,将指令、神经元数据及权值数据输入存储单元;其中,对幂次权值数据直接输入存储单元,对非幂次权值数据经过幂次转换单元转换后输入存储单元;

s12,数据控制模块接收该存储单元发送的指令、神经元数据及幂次权值数据;

s13,指令缓存模块、输入神经元缓存模块及权值缓存模块分别接收所述数据控制模块发送的指令、神经元数据及幂次权值数据并分发给译码模块或运算单元。

所述幂次权值数据表示权值数据的数值采用其幂指数值形式表示,具体为,幂次权值数据包括符号位和幂次位,符号位用一位或多位比特位表示权值数据的符号,幂次位用m位比特位表示权值数据的幂次位数据,m为大于1的正整数。存储单元预存有编码表,提供幂次权值数据的每个幂次位数据对应的指数数值。编码表设置一个或者多个幂次位数据(即置零幂次位数据)为指定对应的幂次权值数据为0。也就是说,当幂次权值数据的幂次位数据是编码表里的置零幂次位数据时候,表示该幂次权值数据为0。

编码表的对应关系可以是任意的。

例如,编码表的对应关系可以是乱序的。如图3.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-1-1。

在一种实施方式中,如图3.2所示,一种m为5,x为0,y为1的编码表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为1。幂次位数据为00010的时候对应指数数值为2。幂次位数据为00011的时候对应指数数值为3。幂次位数据为11111的时候对应幂次权值数据为0。如图3.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

如图3.4所示,一种m为5的编码表的部分内容,幂次位数据为11111的时候对应数数值为0。幂次位数据为11110的时候对应指数数值为1。幂次位数据为11101的时候对应指数数值为2。幂次位数据为11100的时候对应指数数值为3。幂次位数据为00000的时候对应幂次权值数据为0。

编码表的对应关系可以是幂次位数据最高位代表置零位,幂次位数据其他m-1位对应指数数值。当幂次位数据最高位为0时,对应幂次权值数据为0;当幂次位数据最高位为1时,对应幂次权值数据不为0。反之亦可,即当幂次位数据最高位为1时,对应幂次权值数据为0;当幂次位数据最高位为0时,对应幂次权值数据不为0。用另一种语言来描述,即幂次权值数据的幂次位被分出一个比特来指示幂次权值数据是否为0。

在一个具体实例图3.5所示,符号位为1位,幂次位数据位为7位,即m为7。编码表为幂次位数据为11111111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次权值数据对应相应的二进制补码。当幂次权值数据符号位为0,幂次位为0001001,则其表示具体数值为29,即512;幂次权值数据符号位为1,幂次位为1111101,则其表示具体数值为-2-3,即-0.125。相对于浮点数据,幂次数据只保留数据的幂次位,极大减小了存储数据所需的存储空间。

通过幂次数据表示方法,可以减小存储权值数据所需的存储空间。在本实施例所提供示例中,幂次数据为8位数据,应当认识到,该数据长度不是固定不变的,在不同场合下,根据数据权值的数据范围采用不同的数据长度。

步骤s2,根据运算指令对神经元数据及幂次权值数据进行神经网络运算。其中,所述步骤s2包括以下子步骤:

s21,译码模块从指令缓存模块中读取指令,并将其译码成各运算指令;

s22,运算单元分别接收所述译码模块、输入神经元缓存模块及权值缓存模块发送的运算指令、幂次权值数据以及神经元数据,并根据运算指令对神经元数据及幂次表示的权值数据进行神经网络运算。

所述神经元与幂次权值乘法操作具体为,神经元数据符号位与幂次权值数据符号位做异或操作;编码表的对应关系为乱序的情况下查找编码表找出幂次权值数据幂次位对应的指数数值,编码表的对应关系为正相关的情况下记录编码表的指数数值最小值并做加法找出幂次权值数据幂次位对应的指数数值,编码表的对应关系为负相关的情况下记录编码表的最大值并做减法找出幂次权值数据幂次位对应的指数数值;将指数数值与神经元数据幂次位做加法操作,神经元数据有效位保持不变。

具体实例一如图3.6所示,神经元数据为16位浮点数据,符号位为0,幂次位为10101,有效位为0110100000,则其表示的实际数值为1.40625*26。幂次权值数据符号位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次权值为000110,则其表示的实际数值为64,即26。幂次权值的幂次位加上神经元的幂次位结果为11011,则结果的实际数值为1.40625*212,即为神经元与幂次权值的乘积结果。通过该运算操作,使得乘法操作变为加法操作,减小计算所需的运算量。

具体实例二如图3.7所示,神经元数据为32位浮点数据,符号位为1,幂次位为10000011,有效位为10010010000000000000000,则其表示的实际数值为-1.5703125*24。幂次权值数据符号位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元为111100,则其表示的实际数值为-2-4。(神经元的幂次位加上幂次权值的幂次位结果为01111111,则结果的实际数值为1.5703125*20,即为神经元与幂次权值的乘积结果。

可选的,还包括步骤s3,将神经网络运算后的神经元数据输出并作为下一层神经网络运算的输入数据。

其中,所述步骤s3可包括以下子步骤:

s31,输出神经元缓存单元接收所述计算单元发送的神经网络运算后得到的神经元数据。

s32,将输出神经元缓存单元接收的神经元数据传输给数据控制模块,通过输出神经元缓存单元获得的神经元数据可作为神经网络运算下一层的输入神经元,再重复步骤s1至步骤s3直到神经网络最后一层运算结束。

另外,通过幂次转换单元获得的幂次神经元数据可作为神经网络运算下一层的输入幂次神经元,再重复步骤1至步骤3直到神经网络最后一层运算结束。通过改变存储单元预存的整数值x和正整数值y,可以调整神经网络运算装置所能表示的幂次神经元数据范围。

另外,所述幂次转换的具体操作方法与前述实施例相同,此处不再赘述。

四、第四实施例

另外,本公开实施例还提供了另一种神经网络运算方法,图4为本实施例神经网络运算方法的流程图。

具体而言,本公开实施例的神经网络为多层神经网络,对于每层神经网络可按图4所示的运算方法进行运算,其中,神经网络第一层输入幂次权值数据可通过存储单元从外部地址读入,若外部地址读入的数据已经为幂次权值数据则直接传入存储单元,否则先通过幂次转换单元转换为幂次权值数据;而神经网络第一层输入幂次神经元数据可通过存储单元从外部地址读入,若外部地址读入的数据已经为幂次数据则直接传入存储单元,否则先通过幂次转换单元转换为幂次神经元数据,此后各层神经网络的输入神经元数据可由在该层之前的一层或多层神经网络的输出幂次神经元数据提供。请参照图4,本实施例单层神经网络运算方法,包括:

步骤s4,获取指令、幂次神经元数据及幂次权值数据。

其中,所述步骤s4包括以下子步骤:

s41,将指令、神经元数据及权值数据输入存储单元;其中,对幂次神经元数据及幂次权值数据直接输入存储单元,对非幂次神经元数据及非幂次权值数据则经过所述第一幂次转换单元转换为幂次神经元数据及幂次权值数据后输入存储单元;

s42,数据控制模块接收该存储单元发送的指令、幂次神经元数据及幂次权值数据;

s43,指令缓存模块、输入神经元缓存模块及权值缓存模块分别接收所述数据控制模块发送的指令、幂次神经元数据及幂次权值数据并分发给译码模块或运算单元。

所述幂次神经元数据及幂次权值数据表示神经元数据及权值数据的数值采用其幂指数值形式表示,具体为,幂次神经元数据及幂次权值数据均包括符号位和幂次位,符号位用一位或多位比特位表示神经元数据及权值数据的符号,幂次位用m位比特位表示神经元数据及权值数据的幂次位数据,m为大于1的正整数。存储单元的存储单元预存有编码表,提供幂次神经元数据及幂次权值数据的每个幂次位数据对应的指数数值。编码表设置一个或者多个幂次位数据(即置零幂次位数据)为指定对应的幂次神经元数据及幂次权值数据为0。也就是说,当幂次神经元数据及幂次权值数据的幂次位数据是编码表里的置零幂次位数据时候,表示该幂次神经元数据及幂次权值数据为0。

编码表的对应关系可以是任意的。

例如,编码表的对应关系可以是乱序的。如图4.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-1-1。

在一种实施例方式中,如图4.2所示一种m为5,x为0,y为1的编码表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为1。幂次位数据为00010的时候对应指数数值为2。幂次位数据为00011的时候对应指数数值为3。幂次位数据为11111的时候对应幂次神经元数据及幂次权值数据为0。如图4.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

如图4.4所示一种m为5的编码表的部分内容,幂次位数据为11111的时候对应数数值为0。幂次位数据为11110的时候对应指数数值为1。幂次位数据为11101的时候对应指数数值为2。幂次位数据为11100的时候对应指数数值为3。幂次位数据为00000的时候对应幂次神经元数据及幂次权值数据为0。

编码表的对应关系可以是幂次位数据最高位代表置零位,幂次位数据其他m-1位对应指数数值。当幂次位数据最高位为0时,对应幂次神经元数据及幂次权值数据为0;当幂次位数据最高位为1时,对应幂次神经元数据及幂次权值数据不为0。反之亦可,即当幂次位数据最高位为1时,对应幂次神经元数据及幂次权值数据为0;当幂次位数据最高位为0时,对应幂次神经元数据及幂次权值数据不为0。用另一种语言来描述,即幂次神经元数据及幂次权值数据的幂次位被分出一个比特来指示幂次神经元数据及幂次权值数据是否为0。

在一个具体实例方式中,如图4.5所示,符号位为1位,幂次位数据位为7位,即m为7。编码表为幂次位数据为11111111的时候对应幂次神经元数据及幂次权值数据为0,幂次位数据为其他数值的时候幂次神经元数据及幂次权值数据对应相应的二进制补码。当幂次神经元数据及幂次权值数据符号位为0,幂次位为0001001,则其表示具体数值为29,即512;幂次神经元数据及幂次权值数据符号位为1,幂次位为1111101,则其表示具体数值为-2-3,即-0.125。相对于浮点数据,幂次数据只保留数据的幂次位,极大减小了存储数据所需的存储空间。

通过幂次数据表示方法,可以减小存储神经元数据及权值数据所需的存储空间。在本实施例所提供示例中,幂次数据为8位数据,应当认识到,该数据长度不是固定不变的,在不同场合下,根据神经元数据及权值数据的数据范围采用不同的数据长度。

步骤s5,根据运算指令对幂次神经元数据及幂次权值数据进行神经网络运算。其中,所述步骤s5包括以下子步骤:

s51,译码模块从指令缓存模块中读取指令,并将其译码成各运算指令;

s52,运算单元分别接收所述译码模块、输入神经元缓存模块及权值缓存模块发送的运算指令、幂次神经元数据及幂次权值数据,并根据运算指令对幂次神经元数据及幂次权值数据进行神经网络运算。

所述幂次神经元与幂次权值乘法操作具体为,幂次神经元数据符号位与幂次权值数据符号位做异或操作;编码表的对应关系为乱序的情况下查找编码表找出幂次神经元数据及幂次权值数据幂次位对应的指数数值,编码表的对应关系为正相关的情况下记录编码表的指数数值最小值并做加法找出幂次神经元数据及幂次权值数据幂次位对应的指数数值,编码表的对应关系为负相关的情况下记录编码表的最大值并做减法找出幂次神经元书记及幂次权值数据幂次位对应的指数数值;将幂次神经元数据对应的指数数值与幂次权值数据对应的指数数值做加法操作。

具体实例一如图4.6所示,幂次神经元数据和幂次权值数据符号位为1位,幂次位数据位为4位,即m为4。编码表为幂次位数据为1111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元数据为00010,则其表示的实际数值为22。幂次权值为00110,则其表示的实际数值为64,即26。幂次神经元数据和幂次权值数据的乘积为01000,其表示的实际数值为28

可以看到,幂次神经元数据和幂次权值的乘法运算相比于浮点数据的乘法以及浮点数据和幂次数据的乘法都更加的简单方便。

本实施例方法还可进一步包括,步骤s6,将神经网络运算后的神经元数据输出并作为下一层神经网络运算的输入数据。

其中,所述步骤s6包括以下子步骤:

s61,输出神经元缓存单元接收所述计算单元发送的神经网络运算后得到的神经元数据。

s62,将输出神经元缓存单元接收的神经元数据传输给数据控制模块,通过输出神经元缓存单元获得的神经元数据可作为神经网络运算下一层的输入神经元,再重复步骤s4至步骤s6直到神经网络最后一层运算结束。

由于神经网络运算后得到的神经元数据也为幂次数据,将其传输给数据控制模块所需带宽相比于浮点数据所需带宽大大减少,因此进一步减小了神经网络存储资源和计算资源的开销,提高了神经网络的运算速度。

另外,所述幂次转换的具体操作方法与前述实施例相同,此处不再赘述。

所公开的实施例的所有的模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器,dna计算机。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

需要说明的是,在附图或说明书正文中,未绘示或描述的实现方式,均为所属技术领域中普通技术人员所知的形式,并未进行详细说明。此外,上述对各元件和方法的定义并不仅限于实施例中提到的各种具体结构、形状或方式,本领域普通技术人员可对其进行简单地更改或替换,例如:

本公开的控制单元并不限定于实施例的具体组成结构,所属技术领域的技术人员熟知的可实现存储单元和运算单元之间数据、指令交互的控制单元,均可用于实现本公开。

以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

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