技术领域
[0001] 本申请属于神经网络运算领域,尤其涉及一种计算装置以及计算方法。
相关背景技术
[0002] 数据处理是大部分算法需要经过的步骤或阶段,在计算机引入数据处理领域后,越来越多的 数据处理通过计算机来实现,现有的算法中有计算设备在进行神经网络的数据计算时速度慢,效 率低。
[0003] 申请内容
[0004] 有鉴于此,本申请提供一种计算装置以及计算方法,能够提高计算速度,并且运算性能高效。
[0005] 本申请提供一种计算装置,其特征在于,所述计算装置包括:计算装置,其特征在于,所述 计算装置包括:映射单元、存储器、寄存器单元、运算单元、控制单元和数据访问单元;其中,
[0006] 存储器,用于存储计算神经元、权值和运算指令;
[0007] 寄存器单元,用于存储运算指令的地址、输入数据的地址;
[0008] 控制单元,用于提取运算指令,该运算指令对应的操作域,将该运算指令译码成执行指令, 该执行指令用于控制运算单元执行运算操作,将该操作域传输至数据访问单元;
[0009] 数据访问单元,用于提取该操作域对应的输入数据,并将该输入数据传输至映射单元;
[0010] 映射单元,用于将输入数据转换成输入神经元、权值和连接数据,依据连接数据对该输入神 经元的筛选得到计算神经元,将该计算神经元并存储在存储器中;
[0011] 运算单元,用于该执行指令调用运算单元的计算器对该计算神经元执行运算操作得到运算结 果。
具体实施方式
[0043] 参阅图1-1,图1-1提供了一种计算装置,该计算装置包括:存储器611(可选的)、寄存器单 元612、互联模块613、运算单元614、控制单元615和数据访问单元616;
[0044] 其中,运算单元614包括:加法计算器、乘法计算器、比较器、激活运算器中至少二种。
[0045] 互联模块613,用于控制运算单元614中计算器的连接关系使得该至少二种计算器组成不同的 计算拓扑结构。
[0046] 指令存储单元(可以是寄存器单元,指令缓存,高速暂存存储器)612,用于存储该运算指令、 数据块的在存储介质的地址、运算指令对应的计算拓扑结构。
[0047] 该运算指令可以包括:操作域以及操作码,以卷积计算指令为例,如下表所示,其中,寄存 器0、寄存器1、寄存器堆2、寄存器3、寄存器4可以为操作域。其中,每个寄存器0、寄存器1、 寄存器2、寄存器3、寄存器4可以是一个或者多个寄存器。
[0048]
[0049] 存储器611可以为片外存储器,当然在实际应用中,当为片内存储器时,该片内存储器可以为 缓存,具体的,可以为高速暂存缓存,用于存储数据块,该数据块具体可以为n维数据,n为大于 等于1的整数,例如,n=1时,为1维数据,即向量,如n=2时,为2维数据,即矩阵,如n=3 或3以上时,为多维数据。
[0050] 控制单元615,用于从寄存器单元612内提取运算指令、该运算指令对应的操作域以及该运算 指令对应的第一计算拓扑结构,将该运算指令译码成执行指令,该执行指令用于控制运算单元执 行运算操作,将该操作域传输至数据访问单元616,。
[0051] 数据访问单元616,用于从存储器611中提取该操作域对应的数据块,并将该数据块传输至互 联模块613。
[0052] 互联模块613、用于接收数据块,将该数据块发送至运算单元614。
[0053] 运算单元614,用于该执行指令调用运算单元614的计算器对该数据块执行运算操作得到运算 结果,将该运算结果传输至数据访问单元存储在存储器内。一个实施例里,运算单元614,用于按 第一计算拓扑结构以及该执行指令调用计算器对数据块执行运算操作得到运算结果,将该运算结 果传输至数据访问单元存储在存储器内。
[0054] 在一种可选的实施例中,上述第一计算拓扑结构可以为:乘法运算器-加法运算器-加法运算器 -激活运算器。
[0055] 下面通过不同的运算指令来说明如图1-1所示的计算装置的具体计算方法,这里的运算指令以 卷积计算指令为例,该卷积计算指令可以应用在神经网络中,所以该卷积计算指令也可以称为卷 积神经网络。对于卷积计算指令来说,其实际需要执行的公式可以为:s=s(∑wxi+b),其中,即将 卷积核w乘以输入数据xi,进行求和,然后加上偏置b后做激活运算,得到最终的输出结果s。 依据该公式即可以得到该计算拓扑结构为,乘法运算器-加法运算器-(可选的)激活运算器。
[0056] 上述运算指令可以包括指令集,该指令集包括:卷积神经网络指令,有不同功能的卷积神经 网络COMPUTE指令以及CONFIG指令、IO指令、NOP指令、JUMP指令和MOVE指令。在一 种实施例中,COMPUTE指令包括:
[0057] 卷积神经网络指令,根据该指令,装置分别从存储器(优选的高速暂存存储器或者标量寄存 器堆)的指定地址取出指定大小的输入数据和卷积核,在卷积运算部件中做卷积运算直接得到输 出结果。即该指令不执行后续的操作,直接做卷积运算得到输出结果。
[0058] 卷积神经网络sigmoid指令,根据该指令,装置分别从存储器(优选的高速暂存存储器或者标 量寄存器堆)的指定地址取出指定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,优 选的,然后将输出结果做sigmoid激活;
[0059] 卷积神经网络TanH指令,根据该指令,装置分别从存储器(优选的高速暂存存储器)的指定 地址取出指定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,优选的,然后将输出结 果做TanH激活;
[0060] 卷积神经网络ReLU指令,根据该指令,装置分别从存储器(优选的高速暂存存储器)的指定 地址取出指定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,优选的,然后将输出结 果做ReLU激活;以及
[0061] 卷积神经网络group指令,根据该指令,装置分别从存储器(优选的高速暂存存储器)的指定 地址取出指定大小的输入数据和卷积核,划分group之后,在卷积运算部件中做卷积操作,优选的, 然后将输出结果做激活。
[0062] CONFIG指令在每层人工神经网络计算开始前配置当前层计算需要的各种常数。
[0063] IO指令实现从外部存储空间读入计算需要的输入数据以及在计算完成后将数据存回至外部空 间。
[0064] NOP指令负责清空当前装置内部所有控制信号缓存队列中的控制信号,保证NOP指令之前的 所有指令全部指令完毕。NOP指令本身不包含任何计算操作;
[0065] JUMP指令负责控制将要从指令存储单元读取的下一条指令地址的跳转,用来实现控制流的跳 转;
[0066] MOVE指令负责将装置内部地址空间某一地址的数据搬运至装置内部地址空间的另一地址, 该过程独立于运算单元,在执行过程中不占用运算单元的资源。
[0067] 如图1-1所示的计算装置执行卷积计算指令的方法具体可以为:
[0068] 控制单元615从寄存器单元612内提取卷积计算指令、卷积计算指令对应的操作域,控制单 元将该操作域传输至数据访问单元。
[0069] 数据访问单元从存储器内提取该操作域对应的卷积核w和偏置b(当b为0时,不需要提取 偏置b),将卷积核w和偏置b传输至运算单元。
[0070] 运算单元的乘法运算器将卷积核w与输入数据Xi执行乘法运算以后得到第一结果,将第一结 果输入到加法运算器执行加法运算得到第二结果,将第二结果和偏置b执行加法运算得到第三结 果,将第三结果输到激活运算器执行激活运算得到输出结果s,将输出结果s传输至数据访问单 元存储至存储器内。其中,每个步骤后都可以直接输出结果传输到数据访问存储至存储器内。另 外,将第二结果和偏置b执行加法运算得到第三结果这一步骤为可选步骤,即当b为0时,不需 要这个步骤。
[0071] 本申请提供的技术方案通过一个指令即卷积计算指令即实现了卷积的计算,在卷积计算的中 间数据(例如第一结果、第二结果、第三结果)均无需存储或提取,减少了中间数据的存储以及 提取操作,所以其具有减少对应的操作步骤,提高卷积的计算效果的优点。
[0072] 图1-2是本申请实施例提供的卷积神经网络运算装置执行卷积神经网络的流程图,如图1-2所 示,执行卷积神经网络指令的过程包括:
[0073] 在步骤S6B1,在指令存储单元的首地址处预先存入一条IO指令。
[0074] 在步骤S6B2,控制器单元从指令存储单元的首地址读取该条IO指令,根据译出的控制信号, 数据访问单元从存储器读取相应的所有卷积神经网络运算指令,并将其缓存在指令存储单元中。
[0075] 在步骤S6B3,控制器单元接着从指令存储单元读入下一条IO指令,根据译出的控制信号, 数据访问单元从存储器读取运算单元需要的所有数据块(例如,包括输入数据、用于作快速的激 活函数运算的插值表、用于配置运算器件参数的常数表、偏置数据等)。
[0076] 在步骤S6B4,控制器单元接着从指令存储单元读入下一条CONFIG指令,根据译出的控制信 号,装置配置该层神经网络计算需要的各种常数。例如,运算单元根据控制信号里的参数配置单 元内部寄存器的值,所述参数包括例如激活函数需要的数据。
[0077] 在步骤S6B5,控制器单元接着从指令存储单元读入下一条COMPUTE指令,根据译出的控制 信号,互连模块将卷积窗口内的输入数据发给计算单元内的各计算器。
[0078] 在步骤S6B6,根据COMPUTE指令译出的控制信号,互联模块将乘法计算器、加法计算器和 激活计算器连接形成第一计算拓扑结构。
[0079] 在步骤S6B7,乘法运算器将卷积核w与输入数据Xi执行乘法运算以后得到第一结果,将第 一结果输入到加法运算器执行加法运算得到第二结果,将第二结果和偏置b执行加法运算得到第 三结果,将第三结果输入到激活运算器执行激活运算得到输出结果s,将输出结果s传输至数据 访问单元存储至存储介质内。其中,将第二结果和偏置b执行加法运算得到第三结果这一步骤可 选,即当b为0时,不需要这个步骤。
[0080] 本申请还公开了一种用于稀疏连接的机器学习计算装置,具体的,该机器学习可以包括人工 神经网络,包括:
[0081] 映射单元,用于将输入数据转换成输入神经元、权值和连接数据,依据连接数据对该输入神 经元的筛选得到计算神经元,将该计算神经元并存储在存储器或者缓存中;
[0082] 存储器,用于存储计算神经元、权值和计算指令;
[0083] 运算单元,用于根据所述存储装置中存储的计算指令对所述计算神经元以及权值执行相应的 运算;所述运算单元主要执行三步运算,第一步是将计算神经元和权值数据相乘得到第一结果; 第二步执行加法树运算得到第二结果,具体的,用于将第一步处理后的第一结果通过加法树逐级 相加得到第二结果,或者将第一结果通过和偏置相加得到第二结果;第三步对第二结果执行激活 函数运算,得到最终输出神经元。
[0084] 上述运算单元具体可以包括:加法计算器、乘法计算器和激活计算器,每个计算器对应一个 流水级,此计算方式能够节省运算时间,加快运算。在另一种可选的实施例可以自由组合各流水 部件或者采取一级流水级。例如将第二个流水级和第三个流水级合并,或者将第一和第二以及第 三个流水线都合并或者各个流水级负责不同的运算可以排列组合。例如,第一级流水负责比较运 算,部分乘法运算,第二级流水负责非线性运算和矩阵标量乘法等组合。
[0085] 其中,所述连接数据表示如下:
[0086] 第一种情形:
[0087] 采用1表示有连接,0表示无连接,每个输出神经元与所有输入神经元的连接状态组成一个0 和1的字符串来表示该输出神经元的连接关系;或者
[0088] 采用1表示有连接,0表示无连接,每个输入神经元与所有输出神经元的连接状态组成一个0 和1的字符串来表示该输入神经元的连接关系;
[0089] 第二种情形:
[0090] 将一输出神经元第一个连接所在的位置距离第一个输入神经元的距离、所述输出神经元第二 个输入神经元距离上一个输入神经元的距离,所述输出神经元第三个输入神经元距离上一个输入 神经元的距离,依次类推,直到穷举所述输出神经元的所有输入神经元,来表示所述输出神经元 的连接关系。
[0091] 作为优选,所述人工神经网络计算装置还包括DMA,用于在所述存储装置和缓存中进行数据 或者指令读写。
[0092] 作为优选,所述人工神经网络计算装置还包括:
[0093] 指令缓存,用于存储专用指令;以及
[0094] 控制单元,用于从所述指令缓存中读取专用指令,并将其译码成各运算单元指令。
[0095] 作为优选,所述人工神经网络计算装置还包括:
[0096] 输入神经元缓存,用于缓存输入神经元到所述运算单元的输入神经元数据;以及[0097] 权值缓存,用于缓存权值数据。
[0098] 作为优选,所述人工神经网络计算装置还包括:
[0099] 输出神经元缓存,用于缓存所述运算单元输出的输出神经元。
[0100] 作为优选,所述映射单元用于将输入数据转换成输入神经元和权值一一对应的存储方式,并 输出神经元到所述运算单元,而不是存储在存储装置中。
[0101] 作为优选,所述人工神经网络计算装置还包括输入神经元缓存和/或权值缓存,所述输入神经 元缓存用于缓存输入神经元到所述运算单元的输入神经元数据,所述权值缓存用于缓存权值数据, 所述映射单元用于将输入数据转换成输入神经元和权值一一对应的存储方式,并输出神经元到所 述输入神经元缓存和/或权值缓存。
[0102] 作为优选,所述运算单元在第三步执行的激活函数为sigmoid函数、tanh函数或ReLU函数。
[0103] 本申请还公开了一种用于稀疏连接的人工神经网络的计算方法,该计算方法在如图2-10,图 2-12或图2-14所示的装置中实现,包括以下步骤:
[0104] 步骤1,将输入数据转换成输入神经元、权值和连接数据;其中,所述连接数据表示为:
[0105] 第一种情形:
[0106] 采用1表示有连接,0表示无连接,每个输出神经元与所有输入神经元的连接状态组成一个0 和1的字符串来表示该输出神经元的连接关系;或者
[0107] 采用1表示有连接,0表示无连接,每个输入神经元与所有输出神经元的连接状态组成一个0 和1的字符串来表示该输入神经元的连接关系;
[0108] 第二种情形:
[0109] 将一输出神经元第一个连接所在的位置距离第一个输入神经元的距离、所述输出神经元第二 个输入神经元距离上一个输入神经元的距离,所述输出神经元第三个输入神经元距离上一个输入 神经元的距离,依次类推,直到穷举所述输出神经元的所有输入,来表示所述输出神经元的连接 关系。
[0110] 步骤2,依据连接数据将输入神经元进行筛选得到计算神经元,将计算神经元和权值数据相乘 得到第一结果;
[0111] 上述输入数据包括:输入神经元、权值和连接数据,直接包含在输入数据内,直接从输入数 据内提取该输入神经元、权值以及连接数据即可。上述计算神经元可以依据连接数据将输入神经 元进行筛选得到计算神经元。
[0112] 上述筛选的实现方案具体可以为,例如假设输入神经元为4个,连接数据为1时表示连接, 如果连接数据为如图2-2所示的1011,该输入神经元为i1、i2、i3和i4,则将无连接关系的第二神 经元i2删除得到计算神经元数据为:i1、i3和i4。当然上述连接数据中的1也可以表示不连接,如 果1表示不连接,那么无连接关系的i1、i3和i4删除得到计算神经元数据为:i2。
[0113] 步骤3,将第一结果执行加法树运算得到第二结果。
[0114] 具体的实现方法由多种,例如,将第一结果执行加法树逐级相加得到第二结果。又如将第二 结果加偏置得到第二结果;
[0115] 步骤4,对第二结果执行激活函数运算,得到最终输出神经元;其中,所述激活函数为sigmoid 函数、tanh函数或ReLU函数。
[0116] 下面结合附图和具体实施例对本申请的技术方案进行进一步的阐释说明。
[0117] 图2-1是根据本申请一个实施例的总体结构的示意性框图。
[0118] I/O接口1,用于I/O数据需要经过中央处理器CPU 3发给稀疏的多层人工神经网络运算装置, 然后由稀疏的多层人工神经网络运算装置4写入存储器2,稀疏的多层人工神经网络运算装置4需 要的专用程序也是由CPU 3传输到稀疏的多层人工神经网络运算装置4。
[0119] 存储器2,用于暂存稀疏的多层人工神经网络模型和神经元数据,特别是当全部模型无法在稀 疏的多层人工神经网络运算装置4上的缓存中存储时。
[0120] CPU 3,用于进行数据搬运以及稀疏的多层人工神经网络运算装置4启动停止等基本控制,作 为稀疏的多层人工神经网络运算装置4与外部控制的接口。
[0121] 稀疏的人工神经网络运算装置4,用于执行稀疏的多层人工神经网络运算单元,接受来自CPU3 的数据和程序,执行上述稀疏的多层人工神经网络运算算法,稀疏的人工神经网络运算装置4的 执行结果将传输回CPU 3。
[0122] 通用系统结构:将稀疏的人工神经网络运算装置4作为CPU 3或者GPU的协处理器来执行稀 疏的多层人工神经网络运算算法。
[0123] 多个稀疏的人工神经网络运算装置互联的系统结构:多个稀疏的人工神经网络运算装置4可 以通过PCIE总线互联,以支持更大规模的稀疏的多层人工神经网络运算,可以共用同一个宿主 CPU或者分别有自己的宿主CPU,可以共享内存也可以每个处理器有各自的内存。此外其互联方 式可以是任意互联拓扑。
[0124] 对于一个稀疏连接的神经网络如图2-2所示,有4个输入神经元:i1,i2,i3,i4,有2个输出 神经元:o1,o2。其中,o1和i1,i3,i4有连接,把连接的权值分别表示为w11,w31,w41;o2和i2, i3有连接,把连接的权值分别表示为w22,w32。
[0125] 有两种方法可以表示上面稀疏神经网络的连接关系,一种是每个输入神经元与输出神经元之 间都用一位表示是否有连接,另一种是用连接之间的距离来表示每个连接的位置。
[0126] 第一种连接表示:
[0127] 对于图2-2中的神经网络,如图2-3所示,输出神经元o1的连接关系为:1011,每一位表示是 否与输入神经元有连接,1表示有连接,0表示无连接,输出神经元o2的连接关系为0110。在运算 时,连接关系为0所对应的输入神经元会筛选删除,即不会进行运算,具体的对于输出神经元o1, 其i2会被筛选删除,对于o2,其i1、i4会被筛选删除,这样在计算时无需对筛选的输入神经元进行 计算。
[0128] 在存储连接关系时,可以按照优先输入神经元或者输出神经元的顺序对连接关系进行存储。
[0129] 具体存储格式有以下几种:
[0130] 格式一:将每个输出神经元的所有输入神经元依次摆放完,上面的例子摆放的顺序为10110110。
[0131] 格式二:将每个输入神经元的所有的输出神经元依次摆放完,上面的例子摆放的顺序为 10011110。
[0132] 第二种连接表示:
[0133] 比如对于图2-4中的神经网络,输出神经元o1与输入神经元i1,i3,i4相连接,那么连接关系 为0,2,1。0表示第一个连接所在的位置距离第一个输入神经元的距离为0,即第一个输入神经 元,2表示第二个输入神经元距离上一个输入神经元的距离为2,即表示第三个输入神经元,1表 示第三个输入神经元距离上一个输入神经元的距离为1,即表示第四个输入神经元。同理,o2的连 接关系为1,1。
[0134] 本申请的映射单元包括但不限于以上的连接关系。
[0135] 卷积神经网络是人工神经网络的一种,卷积层包含多个滤波器,也就是卷积核,这些卷积核 重复的作用于所有输入图像上,提取局部特征。不同的卷积核能够提取出不同种类的局部特征, 一副输入图像在经过卷积层之后就变成一些能够被更好理解的抽象特征。
[0136] 自然图像有其固有特性,也就是说,图像的一部分的统计特性与其他部分是一样的。这也意 味着在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,都能使用同 样的学习特征。当从一个大尺寸图像中随机选取一小块,比如说8*8作为样本,并且从这个小块 样本中学习到了一些特征,这时可以把从这个8*8样本中学习到的特征作为探测器,应用到这个 图像的任意地方中去。特别是,可以用从8*8样本中学习到的特征跟原本的大尺寸图像做卷积, 从而对这个大尺寸图像上的任意位置获得一个不同特征的激活值。这个8*8的样本特征被称作卷 积核。
[0137] 如图2-5是一个卷积操作的例子。卷积核是一个2*2的矩阵,卷积核在输入图像上滑动。
[0138] 假设每次滑动一个像素点,则总共会有四次卷积操作。对于每次卷积操作,卷积核矩阵与对 应的输入图像数据做乘加操作。
[0139] 假设卷积核的权值变得稀疏,由之前的2*2,变成只有两个参数,如图2-6所示。则对于输出 神经元o0来说,需要的输入神经元为i0,i1,i3,i4,输入权值为:w0,w3,连接关系为1001或者 0,2;
[0140] 对于输出神经元o3来说,需要的输入神经元为i3,i5,i7,i8,输入权值为:w0,w3,连接关 系为1001或者0,2。
[0141] 由此可见,对于同个输出神经元特征图上的不同的输出神经元,所需要的输入神经元不同, 权值和连接关系是相同的。
[0142] 可执行稀疏连接的人工神经网络运算装置可以处理各种稀疏连接表示的稀疏连接的人工神经 网络,可执行稀疏连接的人工神经网络运算装置中有一个专门用于处理稀疏连接的单元,在这里 称为映射单元,对于不同的稀疏连接关系和处理方法,稀疏连接的人工神经网络运算装置结构会 略有不同,下面将分别描述不同的结构和方法。
[0143] 结构和方法一:
[0144] 如图2-7所示,映射单元1,用来将输入数据转换成输入神经元、权值和连接数据。
[0145] 存储器2,用来存储数据和指令,尤其是神经网络规模很大的时候,指令缓存4、输入神经元 缓存6、输出神经元缓存9、权值缓存8放不下这么多数据,只能将数据临时存放在存储器2。
[0146] DMA3,用来将存储装置中的数据或者指令搬到各个缓存中。
[0147] 指令缓存4,用来存储专用指令。
[0148] 控制单元5,从指令缓存4中读取专用指令,并将其译码成各运算单元指令。
[0149] 输入神经元缓存6,用来存储运算的输入神经元数据。
[0150] 运算单元7,用于执行具体的运算。运算单元主要被分为三个阶段,第一阶段执行乘法运算, 用于将输入的神经元和权值数据相乘。第二阶段执行加法树运算,第一、二两阶段合起来完成了 向量内积运算。第三阶段执行激活函数运算,激活函数可以是sigmoid函数、tanh函数等。第三阶 段得到输出神经元,写回到输出神经元缓存。
[0151] 权值缓存8,用来存储权值数据。
[0152] 输出神经元缓存9,用来存储运算的输出神经元。
[0153] 映射单元的结构如图2-8所示。
[0154] 以上面稀疏连接的神经网络为例,连接关系可以是上述的两种稀疏表示之一,映射单元会根 据连接关系,将输入神经元和输入权值按照连接关系输出映射后的神经元和权值,映射后的神经 元和权值可以在运算时被直接使用而不需要考虑连接关系,对于输出神经元o1映射的具体过程如 下:
[0155] 输入神经元为:i1,i2,i3,i4,输入权值为:w11,w31,w41,连接关系可以为:1011,或0,2, 1。映射单元根据连接关系,将输入神经元和权值变成相对应的关系,输出有两种情况:
一种是去 除掉没有连接的输入神经元,则映射后的神经元为i1,i3,i4,映射后的权值为w11,w31,w41;另 一种是权值在没有连接的地方补成0,则映射后的神经元为i1,i2,i3,i4,映射后的权值为w11,0, w31,w41。
[0156] 运算单元可以包括三个部分,第一部分乘法器,第二部分加法树,第三部分为线性函数单元。 第一部分将输入神经元(in)通过和权值(w)相乘得到加权输出神经元(out),过程为:out=w*in; 第二部分将加权输出神经元通过加法树逐级相加,另外还可以将输出神经元(in)通过和偏置(b) 相加得到加偏置输出神经元(out),过程为:out=in+b;第三部分将输出神经元(in)通过激活函 数(active)运算得到激活输出神经元(out),过程为:out=active(in),激活函数active可以是sigmoid、 tanh、relu、softmax等,除了做激活操作,第三部分可以实现其他的非线性函数,可将将输入神经 元(in)通过运算(f)得到输出神经元(out),过程为:out=f(in)。
[0157] 运算过程如图2-9所示。
[0158] 结构和方法二:
[0159] 如图2-10所示,存储装置1,用来存储数据和指令,尤其是神经网络规模很大的时候,指令 缓存3、输入神经元缓存6、输出神经元缓存9、权值缓存8放不下这么多数据,只能将数据临时 存放在存储装置1。
[0160] DMA2,用来将存储装置中的数据或者指令搬到各个缓存中。
[0161] 指令缓存3,用来存储专用指令。
[0162] 控制单元4,从指令缓存3中读取专用指令,并将其译码成各运算单元指令。
[0163] 映射单元5,用来将输入数据转换成输入神经元和权值一一对应的存储方式。
[0164] 输入神经元缓存6,用来存储运算的输入神经元数据。
[0165] 运算单元7,用于执行具体的运算。运算单元主要被分为三个阶段,第一阶段执行乘法运算, 用于将输入的神经元和权值数据相乘。第二阶段执行加法树运算,第一、二两阶段合起来完成了 向量内积运算。第三阶段执行激活函数运算,激活函数可以是sigmoid函数、tanh函数等。第三阶 段得到输出神经元,写回到输出神经元缓存。
[0166] 权值缓存8,用来存储权值数据。
[0167] 输出神经元缓存9,用来存储运算的输出神经元。
[0168] 映射单元的结构如图2-11所示。
[0169] 以上述稀疏连接的神经网络为例,连接关系可以是上述的两种稀疏表示之一,映射单元会根 据连接关系,将输入神经元和输入权值按照连接关系输出映射后的神经元和权值,映射后的神经 元和权值可以在运算时被直接使用而不需要考虑连接关系,对于输出神经元o1映射的具体过程如 下:
[0170] 输入神经元为:i1,i2,i3,i4,输入权值为:w11,w31,w41,连接关系可以为:1011,或0,2, 1。映射单元根据连接关系,将输入神经元和权值变成相对应的关系,输出有两种情况:
一种是去 除掉没有连接的输入神经元,则映射后的神经元为i1,i3,i4,映射后的权值为w11,w31,w41;另 一种是权值在没有连接的地方补成0,则映射后的神经元为i1,i2,i3,i4,映射后的权值为w11,0, w31,w41。
[0171] 结构和方法一和结构方法二中的映射单元的主要区别是结构和方法一中的映射单元是在计算 之前事先把输入神经元和权值映射好后存储在存储装置中,结构和方法二是在计算中进行映射, 将映射好的数据直接给运算单元进行运算。
[0172] 结构和方法三:
[0173] 基于结构和方法二稍作修改可以改成如图2-12所示的结构,映射单元只对输入神经元进行映 射。
[0174] 此时,映射单元的结构图如图2-13所示。
[0175] 对于输出神经元o1映射的具体过程如下:
[0176] 输入神经元为:i1,i2,i3,i4,连接关系可以为:1011,或者:0,2,1。映射单元根据连接关 系,将输入神经元和权值变成相对应的关系,去除掉没有连接的输入神经元,则映射后的神经元 为i1,i3,i4。
[0177] 结构和方法四:
[0178] 基于结构和方法二稍作修改可以改成如图2-14所示的结构,映射单元只对输入权值进行映射。
[0179] 此时,映射单元的结构图如图2-15所示。
[0180] 对于输出神经元o1映射的具体过程如下:
[0181] 输入权值为:w11,w31,w41,连接关系可以为:1011,或者:0,2,1。映射单元根据连接关 系,将输入神经元和权值变成相对应的关系,映射后的权值为w11,0,w31,w41。
[0182] 如图1-1所示的计算装置还包括:可以添加连续离散转换模块,用于将连续数据与离散数据的 互换,其与数据访问单元连接实现数据互通。
[0183] 连续离散转换模块均可以通过硬件电路(例如包括但不限于FPGA、CGRA、专用集成电路 ASIC、模拟电路和忆阻器等)实现。特别的,本装置可以对离散数据提供存储和运算支持。
[0184] 图3-1示出了根据本申请实施例的用于执行人工神经网络正向运算的装置中主运算模块5的结 构的示例框图。如图3-1所示,主运算模块5包括运算单元51、数据依赖关系判断单元52和支持 离散数据表示的神经元缓存单元53。
[0185] 支持离散数据表示的神经元缓存单元53用于缓存主运算模块5在计算过程中用到的输入数据 和输出数据。
[0186] 运算单元51完成主运算模块5的各种运算功能。对于运算因子全是离散数据的情况,可以通 过查表实现离散数据与离散数据的加减乘除运算。例如2位的离散数据,可以表示4个连续数据 值。对于4个连续数据共有4*4=16种组合。对于每种加减乘除运算的操作,可以制作并维护该4*4 的索引表,通过索引表找到对应的计算值。4种运算共需要4张4*4的索引表。
[0187] 对于运算因子包含离散数据和连续数据的情况,可以针对不同离散数据,为加、减、乘、除 运算预先设定相应的位操作。例如,可以采取按位异或后乘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得到结果。加法和减法操作与上述过程类似。根据离散数据的二进制 作为一个索引,索引到按位左移、右移、异或等操作。经过该操作后实现了与离散数据表示的真 实数据的相加或者相减操作。
[0188] 依赖关系判断单元52是运算单元51读写神经元缓存单元53的端口,同时能够保证神经元缓 存单元中数据的读写一致性。同时,数据依赖关系判断单元52也负责将读取数据通过互联模块4 发送给从运算模块,而从运算模块6的输出数据通过互联模块4直接发送给运算单元51。控制器 单元2输出的指令发送给计算单元51和数据依赖关系判断单元52,来控制其行为。
[0189] 图3-2示出了根据本申请实施例的用于执行支持离散数据表示的人工神经网络正向运算的装 置中从运算模块6的结构的示例框图。如图3-2所示,每个从运算模块6包括运算单元61、数据 依赖关系判定单元62、支持离散数据表示的神经元缓存单元63和支持离散数据表示的权值缓存单 元64。
[0190] 运算单元61接收控制器单元2发出的微指令并进行算数逻辑运算。对于运算因子全是离散数 据的情况,可以通过查表实现离散数据与离散数据的加减乘除运算。例如2位的离散数据,可以 表示4个连续数据值。对于4个连续数据共有4*4=16种组合。对于每种加减乘除运算的操作,可 以制作并维护该4*4的索引表,通过索引表找到对应的计算值。4种运算共需要4张4*4的索引表。
[0191] 对于运算因子包含离散数据和连续数据的情况,可以针对不同离散数据,为加、减、乘、除 运算预先设定相应的位操作。例如,可以采取按位异或后乘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得到结果。加法和减法操作与上述过程类似。根据离散数据的二进制 作为一个索引,索引到按位左移、右移、异或等操作。经过该操作后实现了与离散数据表示的真 实数据的相加或者相减操作。
[0192] 数据依赖关系判断单元62负责计算过程中对神经元缓存单元的读写操作。数据依赖关系判断 单元62执行读写操作之前会首先保证指令之间所用的数据不存在读写一致性冲突。例如,所有发 往数据依赖关系单元62的微指令都会被存入数据依赖关系单元62内部的指令队列里,在该队列 中,读指令的读取数据的范围如果与队列位置靠前的写指令写数据的范围发生冲突,则该指令必 须等到所依赖的写指令被执行后才能够执行。
[0193] 支持离散数据表示的神经元缓存单元63缓存该从运算模块6的输入神经元向量数据和输出神 经元值数据。该数据可以以离散数据的形式存储和传输。
[0194] 支持离散数据表示的权值缓存单元64缓存该从运算模块6在计算过程中需要的权值数据。该 数据根据用户定义可以是离散表示的或不是。对于每一个从运算模块6,都只会存储全部输入神经 元与部分输出神经元之间的权值。以全连接层为例,输出神经元按照从运算单元的个数N进行分 段,每段的第n个输出神经元对应的权值存放在第n个从运算单元中。
[0195] 从运算模块6实现每层人工神经网络正向运算过程中可以并行的前半部分。该模块中的数据 存储以及运算都支持离散数据表示。以人工神经网络全连接层(MLP)为例,过程为y=f(wx+b), 其中权值矩阵w和输入神经元向量x的乘法可以划分为不相关的并行计算子任务,out与in是列 向量,每个从运算模块6只计算in中相应的部分标量元素与权值矩阵w对应的列的乘积,得到的 每个输出向量都是最终结果的一个待累加的部分和,这些部分和在互联模块4中逐级两两相加得 到最后的结果。这个结果可以是离散数据表示的。所以计算过程变成了并行的计算部分和的过程 和后面的累加的过程。每个从运算模块6计算出输出神经元值,所有的输出神经元值在互联模块4 中拼成得到中间结果向量。每个从运算模块6只需要计算出中间结果向量y中与本模块对应的输 出神经元值即可。互联模块4对所有从运算模块6输出的神经元值求和,得到最终的中间结果向 量y。主运算模块5基于中间结果向量y进行后续计算,比如加偏置、池化(例如最大值池化 (MAXPOOLING)或平均值池化(AVGPOOLING)等)、做激活和做采样等。
[0196] 图3-3示出了运算单元的结构框图,其可用于主运算模块中的运算单元51或从运算模块中的 运算单元61。运算过程中输入数据可以是离散数据或连续数据。数据类型判断单元71判断输入数 据全是连续数据、全是离散数据或是既包含连续数据又包含离散数据的混合数据。当输入数据全 是连续数据时,连续数据运算单元72执行相应运算。
[0197] 当输入数据全是离散数据时,离散数据运算单元73执行相应运算。对于运算因子全是离散数 据的情况,可以通过查表实现离散数据与离散数据的加减乘除运算。例如2位的离散数据,可以 表示4个连续数据值。对于4个连续数据共有4*4=16种组合。对于每种加减乘除运算的操作,我 们制作并维护该4*4的索引表,通过索引表找到对应的计算值。4种运算共需要4张4*4的索引表。
[0198] 当输入数据是混合数据时,运算决定单元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得到结果。加法和减法操作与上述过程类似。根据 离散数据的二进制作为一个索引,索引到按位左移、右移、异或等操作。经过该操作后实现了与 离散数据表示的真实数据的相加或者相减操作。
[0199] 图3-4示出了连续离散转换单元。用户可以定义采用该模块将连续数据转换为离散数据或不采 用。输入连续数据,输出离散数据。该单元包括随机数产生模块、判断模块、运算模块。对于输 入的连续数据通过运算模块得到运算后的结果,经由判断模块用随机数与运算后的结果比较,判 断随机数落在哪一个区间,从而决定出输出的离散数据的具体值。例如用户定义产生二元离散数 据。对于输入的任意连续数据x。经由运算模块计算出结果y=abs(clip(-1,1))。之后通过判断模块, 如果随机数大于y,则输出的离散数据是1,反之输出的离散数据是0。离散数据1和0分别代表 了连续数据的-1和+1。将得到的离散数据存储回内存中。等待主从运算模块中的运算单元使用, 产生相应的操作。
[0200] 正向过程中的权值数据、输出输入数据可以采用离散数据表示或不采用。对于连续数据的乘 法操作,可以通过基于离散数据的异或、取非、位移等方式代替连续数据的乘法操作。例如权值 用1比特离散数据表示,0代表+1,1代表-1,通过对与权值相乘数据的符号位异或,实现了对权值 的乘法运算。
[0201] 根据本申请实施例,还提供了在前述装置上执行人工神经网络正向运算的指令集。指令集中 包括CONFIG指令、COMPUTE指令、IO指令、NOP指令、JUMP指令和MOVE指令等,其中:
[0202] CONFIG指令在每层人工神经网络计算开始前配置当前层计算需要的各种常数;
[0203] COMPUTE指令完成每层人工神经网络的算术逻辑计算;
[0204] IO指令实现从外部地址空间读入计算需要的输入数据以及在计算完成后将数据存回至外部空 间,该数据支持离散化表示;
[0205] NOP指令负责清空当前装置内部所有微指令缓存队列中的微指令,保证NOP指令之前的所有 指令全部指令完毕。NOP指令本身不包含任何计算操作;
[0206] JUMP指令负责控制器将要从指令缓存单元读取的下一条指令地址的跳转,用来实现控制流的 跳转;
[0207] MOVE指令负责将装置内部地址空间某一地址的数据搬运至装置内部地址空间的另一地址, 该过程独立于运算单元,在执行过程中不占用运算单元的资源。
[0208] 在如图1-1所示的计算装置内,可以添加在幂次转换单元,该幂次转换单元与存储介质(片上 存储介质)连接,用于将神经网络输入数据中非幂次权值数据转换为幂次权值数据。
[0209] 可选的,上述计算装置还可以包括:控制单元以及运算单元等等,控制单元以及运算单元的 具体描述可以参见如图1-1所示实施例的描述,这里不再赘述,另外,上述如图1-1所示的计算装 置还可以增加或扩展如图4-1所示的神经网络运算装置。另一种可选实施例中,神经网络运算装置 的结构如图4-1,包括:
[0210] 存储单元1,用于存储数据和运算指令;
[0211] 控制单元,与所述存储单元连接,用于控制数据和运算指令的交互,其接收该存储单元发送 的数据和运算指令,并将运算指令译码成运算微指令;
[0212] 运算单元7,与所述控制单元连接,接收该控制单元发送的数据和运算微指令,并根据运算微 指令对其接收的神经元数据及权值数据执行神经网络运算;
[0213] 幂次转换单元9,其与所述存储单元连接,用于将神经网络运算的输入神经元数据和/或输出 神经元数据转换为幂次神经元数据。
[0214] 具体的,所述控制单元包括:
[0215] 数据控制模块2,与所述存储单元连接,用于存储单元和各缓存模块之间的数据和运算指令交 互;
[0216] 指令缓存模块3,与所述数据控制模块连接,用于接收数据控制模块发送的运算指令;
[0217] 译码模块4,与所述指令缓存模块连接,用于从指令缓存模块中读取运算指令,并将其译码成 各运算微指令;
[0218] 输入神经元缓存模块5,与所述数据控制模块连接,用于接收数据控制模块发送的神经元数据;
[0219] 权值缓存模块6,与所述数据控制模块连接,用于接收从数据控制模块发送的权值数据。
[0220] 进一步的,所述运算单元7,分别与所述译码模块、输入神经元缓存模块及权值缓存模块连接, 接收运算微指令、神经元数据及权值数据,用于根据运算微指令对其接收的神经元数据和权值数 据执行相应的运算。所述输出神经元缓存单元8,与所述运算单元连接,用于接收运算单元输出的 神经元数据;并将其发送至所述控制单元的数据控制模块2。由此可作为下一层神经网络运算的输 入数据。
[0221] 其中,存储单元从外部地址空间接收数据和指令,该数据包括神经网络权值数据、神经网络 输入数据等。
[0222] 进一步的,幂次转换操作有多种可选方式。下面列举本实施例所采用的三种幂次转换操作:
[0223] 第一种幂次转换方法:
[0224] sout=sin
[0225]
[0226] 其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符 号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正 数部分,dout+=dout×sout, 表示对数据x做取下整操作。
[0227] 第二种幂次转换方法:
[0228] sout=sin
[0229]
[0230] 其中,
[0231] sout=sin
[0232]
[0233] 其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据,sin为输入数据的符 号,sout为输出数据的符号,din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正 数部分,dout+=dout×sout, 表示对数据x做取上整操作。
[0234] 第三种幂次转换方法:
[0235] Sout=Sin
[0236] dout+=[log2(din+)]
[0237] 其中,
[0238] sout=sin
[0239]
[0240] 其中,din为幂次转换单元的输入数据,dout为幂次转换单元的输出数据;sin为输入数据的符 号,sout为输出数据的符号;din+为输入数据的正数部分,din+=din×sin,dout+为输出数据的正 数部分,dout+=dout×sout;[x]表示对数据x做四舍五入操作。
[0241] 本公开还提供了另一种神经网络运算装置。图4-2为依据本实施例神经网络运算装置的示意图。 请参照图4-2,本实施例神经网络运算装置,包括:
[0242] 存储单元101,用于存储数据和运算指令;该存储单元从外部地址空间接收数据和运算指令, 该数据包括神经网络权值数据、神经网络输入数据等。
[0243] 控制单元,与所述存储单元连接,用于控制数据和运算指令的交互,其接收该存储单元发送 的数据和指令,并将运算指令译码成运算微指令;
[0244] 运算单元107,与所述控制单元连接,接收该控制单元发送的数据和运算微指令,并根据运算 微指令对其接收的权值数据和神经元数据执行神经网络运算;
[0245] 输出神经元缓存单元108,与所述运算单元连接,用于接收运算单元输出的神经元数据,并将 其发送至所述控制单元;
[0246] 幂次转换单元109,其与所述存储单元连接,用于将神经网络运算的输入神经元数据和/或输 出神经元数据转换为幂次神经元数据;以及
[0247] 幂次转换单元110,其与所述输出神经元缓存单元108连接,用于将神经网络运算后的神经元 数据转换为幂次神经元数据,并发送至所述控制单元。
[0248] 进一步的,所述控制单元包括:
[0249] 数据控制模块102,与所述存储单元连接,用于存储单元和各缓存模块之间的数据和运算指令 交互;
[0250] 指令缓存模块103,与所述数据控制模块连接,用于接收数据控制模块发送的运算指令;
[0251] 译码模块104,与所述指令缓存模块连接,用于从指令缓存模块中读取运算指令,并将其译码 成各运算微指令;
[0252] 输入神经元缓存模块105,与所述数据控制模块连接,用于接收数据控制模块发送的神经元数 据;
[0253] 权值缓存模块106,与所述数据控制模块连接,用于接收从数据控制模块发送的权值数据。
[0254] 具体的,所述运算单元107,分别与所述译码模块、输入神经元缓存模块及权值缓存模块连接, 接收各运算微指令、神经元数据及权值数据,用于根据各运算微指令对其接收的神经元数据和权 值数据执行相应的运算。
[0255] 所述幂次转换单元110,与所述数据控制模块连接,用于将神经网络运算后的神经元数据转换 为幂次神经元数据,并发送至所述控制单元的数据控制模块102。通过幂次转换单元110获得的幂 次神经元数据可作为神经网络运算下一层的输入神经元。
[0256] 另外,所述幂次转换的具体操作方法与前述实施例相同,此处不再赘述。
[0257] 另外,本公开实施例还提供了一种神经网络运算方法,图4-3为本实施例神经网络运算方法的 流程图。具体而言,本公开实施例的神经网络为多层神经网络,对于每层神经网络可按图4-3所示 的运算方法进行运算,其中,神经网络第一层输入幂次权值数据可通过存储单元从外部地址读入, 若外部地址读入的权值数据已经为幂次权值数据则直接传入存储单元,否则先通过幂次转换单元 转换为幂次权值数据。请参照图4-3,本实施例单层神经网络运算方法,包括:
[0258] 步骤S1,获取指令、神经元数据及幂次权值数据。
[0259] 其中,所述步骤S1包括以下子步骤:
[0260] S11,将运算指令、神经元数据及权值数据输入存储单元;其中,对幂次权值数据直接输入存 储单元,对非幂次权值数据经过幂次转换单元转换后输入存储单元;
[0261] S12,数据控制模块接收该存储单元发送的指令、神经元数据及幂次权值数据;
[0262] S13,指令缓存模块、输入神经元缓存模块及权值缓存模块分别接收所述数据控制模块发送的 运算指令、神经元数据及幂次权值数据并分发给译码模块或运算单元。
[0263] 所述幂次权值数据表示权值数据的数值采用其幂指数值形式表示,具体为,幂次权值数据包 括符号位和幂次位,符号位用一位或多位比特位表示权值数据的符号,幂次位用m位比特位表示 权值数据的幂次位数据,m为大于1的正整数。存储单元预存有编码表,提供幂次权值数据的每 个幂次位数据对应的指数数值。编码表设置一个或者多个幂次位数据(即置零幂次位数据)为指 定对应的幂次权值数据为0。也就是说,当幂次权值数据的幂次位数据是编码表里的置零幂次位数 据时候,表示该幂次权值数据为0。其中,所述编码表可以有灵活的存储方式,既可以是表格形式 进行存储,还可以是通过函数关系进行的映射。
[0264] 编码表的对应关系可以是任意的。
[0265] 例如,编码表的对应关系可以是乱序的。如图4-3.1所示一种m为5的编码表的部分内容,幂 次位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为3。幂次 位数据为00010的时候对应指数数值为4。幂次位数据为00011的时候对应指数数值为1。幂次位 数据为00100的时候对应幂次权值数据为0。
[0266] 编码表的对应关系也可以是正相关的,存储单元预存一个整数值x和一个正整数值y,最小的 幂次位数据对应指数数值为x,其他任意一个或多个幂次位数据对应幂次权值数据为0。x表示偏 置值,y表示步长。在一种实施例情况下,最小的幂次位数据对应指数数值为x,最大的幂次位数 据对应幂次权值数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂 次位数据+x)*y。通过预设定不同的x和y以及通过改变x和y的数值,幂次的表示范围变得可 配,可以适用于需要不同数值范围的不同的应用场景。因此,本神经网络运算装置的应用范围更 加广泛,使用更加灵活可变,可根据用户需求来做调整。
[0267] 在一种实施方式中,y为1,x的数值等于-2m-1。由此幂次权值数据所表示的数值的m-1 m-1指数范围 为-2 ~2 -1。
[0268] 在一种实施方式中,如图4-3.2所示,一种m为5,x为0,y为1的编码表的部分内容,幂次 位数据为00000的时候对应指数数值为0。幂次位数据为00001的时候对应指数数值为1。幂次位 数据为00010的时候对应指数数值为2。幂次位数据为00011的时候对应指数数值为3。幂次位数 据为11111的时候对应幂次权值数据为0。如图4-3.3所示,另一种m为5,x为
0,y为2的编码 表的部分内容,幂次位数据为00000的时候对应指数数值为0。幂次位数据为
00001的时候对应指 数数值为2。幂次位数据为00010的时候对应指数数值为4。幂次位数据为00011的时候对应指数 数值为6。幂次位数据为11111的时候对应幂次权值数据为0。
[0269] 编码表的对应关系可以是负相关的,存储单元预存一个整数值x和一个正整数值y,最大的幂 次位数据对应指数数值为x,其他任意一个或多个幂次位数据对应幂次权值数据为0。x表示偏置 值,y表示步长。在一种实施例情况下,最大的幂次位数据对应指数数值为x,最小的幂次位数据 对应幂次权值数据为0,最小和最大的幂次位数据之外的其他的幂次位数据对应指数数值为(幂次 位数据-x)*y。通过预设定不同的x和y以及通过改变x和y的数值,幂次的表示范围变得可配, 可以适用于需要不同数值范围的不同的应用场景。因此,本神经网络运算装置的应用范围更加广 泛,使用更加灵活可变,可根据用户需求来做调整。
[0270] 在一种实施方式中,y为1,x的数值等于2m-1。由此幂次权值数据所表示的数值的指数范围 为-2m-1-1~2m-1。
[0271] 如图4-3.4所示,一种m为5的编码表的部分内容,幂次位数据为11111的时候对应数数值为 0。幂次位数据为11110的时候对应指数数值为1。幂次位数据为11101的时候对应指数数值为2。 幂次位数据为11100的时候对应指数数值为3。幂次位数据为00000的时候对应幂次权值数据为0。
[0272] 编码表的对应关系可以是幂次位数据最高位代表置零位,幂次位数据其他m-1位对应指数数 值。当幂次位数据最高位为0时,对应幂次权值数据为0;当幂次位数据最高位为1时,对应幂次 权值数据不为0。反之亦可,即当幂次位数据最高位为1时,对应幂次权值数据为0;当幂次位数 据最高位为0时,对应幂次权值数据不为0。用另一种语言来描述,即幂次权值数据的幂次位被分 出一个比特来指示幂次权值数据是否为0。
[0273] 在一个具体实例图4-3.5所示,符号位为1位,幂次位数据位为7位,即m为7。编码表为幂 次位数据为11111111的时候对应幂次权值数据为0,幂次位数据为其他数值的时候幂次权值数据 对应相应的二进制补码。当幂次权值数据符号位为0,幂次位为0001001,则其表示具体数值为29, 即512;幂次权值数据符号位为1,幂次位为1111101,则其表示具体数值为-2-3,即-0.125。相对 于浮点数据,幂次数据只保留数据的幂次位,极大减小了存储数据所需的存储空间。
[0274] 通过幂次数据表示方法,可以减小存储权值数据所需的存储空间。在本实施例所提供示例中, 幂次数据为8位数据,应当认识到,该数据长度不是固定不变的,在不同场合下,根据数据权值 的数据范围采用不同的数据长度。
[0275] 步骤S2,根据运算指令对神经元数据及幂次权值数据进行神经网络运算。其中,所述步骤S2 包括以下子步骤:
[0276] S21,译码模块从指令缓存模块中读取指令,并将其译码成各运算指令;
[0277] S22,运算单元分别接收所述译码模块、输入神经元缓存模块及权值缓存模块发送的运算指令、 幂次权值数据以及神经元数据,并根据运算指令对神经元数据及幂次表示的权值数据进行神经网 络运算。
[0278] 所述神经元与幂次权值乘法操作具体为,神经元数据符号位与幂次权值数据符号位做异或操 作;编码表的对应关系为乱序的情况下查找编码表找出幂次权值数据幂次位对应的指数数值,编 码表的对应关系为正相关的情况下记录编码表的指数数值最小值并做加法找出幂次权值数据幂次 位对应的指数数值,编码表的对应关系为负相关的情况下记录编码表的最大值并做减法找出幂次 权值数据幂次位对应的指数数值;将指数数值与神经元数据幂次位做加法操作,神经元数据有效 位保持不变。
[0279] 具体实例一如图4-3.6所示,神经元数据为16位浮点数据,符号位为0,幂次位为10101,有 效位为0110100000,则其表示的实际数值为1.40625*26。幂次权值数据符号位为
1位,幂次位数 据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次权值数据为0,幂次位数据 为其他数值的时候幂次位数据对应相应的二进制补码。幂次权值为
000110,则其表示的实际数值 为64,即26。幂次权值的幂次位加上神经元的幂次位结果为
12
11011,则结果的实际数值为1.40625*2 , 即为神经元与幂次权值的乘积结果。通过该运算操作,使得乘法操作变为加法操作,减小计算所 需的运算量。
[0280] 具体实例二如图4-3.7所示,神经元数据为32位浮点数据,符号位为1,幂次位为10000011, 有效位为10010010000000000000000,则其表示的实际数值为-1.5703125*24。
幂次权值数据符号 位为1位,幂次位数据位为5位,即m为5。编码表为幂次位数据为11111的时候对应幂次权值数 据为0,幂次位数据为其他数值的时候幂次位数据对应相应的二进制补码。幂次神经元为111100, 则其表示的实际数值为-2-4。(神经元的幂次位加上幂次权值的幂次位结果为01111111,则结果的 实际数值为1.5703125*20,即为神经元与幂次权值的乘积结果。
[0281] 可选的,还包括步骤S3,将神经网络运算后的神经元数据输出并作为下一层神经网络运算的 输入数据。
[0282] 其中,所述步骤S3可包括以下子步骤:
[0283] S31,输出神经元缓存单元接收所述计算单元发送的神经网络运算后得到的神经元数据。
[0284] S32,将输出神经元缓存单元接收的神经元数据传输给数据控制模块,通过输出神经元缓存单 元获得的神经元数据可作为神经网络运算下一层的输入神经元,再重复步骤S1至步骤S3直到神 经网络最后一层运算结束。
[0285] 另外,通过幂次转换单元获得的幂次神经元数据可作为神经网络运算下一层的输入幂次神经 元,再重复步骤1至步骤3直到神经网络最后一层运算结束。通过改变存储单元预存的整数值x 和正整数值y,可以调整神经网络运算装置所能表示的幂次神经元数据范围。
[0286] 另外,所述幂次转换的具体操作方法与前述实施例相同,此处不再赘述。
[0287] 在一些实施例里,公开了一种芯片,其包括了上述神经网络处理器。
[0288] 在一些实施例里,公开了一种芯片封装结构,其包括了上述芯片。
[0289] 在一些实施例里,公开了一种板卡,其包括了上述芯片封装结构。
[0290] 在一些实施例里,公开了一种电子装置,其包括了上述板卡。
[0291] 电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、 行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移 动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。
[0292] 所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电 饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心 电图仪。
[0293] 以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所 应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限制本申请,凡在本申请的精神 和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。