CN109478251B - 处理方法及加速装置 - Google Patents
处理方法及加速装置 Download PDFInfo
- Publication number
- CN109478251B CN109478251B CN201880002821.5A CN201880002821A CN109478251B CN 109478251 B CN109478251 B CN 109478251B CN 201880002821 A CN201880002821 A CN 201880002821A CN 109478251 B CN109478251 B CN 109478251B
- Authority
- CN
- China
- Prior art keywords
- weight
- unit
- neural network
- weights
- instruction
- 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/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- 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/044—Recurrent networks, e.g. Hopfield 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/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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- 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
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- 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/048—Activation functions
Abstract
本公开提供了一种处理装置,包括粗粒度剪枝单元,用于对神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值;运算单元,用于根据剪枝后的权值对所述神经网络进行训练;其中,所述粗粒度剪枝单元具体用于:通过滑动窗口从神经网络的权值中选取出M个权值;当所述M个权值满足预设条件时,将所述M个权值的全部或者部分置为零。上述处理装置能减少访存同时减少运算量,从而获得加速比并降低能耗。
Description
技术领域
本公开涉及计算机领域的一种处理方法及加速装置,进一步涉及一种通过剪枝神经网络权值而加速运算的处理方法及加速装置。
背景技术
神经网络(neural network)已经获得了非常成功的应用。但是随着我们设计更大规模,更深层次的神经网络,将引入更多的权值,而超大规模权值成为神经网络应用的一个巨大挑战。一方面,大规模的权值数据对存储提出了更高的要求,大量访存操作将带来巨大的访存能耗,另一方面,大量的权值对运算单元也提出更高要求,计算时间和计算能耗随之增加。因此,在降低计算精度的前提下减少神经网络的权值,从而减少数据存储量以及计算量成为一个亟待解决的问题。
目前大部分的工作主要利用低秩矩阵分解或者哈希技巧等,但是这些方法能够减少的权值以及计算量有限,并且会降低神经网络的精度,因此,需要一种更加有效的方法减少神经网络的权值并减少计算量。
发明内容
(一)要解决的技术问题
有鉴于此,本公开的目的在于提供一种处理方法以及加速装置,以解决以上所述的至少一项技术问题。
(二)技术方案
第一方面,本发明实施例提供一种处理装置,包括:
粗粒度枝单元,用于对神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值;
运算单元,用于根据剪枝后的权值对所述神经网络进行训练;
其中,所述粗粒度剪枝单元具体用于:
通过滑动窗口从神经网络的权值中选取出M个权值,所述M为大于1的整数;当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零。
进一步的,所述预设条件为:
所述M个权值的信息量小于第一预设阈值。
进一步的,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于所述第一阈值,或者所述M个权值绝对值的几何平均值小于所述第二阈值,或者所述M个权值的最大值小于所述第三阈值。
进一步的,所述粗粒度剪枝单元用于:重复对神经网络的权值进行粗粒度剪枝以及根据剪枝后的权值对神经网络进行训练,直至保证在精度不损失设定精度的前提下没有权值满足所述预设条件。
进一步的,所述设定精度为x%,其中x介于0至5之间。
进一步的,所述神经网络包括全连接层、卷积层和/或长短期记忆LSTM层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数, Nout_i表示第i个全连接层权值输出神经元个数;所述粗粒度剪枝单元具体用于:
当对所述全连接层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿
着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数, Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout;
当对所述卷积层的权值进行粗粒度剪枝操作时,所述滑动窗口为大小为 Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0 且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By;
当对所述LSTM层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为 Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
进一步的,所述运算单元具体用于:根据所述剪枝后的权值和通过使用反向传播算法进行重新训练。
进一步的,所述处理组装置还包括:
量化单元,用于在对神经网络的权值进行粗粒度剪枝之后和在根据剪枝后的权值对神经网络进行重训练之前,量化所述神经网络的权值和/或对所述神经网络的权值进行第一操作,以降低所述神经网络的权值比特数。
第二方面,本发明实施例提供一种加速装置,该加速装置包括:
存储单元,用于存储神经网络的输入神经元、输出神经元、剪枝后的神经网络权值以及指令;其中神经网络为对剪枝后的权值训练得到训练好的神经网络模型;
粗粒度剪枝单元,用于对所述神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值,并将该剪枝后的权值存储到所述存储单元中;
粗粒度选数单元,用于接收输入神经元和目标权值位置信息,选出目标权值对应的神经元,目标权值为绝对值大于第二预设阈值的权值;
运算单元,用于接收输入的目标权值及其对应的神经元,并根据目标权值及其对应的神经元进行运算,并将输出神经元重新传输给存储单元。
其中,所述存储单元还用于存储运算单元进行运算过程中产生的中间结果。
进一步的,所述加速装置还包括:
指令控制单元,用于接收所述指令,并对该指令进行译码,以得到控制信息以控制所述运算单元。
进一步的,所述存储单元用于存储目标权值以及目标权值的位置信息。
进一步的,所述加速装置还包括:
预处理单元,用于对原始数据进行预处理,将预处理后的数据输入所述存储部分,上述原始数据包括输入神经元、输出神经元和权值。
进一步的,所述预处理包括数据的切分、高斯滤波、二值化、正则化和/或归一化处理。
进一步的,所述加速装置还包括:
指令缓存单元,用于缓存所述指令。所述指令缓存单元为片上缓存。
进一步的,所述加速装置还包括:
目标权值缓存单元,用于缓存目标权值。所述目标权值缓存单元为片上缓存。
进一步的,所述加速装置还包括:
目标权值位置缓存单元,用于缓存目标权值的位置信息。所述目标权值位置缓存单元为片上缓存。
进一步的,所述加速装置还包括:
输入神经元缓存单元,用于缓存输入神经元,所述输入神经元缓存单元为片上缓存。
进一步的,所述加速装置还包括:
输出神经元缓存单元,用于缓存输出神经元,所述输出神经元缓存单元为片上缓存。
进一步的,所述目标权值位置缓存单元,用于缓存目标权值的位置信息;目标权值位置缓存单元将输入数据中每个连接权值一一对应到相应的输入神经元。
进一步的,加速装置还包括:
直接存取单元DMA,用于在所述存储单元,与所述指令缓存单元、粗粒度剪枝单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元或输出神经元缓存中进行数据或者指令读写。
进一步的,所述运算单元包括以下至少一种:乘法器,用于将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;加法树,用于将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;激活函数运算单元,对第五数据通过激活函数运算得到输出数据,所述激活函数为sigmoid、tanh、relu或softmax函数操作。
进一步的,所述运算单元还包池化单元,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
第三方面,本发明实施例提供一种加速装置,该加速装置包括:
存储单元,用于存储神经网络的输入神经元、输出神经元、剪枝后的神经网络权值以及指令;其中所述神经网络为对剪枝后的权值训练得到训练好的神经网络模型;
粗粒度剪枝单元,用于对神经网络的权值进行剪枝,以得到剪枝后的权值,并将剪枝后的权值存储到上述存储单元中;
运算单元,用于根据剪枝后的权值对神经网络进行训练,以得到训练后的神经网络;
粗粒度选数单元,用于接收输入神经元和目标权值位置信息,选出目标权值对应的输入神经元,目标权值为绝对值大于第二预设阈值的权值;其中,目标权值为所述训练后的权值。
运算单元,用于接收输入的目标权值及其对应的输入神经元,并根据目标权值及其对应的输入神经元进行运算,并将输出神经元重新传输给存储单元。
其中,上述存储单元还可用于存储运算单元进行运算过程中产生的中间结果。
进一步的,加速装置还包括:
指令控制单元,用于接收所述指令,对所述指令进行译码,以得到控制信息,用于控制所述运算单元。
进一步的,所述存储单元用于存储目标权值以及目标权值的位置信息。
进一步的,所述加速装置还包括:
预处理单元,用于对原始数据进行预处理,将预处理后的数据输入所述存储部分,上述原始数据包括训练后的神经网络的输入神经元、输出神经元和权值。
进一步的,所述预处理包括数据的切分、高斯滤波、二值化、正则化和/或归一化处理。
进一步的,加速装置还包括:
指令缓存单元,用于缓存所述指令。所述指令缓存单元为片上缓存。
进一步的,加速装置还包括:
目标权值缓存单元,用于缓存目标权值。所述目标权值缓存单元为片上缓存。
进一步的,加速装置还包括:
目标权值位置缓存单元,用于缓存目标权值的位置信息。所述目标权值位置缓存单元为片上缓存。
进一步的,加速装置还包括:
输入神经元缓存单元,用于缓存输入神经元,所述输入神经元缓存单元为片上缓存。
进一步的,加速装置还包括:
输出神经元缓存单元,用于缓存输出神经元,所述输出神经元缓存单元为片上缓存。
进一步的,所述目标权值位置缓存单元,用于缓存目标权值的位置信息,目标权值位置缓存单元将输入数据中每个连接权值一一对应到相应的输入神经元。
进一步的,加速装置还包括:
直接存取单元DMA,用于在所述存储单元,与所述指令缓存单元、粗粒度剪枝单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元或输出神经元缓存中进行数据或者指令读写。
进一步的,所述运算单元包括以下至少一种:乘法器,用于将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;加法树,用于将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;激活函数运算单元,对第五数据通过激活函数运算得到输出数据,所述激活函数为sigmoid、tanh、relu或softmax函数操作。
进一步的,所述运算单元还包池化单元,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
第四方面,本发明实施例提供一种处理方法,包括:
对神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值;
根据所述剪枝后的权值对神经网络进行训练;
其中,所述对神经网络进行粗粒度剪枝,以得到剪枝后的权值,包括:
通过滑动窗口从神经网络的权值中选取出M个权值,所述M为大于1的整数;
当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零,以得到剪枝后的权值。
进一步的,所述预设条件为:
所述M个权值的信息量小于第一预设阈值。
进一步的,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于所述第一阈值,或者所述M个权值绝对值的几何平均值小于所述第二阈值,或者所述M个权值的最大值小于所述第三阈值。
进一步的,所述方法还包括:
重复对所述神经网络的权值进行粗粒度剪枝以及根据剪枝后的权值进行训练,直至保证在精度不损失设定精度的前提下没有权值满足所述预设条件。
进一步的,所述设定精度为x%,其中x介于0至5之间。
进一步的,所述神经网络包括全连接层、卷积层和/或长短期记忆LSTM层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数, Nout_i表示第i个全连接层权值输出神经元个数;所述对神经网络进行粗粒度剪枝包括:
当对所述神经网络的全连接层的权值进行粗粒度剪枝时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0 且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数,Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout。
当对所述神经网络的卷积层的权值进行粗粒度剪枝时,所述滑动窗口为大小为Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0 且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By。
当对所述神经网络的LSTM层的权值进行粗粒度剪枝时,所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;所述对神经网络的LSTM层的权值进行粗粒度剪枝具体包括:
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当
所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
进一步的,所述根据所述剪枝后的权值对神经网络进行训练具体为:
根据所述剪枝后的权值和通过反向传播算法对所述神经网络进行重新训练。
进一步的,在对所述神经网络进行粗粒度剪枝和重训练之间还包括:
量化所述神经网络的权值和/或对所述神经网络权值进行第一操作,以降低权值比特数。
第五方面,本发明实施例提供一种神经网络运算装置,所述神经网络运算装置包括一个或多个如第一方面、第二方面或者第三方面所述的加速装置,用于从其他处理装置中获取待运算数据和控制信息,并执行指定的神经网络运算,将执行结果通过I/O接口传递给其他处理装置;
当所述神经网络运算装置包含多个所述计算装置时,所述多个所述计算装置间可以通过特定的结构进行连接并传输数据;
其中,多个所述计算装置通过快速外部设备互连总线PCIE总线进行互联并传输数据,以支持更大规模的神经网络的运算;多个所述计算装置共享同一控制系统或拥有各自的控制系统;多个所述计算装置共享内存或者拥有各自的内存;多个所述计算装置的互联方式是任意互联拓扑。
第六方面,本发明实施例提供一种神经网络芯片,所述神经网络芯片包括第一方面的处理装置、第二方面、第三方面所述的加速装置和/或第五方面所述的神经网络运算装置。
第七方面,本发明实施例提供一种芯片封装结构,包括第六方面所述的神经网络芯片。
第八方面,本发明实施例提供一种板卡,包括第六方面所述的神经网络芯片或第七方面所述的芯片封装结构。
第九方面,本发明实施例提供一种电子装置,包括第吧方面所述的板卡。
进一步的,所述电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。
进一步的,所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
第十方面,本发明实施例提供一种处理装置,包括存储单元、粗粒度选数单元和运算单元,
存储单元,用于存储神经网络的输入神经元、输出神经元、权值以及指令;
粗粒度剪枝单元,用于对所述神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值,并将剪枝后的权值和目标权值位置信息存储到所述存储单元中;所述目标权值为绝对值大于第二预设阈值的权值,其中,所述粗粒度剪枝单元具体用于:
通过滑动窗口从神经网络的权值中选取出M个权值,所述M为大于1的整数;
当所述M个权值满足预设条件时,将所述M个权值的全部或者部分置为零;
运算单元,用于根据所述剪枝后的权值进行训练;训练过程中已经被置为零的权值保持为零;
粗粒度选数单元,用于接收输入神经元和目标权值位置信息,根据所述目标权值位置信息选出与目标权值对应的输入神经元;
运算单元,还用于根据输入的目标权值和目标权值对应的输入神经元,完成神经网络运算得到输出神经元,并将所述输出神经元作为下一层的输入神经元传输给存储单元。
进一步的,所述预设条件包括:
所述M个权值的信息量小于第一预设阈值。
进一步的,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于所述第一阈值,或者所述M个权值绝对值的几何平均值小于所述第二阈值,或者所述M个权值的最大值小于所述第三阈值。
进一步的,所述粗粒度剪枝单元和运算单元用于:
重复对所述神经网络的权值进行粗粒度剪枝以及根据剪枝后的权值进行训练,直至保证在精度不损失设定精度的前提下没有权值满足所述预设条件。
进一步的,所述神经网络包括全连接层、卷积层和/或长短期记忆LSTM层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数, Nout_i表示第i个全连接层权值输出神经元个数;所述粗粒度剪枝单元具体用于:
当对所述全连接层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿
着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数, Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout;
当对所述卷积层的权值进行粗粒度剪枝操作时,所述滑动窗口为大小为 Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0 且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By;
当对所述LSTM层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为 Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
进一步的,所述处理装置还包括:指令控制单元,用于接收所述指令,经过译码后生成控制指令控制运算单元。
进一步的,所述存储单元用于存放的权值为目标权值以及所述目标权值位置数据。
进一步的,所述处理装置还包括预处理单元:用于对输入神经元和权值进行预处理,将预处理后的数据输入至所述存储单元。
进一步的,所述预处理包括数据的切分、高斯滤波、二值化、正则化和/或归一化处理。
进一步的,所述处理装置还包括指令缓存单元,用于缓存所述指令。
进一步的,所述处理装置还包括目标权值缓存单元,用于缓存目标权值数据。
进一步的,所述处理装置还包括目标权值位置缓存单元,用于缓存目标权值位置数据。
进一步的,所述处理装置还包括输入神经元缓存单元,用于缓存输入神经元。
进一步的,所述处理装置还包括输出神经元缓存单元,用于缓存输出神经元。
进一步的,所述指令缓存单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元或输出神经元缓存单元为片上缓存。
进一步的,目标权值位置缓存单元,用于缓存目标权值位置数据;目标权值位置缓存将输入数据中每个连接权值一一对应到相应的输入神经元。
进一步的,所述处理装置还包括直接内存存取DMA单元,用于在所述存储单元,与所述指令缓存单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元或输出神经元缓存单元中进行数据或者指令读写。
进一步的,所述运算单元包括以下至少一种:
乘法器,用于将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;
一个或多个加法器,用于将第三输入数据相加;
激活函数运算单元,用于对第五数据通过激活函数运算得到输出数据,所述激活函数包括sigmoid、tanh、relu或softmax函数。
进一步的,所述运算单元包括多个加法器,所述多个加法器组成加法树,用于将第三输入数据通过加法树逐级相加。
进一步的,所述运算单元还包池化单元,用于对输入的数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
进一步的,所述运算单元还用于重复将剪枝后的神经网络进行训练,直至不损失设定精度的前提下没有权值能被置为零。
第十一方面,本发明实施例提供一种数据的量化方法,包括:
对神经网络的权值进行分组;
对每一组权值用聚类算法进行聚类操作,将一组权值分成m个类,每个类计算出一个中心权值,每个类中的所有权值都用中心权值替换,其中,m为正整数;以及
对中心权值进行编码操作,以得到密码本和权值字典。
进一步的,所述方法还包括:
对神经网络进行重训练,重训练时只训练密码本,权值字典内容保持不变。
进一步的,所述重训练采用反向传播算法。
进一步的,所述分组包括分为一组、层类型分组、层间分组和/或层内分组。
进一步的,所述聚类算法包括K-means、K-medoids、Clara和/或Clarans。
进一步的,所述分组为分为一组,包括:
将神经网络的所有权值归为一组。
进一步的,所述神经网络包括i个卷积层,j个全连接层,m个长短期记忆LSTM层,共t种不同类型的层,其中,i,j,m均为大于或等于0的整数,且满足i+j+m≥1,t为大于或等于1的整数且满足t=i+j+m,所述分组为层类型分组,包括:
将所述神经网络的权值将被分为t组。
进一步的,所述分组为层间分组,包括:
将神经网络中一个或者多个卷积层的权值、一个或者多个全连接层的权值和一个或者多个LSTM层的权值各划分成一组。
进一步的,所述分组为层内分组,包括:
将神经网络的卷积层作为一个四维矩阵(Nfin,Nfout,Kx,Ky),其中,Nfin,Nfout,Kx,Ky 是正整数,Nfin表示输入特征图像数量,Nfout表示输出特征图像数量,(Kx,Ky)表示卷积核的大小,卷积层的权值按(Bfin,Bfout,Bx,By)的组大小被分成 Nfin*Nfout*Kx*Ky/(Bfin*Bfout*Bx*By)个不同的组,其中Bfin为小于或等于Nfin的正整数, Bfout为小于或等于Nfout的正整数,Bx为小于或等于Kx的正整数,By为小于或等于Ky 的正整数,或者;
将神经网络的全连接层作为一个二维矩阵(Nin,Nout),其中Nin,Nout是正整数,Nin表示输入神经元的个数,Nout表示输出神经元的个数,共有Nin*Nout个权值;全连接层权值按照(Bin,Bout)的组大小被分成(Nin*Nout)/(Bin*Bout)个不同的组,其中Bin是小于或等于Nin的正整数,Bout是小于或等于Nout的正整数,或者;
将神经网络的LSTM层权值作为多个全连接层的权值的组合,且LSTM层的权值由n个全连接层权值组成,其中n为正整数,则每一个全连接层都可以按照全连接层的分组方式进行分组操作。
进一步的,所述分组为分为一组、层内分组和层间分组,包括:
将卷积层作为一组,将全连接层进行层内分组,将LSTM层进行层间分组。
进一步的,所述一个类的中心权值选择方法为:使得代价函数J(w,w0)最小。
进一步的,所述代价函数为:
其中,w是一个类中的权值,w0是该类的中心权值,n是该类中权值的数量,n为正整数,wi是该类中第i个权值,i为正整数,且1≤i≤n。
第十二方面,本发明实施例提供一种数据的量化装置,包括:
存储器,用于存储操作指令;以及
处理器,用于执行存储器中的操作指令,在执行该操作指令时依照第十一方面所述的全部或者部分量化方法进行操作。
进一步的,所述操作指令为二进制数,包括操作码和地址码,操作码指示处理器即将进行的操作,地址码指示处理器到存储器中的地址中读取参与操作的数据。
第十三方面,本发明实施例提供了一种处理装置,包括:
控制单元,用于接收指令并进行译码,生成查找控制信息和运算控制信息;
查找表单元,用于接收所述查找控制信息、权值字典和密码本,并根据查找控制信息,对权值字典和密码本进行查表操作,得到量化权值;以及
运算单元,用于接收所述运算控制信息和输入神经元,并根据运算控制信息,对量化权值和输入神经元进行运算操作,得到输出神经元并输出。
进一步的,所述处理装置还包括:
预处理单元,用于对外部输入的输入信息进行预处理,得到所述输入神经元、权值字典、密码本和指令;
存储单元,用于存储输入神经元、权值字典、密码本和指令,以及接收输出神经元;
缓存单元,用于缓存所述指令、输入神经元、输出神经元、权值字典和密码本;
直接内存存取单元,用于在所述存储单元和缓存单元之间进行数据或者指令读写。
进一步的,所述预处理单元中,对外部输入的输入信息进行的预处理包括:切分、高斯滤波、二值化、正则化和/或归一化。
进一步的,所述缓存单元包括:
指令缓存单元,用于缓存所述指令;
输入神经元缓存单元,用于缓存所述输入神经元;
输出神经元缓存单元,用于缓存所述输出神经元。
进一步的,所述缓存单元还包括:
权值字典缓存单元,用于缓存所述权值字典;
密码本缓存单元,用于缓存所述密码本。
进一步的,所述指令为神经网络专用指令。
进一步的,所述神经网络专用指令包括:
控制指令,用于控制神经网络执行过程;
数据传输指令,用于完成不同存储介质之间的数据传输,数据格式包括矩阵、向量和标量;
运算指令,用于完成神经网络的算术运算,包括矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令、MAXOUT神经网络运算指令;
逻辑指令,用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述神经网络专用指令包括至少一种Cambricon指令,该Cambricon指令包括操作码和操作数,所述Cambricon指令包括:
Cambricon控制指令,用于控制执行过程,且该Cambricon控制指令包括跳转指令和条件分支指令;
Cambricon数据传输指令,用于完成不同存储介质之间的数据传输,包括加载指令、存储指令、搬运指令;其中,所述加载指令用于将数据从主存加载到缓存;存储指令用于将数据从缓存存储到主存;搬运指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据;
Cambricon运算指令,用于完成神经网络算术运算,包括Cambricon矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令;
其中,所述Cambricon矩阵运算指令用于完成神经网络中的矩阵运算,包括矩阵乘向量、向量乘矩阵、矩阵乘标量、外积、矩阵加矩阵和矩阵减矩阵;所述Cambricon向量运算指令用于完成神经网络中的向量运算,包括向量基本运算、向量超越函数运算、内积、向量随机生成和向量中最大/最小值;Cambricon标量运算指令用于完成神经网络中的标量运算,包括标量基本运算和标量超越函数运算;
Cambricon逻辑指令,用于神经网络的逻辑运算,Cambricon逻辑指令包括Cambricon 向量逻辑运算指令和Cambricon标量逻辑运算指令;
其中,所述Cambricon向量逻辑运算指令用于完成向量比较、向量逻辑运算和向量大于合并;向量逻辑运算包括与、或、非;所述Cambricon标量逻辑运算指令用于完成标量比较和标量逻辑运算。
进一步的,所述Cambricon数据传输指令支持以下的一种或者多种数据组织方式:矩阵、向量和标量;
所述向量基本运算包括向量加、减、乘、除;
向量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;
所述标量基本运算包括标量加、减、乘、除;标量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;
所述向量比较包括但不限于大于、小于、等于、大于或等于(≥)、小于或等于(≤)和不等于;
所述向量逻辑运算包括与、或、非;
所述标量比较包括但不限于大于、小于、等于、大于或等于(≥)、小于或等于(≤)和不等于;
所述标量逻辑运算包括与、或、非。
进一步的,所述存储单元还用于存储未量化权值,且该未量化权值直接输出至运算单元。
进一步的,所述运算单元包括:
第一运算部分,用于将所述权值和输入神经元相乘,和/或;
第二运算部分,包括一个或者多个加法器,用于对所述权值和输入神经元通过一个或多个加法器相加,和/或;
第三运算部分,对所述权值和输入神经元进行非线性函数运算,所述非线性函数包括激活函数,所述激活函数包括sigmoid、tanh、relu和/或softmax,和/或;
第四运算部分,用于对所述权值和输入神经元进行池化操作,所述池化操作包括平均值池化、最大值池化和/或中值池化;其中,所述权值包括未量化权值和/或量化权值。
进一步的,所述第二运算部分包括多个加法器,所述多个加法器组成加法树,实现权值和输入神经元的逐级相加。
第十四方面,本发明实施例还提供了一种处理方法,包括步骤:
接收输入神经元、权值字典、密码本和指令;
对所述指令进行译码,以得到查找控制信息和运算控制信息;
根据所述查找控制信息,查找权值字典和密码本得到量化权值,以及根据所述运算控制信息,对该量化权值以及输入神经元进行运算操作,得到输出神经元并输出。
进一步的,在所述接收输入神经元、权值字典、密码本和指令之前,所述方法还包括步骤:
对外部输入的输入信息进行预处理,得到所述输入神经元、权值字典、密码本和指令,以及;
在所述接收输入神经元、权值字典、密码本和指令之后,所述方法还包括步骤:
存储输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及缓存所述指令、输入神经元、输出神经元。
进一步的,在所述接收输入神经元、权值字典、密码本和指令之后,所述方法还包括步骤:缓存权值字典和密码本。
进一步的,所述预处理包括切分、高斯滤波、二值化、正则化和、或归一化。
进一步的,所述指令为神经网络专用指令。
进一步的,所述神经网络专用指令包括:
控制指令,用于控制神经网络执行过程;
数据传输指令,用于完成不同存储介质之间的数据传输,数据格式包括矩阵、向量和标量;
运算指令,用于完成神经网络的算术运算,该运算指令包括矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令、MAXOUT神经网络运算指令;
逻辑指令,用于完成神经网络的逻辑运算,该逻辑指令包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述神经网络专用指令包括至少一种Cambricon指令,该Cambricon指令包括操作码和操作数,所述Cambricon指令包括:
Cambricon控制指令,用于控制执行过程,且该Cambricon控制指令包括跳转指令和条件分支指令;
Cambricon数据传输指令,用于完成不同存储介质之间的数据传输,该Cambricon数据传输指令包括加载指令、存储指令、搬运指令;
其中,所述加载指令用于将数据从主存加载到缓存;存储指令用于将数据从缓存存储到主存;搬运指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据;
Cambricon运算指令,用于完成神经网络算术运算,该Cambricon运算指令包括Cambricon矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令;
其中,所述Cambricon矩阵运算指令用于完成神经网络中的矩阵运算,包括矩阵乘向量、向量乘矩阵、矩阵乘标量、外积、矩阵加矩阵和矩阵减矩阵;所述Cambricon向量运算指令用于完成神经网络中的向量运算,包括向量基本运算、向量超越函数运算、内积、向量随机生成和向量中最大/最小值;Cambricon标量运算指令用于完成神经网络中的标量运算,包括标量基本运算和标量超越函数运算;
Cambricon逻辑指令用于神经网络的逻辑运算,该Cambricon逻辑指令包括Cambricon 向量逻辑运算指令和Cambricon标量逻辑运算指令;其中,所述Cambricon向量逻辑运算指令用于完成向量比较、向量逻辑运算和向量大于合并;向量逻辑运算包括与、或、非;所述Cambricon标量逻辑运算指令用于完成标量比较和标量逻辑运算。
进一步的,所述Cambricon数据传输指令支持以下的一种或者多种数据组织方式:矩阵、向量和标量;所述向量基本运算包括向量加、减、乘、除;向量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述标量基本运算包括标量加、减、乘、除;标量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述向量比较包括但不限于大于、小于、等于、大于或等于(≥)、小于或等于(≤)和不等于;所述向量逻辑运算包括与、或、非;所述标量比较包括但不限于大于、小于、等于、大于或等于(≥)、小于或等于(≤)和不等于;所述标量逻辑运算包括与、或、非。
进一步的,还包括步骤:接收未量化权值,根据运算控制信息,对该未量化权值和输入神经元进行运算,得到输出神经元并输出。
进一步的,所述运算操作包括:
将权值和输入神经元相加,和/或;
将权值和输入神经元相乘,和/或;
对所述权值和输入神经元进行非线性函数运算,所述非线性函数包括激活函数,所述激活函数包括sigmoid、tanh、relu和/或softmax,和/或;
对所述权值和输入神经元进行池化操作,所述池化操作包括平均值池化、最大值池化和/或中值池化,
其中,所述权值包括量化权值和/或非量化权值。
进一步的,权值和输入神经元的相加由一个或多个加法器实现。
进一步的,所述多个加法器构成加法树,实现权值和输入神经元的逐级相加。
第十五方面,一种处理装置,其特征在于,包括:
控制单元,用于接收指令并进行译码,生成查找控制信息和运算控制信息;
查找表单元,用于接收所述查找控制信息、权值字典和密码本,并根据查找控制信息,对权值字典和密码本进行查表操作,以得到量化权值;以及
运算单元,用于接收所述运算控制信息、输入神经元和所述量化权值,并根据运算控制信息,对所述量化权值和输入神经元进行运算操作,以得到并将输出神经元输出。
进一步的,所述处理装置还包括:
预处理单元,用于对外部输入的输入信息进行预处理,以得到所述输入神经元、权值字典、密码本和指令;
存储单元,用于存储所述输入神经元、权值字典、密码本和指令,以及接收所述输出神经元;
缓存单元,用于缓存所述指令、输入神经元、输出神经元、权值字典和密码本;以及
直接内存存取单元,用于在所述存储单元和缓存单元之间进行数据或者指令读写。
进一步的,所述预处理单元对外部输入的输入信息进行的预处理包括:切分、高斯滤波、二值化、正则化和/或归一化。
进一步的,所述缓存单元包括:
指令缓存单元,用于缓存所述指令;
输入神经元缓存单元,用于缓存所述输入神经元;以及
输出神经元缓存单元,用于缓存所述输出神经元。
进一步的,所述缓存单元还包括:
权值字典缓存单元,用于缓存所述权值字典;以及
密码本缓存单元,用于缓存所述密码本。
进一步的,所述指令为神经网络专用指令。
进一步的,所述神经网络专用指令包括:
控制指令,用于控制神经网络执行过程;
数据传输指令,用于完成不同存储介质之间的数据传输,数据格式包括矩阵、向量和标量;
运算指令,用于完成神经网络的算术运算,包括矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、受限玻尔兹曼机RBM神经网络运算指令、近邻归一化LRN神经网络运算指令、局部对比度归一化LCN神经网络运算指令、长短期记忆LSTM神经网络运算指令、循环神经网络 RNN运算指令、线性修正单元RELU神经网络运算指令、带参数的线性修正单元PRELU 神经网络运算指令、S型生长曲线SIGMOID神经网络运算指令、双曲正切函数TANH神经网络运算指令、最大输出MAXOUT神经网络运算指令;以及
逻辑指令,用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述神经网络专用指令包括至少一种Cambricon指令,该Cambricon指令包括操作码和操作数,所述Cambricon指令包括:
Cambricon控制指令,用于控制执行过程,且该Cambricon控制指令包括跳转指令和条件分支指令;
Cambricon数据传输指令,用于完成不同存储介质之间的数据传输,包括加载指令、存储指令、搬运指令;其中,所述加载指令用于将数据从主存加载到缓存;存储指令用于将数据从缓存存储到主存;搬运指令用于在缓存与缓存之间,或者缓存与寄存器之间,或者寄存器与寄存器之间搬运数据;
Cambricon运算指令用于完成神经网络算术运算,包括Cambricon矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令;其中,所述Cambricon矩阵运算指令用于完成神经网络中的矩阵运算,包括矩阵乘向量、向量乘矩阵、矩阵乘标量、外积、矩阵加矩阵和矩阵减矩阵;所述Cambricon向量运算指令用于完成神经网络中的向量运算,包括向量基本运算、向量超越函数运算、内积、向量随机生成和向量中最大/最小值; Cambricon标量运算指令用于完成神经网络中的标量运算,包括标量基本运算和标量超越函数运算;以及
Cambricon逻辑指令用于神经网络的逻辑运算,逻辑运算包括Cambricon向量逻辑运算指令和Cambricon标量逻辑运算指令;其中,所述Cambricon向量逻辑运算指令包括向量比较、向量逻辑运算和向量大于合并;向量逻辑运算包括与、或、非;所述Cambricon标量逻辑运算包括标量比较和标量逻辑运算。
进一步的,所述Cambricon数据传输指令支持以下的一种或者多种数据组织方式:矩阵、向量和标量;所述向量基本运算包括向量加、减、乘、除;向量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述标量基本运算包括标量加、减、乘、除;标量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述向量比较包括大于、小于、等于、大于或等于、小于或等于和不等于;所述向量逻辑运算包括与、或、非;所述标量比较包括大于、小于、等于、大于或等于、小于或等于和不等于;所述标量逻辑运算包括与、或、非。
进一步的,所述存储单元还用于存储未量化权值,且该未量化权值直接输出至运算单元。
进一步的,所述运算单元包括:
第一运算部分,用于将所述权值和输入神经元相乘;和/或,
第二运算部分,包括一个或者多个加法器,用于对所述权值和输入神经元通过一个或多个加法器相加;和/或,
第三运算部分,对所述权值和输入神经元进行非线性函数运算,所述非线性函数包括激活函数,所述激活函数包括sigmoid、tanh、relu和/或softmax;和/或,
第四运算部分,用于对所述权值和输入神经元进行池化操作,所述池化操作包括平均值池化、最大值池化和/或中值池化;
其中,所述权值包括未量化权值和/或量化权值。
进一步的,所述第二运算部分包括多个加法器,所述多个加法器组成加法树,实现权值和输入神经元的逐级相加。
第十六方面,本发明实施例提供一种处理方法,包括步骤:
接收输入神经元、权值字典、密码本和指令;
对所述指令进行译码,以得到查找控制信息和运算控制信息;以及
根据所述查找控制信息,查找权值字典和密码本以得到量化权值,并根据所述运算控制信息,对该量化权值以及输入神经元进行运算操作,以得到并将输出神经元输出。
进一步的,所述接收输入神经元、权值字典、密码本和指令之前,所述方法还包括步骤:
对外部输入的输入信息进行预处理,得到所述输入神经元、权值字典、密码本和指令;以及
所述接收输入神经元、权值字典、密码本和指令之后,所述还包括步骤:
存储所述输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及缓存所述指令、输入神经元、输出神经元。
进一步的,在所述接收输入神经元、权值字典、密码本和指令之后,所述方法还包括步骤:
缓存权值字典和密码本。
进一步的,所述预处理包括切分、高斯滤波、二值化、正则化和、或归一化。
进一步的,所述指令为神经网络专用指令。
进一步的,所述神经网络专用指令包括:
控制指令,用于控制神经网络执行过程;
数据传输指令,用于完成不同存储介质之间的数据传输,数据格式包括矩阵、向量和标量;
运算指令,用于完成神经网络的算术运算,包括矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、受限玻尔兹曼机RBM神经网络运算指令、近邻归一化LRN神经网络运算指令、LCN局部对比度归一化神经网络运算指令、长短期记忆LSTM神经网络运算指令、循环神经网络RNN 运算指令、线性修正单元RELU神经网络运算指令、带参数的线性修正单元PRELU神经网络运算指令、S型生长曲线SIGMOID神经网络运算指令、双曲正切函数TANH神经网络运算指令、最大输出MAXOUT神经网络运算指令;以及
逻辑指令,用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述神经网络专用指令包括至少一种Cambricon指令,该Cambricon指令包括操作码和操作数,所述Cambricon指令包括:
Cambricon控制指令用于控制执行过程,且该Cambricon控制指令包括跳转指令和条件分支指令;
Cambricon数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令、存储指令、搬运指令;其中,所述加载指令用于将数据从主存加载到缓存;存储指令用于将数据从缓存存储到主存;搬运指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据;
Cambricon运算指令用于完成神经网络算术运算,包括Cambricon矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令;其中,所述Cambricon矩阵运算指令用于完成神经网络中的矩阵运算,包括矩阵乘向量、向量乘矩阵、矩阵乘标量、外积、矩阵加矩阵和矩阵减矩阵;所述Cambricon向量运算指令用于完成神经网络中的向量运算,包括向量基本运算、向量超越函数运算、内积、向量随机生成和向量中最大/最小值; Cambricon标量运算指令用于完成神经网络中的标量运算,包括标量基本运算和标量超越函数运算;以及
Cambricon逻辑指令用于神经网络的逻辑运算,逻辑运算包括Cambricon向量逻辑运算指令和Cambricon标量逻辑运算指令;其中,所述Cambricon向量逻辑运算指令包括向量比较、向量逻辑运算和向量大于合并;向量逻辑运算包括与、或、非;所述Cambricon标量逻辑运算包括标量比较和标量逻辑运算。
进一步的,所述Cambricon数据传输指令支持以下的一种或者多种数据组织方式:矩阵、向量和标量;所述向量基本运算包括向量加、减、乘、除;向量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述标量基本运算包括标量加、减、乘、除;标量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述向量比较包括大于、小于、等于、大于或等于、小于或等于和不等于;所述向量逻辑运算包括与、或、非;所述标量比较包括大于、小于、等于、大于或等于、小于或等于和不等于;所述标量逻辑运算包括与、或、非。
进一步的,所述还包括步骤:
接收未量化权值,根据运算控制信息,对该未量化权值和输入神经元进行运算,以得到并将输出神经元输出。
进一步的,所述运算操作包括:
将权值和输入神经元相加;和/或
将权值和输入神经元相乘;和/或
对所述权值和输入神经元进行非线性函数运算,所述非线性函数包括激活函数,所述激活函数包括sigmoid、tanh、relu和/或softmax;和/或
对所述权值和输入神经元进行池化操作,所述池化操作包括平均值池化、最大值池化和/或中值池化,
其中,所述权值包括量化权值和/或非量化权值。
进一步的,权值和输入神经元的相加由一个或多个加法器实现。
进一步的,所述多个加法器构成加法树,实现权值和输入神经元的逐级相加。
第十七方面,本发明实施例提供了一种数据的量化方法,包括步骤:
对神经网络的权值进行分组;
对每一组权值用聚类算法进行聚类操作,将一组权值分成m个类,计算出每个类的中心权值,每个类中的所有权值都用该类对应的中心权值替换,其中,m为正整数;以及
对中心权值进行编码操作,以得到密码本和权值字典。
进一步的,所述方法还包括步骤:
对神经网络进行重训练,重训练时只训练密码本,权值字典内容保持不变。
进一步的,所述重训练采用反向传播算法。
进一步的,所述分组包括分为一组、层类型分组、层间分组和/或层内分组。
进一步的,所述聚类算法包括K-means、K-medoids、Clara和/或Clarans。
进一步的,所述分组为分为一组,具体包括:
将神经网络的所有权值归为一组。
进一步的,所述神经网络包括i个卷积层,j个全连接层,m个长短期记忆LSTM层一个卷积层、j个全连接层,共t种不同类型的层,其中,i,j,m均为大于0的整数,且满足i+j+m≥1,t为大于等于1的正整数且满足t=i+j+m,所述分组为层类型分组,包括:
将所述神经网络的权值将被分为t组。
进一步的,所述分组为层间分组,包括:
将神经网络中一个或者多个卷积层的权值、一个或者多个全连接层的权值和一个或者多个LSTM层的权值各划分成一组。
进一步的,所述分组为层内分组,包括:
将神经网络的卷积层作为一个四维矩阵(Nfin,Nfout,Kx,Ky),其中,Nfin,Nfout,Kx,Ky 是正整数,Nfin表示输入特征图像数量,Nfout表示输出特征图像数量,(Kx,Ky)表示卷积核的大小,卷积层的权值按(Bfin,Bfout,Bx,By)的组大小被分成 Nfin*Nfout*Kx*Ky/(Bfin*Bfout*Bx*By)个不同的组,其中Bfin为小于或等于Nfin的正整数, Bfout为小于或等于Nfout的正整数,Bx为小于或等于Kx的正整数,By为小于或等于Ky 的正整数,或者;
将神经网络的全连接层作为一个二维矩阵(Nin,Nout),其中Nin,Nout是正整数,Nin 表示输入神经元的个数,Nout表示输出神经元的个数,共有Nin*Nout个权值;全连接层权值按照(Bin,Bout)的组大小被分成(Nin*Nout)/(Bin*Bout)个不同的组,其中Bin是小于或等于Nin的正整数,Bout是小于或等于Nout的正整数,或者;
将神经网络的LSTM层权值作为多个全连接层的权值的组合,且LSTM层的权值由n个全连接层权值组成,其中n为正整数,则每一个全连接层都可以按照全连接层的分组方式进行分组操作。
进一步的,所述分组为分为一组、层内分组和层间分组,包括:
将卷积层作为一组,将全连接层进行层内分组,将LSTM层进行层间分组。
进一步的,所述一个类的中心权值选择方法为:使得代价函数J(w,w0)最小。
进一步的,所述代价函数为:
其中,w是一个类中的权值,w0是该类的中心权值,n是该类中权值的数量,n为正整数,wi是该类中第i个权值,i为正整数,且1≤i≤n。
第十八方面,本发明实施例还提供了一种数据的量化装置,包括:
存储器,用于存储操作指令;
处理器,用于执行存储器中的操作指令,在执行该操作指令时依照前述的量化方法进行操作。
进一步的,所述操作指令为二进制数,包括操作码和地址码,操作码指示处理器即将进行的操作,地址码指示处理器到存储器中的地址中读取参与操作的数据。
第十九方面,本发明实施例还提供了一种处理装置,包括:
控制单元,用于接收指令并对该指令进行译码,以得到查找控制信息和运算控制信息;
查找表单元,用于接收所述查找控制信息、权值字典和密码本,并根据查找控制信息,对所述权值字典和密码本进行查表操作,以得到量化权值;以及
运算单元,用于接收所述运算控制信息、所述量化权值和输入神经元,并根据所述运算控制信息,对所述量化权值和输入神经元进行运算操作,以得到并将输出神经元输出。
进一步的,所述处理装置还包括:
预处理单元,用于对外部输入的输入信息进行预处理,得到所述输入神经元、权值字典、密码本和指令;
存储单元,用于存储所述输入神经元、权值字典、密码本和指令,以及接收输出神经元;
缓存单元,用于缓存所述指令、输入神经元、输出神经元、权值字典和密码本;以及,
直接内存存取单元,用于在所述存储单元和缓存单元之间进行数据或者指令读写。
进一步的,所述预处理单元对外部输入的输入信息进行的预处理操作包括:切分、高斯滤波、二值化、正则化和/或归一化。
进一步的,所述缓存单元包括:
指令缓存单元,用于缓存所述指令;
输入神经元缓存单元,用于缓存所述输入神经元;以及,
输出神经元缓存单元,用于缓存所述输出神经元。
进一步的,所述缓存单元还包括:权值字典缓存,用于缓存所述权值字典;以及密码本缓存,用于缓存所述密码本。
进一步的,所述指令为神经网络专用指令。
进一步的,所述神经网络专用指令包括:
控制指令,用于控制神经网络执行过程;
数据传输指令,用于完成不同存储介质之间的数据传输,数据格式包括矩阵、向量和标量;
运算指令,用于完成神经网络的算术运算,包括矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令、MAXOUT神经网络运算指令;
以及逻辑指令,用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述神经网络专用指令包括至少一种Cambricon指令,该Cambricon指令包括操作码和操作数,所述Cambricon指令包括:Cambricon控制指令用于控制执行过程,且该Cambricon控制指令包括跳转指令和条件分支指令;Cambricon数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令、存储指令、搬运指令;其中,所述加载指令用于将数据从主存加载到缓存;存储指令用于将数据从缓存存储到主存;搬运指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据;Cambricon运算指令用于完成神经网络算术运算,包括Cambricon矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令;其中,所述Cambricon矩阵运算指令用于完成神经网络中的矩阵运算,包括矩阵乘向量、向量乘矩阵、矩阵乘标量、外积、矩阵加矩阵和矩阵减矩阵;所述Cambricon向量运算指令用于完成神经网络中的向量运算,包括向量基本运算、向量超越函数运算、内积、向量随机生成和向量中最大/最小值;Cambricon标量运算指令用于完成神经网络中的标量运算,包括标量基本运算和标量超越函数运算;Cambricon逻辑指令用于神经网络的逻辑运算,逻辑运算指令包括Cambricon向量逻辑运算指令和Cambricon标量逻辑运算指令;其中,所述Cambricon向量逻辑运算指令用于完成向量比较、向量逻辑运算和向量大于合并;向量逻辑运算包括与、或、非;所述Cambricon标量逻辑运算指令用于完成标量比较和标量逻辑运算。
进一步的,所述Cambricon数据传输指令支持以下的一种或者多种数据组织方式:矩阵、向量和标量;所述向量基本运算包括向量加、减、乘、除;向量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述标量基本运算包括标量加、减、乘、除;标量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述向量比较包括大于、小于、等于、大于或等于(≥)、小于或等于(≤)和不等于;所述向量逻辑运算包括与、或、非;所述标量比较包括大于、小于、等于、大于或等于(≥)、小于或等于(≤) 和不等于;所述标量逻辑运算包括与、或、非。
进一步的,所述存储单元还用于存储未量化权值,且该未量化权值直接输出至运算单元。
进一步的,所述运算单元包括:第一运算部分,用于将所述权值和输入神经元相乘;和/或第二运算部分,包括一个或者多个加法器,用于对所述权值和输入神经元通过一个或多个加法器相加;和/或第三运算部分,对所述权值和输入神经元进行非线性函数运算,所述非线性函数包括激活函数,所述激活函数包括sigmoid、tanh、relu和/或softmax;和/或第四运算部分,用于对所述权值和输入神经元进行池化操作,所述池化操作包括平均值池化、最大值池化和/或中值池化;其中,所述权值为未量化权值和/或量化权值。
进一步的,所述第二运算部分包括多个加法器,所述多个加法器组成加法树,实现权值和输入神经元的逐级相加。
第二十方面,本发明实施例还提供了一种处理方法,包括步骤:
接收输入神经元、权值字典、密码本和指令;
对所述指令进行译码,以得到查找控制信息和运算控制信息;以及
根据所述查找控制信息,查找权值字典和密码本以得到量化权值,根据所述运算控制信息,对该量化权值以及输入神经元进行运算操作,以得到并将输出神经元输出。
进一步的,在所述接收输入神经元、权值字典、密码本和指令之前,所述方法还包括步骤:
对外部输入的输入信息进行预处理,以得到所述输入神经元、权值字典、密码本和指令;
以及在所述接收输入神经元、权值字典、密码本和指令之后,所述方法还包括步骤:
存储所述输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及缓存所述指令、输入神经元、输出神经元。
进一步的,在接收输入神经元、权值字典、密码本和指令之后,所述方法还包括步骤:缓存权值字典和密码本。
进一步的,所述预处理包括切分、高斯滤波、二值化、正则化和、或归一化。
进一步的,所述指令为神经网络专用指令。
进一步的,所述神经网络专用指令包括:控制指令,用于控制神经网络执行过程;数据传输指令,用于完成不同存储介质之间的数据传输,数据格式包括矩阵、向量和标量;运算指令,用于完成神经网络的算术运算,包括矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM 神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、 SIGMOID神经网络运算指令、TANH神经网络运算指令、MAXOUT神经网络运算指令;以及逻辑指令,用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述神经网络专用指令包括至少一种Cambricon指令,该Cambricon指令包括操作码和操作数,所述Cambricon指令包括:Cambricon控制指令用于控制执行过程,且该Cambricon控制指令包括跳转指令和条件分支指令;Cambricon数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令、存储指令、搬运指令;其中,所述加载指令用于将数据从主存加载到缓存;存储指令用于将数据从缓存存储到主存;搬运指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据;Cambricon运算指令用于完成神经网络算术运算,包括Cambricon矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令;其中,所述Cambricon矩阵运算指令用于完成神经网络中的矩阵运算,包括矩阵乘向量、向量乘矩阵、矩阵乘标量、外积、矩阵加矩阵和矩阵减矩阵;所述Cambricon向量运算指令用于完成神经网络中的向量运算,包括向量基本运算、向量超越函数运算、内积、向量随机生成和向量中最大/最小值;Cambricon标量运算指令用于完成神经网络中的标量运算,包括标量基本运算和标量超越函数运算;以及Cambricon逻辑指令用于神经网络的逻辑运算,逻辑运算指令包括Cambricon向量逻辑运算指令和 Cambricon标量逻辑运算指令;其中,所述Cambricon向量逻辑运算指令用于完成向量比较、向量逻辑运算和向量大于合并;向量逻辑运算包括与、或、非;所述Cambricon标量逻辑运算指令用于完成标量比较和标量逻辑运算。
进一步的,所述Cambricon数据传输指令支持以下的一种或者多种数据组织方式:矩阵、向量和标量;所述向量基本运算包括向量加、减、乘、除;向量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述标量基本运算包括标量加、减、乘、除;标量超越函数指不满足以多项式作系数的多项式方程的函数,包括指数函数、对数函数、三角函数、反三角函数;所述向量比较包括大于、小于、等于、大于或等于(≥)、小于或等于(≤)和不等于;所述向量逻辑运算包括与、或、非;所述标量比较包括大于、小于、等于、大于或等于(≥)、小于或等于(≤) 和不等于;所述标量逻辑运算包括与、或、非。
进一步的,所述方法还包括步骤:
接收未量化权值,根据运算控制信息,对该未量化权值和输入神经元进行运算,得到并将输出神经元输出。
进一步的,所述运算操作包括:将权值和输入神经元相加;和/或将权值和输入神经元相乘;和/或对所述权值和输入神经元进行非线性函数运算,所述非线性函数包括激活函数,所述激活函数包括sigmoid、tanh、relu和/或softmax;和/或对所述权值和输入神经元进行池化操作,所述池化操作包括平均值池化、最大值池化和/或中值池化,其中,所述权值包括量化权值和/或非量化权值。
进一步的,权值和输入神经元的相加由一个或多个加法器实现。
进一步的,所述多个加法器构成加法树,实现权值和输入神经元的逐级相加。
第二十一方面,本发明实施例提供一种数据压缩方法,包括:
对神经网络的权值进行粗粒度剪枝,包括:根据滑动窗口从神经网络选取出M个权值,当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零,所述M为大于 0的整数;对神经网络进行第一重训练,训练过程中已经被置为零的权值保持为零;
对所述神经网络的权值进行量化,包括:对神经网络的权值进行分组,根据聚类算法对每组权值进行聚类操作,计算出每个类的中心权值,并将每个类中的所有权值都用中心权值替换。
进一步的,所述对所述对神经网络的权值进行量化之后,所述方法还包括:
对所述中心权值进行编码操作,得到密码本和权值字典。
进一步的,所述对所述中心权值进行编码操作之后,所述方法还包括:
对所述神经网络进行第二重训练。
进一步的,对所述神经网络进行第二重训练时只训练密码本,权值字典内容保持不变。
进一步的,所述预设条件为:
所述M个权值的信息量小于第一预设阈值。
进一步的,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于所述第一阈值,或者所述M个权值绝对值的几何平均值小于所述第二阈值,或者所述M个权值的最大值小于所述第三阈值。
进一步的,所述方法还包括:
重复使用滑动窗口从神经网络选取M个权值,当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零;以及对所述神经网络进行第一重训练,直至保证不损失设定精度的前提下没有权值能被置为零。
进一步的,所述设定精度为x%,其中x介于0至5之间。
进一步的,所述神经网络包括全连接层、卷积层和/或长短期记忆LSTM层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数, Nout_i表示第i个全连接层权值输出神经元个数;所述粗粒度剪枝单元具体用于:
当对所述全连接层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿
着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数, Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout;
当对所述卷积层的权值进行粗粒度剪枝操作时,所述滑动窗口为大小为 Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0 且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By;
当对所述LSTM层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为 Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
进一步的,所述第一重训练采用反向传播算法,且训练过程中已经被置为零的权值保持为零。
进一步的,对神经网络的权值进行分组方式包括:
将所述神经网络的权值分为一组,和/或;
按照层类型对所述神经网络的权值进行分组,和/或;
按照层间和/或层内对神经网络的权值进行分组。
进一步的,所述按照层类型对所述神经网络的权值进行分组,包括:
将神经网络中所有卷积层的权值、所有全连接层的权值和所有LSTM层的权值各划分成一组。
进一步的,所述按照层间对神经网络的权值进行分组,包括:
将神经网络中一个或者多个卷积层的权值、一个或者多个全连接层的权值和一个或者多个长短时记忆网络层的权值各划分成一组。
进一步的,所述按照层内对所述神经网络的权值进行分组,包括:
将神经网络的一层内的权值进行切分,切分后的每一个部分划分为一组。
进一步的,所述聚类算法包括K-means、K-medoids、Clara和/或Clarans。
进一步的,所述中心权值选择方法为使得代价函数J(w,w0)最小。
进一步的,所述代价函数满足下述条件:
其中w是类中所有权值,w0是中心权值,n是类中权值数量,wi是类中第i个权值, i是大于0且小于或等于n的整数。
进一步的,对聚类和编码后的神经网络进行第二重训练包括:
对聚类和编码后的神经网络使用反向传播算法进行重新训练,训练过程中已经被置为 0的权值将一直保持0,并且只训练权值密码本,不训练权值字典。
第二十二方面,本发明实施例提供一种数据的压缩装置,包括:
存储器,用于存储操作指令;
处理器,用于执行存储器中的操作指令,在执行该操作指令时依照第二十二方面所述的全部或者部分数据压缩方法进行操作。
第二十三方面,本发明实施例提供一种数据压缩方法,其中包括:
对神经网络的权值进行粗粒度剪枝,包括:根据滑动窗口从神经网络选取出M个权值,当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零,所述M为大于 0的整数;对神经网络进行第一重训练,训练过程中已经被置为零的权值保持为零;
对所述神经网络的权值进行量化,包括:对神经网络的权值进行分组,根据聚类算法对每组权值进行聚类操作,计算出每个类的中心权值,并将每个类中的所有权值都用该类对应的中心权值替换。
进一步的,所述对所述神经网络的权值进行量化之后,所述方法还包括:
对所述中心权值进行编码操作,得到密码本和权值字典。
进一步的,所述对所述中心权值进行编码操作之后,所述方法还包括:
对神经网络进行第二重训练。
进一步的,对所述神经网络进行第二重训练时只训练密码本,权值字典内容保持不变。
进一步的,所述预设条件为:
所述M个权值的信息量小于第一预设阈值。
进一步的,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于所述第一阈值,或者所述M个权值绝对值的几何平均值小于所述第二阈值,或者所述M个权值的最大值小于所述第三阈值。
进一步的,所述方法还包括:重复使用滑动窗口从神经网络选取M个权值,当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零;以及对所述神经网络进行第一重训练,直至保证不损失设定精度的前提下没有权值能被置为零。
进一步的,所述设定精度为x%其中x介于0至5之间。
进一步的,所述对所述神经网络的权值进行粗粒度剪枝,包括:
对所述神经网络的全连接层的权值进行剪枝,或者对神经网络的卷积层的权值进行剪枝,或者对神经网络的长短期记忆LSTM层的权值进行剪枝。
进一步的,所述神经网络的全连接层的权值为一个二维矩阵(Nin,Nout),其中所述 Nin是输入神经元的个数,所述Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值,所述滑动窗口的大小为Bin*Bout,其中Bin为大于0且小于或等于Nin整数,Bout 为大于0且小于或等于Nout的整数;所述对神经网络的全连接层的权值进行剪枝,包括:
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,也可以沿着Bout的方向按照步长Sout进行滑动,其中所述Sin为大于0且小于或等于Bin的整数,所述Sout为大于0且小于或等于Bout的整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout。
进一步的,所述神经网络的卷积层的权值为一个四维矩阵(Nfin,Nfout,Kx,Ky),其中所述Nfin是输入特征图像的个数,所述Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值,所述滑动窗口为大小为Bfin*Bfout*Bx*By 的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout为大于0且1小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0且小于或等于 Ky的整数;所述对神经网络的卷积层的权值进行剪枝包括:
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长Sx进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By。
进一步的,所述神经网络的LSTM层的权值由m个全连接层权值组成,其中m为大于0的正整数,第i个全连接层权值为二维矩阵(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连接层权值输出神经元个数;所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;对神经网络的LSTM 层进行剪枝包括:
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的整数,Sout_i为大于0且小于或等于Bout_i的整数;
通过所述滑动窗口从所述Nin_i*Nout_i个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
进一步的,所述第一重训练采用反向传播算法,且训练过程中已经被置为零的权值保持为零。
进一步的,对神经网络的权值进行分组方式包括:
将所述神经网络的权值分为一组,和/或;
按照层类型对所述神经网络的权值进行分组,和/或;
按照层间和/或层内对神经网络的权值进行分组。
进一步的,所述按照层类型对所述神经网络的权值进行分组,包括:
将神经网络中所有卷积层的权值、所有全连接层的权值和所有LSTM层的权值各划分成一组。
进一步的,所述按照层间对神经网络的权值进行分组,包括:
将神经网络中一个或者多个卷积层的权值、一个或者多个全连接层的权值和一个或者多个长短时记忆网络层的权值各划分成一组。
进一步的,所述按照层内对所述神经网络的权值进行分组,包括:
将神经网络的一层内的权值进行切分,切分后的每一个部分划分为一组。
进一步的,所述聚类算法包括K-means、K-medoids、Clara和/或Clarans。
进一步的,所述中心权值选择方法为使得代价函数J(w,w0)最小。
进一步的,代价函数满足:
其中w是类中所有权值,w0是中心权值,n是类中权值数量,wi是类中第i个权值,i是大于0且小于或等于n的整数。
对聚类和编码后的神经网络进行第二重训练包括:对聚类和编码后的神经网络使用反向传播算法进行重新训练,训练过程中已经被置为0的权值将一直保持0,并且只训练权值密码本,不训练权值字典。
第二十四方面,本发明实施例提供一种神经网络数据的压缩装置,包括:
存储器,用于存储操作指令;
处理器,用于执行存储器中的操作指令,在执行该操作指令时依照权以上任一所述的数据压缩方法进行操作。
第二十五方面,本发明实施例提供一种处理装置,其中包括:
粗粒度选数单元,用于输入神经元和目标权值位置信息,选出需要进行计算的神经元,其中,所述目标权值为绝对值大于第二预设阈值的权值;
查找表单元,用于接收量化的目标权值字典和目标权值密码本,进行查表操作,以得到并输出神经网络的目标权值;
运算单元,用于接收被选中的神经元和目标权值,对神经网络进行运算得到并输出神经元。
进一步的,所述查找表单元还用于对未量化的目标权值直接通过旁路传输给所述运算单元。
进一步的,还包括指令控制单元,用于接收指令,并对所述指令进行译码,以得到控制信息以控制所述运算单元。
进一步的,还包括存储单元,用于存储神经网络的神经元、权值以及指令。
进一步的,所述存储单元还用于存储存放目标权值以及目标权值的位置信息;还用于存储量化的目标权值密码本和目标权值字典。
进一步的,所述运算单元包括以下至少一种:
乘法器,用于将第一输入数据和第二输入数据相乘,得到相乘之后的数据;
加法树,用于将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;
激活函数运算单元,对第五数据通过激活函数运算得到输出数据,所述激活函数为 sigmoid、tanh、relu或softmax函数操作。
进一步的,所述运算单元还包括池化单元,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
进一步的,所述处理装置还包括:
指令控制单元,用来接收存储单元中的指令,经过译码后生成控制信息控制粗粒度选数单元进行选数操作,查找表单元进行查表操作和运算单元进行计算操作。
进一步的,所述指令为神经网络专用指令,包括控制指令,数据传输指令,运算指令和逻辑指令。
进一步的,所述神经网络专用指令为Cambricon指令集,所述Cambircon指令集中每一条指令长度为64bit,指令由操作码和操作数组成。
进一步的,所述控制指令用于控制神经网络执行过程,包括跳转指令和条件分支指令。
进一步的,数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令、存储指令和搬运指令。
进一步的,所述运算指令用于完成神经网络的算术运算,所述运算指令包括矩阵运算指令,向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令和MAXOUT神经网络运算指令。
进一步的,所述逻辑指令用于完成神经网络的逻辑运算,所述逻辑指令包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述向量逻辑运算指令包括向量比较、向量逻辑运算和向量大于合并指令;优选的,向量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,向量逻辑运算包括与,或,非。
进一步的,所述标量逻辑运算包括标量比较,标量逻辑运算;优选的,所述标量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,所述标量逻辑运算包括逻辑与,逻辑或,以及逻辑非。
进一步的,所述处理装置还包括指令缓存单元,用于缓存指令,所述指令缓存单元为片上缓存。
进一步的,所述处理装置还包括目标权值密码本缓存单元,用于缓存目标权值密码本,所述目标权值密码本缓存单元为片上缓存。
进一步的,所述处理装置还包括目标权值字典缓存单元,用于缓存目标权值字典,所述目标权值字典缓存单元为片上缓存。
进一步的,所述处理装置还包括目标权值位置缓存单元,用于缓存目标权值位置,还用于将输入数据中每个连接权值一一对应到相应的输入神经元,所述目标权值位置缓存单元为片上缓存。
进一步的,所述目标权值位置缓存单元,用于将输入数据中每个连接权值一一对应到相应的输入神经元中的一一对应包括:为采用1表示权值与输入神经元有连接,0表示无连接,每组输出与所有输入的连接状态组成一个0和1的字符串来表示该输出的连接关系。
进一步的,所述目标权值位置缓存单元,用于将输入数据中每个连接权值一一对应到相应的输入神经元中的一一对应包括:将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
进一步的,所述处理装置还包括输入神经元缓存单元,用于缓存输入到粗粒度选数单元的输入神经元,所述输入神经元缓存单元为片上缓存。
进一步的,所述处理装置还包括输出神经元缓存单元,用于缓存输出神经元,所述输出神经元缓存单元为片上缓存。
进一步的,所述处理装置还包括直接数据存取单元DMA单元,用于在所述存储单元、指令缓存单元、目标权值密码本缓存单元、目标权值字典缓存单元、目标权值位置缓存单元,输入神经元缓存单元和输出神经元缓存单元中进行数据或者指令读写。
进一步的,所述处理装置还包括预处理单元:用于对原始数据进行预处理,将预处理后的数据输入所述存储单元。
第二十六方面,本发明实施例提供一种处理方法,包括:
输入神经元和目标权值位置信息,选出需要进行计算的神经元;
接收量化的目标权值字典和目标权值密码本,进行查表操作并输出神经网络的目标权值;
接收被选中的神经元和目标权值,对神经网络进行运算并输出神经元。
进一步的,所述处理方法还包括:接收未量化的目标权值以进行神经网络运算。
进一步的,还包括:接收指令,并经过译码后生成控制信息控制神经网络的所述运算。
进一步的,所述运算包括以下至少一种:乘法运算,将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;加法运算,将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;激活函数运算,对第五数据通过激活函数运算得到输出数据,所述激活函数为sigmoid、tanh、relu或softmax函数操作。
进一步的,所述运算还包括池化操作,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
进一步的,所述指令为神经网络专用指令,包括控制指令,数据传输指令,运算指令和逻辑指令。
进一步的,所述控制指令用于控制神经网络执行过程,包括跳转指令和条件分支指令。
进一步的,数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令、存储指令和搬运指令。
进一步的,所述运算指令用于完成神经网络的算术运算,包括矩阵运算指令,向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令和MAXOUT神经网络运算指令。
进一步的,所述神经网络专用指令为Cambricon指令集,所述Cambircon指令集中指令由操作码和操作数组成。
Cambircon指令集中每一条指令长度为定长。例如,指令集中每一条指令长度可以为 64bit。
进一步的,所述逻辑指令用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述向量逻辑运算指令包括向量比较、向量逻辑运算和向量大于合并指令;优选的,向量比较包括但不限于大于,小于,等于,大于或等于(≥),小于等于(≤)和不等于;优选的,向量逻辑运算包括逻辑与,逻辑或,或者逻辑非。
进一步的,所述标量逻辑运算包括标量比较,标量逻辑运算;优选的,所述标量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,所述标量逻辑运算包括逻辑与,逻辑或,以及逻辑非。
进一步的,还包括步骤:对输入神经元和目标权值位置信息进行预处理,所述预处理包括切分、高斯滤波、二值化、正则化和、或归一化。
进一步的,接收被选中的神经元和目标权值之后,所述处理方法还包括步骤:存储输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及缓存所述指令、输入神经元、输出神经元。
第二十七方面,本发明实施例提供根据一种电子装置,包括权利要求以上任意所述的处理装置,所述电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备;
其中,所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶和/或油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
第二十八方面,本发明实施例提供一种处理装置,包括:
粗粒度选数单元,用于输入神经元和目标权值位置信息,选出需要进行计算的神经元;其中,所述目标权值为绝对值大于预设阈值的权值;
查找表单元,用于接收量化的目标权值字典和目标权值密码本,进行查表操作,以得到并输出神经网络的目标权值;
运算单元,用于接收被选中的神经元和目标权值,对神经网络进行运算得到并输出神经元。
进一步的,所述查找表单元还用于对未量化的目标权值直接通过旁路传输给所述运算单元。
进一步的,所述处理装置还包括:
指令控制单元,用于接收指令,并对所述指令进行译码,以得到控制信息以控制所述运算单元。
进一步的,所述处理装置还包括:
存储单元,用于存储神经网络的神经元、权值以及指令。
进一步的,所述存储单元还用于存储存放目标权值以及目标权值的位置信息;和存储量化的目标权值密码本和目标权值字典。
进一步的,所述运算单元包括以下至少一种:
乘法器,用于将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;
加法树,用于将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;
激活函数运算单元,对第五数据通过激活函数运算得到输出数据,所述激活函数为 sigmoid、tanh、relu或softmax函数操作。
进一步的,所述运算单元还包括池化单元,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
进一步的,所述处理装置还包括:
指令控制单元,用来接收存储单元中的指令,对该指令进行译码生成控制信息,以控制粗粒度选数单元进行选数操作、查找表单元进行查表操作和运算单元进行计算操作。
进一步的,所述指令为神经网络专用指令,包括控制指令,数据传输指令,运算指令和逻辑指令。
进一步的,所述神经网络专用指令为Cambricon指令集。
进一步的,所述处理装置还包括:
指令缓存单元,用于缓存指令,所述指令缓存单元为片上缓存。
进一步的,所述处理装置还包括:
目标权值密码本缓存单元,用于缓存目标权值密码本,所述目标权值密码本缓存单元为片上缓存。
进一步的,所述处理装置还包括:
目标权值字典缓存单元,用于缓存目标权值字典,所述目标权值字典缓存单元为片上缓存。
进一步的,所述处理装置还包括:
目标权值位置缓存单元,用于缓存目标权值位置,还用于将输入数据中每个连接权值一一对应到相应的输入神经元,所述目标权值位置缓存单元为片上缓存。
进一步的,所述目标权值位置缓存单元,用于将输入数据中每个连接权值一一对应到相应的输入神经元中的一一对应包括:
为采用1表示权值与输入神经元有连接,0表示无连接,每组输出与所有输入的连接状态组成一个0和1的字符串来表示该输出的连接关系。
进一步的,所述目标权值位置缓存单元,用于将输入数据中每个连接权值一一对应到相应的输入神经元中的一一对应包括:
将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
进一步的,所述处理装置还包括:
输入神经元缓存单元,用于缓存输入到粗粒度选数单元的输入神经元,所述输入神经元缓存单元为片上缓存。
进一步的,所述处理装置还包括:
输出神经元缓存单元,用于缓存输出神经元,所述输出神经元缓存单元为片上缓存。
进一步的,所述处理装置还包括:
直接数据存取DMA单元,用于在所述存储单元、指令缓存单元、目标权值密码本缓存单元、目标权值字典缓存单元、目标权值位置缓存单元,输入神经元缓存单元和输出神经元缓存单元中进行数据或者指令读写。
进一步的,所述处理装置还包括:
预处理单元:用于对原始数据进行预处理,并将预处理后的数据输入所述存储单元。
第二十九方面,本发明实施例提供一种处理方法,包括:
输入神经元和目标权值位置信息,选出需要进行计算的神经元,所述目标权值为绝对值大于预设阈值的权值;
接收量化的目标权值字典和目标权值密码本,进行查表操作,以得到并输出神经网络目标权值;
接收被选中的神经元和目标权值,对神经网络进行运算得到并输出神经元。
进一步的,所述处理方法还包括:
接收未量化的目标权值以进行神经网络运算。
进一步的,所述方法还包括:
接收指令,并对所述指令进行译码,以得到控制信息,用于控制神经网络的运算。
进一步的,所述运算包括以下至少一种:
乘法运算,将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;
加法运算,将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;
激活函数运算,对第五数据通过激活函数运算得到输出数据,所述激活函数为sigmoid、 tanh、relu或softmax函数操作。
进一步的,所述运算还包括:
池化操作,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,其中,所述池化操作包括:平均值池化,最大值池化或者中值池化。
进一步的,所述指令为神经网络专用指令,包括控制指令,数据传输指令,运算指令和逻辑指令。
进一步的,所述神经网络专用指令为Cambricon指令集,所述Cambircon指令集中每一条指令长度为64bit,指令由操作码和操作数组成。
进一步的,所述方法还包括步骤:
对输入神经元和目标权值位置信息进行预处理,所述预处理包括切分、高斯滤波、二值化、正则化和、或归一化。
进一步的,所述接收被选中的神经元和目标权值之后,所述方法还包括步骤:
存储所述输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及缓存所述指令、输入神经元、输出神经元。
第三十方面,本发明实施例提供一种数据压缩方法,包括:
对神经网络的权值进行粗粒度剪枝,包括:根据滑动窗口从神经网络选取出M个权值,当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零;对神经网络进行第一重训练,训练过程中已经被置为零的权值保持为零;
对神经网络的权值进行量化,包括:对神经网络的权值进行分组,根据聚类算法对每组权值进行聚类操作,计算出每个类的中心权值,并将每个类中的所有权值都用该类对应的中心权值替换;对中心权值进行编码操作,得到密码本和权值字典,对神经网络进行第二重训练,重训练时只训练密码本,权值字典内容保持不变。
进一步的,所述预设条件为:
所述M个权值的信息量小于第一预设阈值。
进一步的,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于所述第一阈值,或者所述M个权值绝对值的几何平均值小于所述第二阈值,或者所述M个权值的最大值小于所述第三阈值。
进一步的,所述处理方法还包括:重复使用滑动窗口从神经网络选取M个权值,当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零;以及对所述神经网络进行第一重训练,直至保证不损失设定精度的前提下没有权值能被置为零。其中,所述设定精度为x%,其中x介于0至5之间。
进一步的,神经网络包括全连接层、卷积层和LSTM层;根据滑动窗口从神经网络选取出M个权值,包括:
所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout 是输出神经元的个数,所述全连接层有Nin*Nout个权值,所述滑动窗口的大小为Bin*Bout 的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;所述处理装置对神经网络的全连接层的权值进行粗粒度剪枝,包括:
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数,Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,该M=Bin*Bout;
上述处理装置从上述神经网络的卷积层中选取M个权值,包括:
所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有 Nfin*Nfout*Kx*Ky个权值;所述滑动窗口为大小为Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout为大于0且小于或等于Nfout的整数, Bx为大于0且小于或等于Kx的整数,By为大于0且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,其中,所述 M=Bfin*Bfout*Bx*By。
上述处理装置从上述神经网络的LSTM层中选取M个权值,包括:
所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连接层权值输出神经元个数;所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,其中,所述 M=Bin_i*Bout_i。
进一步的,所述第一重训练采用反向传播算法,且训练过程中已经被置为零的权值保持为零。
进一步的,对神经网络的权值进行分组方式包括:
将所述神经网络的权值分为一组,和/或;
按照层类型对所述神经网络的权值进行分组,和/或;
按照层间和/或层内对神经网络的权值进行分组。
进一步的,所述按照层类型对所述神经网络的权值进行分组,包括:
将神经网络中所有卷积层的权值、所有全连接层的权值和所有LSTM层的权值各划分成一组。
进一步的,所述按照层间对神经网络的权值进行分组,包括:
将神经网络中一个或者多个卷积层的权值、一个或者多个全连接层的权值和一个或者多个长短时记忆网络层的权值各划分成一组。
进一步的,所述按照层内对所述神经网络的权值进行分组,包括:
将神经网络的一层内的权值进行切分,切分后的每一个部分划分为一组。
进一步的,所述聚类算法包括K-means、K-medoids、Clara和/或Clarans。
进一步的,所述中心权值选择方法为使得代价函数J(w,w0)最小,其中,代价函数为:
其中w是类中所有权值,w0是中心权值,n是类中权值数量,wi是类中第i个权值, i是大于0且小于或等于n的整数。
对聚类和编码后的神经网络进行第二重训练包括:对聚类和编码后的神经网络使用反向传播算法进行重新训练,训练过程中已经被置为0的权值将一直保持0,并且只训练权值密码本,不训练权值字典。
第三十一方面,本发明实施例提供一种神经网络数据的压缩装置,包括:
存储器,用于存储操作指令;
处理器,用于执行存储器中的操作指令,在执行该操作指令时依照权以上任一所述的压缩方法进行操作。
第三十方面,本发明实施例提供一种处理装置,包括:
粗粒度选数单元,用于输入神经元和目标权值位置信息,选出需要进行计算的神经元,其中,所述目标权值为绝对值大于第二预设阈值的权值;
查找表单元,用于接收量化的目标权值字典和目标权值密码本,进行查表操作,以得到并输出神经网络的目标权值;
运算单元,用于接收被选中的神经元和目标权值,对神经网络进行运算得到并输出神经元。
进一步的,所述查找表单元还用于对未量化的目标权值直接通过旁路传输给所述运算单元。
进一步的,所述处理装置还包括指令控制单元,用于接收指令,并对所述指令进行译码,以得到控制信息以控制所述运算单元。
进一步的,所述处理装置还包括存储单元,用于存储神经网络的神经元、权值以及指令。
进一步的,所述存储单元还用于存储存放目标权值以及目标权值的位置信息;还用于存储量化的目标权值密码本和目标权值字典。
进一步的,所述运算单元包括以下至少一种:
乘法器,用于将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;
加法树,用于将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;
激活函数运算单元,对第五数据通过激活函数运算得到输出数据,所述激活函数为 sigmoid、tanh、relu或softmax函数操作。
进一步的,所述运算单元还包括池化单元,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
进一步的,所述处理装置还包括指令控制单元,用来接收存储装置中的指令,对该指令进行译码生成控制信息,以控制粗粒度选数单元进行选数操作,查找表单元进行查表操作和运算单元进行计算操作。
进一步的,所述指令为神经网络专用指令,包括控制指令,数据传输指令,运算指令和逻辑指令。
进一步的,所述神经网络专用指令为Cambricon指令集,所述Cambircon指令集中每一条指令长度为64bit,指令由操作码和操作数组成。
进一步的,所述控制指令用于控制神经网络执行过程,包括跳转指令和条件分支指令。
进一步的,数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令、存储指令和搬运指令。
进一步的,所述运算指令用于完成神经网络的算术运算,包括矩阵运算指令,向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、 LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令和MAXOUT神经网络运算指令。
进一步的,所述逻辑指令用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述向量逻辑运算指令包括向量比较、向量逻辑运算和向量大于合并指令;优选的,向量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,向量逻辑运算包括与,或,非。
进一步的,所述标量逻辑运算包括标量比较,标量逻辑运算;优选的,所述标量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,所述标量逻辑运算包括逻辑与,逻辑或,以及逻辑非。
进一步的,所述处理装置还包括指令缓存单元,用于缓存指令,所述指令缓存单元为片上缓存。
进一步的,所述处理装置还包括目标权值密码本缓存单元,用于缓存目标权值密码本,所述目标权值密码本缓存单元为片上缓存。
进一步的,所述处理装置还包括目标权值字典缓存单元,用于缓存目标权值字典,所述目标权值字典缓存单元为片上缓存。
进一步的,所述处理装置还包括目标权值位置缓存单元,用于缓存目标权值位置,还用于将输入数据中每个连接权值一一对应到相应的输入神经元,所述目标权值位置缓存单元为片上缓存。
进一步的,所述目标权值位置缓存单元,用于将输入数据中每个连接权值一一对应到相应的输入神经元中的一一对应包括:为采用1表示权值与输入神经元有连接,0表示无连接,每组输出与所有输入的连接状态组成一个0和1的字符串来表示该输出的连接关系。
进一步的,所述目标权值位置缓存单元,用于将输入数据中每个连接权值一一对应到相应的输入神经元中的一一对应包括:将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
进一步的,所述处理装置还包括输入神经元缓存单元,用于缓存输入到粗粒度选数单元的输入神经元,所述输入神经元缓存单元为片上缓存。
进一步的,所述处理装置还包括输出神经元缓存单元,用于缓存输出神经元,所述输出神经元缓存单元为片上缓存。
进一步的,所述处理装置还包括直接数据存取DMA单元,用于在所述存储单元、指令缓存单元、目标权值密码本缓存单元、目标权值字典缓存单元、目标权值位置缓存单元,输入神经元缓存单元和输出神经元缓存单元中进行数据或者指令读写。
进一步的,所述处理装置还包括预处理单元:用于对原始数据进行预处理,将预处理后的数据输入所述存储单元。
第三十三方面,本发明实施例提供一种处理方法,包括:
输入神经元和目标权值位置信息,选出需要进行计算的神经元,所述目标权值为绝对值大于预设阈值的权值;
接收量化的目标权值字典和目标权值密码本,进行查表操作,以得到并输出神经网络目标权值;
接收被选中的神经元和目标权值,对神经网络进行运算得到并输出神经元。
进一步的,所述处理方法还包括:接收未量化的目标权值以进行神经网络运算。
进一步的,还包括:接收指令,并对所述指令进行译码,以得到控制信息,用于控制神经网络的运算。
进一步的,所述运算包括以下至少一种:乘法运算,将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;加法运算,将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;激活函数运算,对第五数据通过激活函数运算得到输出数据,所述激活函数为sigmoid、tanh、relu或softmax函数操作。
进一步的,所述运算还包括池化操作,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
进一步的,所述指令为神经网络专用指令,包括控制指令,数据传输指令,运算指令和逻辑指令。
进一步的,所述控制指令用于控制神经网络执行过程,包括跳转指令和条件分支指令。
进一步的,数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令,存储指令,搬运指令。
进一步的,所述运算指令用于完成神经网络的算术运算,包括矩阵运算指令,向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、 LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令和MAXOUT神经网络运算指令。
进一步的,所述神经网络专用指令为Cambricon指令集,所述Cambircon指令集中每一条指令长度为64bit,指令由操作码和操作数组成。
进一步的,所述逻辑指令用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
进一步的,所述向量逻辑运算指令包括向量比较、向量逻辑运算和向量大于合并指令;优选的,向量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,向量逻辑运算包括逻辑与,逻辑或,或者逻辑非。
进一步的,所述标量逻辑运算包括标量比较,标量逻辑运算;优选的,所述标量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,所述标量逻辑运算包括逻辑与,逻辑或,以及逻辑非。
进一步的,还包括步骤:对输入神经元和目标权值位置信息进行预处理,所述预处理包括切分、高斯滤波、二值化、正则化和、或归一化。
进一步的,接收被选中的神经元和目标权值之后,还包括步骤:存储输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及缓存所述指令、输入神经元、输出神经元。
第三十四方面,本发明实施例提供一种电子装置,包括权利要求以上任意所述的处理装置,所述电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备;
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶和/或油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
第三十五方面,本发明实施例提供一种运算装置,包括:
筛选单元(400),用于根据输出神经元与输入神经元组成的特征图的连接状态数组筛选出特征图及其对应的权值,并将所述特征值及对应的权值输出至所述运算单元(600),和/或;
用于根据输出神经元与输入神经元组成的特征图中每行的连接状态数组,筛选出特征图行及其对应的权值行,并将所述特征图行及其对应的权值行输出至所述运算单元(600),和/或;
用于根据输出神经元与输入神经元组成的特征图中每列的连接状态数组,筛选出特征图列及其对应的权值列,并将所述特征图列及其对应的权值列输出至所述运算单元(600);以及
所述运算单元(600),根据指令对筛选单元(400)输出的数据执行相应的支持结构裁剪的人工神经网络运算,得到输出神经元。
进一步的,所述筛选单元(400)的筛选过程包括:
若权值未经离线筛选,根据输出神经元与输入神经元组成的特征图的连接状态数组筛选出特征图及其对应的权值,然后将筛选得到的特征图及其对应的权值输出至所述运算单元,和/或;根据输出神经元与输入神经元组成的特征图中行/列的连接状态数组筛选出特征图行/列及其对应的权值行/列,并将筛选得到的特征图行/列及其对应的权值行/列输出至所述运算单元;
若权值已经过离线筛选,根据输出神经元与输入神经元组成的特征图的连接状态数组筛选出特征图,然后将筛选后的特征图输出至所述运算单元,同时将筛选后的权值不经过筛选单元直接输送给所述运算单元;和/或根据输出神经元与输入神经元组成的特征图中行/列的连接状态数组筛选出特征图行/列及其对应的权值行/列,并将筛选得到的特征图行/列及其对应的权值行/列输出至所述运算单元。
进一步的,所述连接状态数组用以表示输出神经元与输入神经元之间的连接状态,表达方式包括:
第一种表达方式:采用数字“0”和“1”表示连接状态,其中“1”表示有连接,“0”表示无连接;或者“0”表示有连接,“1”表示无连接;对于输出神经元与输入神经元组成的特征图的连接状态数组来说,是每个输出神经元与所有输入神经元组成的特征图的连接状态组成一个包括“0”和“1”的数组;对于输出神经元与输入神经元组成的特征图中行/ 列的连接状态数组来说,是每个输出神经元与所有输入神经元组成的特征图中行/列的连接状态组成一个包括“0”和“1”的数组;
第二种表达方式:采用距离表示连接状态,对于输出神经元与输入神经元组成的特征图的连接状态数组来说,将每个输出神经元的第一个连接所在的输入神经元位置到第一个输入神经元的距离、第二个连接所在的输入神经元位置到上一个连接所在的输入神经元的距离,第三个连接所在的输入神经元位置到上一个连接所在的输入神经元的距离,......,依次类推,直到穷举与该输出神经元相连的所有输入神经元,组合成一个数组来表示该输出神经元对应的连接状态数组。
进一步的,所述第二种表达方式的数组中的元素为非负整数。
进一步的,采用所述输出神经元与输入神经元组成的特征图的连接状态数组或者输出神经元与输入神经元组成的特征图中行/列的连接状态数组筛选出的用于计算的特征图及与之对应的权值,或者特征图行/列及与之对应的权值行/列,满足条件包括:
第一种表达方式:筛选出来用于计算输出神经元的特征图和与之对应的权值,其对应的连接状态数组,其中的元素值都为:表示有连接的数字;和/或筛选出来用于计算输出神经元的特征图行/列和与之对应的权值行/列,其对应的连接状态数组,其中的元素值都为:表示有连接的数字;
第二种表达方式:对每个输出神经元Oj对应的连接状态数组Index A,每一位的值为非负整数,记全部的输入神经元为I1,I2,...,IN,设与该输出神经元相连的输入神经元为它们的值未知,则Index A有n位,第1位的值A1,表示第一个连接所在的输入神经元位置距离I1的距离;第p位的值AP, p=2,3,...,n,表示当前连接所在的输入神经元位置距离上一个连接所在的输入神经元位置的距离;那么筛选出来用于计算出该输出神经元Oj的输入神经元为:与之相对应的权值为满足:k1=A1+1,kp=Ap+kp-1。
进一步的,所述运算装置还包括:存储单元(100),其存储数据和指令;
其中,所述存储单元(100)中存储的数据包括:
输入神经元组成的特征图、权值、输出神经元与输入神经元组成的特征图的连接状态数组、输出神经元与输入神经元组成的特征图中每行的连接状态数组、输出神经元与输入神经元组成的特征图中每列的连接状态数组、输出神经元组成的特征图以及其他人工神经网络运算所需数据和参数。
进一步的,所述运算单元(600)包括:
第一部分乘法器,将第一输入数据和第二输入数据进行相乘运算得到输出数据;
第二部分一个或多个加法器,将相乘的结果通过加法树逐级相加,得到加权和,根据需要对加权和采取偏置处理或者不做处理;
第三部分激活函数单元,对所述得到的加权和结果执行激活函数运算,得到输出神经元。
进一步的,所述一个或多个加法器组成加法树。
进一步的,所述运算单元(600)还包括:池化单元,对输入数据执行池化操作。
进一步的,所述运算装置还包括:缓存单元(300),其缓存数据和指令。
(三)有益效果
本公开的处理方法对神经网络的权值进行粗粒度剪枝,相比于传统的方法,能够使稀疏神经网络更加规则化,利于用硬件进行加速,同时减少目标权值位置的存储空间。其中,目标权值为绝对值大于或等于第二预设阈值的权值。
本公开的处理装置能够实现本公开的处理方法,粗粒度剪枝单元对神经网络进行粗粒度剪枝单,运算单元对剪枝后的神经网络重新进行训练。
本公开的加速装置通过设置能够加速处理粗粒度剪枝后的神经网络,充分挖掘粗细度稀疏的特性,减少访存同时减少运算量,从而获得加速比并降低能耗。
本公开的加速装置的存储单元将权值按照目标权值配合目标权值位置信息的存储方式能够减少存储开销以及访存开销,粗粒度选数单元能够根据目标权值位置信息选出需要参与运算的神经元,从而减少运算量;通过采用针对粗粒度稀疏的多层人工神经网络运算的专用SIMD指令和定制的运算单元,解决了CPU和GPU运算性能不足,前端译码开销大的问题,有效提高了对多层人工神经网络运算算法的支持;通过采用针对多层人工神经网络运算算法的专用片上缓存,充分挖掘了输入神经元和权值数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络运算及其训练算法性能瓶颈的问题。
针对上述第十一方面至第二十方面,相较于现有技术具有以下优点:
1、本公开的数据的量化方法,摒弃了现有技术中仅按神经网络的层为单位进行量化的缺陷,通过挖掘神经网络层间权值的相似性以及层内权值局部相似性,以挖掘神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
2、本公开的数据的量化方法可以对神经网络进行重训练,且重训练时只需训练密码本,不需要训练权值字典,简化了重训练操作。
3、本公开提供的处理装置同时对量化后的权值以及未量化权值进行多种运算,实现了运算的多元化。
4、本公开通过采用针对局部量化的多层人工神经网络运算的神经网络专用指令和灵活的运算单元,解决了CPU(中央处理器)和GPU(图形处理器)运算性能不足,前端译码开销大的问题,有效提高了对多层人工神经网络运算算法的支持。
5、本公开通过采用针对多层人工神经网络运算算法的专用片上缓存,充分挖掘了输入神经元和权值数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络运算及其训练算法性能瓶颈的问题。
针对上述第二十一方面至第三十四方面,本公开对神经网络的权值进行粗粒度剪枝和局部量化,相比于传统的方法,能够使稀疏神经网络更加规则化,利于用硬件进行加速,同时减少目标权值位置的存储空间;局部量化能够充分挖掘神经网络的权值分布特性,减少表示每一个权值的比特数,从而进一步减少存储开销和访存开销。本公开的神经网络处理器能够充分挖掘粗细度稀疏和局部量化的特性,减少访存同时减少计算量,从而获得加速比并降低能耗。粗粒度选数单元能够根据目标权值位置信息选出需要参与计算的神经元,从而减少计算量,查找表能够根据目标权值字典和目标权值密码本查找出目标权值,从而减少访存量。
针对上述第三十五方面,从上述技术方案可以看出,本发明提供的运算装置、运算方法和芯片,至少具有以下有益效果之一:
1、通过筛选单元,实现了对结构剪裁,筛选出结构剪裁后人工神经网络中参与后续运算的输入神经元组成的特征图和相对应的权值,避免了将所有输入神经元和权值都参与网络运算造成的运算量冗余和访存冗余,解决了CPU和GPU运算性能不足,前端译码开销大的问题,有效提高了对多层人工神经网络运算算法的支持;
2、通过采用针对多层人工神经网络运算算法的专用片上缓存,充分挖掘了输入神经元和权值数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络运算及其训练算法性能瓶颈的问题。
附图说明
图1是本公开实施例提供的一种对神经网络进行粗粒度剪枝稀疏化的处理装置的结构示意图;
图2是本公开实施例提供的对神经网络的全连接层进行粗粒度剪枝示意图;
图3是本公开实施例提供的对神经网络的卷积层进行粗粒度剪枝示意图;
图4是本公开实施例提供的一种加速装置的结构示意图;
图5是本公开实施例提供的另一种加速装置的结构示意图;
图6是粗粒度选数单元工作过程示意图;
图7是本公开实施例提供的一种处理单元的结构示意图;
图8a是本公开实施例提供的一种粗粒度选数示意图;
图8b是本公开实施例提供的一种粗粒度选数示意图;
图9是本公开实施例提供的另一种加速装置的结构示意图;
图10是本公开实施例提供的另一种加速装置的结构示意图;
图11是本公开实施例提供的一种处理方法的一具体实施例示意图;
图12是本公开实施例提供的一种组合处理装置的结构示意图;
图13是本公开实施例提供的另一种组合处理装置的结构示意图;
图14是本公开实施例提供的一种神经网络处理器板卡的结构示意图;
图15是本公开实施例提供的一种芯片封装结构示意图;
图16是本公开实施例提供的另一种芯片封装结构示意图;
图17是本公开实施例提供的另一种芯片封装结构示意图;
图18是本公开实施例提供的一种处理方法的流程图;
图19是本公开实施例提供的一种数据的量化方法的步骤示意图;
图20是本公开实施例提供的数据的量化的过程示意图;
图21是本公开实施例提供的数据的量化装置的结构示意图。
图22是本公开实施例提供的处理装置的结构示意图;
图23是本公开实施例提供的查表的过程示意图;
图24是本公开实施例提供的的一具体实施例的处理装置的结构示意图;
图25是本公开实施例提供的处理方法的步骤示意图;
图26是本公开实施例提供的一具体实施例的处理方法的步骤示意图;
图27是本公开实施例提供的数据压缩方法流程图;
图28是本公开实施例提供的另一种处理装置的结构示意图;
图29是本公开实施例提供的神经网络处理器的结构示意图;
图30是本公开实施例提供的一种神经网络数据的处理方法;
图31A是本公开实施例提供的一实施例所示运算装置的筛选单元功能示意图;
图31B是本公开实施例提供的另一实施例所示运算装置的筛选单元功能示意图;
图31C是本公开实施例提供的另一实施例所示运算装置的筛选单元功能示意图;
图31D是本公开实施例提供的另一实施例所示运算装置的筛选单元功能示意图;
图32A是本公开实施例提供的人工神经网络中卷积层在进行结构剪裁前的运算对比示意图;
图32B是本公开实施例提供的人工神经网络中卷积层在进行结构剪裁后的运算对比示意图;
图33是本公开实施例提供的运算装置的结构示意图;
图34是本公开实施例提供的人工神经网络中卷积层的结构示意图;
图35是本公开实施例提供的采用筛选单元对人工神经网络实现结构裁剪的结构示意图;
图36是本公开实施例提供的采用连接状态数组的一种表示实现图35所示结构裁剪的示意图;
图37是本公开实施例提供的采用连接状态数组的另一种表示实现图35所示结构裁剪的示意图;
图38A是本公开实施例提供的运算装置进行运算的方法流程图;
图38B是本公开实施例提供的如图38A所示步骤S808对应的实施子步骤流程图;
图39是本公开实施例提供的另一运算装置的结构示意图;
图40是本公开实施例提供的另一运算装置的结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开作进一步的详细说明。
本公开实施例的所有模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器,DNA计算机。
应该注意的是,本公开中使用的“第一”、“第二”、“第三”等仅用于区分不同对象,而不意味着这些对象之间具有任何特定顺序关系。
在此需要说明的是,粗粒度剪枝(或者粗粒度稀疏)是指获取至少两个数据(权值或者神经元),当该至少两个数据满足预设条件时,将该至少两个数据中的部分或者全部置零。
根据本公开的基本构思,提供一种对神经网络进行粗粒度剪枝稀疏化的处理方法,处理装置和加速装置,以减少权值存储以及计算量。
参见图1,图1为本发明实施例提供的一种对神经网络进行粗粒度剪枝稀疏化的处理装置的结构示意图,如图1所示,该处理装置包括:
粗粒度剪枝单元,用于对神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值。
具体地,所述粗粒度剪枝单元具体用于:
通过滑动窗口从神经网络的权值中选取出M个权值,所述M为大于1的整数;当所述M个权值满足预设条件时,将所述M个权值的全部或者部分置为零。
其中,所述预设条件为:
其中,上述预设条件为:
上述M个权值的信息量满足预设判断条件。
作为一种可选的实施方式,上述预设判断条件包括阈值判断条件。其中,阈值判断条件,可以包括:小于一给定阈值,小于等于一给定阈值,大于一给定阈值,大于等于一给定阈值,在一给定取值范围内或在一给定取值范围外中的一种或几种。
具体地,上述M个权值的信息量小于一给定阈值,其中,上述M个权值的信息量包括但不限于该M个权值绝对值的算术平均值、该M个权值绝对值的几何平均值和该M个权值绝对值的最大值。上述M个权值绝对值的算术平均值小于第一阈值;或者上述M个权值绝对值的几何平均值小于第二阈值;或者上述M个权值绝对值的最大值小于第三阈值。对于上述第一阈值、第二阈值和第三阈值中各自的选择,本领域技术人员可以根据情况进行预先设定,也可以通过改变预设公式中的输入参数的方式计算获得,还可以通过机器学习的方式获得。对于第一阈值、第二阈值以及第三阈值的获取方式,本公开并不做具体限定。
作为一种可选的实施方式,上述预设判断条件包括函数映射判断条件,该函数映射判断条件为判断上述M个权值经函数变换后是否满足给定条件。
进一步的,上述神经网络包括全连接层、卷积层和长短期记忆(long short termmemory, LSTM)层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连接层权值输出神经元个数;所述粗粒度剪枝单元具体用于:
当对所述全连接层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿
着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数, Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout;具体过程参见图2。
当对所述卷积层的权值进行粗粒度剪枝操作时,所述滑动窗口为大小为 Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0 且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By;具体过程参见图3。
当对所述LSTM层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为 Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
进一步的,上述M个权值为上述滑动窗口在移动过程中包含的权值。上述粗粒度剪枝单元将上述M个权值全部或部分置为零包括:
上述粗粒度剪枝单元将上述滑动窗口中所有的权值(即M个权值)都置为零;或者将上述滑动窗口的斜对角线上的权值置为零;或者滑动窗口的中间的一部分权值置为零,比如上述滑动窗口的大小为5*5,上述粗粒度剪枝单元将上述5*5的滑动窗口中间的3*3的权值置为零;或者从上述滑动窗口中随机选取至少一个权值置为零。这样操作有利于提供后续训练运算的精度。
进一步的,上述粗粒度剪枝单元和运算单元用于重复对上述神经网络进行粗粒度剪枝以及根据剪枝后的权值进行训练,直至保证在精度不损失预定精度的前提下没有权值满足上述预设条件。
其中,上述设定精度为x%,x为大于0且小于100的数,x根据不同的神经网络以及不同的应用可以有不同的选择。
在一个优选的实施例中,x的取值范围为0-5。
进一步的,上述处理装置还包括:
量化单元,用于在粗粒度剪枝单元对神经网络的权值进行粗粒度剪枝之后,且在上述运算单元根据剪枝后的权值对上述神经网络进行训练之前,量化神经网络的权值和/或对该神经网络的权值进行第一操作,以降低权值的比特数。
上述第一操作可为减少权值对应的数据格式的取值范围或者减少权值对应的数据格式的精度范围。
进一步的,上述运算单元具体用于:
根据剪枝后的权值和通过反向传播算法对上述神经网络进行重新训练。
具体地,运算单元可以用于执行神经网络反向训练算法,接收剪枝后的神经网络,采用反向传播算法对该神经网络进行训练,在训练过程中被剪枝的权值始终保持为0。运算单元将训练后的神经网络传输给粗粒度剪枝单元进行进一步剪枝操作,或者直接输出。
具体地,上述运算单元对上述神经网络的各层按照与正向运算相反的顺序依次进行反向计算,最后用计算得到的权值的梯度去更新权值;这就是神经网络的训练的依次迭代,整个训练过程需要重复执行这个过程多次;每一层的反向运算需要执行两部分运算:一部分是使用输出神经元梯度和输入神经元计算得到权值梯度,另一部分是使用输出神经元梯度和权值,计算得到输入神经元梯度(用于作为反向运算中下一层的输出神经元梯度以供其进行反向运算);在执行完神经网络的反向运算之后,就计算出了各层的权值梯度,运算单元根据权值梯度对权值进行更新。
需要指出的是,在上述运算单元对神经网络进行训练过程中,被置为0的权值一直保持为0。
在本发明实施例的方案中,上述处理装置的粗粒度剪枝单元对神经网络的权值进行粗粒度剪枝操作,以得到剪枝后的权值,运算单元根据剪枝后的权值对神经网络重新进行训练。通过对神经网络的权值进行粗粒度剪枝处理,减小后续对取值的存储和访问,同时也减小了后续的运算量,提高了运算效率和降低了功耗。
参见图4,图4为本发明实施例提供的一种加速装置的结构示意图。如图4所示,该加速装置包括:
存储单元,用于存储神经网络的输入神经元、输出神经元、权值和指令。
粗粒度剪枝单元,用于对上述神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值,并将剪枝后的权值及目标权值位置信息存储到上述存储单元中。
需要说明的是,上述粗粒度剪枝单元对神经网络的权值进行粗粒度剪枝操作的具体过程可参见图1所示实施例的相关描述,在此不再叙述。
运算单元,用于根据上述剪枝后的权值对上述神经网络进行训练。
粗粒度选数单元,用于接收输入神经元和目标权值位置信息,选出目
标权值及其对应的输入神经元。
其中,上述目标权值为绝对值大于第二预设阈值的权值。
进一步的,上述粗粒度选数单元只选取目标权值及其对应的神经元传输至运算单元。
上述运算单元,还用于接收输入的目标权值及其对应的神经元,并根据目标权值及其对应的神经元通过乘加运算单元完成神经网络运算,得到输出神经元,并将输出神经元重新传输至上述存储单元。
其中,上述存储单元还用于存储上述运算单元进行神经网络运算过程中产生的中间结果。
进一步的,上述加速装置还包括:
指令控制单元,用于接收上述指令,并将该指令译码后生成控制信息,以控制上述粗粒度选数单元进行选数操作和上述运算单元进行计算操作。
进一步的,上述存储单元存储权值时只存储目标权值以及目标权值的位置信息。
需要指出的是,上述存储单元、粗粒度剪枝单元、指令控制单元、粗粒度选数单元和运算单元均为实体硬件器件,不是功能性软件单元。
参见图5,图5为本发明实施例提供的另一种加速装置的结构示意图。如图5所示,上述加速装置还包括:预处理单元、存储单元、直接存取访问(direct memory access,DMA)单元、指令缓存单元、指令控制单元、粗粒度剪枝单元、第一缓存单元、第二缓存单元、第三缓存单元、粗粒度选数单元、运算单元和第四缓存单元。
其中,上述预处理单元,用于对原始数据进行预处理,将预处理后的数据输入上述存储单元,上述原始数据包括输入神经元、输出神经元和权值。上述预处理包括对数据的切分、高斯滤波、二值化、正则化和/或归一化。
上述存储单元,用于神经网络的神经元、权值以及指令。其中,当存储权值时只存储目标权值以及目标权值的位置信息。
上述DMA单元,用于在上述存储单元与上述指令缓存单元、粗粒度剪枝单元、第一缓存单元、第二缓存单元、第三缓存单元或第四缓存单元之间中进行数据或者指令读写。
上述粗粒度剪枝单元,用于通过DMA单元从上述存储单元中获取上述神经网络的权值,然后读对该神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值。上述粗粒度剪枝单元将剪枝后的权值存储到上述第一缓存单元中。
需要说明的是,上述粗粒度剪枝单元对神经网络的权值进行粗粒度剪枝操作的具体过程可参见图1所示实施例的相关描述,在此不再叙述。
上述指令缓存单元,用于缓存上述指令;
上述第一缓存单元,用于缓存目标权值,该目标权值为绝对值大于第二预设阈值的权值;
上述第二缓存单元用于缓存目标权值位置数据;该目标权值位置缓存单元将输入数据中每个连接权值一一对应到相应的输入神经元。
可选地,目标权值位置缓存单元缓存一一对应的方法为采用1表示输出神经元与输入神经元之间有权值连接,0表示输出神经元与输入神经元之间无权值连接,每组输出神经元与所有输入神经元的连接状态组成一个0和1的字符串来表示该输出神经元的连接关系。
可选地,目标权值位置缓存单元缓存一一对应的方法为采用1表示输入神经元与输出神经元之间有权值连接,0表示输入神经元与输出神经元之间无权值连接,每组输入与所有输出的连接状态组成一个0和1的字符串来表示该输入神经元的连接关系。
可选地,目标权值位置缓存单元缓存一一对应的方法为将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
上述三缓存单元,用于缓存输入到上述粗粒度选数单元的输入神经元。
上述第四缓存单元,用于缓存运算单元输出的输出神经元和根据输出神经元得到的输出神经元梯度。
上述指令控制单元,用于接收指令换成单元中的指令,将该指令译码生成控制信息已控制上述运算单元进行计算操作。
上述粗粒度选数单元,用于接收输入神经元和目标权值位置信息,并根据目标权值位置信息选出需要进行运算的输入神经元。该粗粒度选数单
元只会选择出目标权值对应的神经元并传输至运算单元。
上述运算单元,用于根据指令控制单元传输的控制信息对输入神经元和目标权值进行运算,以得到输出神经元,将该输出神经元存储第四缓存单元中;并根据该输出神经元得到输出神经元梯度,并将该输出神经元梯度存储到上述第四缓存单元中。
具体地,上述粗粒度选数单元,用于根据目标权值的位置信息从上述输入神经元缓冲单元输入的输入神经元中选取出于目标权值对应的输入神经元,然后将目标权值及其对应的输入神经元传输至运算单元。
在一个实施例里,上述运算单元可以包括多个处理单元,以实现并行计算得到不同的输出神经元,并将得到的输出神经元存储输出神经元缓存单元。其中,上述多个处理单元中的每个处理单元包含一个本地权值选择器模块,用于进一步处理动态粗粒度稀疏数据。上述粗粒度选数单元用于通过选择所需的输入神经元来处理静态稀疏度,上述粗粒度选数单元具体工作过程参见图6的相关描述。
参见图6,首先,上述粗粒度选数单元根据输入神经元值生成神经元索引,其中每个索引都会指示相应的神经元是否有用(“0”)。其次,上述粗粒度选数单元将生成的神经元索引和权值位置信息(即权值索引)进行“与”操作(即AND操作)相结合以获得神经元标志,并且该神经元标志的每一位指示是否选择相应的神经元。第三,上述粗粒度选数单元添加神经元标志的每一位以获得累加的字符串,然后在累加的字符串和神经元标志之间执行“与”操作(即AND操作)以产生用于选择输入神经元的目标字符串;最后,上述粗粒度选数单元使用目标字符串来选择实际输入神经元,以便在上述运算单元中进行后续计算。同时,上述粗粒度选数单元根据目标字符串和累积的权值索引字符串(即权值位置信息)产生索引字符串并传递给上述运算单元。
上述运算单元主要用于处理动态稀疏性并有效执行神经网络的所有操作。该神经元功能单元包括多个处理单元。如图7所示,每个处理单元包括权值缓冲区、权值解码器模块、权值选择器模块和处理单元的神经元功能单元。每个处理单元加载来自其本地权值缓冲区的权值,因为权值在不同的输出神经元之间是独立的,因此不同的处理之间也是独立的。具有查找表的权值解码器模块放置在权值缓冲区的旁边,以根据本地量化中使用的码本和字典中的压缩值提取实际权值。
如图8a所示,权值选择器模块接收来自权值解码器模块的索引字
符串和权值,以选择对处理单元的神经元功能单元进行计算的有用权值。每个处理单元的神经元功能单元由Tm乘法器,一个加法器树和一个非线性函数模块组成,如图8b所示。上述神经元功能单元使用分时方法将神经网络映射到处理单元上,即每个处理单元都在并行处理输出神经元,并且需要M/Tm个周期来计算需要M次乘法的输出神经元,因为它可以在一个周期内实现Tm乘法。然后,神经元功能单元收集并汇编所有处理单元的输出,以便以后计算或存储到输出神经元缓存单元。
权值选择器模块只在考虑动态稀疏时选择需要的权值,因为上述权值缓冲区紧凑地存储权值以实现静态稀疏性。基于包含权值位置信息的神经元选择器模块的索引字符串,进一步过滤权值并选择计算所需的权值,参见图8a。每个处理单元将在不同的输出神经元上工作,从而产生不同的权值。因此,处理单元内部实施权值选择器模块和权值缓冲区以避免高带宽和延迟。
需要指出的是,动态稀疏动态稀疏一般指输入神经元稀疏,因为输入神经元的值随着输入变化而变化。动态稀疏的主要来源于relu这个激励函数,因为该函数运算会将绝对值小于阈值的输入神经元置为0。静态稀疏一般指权值稀疏,因为权值被剪去后拓扑结构不再改变。
其中,上述指令缓存单元、输入神经元缓存单元、目标权值缓存单元、目标权值位置缓存单元和输出神经元缓存单元均为片上缓存。
具体地,运算单元包括但不仅限于三个部分,第一部分乘法器,第二部分加法树,第三部分为激活函数单元。第一部分将第一输入数据(in1)和第二输入数据(in2)相乘得到相乘之后的输出(out1),过程为:out=in1*in2;第二部分将第三输入数据in3通过加法树逐级相加得到第二输出数据(out2),其中in3是一个长度为N的向量,N大于1,过称为: out2=in3[1]+in3[2]+...+in3[N],和/或将第三输入数据(in3)通过加法数累加之后和第四输入数据(in4)相加得到第二输出数据(out2),过程为:out=in3[1]+in3[2]+...+in3[N]+in4,或者将第三输入数据(in3)和第四输入数据(in4)相加得到第二输出数据(out2),过程为:out2=in3+in4;第三部分将第五输入数据(in5)通过激活函数(active)运算得到激活输出数据(out),过程为:out3=active(in5),激活函数active可以是sigmoid、tanh、relu、softmax等,除了做激活操作,第三部分可以实现其他的非线性函数,可将输入数据(in) 通过运算(f)得到输出数据(out),过程为:out=f(in)。
进一步地,运算单元还可以包含池化单元,池化单元将输入数据(in)通过池化运算得到池化操作之后的输出数据(out),过程为out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。
所述运算单元执行运算包括几个部分,第一部分是将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;第二部分执行加法树运算,用于将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到输出数据;第三部分执行激活函数运算,对第五输入数据通过激活函数(active)运算得到输出数据。以上几个部分的运算可以自由组合,从而实现各种不同功能的运算。
需要指出的是,上述预处理单元、存储单元、DMA单元、粗粒度剪枝单元、指令缓存单元、指令控制单元、第一缓存单元、第二缓存单元、第三缓存单元、第四缓存单元、粗粒度选数单元和运算单元均为实体硬件器件,不是功能性软件单元。
参见图9,图9为本发明实施例提供的另一种加速装置的结构示意图。如图9所示,上述加速装置还包括:预处理单元、存储单元、DMA单元、指令缓存单元、指令控制单元、粗粒度剪枝单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元、粗粒度选数单元、运算单元、输出神经元缓存单元和输出神经元梯度缓存单元。
其中,上述预处理单元,用于对原始数据进行预处理,将预处理后的数据输入上述存储单元,上述原始数据包括输入神经元、输出神经元和权值。上述预处理包括对数据的切分、高斯滤波、二值化、正则化和/或归一化。
上述存储单元,用于神经网络的神经元、权值以及指令。其中,当存储权值时只存储目标权值以及目标权值的位置信息。
上述DMA单元,用于在上述存储单元与上述指令缓存单元、粗粒度剪枝单元、目标权值位置缓存单元、输入神经元缓存单元或输出神经元缓存单元之间中进行数据或者指令读写。
上述粗粒度剪枝单元,用于通过DMA单元从上述存储单元中获取上述神经
网络的权值,然后对该神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值。上述粗粒度剪枝单元将剪枝后的权值储到上述目标权值缓存单元中。
需要说明的是,上述粗粒度剪枝单元对神经网络的权值进行粗粒度剪枝操作的具体过程可参见图1所示实施例的相关描述,在此不再叙述。
上述指令缓存单元,用于缓存上述指令;
上述目标权值缓存单元,用于缓存目标权值;
上述目标权值位置缓存单元用于缓存目标权值位置数据;该目标权值位置缓存单元将输入数据中每个连接权值一一对应到相应的输入神经元。
可选地,目标权值位置缓存单元缓存一一对应的方法为采用1表示输出神经元与输入神经元之间有权值连接,0表示输出神经元与输入神经元之间无权值连接,每组输出神经元与所有输入神经元的连接状态组成一个0和1的字符串来表示该输出神经元的连接关系。
可选地,目标权值位置缓存单元缓存一一对应的方法为采用1表示输入神经元与输出神经元之间有权值连接,0表示输入神经元与输出神经元之间无权值连接,每组输入与所有输出的连接状态组成一个0和1的字符串来表示该输入神经元的连接关系。
可选地,目标权值位置缓存单元缓存一一对应的方法为将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
上述输入神经元缓存单元,用于缓存输入到上述粗粒度选数单元的输入神经元。
上述输出神经元缓存单元,用于缓存运算单元输出的输出神经元。
上述输出神经元梯度缓存单元,用于缓存上述输出神经元的梯度。
上述指令控制单元,用于接收指令换成单元中的指令,将该指令译码生成控制信息已控制上述运算单元进行计算操作。
上述粗粒度选数单元,用于接收输入神经元和目标权值位置信息,并根据目标权值位置信息选出需要进行运算的输入神经元。该粗粒度选数单元只会选择出目标权值对应的神经元并传输至运算单元。
上述运算单元,用于根据从上述目标权值缓存单元中获取的目标权值及其对应的输入神经元进行运算,以得到输出神经元;将该输出神经元缓存到上述输出神经元缓存单元中。
上述运算单元,还用于根据输出神经元梯度和剪枝后的权值进行训练。
需要说明的是,上述加速装置各单元功能可参见上述图5所示实施例的相关描述,在此不再叙述。
需要指出的是,上述预处理单元、存储单元、DMA单元、粗粒度剪枝单元、指令缓存单元、指令控制单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元、输出神经元梯度缓存单元、输出神经元缓存单元、粗粒度选数单元和运算单元均为实体硬件器件,不是功能性软件单元。
参见图10,图10为本发明实施例提供的另一种加速装置的结构示意图。如图10所示,上述加速装置还包括:
预处理单元、存储单元、DMA单元、指令缓存单元、指令控制单元、粗粒度剪枝单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元、粗粒度选数单元、运算单元和输出神经元缓存单元。
其中,上述预处理单元,用于对原始数据进行预处理,将预处理后的数据输入上述存储单元,上述原始数据包括输入神经元、输出神经元和权值。上述预处理包括对数据的切分、高斯滤波、二值化、正则化和/或归一化。
上述存储单元,用于神经网络的神经元、权值以及指令。其中,当存储权值时只存储目标权值以及目标权值的位置信息。
上述DMA单元,用于在上述存储单元与上述指令缓存单元、粗粒度剪枝单元、目标权值位置缓存单元、输入神经元缓存单元或输出神经元缓存单元之间中进行数据或者指令读写。
上述粗粒度剪枝单元,用于通过DMA单元从上述存储单元中获取上述神经网络的权值,然后对该神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值。上述粗粒度剪枝单元将剪枝后的权值储到上述目标权值缓存单元中。
需要说明的是,上述粗粒度剪枝单元对神经网络的权值进行粗粒度剪枝操作的具体过程可参见图1所示实施例的相关描述,在此不再叙述。
上述指令缓存单元,用于缓存上述指令;
上述目标权值缓存单元,用于缓存目标权值;
上述目标权值位置缓存单元用于缓存目标权值位置数据;该目标权值位置缓存单元将输入数据中每个连接权值一一对应到相应的输入神经元。
可选地,目标权值位置缓存单元缓存一一对应的方法为采用1表示输出神经元与输入神经元之间有权值连接,0表示输出神经元与输入神经元之间无权值连接,每组输出神经元与所有输入神经元的连接状态组成一个0和1的字符串来表示该输出神经元的连接关系。
可选地,目标权值位置缓存单元缓存一一对应的方法为采用1表示输入神经元与输出神经元之间有权值连接,0表示输入神经元与输出神经元之间无权值连接,每组输入与所有输出的连接状态组成一个0和1的字符串来表示该输入神经元的连接关系。
可选地,目标权值位置缓存单元缓存一一对应的方法为将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
上述输入神经元缓存单元,用于缓存输入到上述粗粒度选数单元的输入神经元。
上述输出神经元缓存单元,用于缓存运算单元输出的输出神经元。
上述输出神经元梯度缓存单元,用于缓存上述输出神经元的梯度。
上述指令控制单元,用于接收指令换成单元中的指令,将该指令译码生成控制信息已控制上述运算单元进行计算操作。
上述粗粒度选数单元,用于接收输入神经元和目标权值位置信息,并根据目标权值位置信息选出需要进行运算的输入神经元。该粗粒度选数单元只会选择出目标权值对应的输入神经元并传输至运算单元。
上述运算单元,用于根据从上述目标权值缓存单元中获取的目标权值及其对应的输入神经元进行运算,以得到输出神经元;将该输出神经元缓存到上述输出神经元缓存单元中。
需要说明的是,上述加速装置各单元功能可参见上述图5所示实施例的相关描述,在此不再叙述。
需要指出的是,上述预处理单元、存储单元、DMA单元、粗粒度剪枝单元、指令缓存单元、指令控制单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元、输出神经元缓存单元、输出神经元梯度缓存单元、粗粒度选数单元和运算单元均为实体硬件器件,不是功能性软件单元。
以下,列举神经网络处理器实施例,对本公开的处理方法进行具体说明,但应理解的是其并非因此限制本公开,凡是利用本具体实施例所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本公开的保护范围内。
参见图11,图11是本发明实施例提供的一种处理方法的一具体实施例示意图。如图 11所示为神经网络的一个全连接层经过粗粒度剪枝后的结果,全连接层共有8个输入神经元为n1~n8和3个输出神经元为o1~o3。其中n3,n4,n7,n8四个输入神经元与o1,o2, o3三个输出神经元之间的权值通过粗粒度稀疏被置为零;n1与o1,o2,o3之间通过s11, s12,s13三个权值连接,n2与o1,o2,o3之间通过s21,s22,s23三个权值连接,n5与 o1,o2,o3之间通过s31,s32,s33三个权值连接,n6与o1,o2,o3之间通过s41,s42, s43三个权值连接;我们用11001100这个比特串表示输入神经元与输出神经元之间的连接情况,即第一种表示目标权值位置信息的情况,1表示输入神经元与三个输出神经元都连接,0表示输入神经元与三个输出神经元都不连接。表1描述了实施例中神经元与权值的信息,公式1描述了o1,o2,o3三个输出神经元的运算公式。从公式1中可以看出o1, o2,o3将接收到相同的神经元进行运算。
细粒度剪枝指的是把每个权值看成独立个体,剪枝时候如果某个权值符合条件就被剪去;粗粒度剪枝就是把权值按照一定的方式分组,每组包括多个权值,如果一组权值符合条件,该组权值就会被全部剪除。
表1
公式1--输出神经元运算公式:
o1=n1*s11+n2*s12+n5*s13+n6*s14
o2=n1*s21+n2*s22+n5*s23+n6*s24
o3=n1*s31+n2*s32+n5*s33+n6*s34
在处理装置进行运算时,8个输入神经元,12个权值和8比特的位置信息以及相应的指令被传输到存储单元。粗粒度选数单元接收8个输入神经元和目标权值位置,选出n1,n2,n5,n6四个需要参与运算的神经元。运算单元接收四个被选择的神经元与权值,通过公式1完成输出神经元的运算,然后将输出神经元传输回存储部分。
本公开一些实施例中,公开了一种加速装置,包括:存储器:存储有可执行指令;处理器:用于执行存储单元中的可执行指令,在执行指令时依照上述处理方法进行操作。
其中,处理器可以是单个处理单元,但也可以包括两个或更多个处理单元。另外,处理器还可以包括通用处理器(CPU)或者图形处理器(GPU);还可以包括在现场可编程逻辑门阵列(FPGA)或者专用集成电路(ASIC),以对神经网络进行设置和运算。处理器还可以包括用于缓存用途的片上存储器(即包括处理装置中的存储器)。
本申请还揭露了一个神经网络运算装置,其包括一个或多个在本申请中提到的加速装置或处理装置,用于从其他处理装置中获取待运算数据和控制信息,执行指定的神经网络运算和/或训练,执行结果通过I/O接口传递给外围设备。外围设备譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口,服务器。当包含一个以上计算装置时,计算装置间可以通过特定的结构进行链接并传输数据,譬如,通过PCIE总线进行互联并传输数据,以支持更大规模的神经网络的运算和/或训练。此时,可以共享同一控制系统,也可以有各自独立的控制系统;可以共享内存,也可以每个加速器有各自的内存。此外,其互联方式可以是任意互联拓扑。
该神经网络运算装置具有较高的兼容性,可通过PCIE接口与各种类型的服务器相连接。
本申请还揭露了一个组合处理装置,其包括上述的神经网络运算装置,通用互联接口,和其他处理装置。神经网络运算装置与其他处理装置进行交互,共同完成用户指定的操作。图12为组合处理装置的示意图。
其他处理装置,包括中央处理器CPU、图形处理器GPU、神经网络处理器等通用/专用处理器中的一种或以上的处理器类型。其他处理装置所包括的处理器数量不做限制。其他处理装置作为神经网络运算装置与外部数据和控制的接口,包括数据搬运,完成对本神经网络运算装置的开启、停止等基本控制;其他处理装置也可以和神经网络运算装置协作共同完成运算任务。
通用互联接口,用于在所述神经网络运算装置与其他处理装置间传输数据和控制指令。该神经网络运算装置从其他处理装置中获取所需的输入数据,写入神经网络运算装置片上的存储装置;可以从其他处理装置中获取控制指令,写入神经网络运算装置片上的控制缓存;也可以读取神经网络运算装置的存储模块中的数据并传输给其他处理装置。
可选的,该结构如图13所示,还可以包括存储装置,存储装置分别与所述神经网络运算装置和所述其他处理装置连接。存储装置用于保存在所述神经网络运算装置和所述其他处理装置的数据,尤其适用于所需要运算的数据在本神经网络运算装置或其他处理装置的内部存储中无法全部保存的数据。
该组合处理装置可以作为手机、机器人、无人机、视频监控设备等设备的SOC片上系统,有效降低控制部分的核心面积,提高处理速度,降低整体功耗。此情况时,该组合处理装置的通用互联接口与设备的某些部件相连接。某些部件譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口。
在一些实施例中,公开了一种神经网络处理器,该神经网络处理器包括上述神经网络运算装置或组合处理装置。
在一些实施例里,公开了一种芯片,其包括了上述神经网络处理器。
在一些实施例里,公开了一种芯片封装结构,其包括了上述芯片。
在一些实施例里,公开了一种板卡,其包括了上述芯片封装结构。
在一些实施例里,公开了一种电子装置,其包括了上述板卡。
请参照图14,图14为本申请实施例提供的一种神经网络处理器板卡的结构示意图。如图14所示,上述神经网络处理器板卡包括上述芯片封装结构、第一电气及非电气连接装置和第一基板(substrate)。
本申请对于芯片封装结构的具体结构不作限定,可选的,如图15所示,上述芯片封装结构包括:芯片、第二电气及非电气连接装置、第二基板。
本申请所涉及的芯片的具体形式不作限定,上述芯片包含但不限于将神经网络处理器集成的神经网络晶片,上述晶片可以由硅材料、锗材料、量子材料或分子材料等制成。根据实际情况(例如:较严苛的环境)和不同的应用需求可将上述神经网络晶片进行封装,以使神经网络晶片的大部分被包裹住,而将神经网络晶片上的引脚通过金线等导体连到封装结构的外边,用于和更外层进行电路连接。
本申请对于第一基板和第二基板的类型不做限定,可以是印制电路板(printedcircuit board,PCB)或(printed wiring board,PWB),还可能为其它电路板。对PCB的制作材料也不做限定。
本申请所涉及的第二基板用于承载上述芯片,通过第二电气及非电气连接装置将上述芯片和第二基板进行连接得到的芯片封装结构,用于保护芯片,便于将芯片封装结构与第一基板进行进一步封装。
对于上述具体的第二电气及非电气连接装置的封装方式和封装方式对应的结构不作限定,可根据实际情况和不同的应用需求选择合适的封装方式并进行简单地改进,例如:倒装芯片球栅阵列封装(Flip Chip Ball Grid Array Package,FCBGAP),薄型四方扁平式封装 (Low-profile Quad Flat Package,LQFP)、带散热器的四方扁平封装(QuadFlat Package with Heat sink,HQFP)、无引脚四方扁平封装(Quad Flat Non-leadPackage,QFN)或小间距四方扁平式封装(Fine-pitch Ball Grid Package,FBGA)等封装方式。
倒装芯片(Flip Chip),适用于对封装后的面积要求高或对导线的电感、信号的传输时间敏感的情况下。除此之外可以用引线键合(Wire Bonding)的封装方式,减少成本,提高封装结构的灵活性。
球栅阵列(Ball Grid Array),能够提供更多引脚,且引脚的平均导线长度短,具备高速传递信号的作用,其中,封装可以用引脚网格阵列封装(Pin Grid Array,PGA)、零插拔力(Zero Insertion Force,ZIF)、单边接触连接(Single Edge Contact Connection,SECC)、触点阵列(Land Grid Array,LGA)等来代替。
可选的,采用倒装芯片球栅阵列(Flip Chip Ball Grid Array)的封装方式对神经网络芯片和第二基板进行封装,具体的神经网络芯片封装结构的示意图可参照图16。如图16所示,上述芯片封装结构包括:芯片21、焊盘22、焊球23、第二基板24、第二基板24上的连接点25、引脚26。
其中,焊盘22与芯片21相连,通过在焊盘22和第二基板24上的连接点25之间焊接形成焊球23,将神经网络芯片21和第二基板24连接,即实现了芯片21的封装。
引脚26用于与封装结构的外部电路(例如,板卡上的第一基板)相连,可实现外部数据和内部数据的传输,便于芯片21或芯片21对应的神经网络处理器对数据进行处理。对于引脚的类型和数量本申请也不作限定,根据不同的封装技术可选用不同的引脚形式,并遵从一定规则进行排列。
可选的,上述神经网络芯片封装结构还包括绝缘填充物,置于焊盘22、焊球23和连接点25之间的空隙中,用于防止焊球与焊球之间产生干扰。
其中,绝缘填充物的材料可以是氮化硅、氧化硅或氧氮化硅;干扰包含电磁干扰、电感干扰等。
可选的,上述神经网络芯片封装结构还包括散热装置,用于散发神经网络芯片21运行时的热量。其中,散热装置可以是一块导热性良好的金属片、散热片或散热器,例如,风扇。
举例来说,如图17所示,芯片封装结构包括:芯片21、焊盘22、焊球23、第二基板24、第二基板24上的连接点25、引脚26、绝缘填充物27、散热膏28和金属外壳散热片 29。其中,散热膏28和金属外壳散热片29用于散发芯片21运行时的热量。
可选的,上述芯片封装结构还包括补强结构,与焊盘22连接,且内埋于焊球23中,以增强焊球23与焊盘22之间的连接强度。
其中,补强结构可以是金属线结构或柱状结构,在此不做限定。
本申请对于第一电气及非电气装置的具体形式也不作限定,可参照第二电气及非电气装置的描述,即通过焊接的方式将芯片封装结构进行封装,也可以采用连接线连接或插拔方式连接第二基板和第一基板的方式,便于后续更换第一基板或芯片封装结构。
可选的,第一基板包括用于扩展存储容量的内存单元接口等,例如:同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)、双倍速率同步动态随机存储器(Double Date Rate SDRAM,DDR)等,通过扩展内存提高了神经网络处理器的处理能力。
第一基板13上还可包括快速外部设备互连总线(Peripheral ComponentInterconnect-Express,PCI-E或PCIe)接口、小封装可热插拔(Small Form-factorPluggable, SFP)接口、以太网接口、控制器局域网总线(Controller Area Network,CAN)接口等等,用于封装结构和外部电路之间的数据传输,可提高运算速度和操作的便利性。
将神经网络处理器封装为芯片,将芯片封装为芯片封装结构,将芯片封装结构封装为板卡,通过板卡上的接口(插槽或插芯)与外部电路(例如:计算机主板)进行数据交互,即直接通过使用神经网络处理器板卡实现神经网络处理器的功能,并保护芯片。且神经网络处理器板卡上还可添加其他模块,提高了神经网络处理器的应用范围和运算效率。
电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B 超仪和/或心电图仪。
参见图18,图18为发明实施例提供的一种处理方法的流程图。该处理方法用于神经网络的稀疏化,如图11所示,该处理方法包括:
S1801、处理装置根据滑动窗口从神经网络中选取M个权值,M为大于1的整数。
上述神经网络包括全连接层、卷积层和LSTM层。
上述处理装置从上述神经网络的全连接层中选取M个权值,包括:
如图2所示,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout 为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数,Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,该M=Bin*Bout。
上述处理装置从上述神经网络的卷积层中选取M个权值,包括:
如图3所示,所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),
其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述滑动窗口为大小为Bfin*Bfout*Bx*By 的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0且小于或等于Ky 的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,其中,所述 M=Bfin*Bfout*Bx*By。
上述处理装置从上述神经网络的LSTM层中选取M个权值,包括:
所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连接层权值输出神经元个数;所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,其中,所述 M=Bin_i*Bout_i。
S1802、当所述M个权值满足预设条件时,处理装置将M个权值全部或者部分置为零,以得到剪枝后的权值。
其中,上述预设条件为:上述M个权值的信息量满足预设判断条件。
作为一种可选的实施方式,上述预设判断条件包括阈值判断条件。其中,阈值判断条件,可以包括:小于一给定阈值,小于等于一给定阈值,大于一给定阈值,大于等于一给定阈值,在一给定取值范围内或在一给定取值范围外中的一种或几种。
具体地,上述M个权值的信息量小于一给定阈值,其中,上述M个权值的信息量包括但不限于该M个权值绝对值的算术平均值、该M个权值绝对值的几何平均值和该M个权值绝对值的最大值。上述M个权值绝对值的算术平均值小于第一阈值;或者上述M个权值绝对值的几何平均值小于第二阈值;或者上述M个权值绝对值的最大值小于第三阈值。对于上述第一阈值、第二阈值和第三阈值中各自的选择,本领域技术人员可以根据情况进行预先设定,也可以通过改变预设公式中的输入参数的方式计算获得,还可以通过机器学习的方式获得。对于第一阈值、第二阈值以及第三阈值的获取方式,本公开并不做具体限定。
作为一种可选的实施方式,上述预设判断条件包括函数映射判断条件,该函数映射判断条件为判断上述M个权值经函数变换后是否满足给定条件。
需要指出的是,上述步骤S1801和S1802可以看成上述处理装置对上述神经网络进行粗粒度剪枝,直至保证在精度不损失设定精度的前提下没有权值满足所述预设条件。
进一步地,上述处理装置重复对上述神经网络的权值进行粗粒度剪枝以及根据剪枝后的权值进行训练。其中,上述设定精度为x%,x介于0到5之间。
S1803、处理装置根据剪枝后的权值,对神经网络进行训练。
具体地,上述处理装置根据所述剪枝后的权值对神经网络进行训练具体为:
上述处理装置根据上述剪枝后的权值和通过反向传播算法对所述神经网络进行重新训练。
可选地,在对上述神经网络进行粗粒度剪枝和重训练之间还包括:
上述处理装置量化和/或降低权值比特数操作。
需要指出的是,上述处理装置对神经网络进行训练过程中,被置为0的权值一致保持为0。
应该理解到,所揭露的相关装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元均为被设置来实现某些特定功能的硬件,功能的划分仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
通过本公开的实施例,提供了神经网络的粗粒度稀疏化的处理方法和对应的处理装置,以及芯片、芯片封装结构、板卡和电子装置。其中,粗粒度稀疏化处理方法能够使稀疏神经网络更加规则化,利于用硬件进行加速,同时减少目标权值位置的存储空间。神经网络处理器能够充分挖掘粗粒度稀疏的特性,减少访存同时减少运算量,从而获得加速比并降低能耗。
在本发明的实施例中,上述目标权值为绝对值大于第二预设阈值的权值。
图18是本公开实施例的处理方法的流程图。在本公开一些实施例中,提供了一种处理方法,用于神经网络的稀疏化,如图18所示,处理方法包括:
S1801、处理装置根据滑动窗口从神经网络中选取M个权值,M为大于1的整数。
上述神经网络包括全连接层、卷积层和LSTM层。
上述处理装置从上述神经网络的全连接层中选取M个权值,包括:
如图2所示,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout 为大于0且小于或等于Nout的整数;所述处理装置对神经网络的全连接层的权值进行粗粒度剪枝,包括:
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数,Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,该M=Bin*Bout。
上述处理装置从上述神经网络的卷积层中选取M个权值,包括:
如图3所示,所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),
其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述滑动窗口为大小为Bfin*Bfout*Bx*By 的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0且小于或等于Ky 的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,其中,所述 M=Bfin*Bfout*Bx*By。
上述处理装置从上述神经网络的LSTM层中选取M个权值,包括:
所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连接层权值输出神经元个数;所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,其中,所述 M=Bin_i*Bout_i。
S1802、当所述M个权值满足预设条件时,处理装置将M个权值全部或者部分置为零,以得到剪枝后的权值。
其中,上述预设条件为:
上述M个权值的信息量满足预设判断条件。
作为一种可选的实施方式,上述预设判断条件包括阈值判断条件。其中,阈值判断条件,可以包括:小于一给定阈值,小于等于一给定阈值,大于一给定阈值,大于等于一给定阈值,在一给定取值范围内或在一给定取值范围外中的一种或几种。
具体地,上述M个权值的信息量小于一给定阈值,其中,上述M个权值的信息量包括但不限于该M个权值绝对值的算术平均值、该M个权值绝对值的几何平均值和该M个权值绝对值的最大值。上述M个权值绝对值的算术平均值小于第一阈值;或者上述M个权值绝对值的几何平均值小于第二阈值;或者上述M个权值绝对值的最大值小于第三阈值。对于上述第一阈值、第二阈值和第三阈值中各自的选择,本领域技术人员可以根据情况进行预先设定,也可以通过改变预设公式中的输入参数的方式计算获得,还可以通过机器学习的方式获得。对于第一阈值、第二阈值以及第三阈值的获取方式,本公开并不做具体限定。
作为一种可选的实施方式,上述预设判断条件包括函数映射判断条件,该函数映射判断条件为判断经函数变换后是否满足给定条件。
进一步地,上述处理装置重复对上述神经网络的权值进行粗粒度剪枝以及根据剪枝后的权值进行训练,。其中,上述设定精度为x%,x介于0到5之间。
S1803、处理装置根据剪枝后的权值,对神经网络进行训练。
具体地,上述处理装置根据所述剪枝后的权值对神经网络进行训练具体为:
上述处理装置根据上述剪枝后的权值和通过反向传播算法对所述神经网络进行重新训练。
进一步地,上述处理装置根据训练后的神经网络进行运算,并将通过运算得到输出神经元存储到上述处理装置中。
图1是本公开实施例的包括粗粒度剪枝单元和运算单元的处理装置的结构示意图,用于对神经网络进行剪枝。该处理装置包括:
粗粒度剪枝单元:用于对所述神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值;所述目标权值为绝对值大于第二预设阈值的权值;
其中,所述粗粒度剪枝单元具体用于:
通过滑动窗口从神经网络的权值中选取出M个权值,所述M为大于1的整数;
当所述M个权值满足预设条件时,将所述M个权值的全部或者部分置为零。
其中,上述预设条件为:
上述M个权值的信息量满足预设判断条件。
作为一种可选的实施方式,上述预设判断条件包括阈值判断条件。其中,阈值判断条件,可以包括:小于一给定阈值,小于等于一给定阈值,大于一给定阈值,大于等于一给定阈值,在一给定取值范围内或在一给定取值范围外中的一种或几种。
具体地,上述M个权值的信息量小于一给定阈值,其中,上述M个权值的信息量包括但不限于该M个权值绝对值的算术平均值、该M个权值绝对值的几何平均值和该M个权值绝对值的最大值。上述M个权值绝对值的算术平均值小于第一阈值;或者上述M个权值绝对值的几何平均值小于第二阈值;或者上述M个权值绝对值的最大值小于第三阈值。对于上述第一阈值、第二阈值和第三阈值中各自的选择,本领域技术人员可以根据情况进行预先设定,也可以通过改变预设公式中的输入参数的方式计算获得,还可以通过机器学习的方式获得。对于第一阈值、第二阈值以及第三阈值的获取方式,本公开并不做具体限定。
作为一种可选的实施方式,上述预设判断条件包括函数映射判断条件,该函数映射判断条件为判断上述M个权值经函数变换后是否满足给定条件。
所述神经网络包括全连接层、卷积层和/或长短期记忆LSTM层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵 (Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数, (Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数, Nout_i表示第i个全连接层权值输出神经元个数;所述粗粒度剪枝单元具体用于:
当对所述全连接层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿
着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数, Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout;
当对所述卷积层的权值进行粗粒度剪枝操作时,所述滑动窗口为大小为 Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0 且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By;
当对所述LSTM层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为 Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
运算单元,用于根据所述剪枝后的权值进行训练;训练过程中已经被置为零的权值保持为零。
运算单元集成了神经网络反向传播训练算法,接收粗粒度剪枝后的神经网络,采用反向传播训练算法进行训练,在训练过程中被剪枝的权值始终保持为0。运算单元将训练后的神经网络或者传输给粗粒度剪枝单元进行进一步剪枝操作,或者直接输出。
本公开提供了一种处理装置(例如人工神经网络芯片),图4是本公开实施例的处理装置的结构示意图。如图4所示的处理装置,能够加速处理粗粒度稀疏后的神经网络,充分挖掘粗粒度稀疏的特性,减少访存同时减少运算量,从而获得加速比并降低能耗。
处理装置包括存储单元,指令控制单元,粗粒度剪枝单元、粗粒度选数单元和运算单元。处理装置可以是用于神经网络处理。
存储单元可用来存储神经网络的神经元,权值以及指令。
粗粒度剪枝单元,用于对所述神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值,并将剪枝后的权值和目标权值位置信息存储到所述存储单元中;所述目标权值为绝对值大于第二预设阈值的权值,其中,所述粗粒度剪枝单元具体用于:
通过滑动窗口从神经网络的权值中选取出M个权值,所述M为大于1的整数;
当所述M个权值满足预设条件时,将所述M个权值的全部或者部分置为零。
进一步的,所述M个权值的信息量小于第一预设阈值。
进一步的,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于所述第一阈值,或者所述M个权值绝对值的几何平均值小于所述第二阈值,或者所述M个权值的最大值小于所述第三阈值。
进一步的,所述粗粒度剪枝单元和运算单元用于:
重复对所述神经网络的权值进行粗粒度剪枝以及根据剪枝后的权值进行训练,直至保证在精度不损失设定精度的前提下没有权值满足所述预设条件。
进一步的,所述神经网络包括全连接层、卷积层和/或长短期记忆LSTM层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数, Nout_i表示第i个全连接层权值输出神经元个数;所述粗粒度剪枝单元具体用于:
当对所述全连接层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿
着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数, Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout;
当对所述卷积层的权值进行粗粒度剪枝操作时,所述滑动窗口为大小为 Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0 且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By;
当对所述LSTM层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为 Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0 且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
运算单元,用于根据所述剪枝后的权值进行训练;训练过程中已经被置为零的权值保持为零。
指令控制单元用于接收存储部分中的指令,经过译码后生成控制指令控制粗粒度选数单元进行选数操作和运算单元进行计算操作。
粗粒度选数单元用于接收输入神经元和目标权值位置数据,使用滑动窗口选取神经网络的一组权值,将选取的权值都置为零,并选取出目标权值对应的神经元。
上述运算单元用于接收输入被选择的神经元和目标权值,通过乘加运算单元完成神经网络运算,得到输出神经元并将所述输出神经元重新传输给存储单元。
更进一步的,存储单元存放权值时只存放目标权值以及目标权值位置数据。
更进一步的,粗粒度选数单元只会选择出目标权值对应的神经元并传输给运算单元。
更进一步的,如图10所示,处理装置还可包括预处理单元。该单元对原始数据进行预处理,包括切分、高斯滤波、二值化、正则化、归一化等等。
更进一步的,处理装置还可包括直接内存存取(direct memory access,DMA)单元。
更进一步的,处理装置还可包括指令缓存单元,输入神经元缓存单元,目标权值缓存单元,目标权值位置缓存单元,输出神经元缓存单元。
特别的,存储单元主要用来存储神经网络的神经元,权值以及指令。其中存放权值时只存放目标权值以及目标权值位置数据。
特别的,DMA单元用于在所述存储单元、指令缓存单元、目标权值缓存单元、目标权值位置缓存单元,输入神经元缓存单元和输出神经元缓存单元中进行数据或者指令读写。
指令缓存单元,用于存储专用指令;
目标权值缓存单元,用于缓存目标权值;
目标权值位置缓存单元,用于缓存目标权值位置信息;
目标权值位置缓存单元将输入数据中每个连接权值一一对应到相应的输入神经元。
一种情形下目标权值位置缓存单元缓存一一对应的方法为采用1表示有连接,0表示无连接,每组输出与所有输入的连接状态组成一个0和1的字符串来表示该输出的连接关系。另一种情形下目标权值位置缓存单元缓存一一对应的方法为采用1表示有连接,0表示无连接,每组输入与所有输出的连接状态组成一个0和1的字符串来表示该输入的连接关系。另一种情形下目标权值位置缓存单元缓存一一对应的方法为将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
输入神经元缓存单元,用于缓存输入到粗粒度选数单元的输入神经元;
输出神经元缓存单元,用于缓存运算单元输出的输出神经元。
运算单元,用于根据存储单元中存储的指令对所述数据执行相应运算。
运算单元包括但不仅限于三个部分,第一部分乘法器,第二部分加法树,第三部分为激活函数单元。第一部分将第一输入数据(in1)和第二输入数据(in2)相乘得到相乘之后的输出(out1),过程为:out=in1*in2;第二部分将第三输入数据in3通过加法树逐级相加得到第二输出数据(out2),其中in3是一个长度为N的向量,N大于1,过称为:out2= in3[1]+in3[2]+...+in3[N],和/或将第三输入数据(in3)通过加法数累加之后和第四输入数据(in4)相加得到第二输出数据(out2),过程为:out=in3[1]+in3[2]+...+in3[N]+in4,或者将第三输入数据(in3)和第四输入数据(in4)相加得到第二输出数据(out2),过称为: out2=in3+in4;第三部分将第五输入数据(in5)通过激活函数(active)运算得到激活输出数据(out),过程为:out3=active(in5),激活函数active可以是sigmoid、tanh、relu、softmax等,除了做激活操作,第三部分可以实现其他的非线性函数,可将将输入数据(in)通过运算(f)得到输出数据(out),过程为:out=f(in)。
运算单元还可以包池化单元,池化单元将输入数据(in)通过池化运算得到池化操作之后的输出数据(out),过程为out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。
所述运算单元执行运算包括几个部分,第一部分是将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;第二部分执行加法树运算,用于将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到输出数据;第三部分执行激活函数运算,对第五输入数据通过激活函数(active)运算得到输出数据。以上几个部分的运算可以自由组合,从而实现各种不同功能的运算。
需要指出的是,上述预处理单元、存储单元、DMA单元、粗粒度剪枝单元、指令缓存单元、指令控制单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元、输出神经元缓存单元、粗粒度选数单元和运算单元均为实体硬件器件,不是功能性软件单元。
以下,列举神经网络处理器实施例,对本公开的处理方法进行具体说明,但应理解的是其并非因此限制本公开,凡是利用本具体实施例所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本公开的保护范围内。
图11是本公开以处理方法的一具体实施例。如图11所示,其是神经网络的一个全连接层经过粗粒度剪枝后的结果,全连接层共有8个输入神经元为n1~n8和3个输出神经元为o1~o3。其中n3,n4,n7,n8四个输入神经元与o1,o2,o3三个输出神经元之间的权值通过粗粒度稀疏被置为零;n1与o1,o2,o3之间通过s11,s12,s13三个权值连接,n2 与o1,o2,o3之间通过s21,s22,s23三个权值连接,n5与o1,o2,o3之间通过s31,s32, s33三个权值连接,n6与o1,o2,o3之间通过s41,s42,s43三个权值连接;我们用11001100 这个比特串表示输入神经元与输出神经元之间的连接情况,即第一种表示目标权值位置数据的情况,1表示输入神经元与三个输出神经元都连接,0表示输入神经元与三个输出神经元都不连接。表1描述了实施例中神经元与权值的数据,公式1描述了o1,o2,o3三个输出神经元的运算公式。从公式1中可以看出o1,o2,o3将接收到相同的神经元进行运算。
需要说明的是,细粒度剪枝指的是把每个权值看成独立个体,剪枝时候如果某个权值符合条件就被剪去;粗粒度剪枝就是把权值按照一定的方式分组,每组包括多个权值,如果一组权值符合条件,该组权值就会被全部剪除。
表2
公式1--输出神经元运算公式:
o1=n1*s11+n2*s12+n5*s13+n6*s14
o2=n1*s21+n2*s22+n5*s23+n6*s24
o3=n1*s31+n7*s32+n5*s33+n6*s34
在处理装置进行运算时,8个输入神经元,12个权值和8比特的位置数据以及相应的指令被传输到存储单元。粗粒度选数单元接收8个输入神经元和目标权值位置,选出n1,n2,n5,n6四个需要参与运算的神经元。运算单元接收四个被选择的神经元与权值,通过公式1完成输出神经元的运算,然后将输出神经元传输回存储部分。
本公开一些实施例中,公开了一种处理装置,包括:存储器:存储有可执行指令;处理器:用于执行存储单元中的可执行指令,在执行指令时依照上述处理方法进行操作。
其中,处理器可以是单个处理单元,但也可以包括两个或更多个处理单元。另外,处理器还可以包括通用处理器(CPU)或者图形处理器(GPU);还可以包括在现场可编程逻辑门阵列(FPGA)或者专用集成电路(ASIC),以对神经网络进行设置和运算。处理器还可以包括用于缓存用途的片上存储器(即包括处理装置中的存储器)。
在一些实施例里,公开了一种芯片,其包括了上述处理装置。
在一些实施例里,公开了一种芯片封装结构,其包括了上述芯片。
在一些实施例里,公开了一种板卡,其包括了上述芯片封装结构。
在一些实施例里,公开了一种电子装置,其包括了上述板卡。
电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B 超仪和/或心电图仪。
基于现有技术仅按神经网络的层为单位进行量化的技术问题,本公开提供了一种数据的量化方法,通过分组和聚类操作,对神经网络的权值进行分组,并将每一组权值分成m 个类,计算出每个类的中心权值,每个类中的所有权值都用该类对应的中心权值替换;以及对中心权值进行编码操作,以得到密码本和权值字典,形成了一套完整的量化方法。
此外,本公开还可以对神经网络进行重训练,且重训练只需训练密码本,权值字典内容保持不变,减小了工作量。还可以将该量化方法得到的量化权值应用在本公开提供的处理装置中,增加了查找表单元,每次进行处理时不需输入权值,只需根据查找控制指令查找权值字典和密码本即可获得量化权值,实现了系统化的操作,且通过充分挖掘神经网络的权值分布特性,得到低比特量化的权值,大大提高了处理速度,降低了权值存储开销和访存开销。
本公开某些实施例于后方将参照所附附图做更全面性地描述,其中一些但并非全部的实施例将被示出。实际上,本公开的各种实施例可以许多不同形式实现,而不应被解释为限于此数所阐述的实施例;相对地,提供这些实施例使得本公开满足适用的法律要求。
在本说明书中,下述用于描述本公开原理的各种实施例只是说明,不应该以任何方式解释为限制公开的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本公开的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不悖离本公开的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同附图标记用于相似功能和操作。在本公开中,术语“包括”和“含有”及其派生词意为包括而非限制。
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
本公开实施例的一方面,提供了一种数据的量化方法,图19为本公开实施例的数据的量化方法的步骤示意图,如图19所示,包括步骤:
S1901、对神经网络的权值进行分组。
进一步地,对神经网络的权值进行的分组可以按照分为一组、层类型分组、层间分组、层内分组、混合分组等方式进行;
S1902、根据聚类算法对每组权值进行聚类操作,并以中心权值表示每个类别的权值。
具体地,将每组权值分成m个类,计算出每个类的中心权值,将每个类中的所有权值都用该类对应的中心权值替换。
其中,所述聚类算法包括但不限于K-measn、K-medoids、Clara和Clarans。
进一步地,所述一个类的中心权值选择方法为,使得代价函数J(w,w0)最小。
其中,w是一个类中的所有权值,w0是该类的中心权值,n是该类中权值的数量,wi是该类中第i个权值,i是大于或等于1且小于或等于n的整数。
S1903、对中心权值进行编码操作,得到密码本和权值字典。
该权值量化方法还可以对神经网络进行重训练,在重训练过程中,只训练密码本,权值字典内容保持不变。具体的,重训练可以采用反向传播算法。
图20为本公开实施例的数据的量化的过程示意图,如图20所示,按照分组的策略对神经网络的权值进行分组,得到有序排列的权值矩阵。再对分组后的权值矩阵进行组内采样以及聚类操作,从而将值相近的权值划为同一类别,得到1.50、-0.13、-1.3和0.23这4个中心权值,并分别对应四个类别的权值。然后,对中心权值进行编码操作,将中心权值为-1.3的类别编码为00,将中心权值为-0.13的类别编码为01,将中心权值为0.23的类别编码为10,将中心权值为1.50的类别编码为11,此为密码本内容。另外,还分别用4个中心权值对应的编码内容(00、01、10和11)分别表示对应类别中的权值,从而得到权值字典。
该量化过程充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,得到神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
接下来,对神经网络的数据的量化方法进行举例说明:
实施例1:将神经网络的所有权值归为一组,对每一组权值采用K-means聚类算法进行聚类,每个类计算出一个中心权值,每一个类中所有权值用中心权值进行替换。然后根据量化后的权值生成权值字典和密码本,对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
实施例2:将神经网络的权值按照层类型进行分组。比如该神经网络包括全连接层、卷积层和长短期记忆(long short term memory,LSTM)层。所有卷积层的权值为一组,所有全连接层的权值为一组,所有LSTM层的权值为一组。
若一个神经网络有i个卷积层,j个全连接层,m个LSTM层,共t种不同类型的层,其中i,j,m均为大于或等于0的整数且满足i+j+m>=1,t为大于或等于1的整数且满足 t=i+j+m,神经网络的权值将被分为t组。对t组权值中的每组权值采用K-medoids聚类算法进行聚类,计算出每个类的中心权值,将每一个类中所有权值用该类对应的中心权值进行替换。然后根据每一组内量化后的权值生成权值字典和密码本,最后对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
实施例3:将神经网络的权值按照层间结构进行分组。
具体地,将一个或者连续多个卷积层分为一组,一个或者连续多个全连接层分为一组,一个或者连续多个LSTM层分为一组。对每一组内权值采用Clara聚类算法进行聚类,值相近的权值将被划分到同一个类,计算出每个类的中心权值,每个类中的所有权值都用该类对应的中心权值替换。然后根据每一组内量化后的权值生成权值字典和密码本,最后对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
实施例4:将神经网络的权值按照层内结构进行分组。
具体地,神经网络的卷积层可以看成是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin,Nfout,Kx,Ky是正整数,Nfin表示输入特征图像(feature map)数量,Nfout表示输出特征图像数量,(Kx,Ky)表示卷积核(kernel)的大小。卷积层的权值按(Bfin,Bfout,Bx,By)的组大小被分成Nfin*Nfout*Kx*Ky/(Bfin*Bfout*Bx*By)个不同的组,其中Bfin为小于或等于Nfin 的正整数,Bfout为小于或等于Nfout的正整数,Bx为小于或等于Kx的正整数,By为小于或等于Ky的正整数。
神经网络的全连接层可以看成是一个二维矩阵(Nin,Nout),其中Nin,Nout是正整数,Nin 表示输入神经元的个数,Nout表示输出神经元的个数,共有Nin*Nout个权值。全连接层权值按照(Bin,Bout)的组大小被分成(Nin*Nout)/(Bin*Bout)个不同的组,其中Bin是小于或等于Nin的正整数,Bout是小于或等于Nout的正整数。
神经网络的LSTM层权值可以看出多个全连接层的权值的组合,假设LSTM层的权值由n个全连接层权值组成,其中n为正整数,则每一个全连接层都可以按照全连接层的分组方式进行分组操作。
对每一组内权值采用Clarans聚类算法进行聚类,计算出每个类的中心权值,将每一个类中所有权值用该类对应的中心权值进行替换。然后根据每一组内量化后的权值生成权值字典和密码本,最后对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
实施例5:将神经网络的权值按照混合的方式进行分组,比如所有卷积层为一组,所有全连接层按照层内结构进行分组,所有LSTM层按照层间结构进行分组。对每一组内权值采用Clarans聚类算法进行聚类,计算出每个类的中心权值,将每个类中的所有权值都用该类对应的中心权值替换。然后根据每一组内量化后的权值生成权值字典和密码本,最后对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
本公开实施例的另一方面,还提供了一种数据的量化装置,图21为本公开实施例的数据的量化装置的结构示意图,如图21所示,其包括:
存储器1,用于存储操作指令;所述操作指令一般为二进制数形式,由操作码和地址码构成,操作码指示处理器2即将进行的操作,地址码指示处理器2到存储器1中的地址中读取参与操作的数据。
处理器2,用于执行存储器1中的操作指令,在执行指令时依照上述的数据的量化方法进行操作。
本公开的数据的量化装置,处理器2通过执行存储器1中的操作指令,依照前述数据的量化方法进行操作,能够对杂乱无章的权值进行量化,得到低比特化且规范化的量化权值,充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,得到神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
本公开实施例的又一方面,提供了一种处理装置,图22为本公开实施例的处理装置的结构示意图,如图22所示,该处理装置包括:控制单元1、查找表单元2和运算单元3。
控制单元1接收指令,并对其进行译码,生成查找控制信息和运算控制信息。
其中,该指令为神经网络专用指令,包括所有专用于完成人工神经网络运算的指令。神经网络专用指令包括但不仅限于控制指令,数据传输指令,运算指令和逻辑指令。其中控制指令控制神经网络执行过程。
数据传输指令完成不同存储介质之间的数据传输,数据格式包括但不仅限于矩阵,向量和标量。
运算指令完成神经网络的算术运算,包括但不仅限于矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)神经网络运算指令、近邻归一化(Local Response Normalization,LRN)神经网络运算指令、局部对比度归一化(LocalContrast Normalization,LCN)神经网络运算指令、LSTM神经网络运算指令、递归神经网络(Recurrent Neural Networks,RNN)运算指令、线性修正单元(Rectified linear unit,RELU) 神经网络运算指令、带参数的线性修正单元(Parametric Rectified Linear Unit,PRELU)神经网络运算指令、S型生长曲线(SIGMOID)神经网络运算指令、双曲正切函数(TANH)神经网络运算指令和最大输出值(MAXOUT)神经网络运算指令。
逻辑指令完成神经网络的逻辑运算,包括但不仅限于向量逻辑运算指令和标量逻辑运算指令。
其中,RBM神经网络运算指令用于实现RBM神经网络运算。
LRN神经网络运算指令用于实现LRN神经网络运算。
LCN神经网络运算指令用于实现LCN神经网络运算。
LSTM神经网络运算指令用于实现LSTM神经网络运算。
RNN神经网络运算指令用于实现RNN运算。
RELU神经网络运算指令用于实现RELU神经网络运算。
PRELU神经网络运算指令用于实现PRELU神经网络运算。
SIGMOID神经网络运算指令用于实现SIGMOID神经网络运算
TANH神经网络运算指令用于实现TANH神经网络运算。
MAXOUT神经网络运算指令用于实现MAXOUT神经网络运算。
更进一步地,该神经网络专用指令包括Cambricon(寒武纪)指令集。
所述Cambricon指令集包括至少一种Cambricon指令,该Cambricon指令的长度可以为64bit,也可以根据实际需求,改变其长度。该Cambricon指令包括操作码和操作数。Cambricon指令包含四种类型的指令,分别是Cambricon控制指令(controlinstructions)、 Cambricon数据传输指令(data transfer instructions)、Cambricon运算指令(computational instructions)和Cambricon逻辑指令(logical instructions)。
其中,Cambricon控制指令用于控制执行过程。Cambricon控制指令包括跳转(jump)指令和条件分支(conditional branch)指令。
Cambricon数据传输指令用于完成不同存储介质之间的数据传输。Cambricon数据传输指令包括加载(load)指令、存储(store)指令和搬运(move)指令。
load指令用于将数据从主存加载到缓存,store指令用于将数据从缓存存储到主存,move 指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据。数据传输指令支持三种不同的数据组织方式,包括矩阵,向量和标量。
Cambricon运算指令用于完成神经网络算术运算。Cambricon运算指令包括Cambricon 矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令。
Cambricon矩阵运算指令完成神经网络中的矩阵运算,包括矩阵乘向量(matrixmultiply vector)、向量乘矩阵(vector multiply matrix)、矩阵乘标量(matrixmultiply sealar)、外积(outer product)、矩阵加矩阵(matrix add matrix)和矩阵减矩阵(matrix subtract matrix)。
Cambricon向量运算指令完成神经网络中的向量运算,包括向量基本运算(vectorelementary arithmetics)、向量超越函数运算(vector transcendental functions)、内积(dot product)、向量随机生成(random vector generator)和向量中最大/最小值(maximum/minimum of a vector)。其中向量基本运算包括向量加、减、乘、除(add、subtract、multiply、divide),向量超越函数是指不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数、对数函数、三角函数和反三角函数。
Cambricon标量运算指令完成神经网络中的标量运算,包括标量基本运算(scalarelementary arithmetics)和标量超越函数运算(scalar transcendental functions)。其中标量基本运算包括标量、减、乘、除(add、subtract、multiply、divide),标量超越函数是指那些不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数,对数函数,三角函数,反三角函数。
Cambricon逻辑指令用于神经网络的逻辑运算。Cambricon逻辑运算包括Cambricon向量逻辑运算指令和Cambricon标量逻辑运算指令。
Cambricon向量逻辑运算指令包括向量比较(vector compare)、向量逻辑运算(vector logical operations)和向量大于合并(vector greater than merge)。其中向量比较包括但不限于大于、小于,等于、大于或等于(≥)、小于或等于(≤)、不等于。向量逻辑运算包括与、或、非。
Cambricon标量逻辑运算包括标量比较(scalar compare),标量逻辑运算(scalarlogical operations)。其中标量比较包括但不限于大于、小于、等于、大于或等于(≥),小于或等于(≤)和不等于。标量逻辑运算包括与、或、非。
查找表单元2接收所述查找控制信息、权值字典和密码本,并根据查找控制信息,对权值字典和密码本进行查表操作,以得到量化权值;
运算单元3接收所述运算控制信息和输入神经元,并根据运算控制信息,对所述量化权值和输入神经元进行运算操作,以得到输出神经元并输出。
其中,运算单元3可以包括四个运算部分:第一运算部分,用于将所述量化权值和输入神经元相乘;
第二运算部分,用于对所述量化权值和输入神经元通过一个或多个加法器实现相加操作(更进一步地,加法器也可以组成加法树,从而实现不同级加法树的运算功能);
第三运算部分,用于对所述量化权值和输入神经元进行非线性函数运算;
第四运算部分,用于对所述量化权值和输入神经元进行池化操作。
本公开通过采用针对局部量化的多层人工神经网络运算的专用SIMD指令和定制的运算单元3,解决了CPU和GPU运算性能不足,前端译码开销大的问题,有效提高了对多层人工神经网络运算算法的支持。
图23为本公开实施例的查表的过程示意图,如图23所示,根据密码本可知该量化权值被分为四个类别,编码为00的类别,其中心权值为-1.30;编码为01的类别,其中心权值为-0.13;编码为10的类别,其中心权值为0.23;以及编码为11的类别,其中心权值为 1.50。同时,再参照权值字典可知,同一个类别的权值的分布情况,并用各类别的中心权值代替权值字典中的对应编码,即可得到量化权值。
该操作充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,能够通过量化步骤中得到的权值字典和密码本进行查表,从而还原量化权值,具有良好的可操作性以及规范性。
为了优化本公开的处理装置,加入了存储单元4、预处理单元5和缓存单元7,以使得处理数据更有序,方便处理装置的处理操作。
参见图24,图24为本公开实施例的一具体实施例的处理装置的结构示意图,如图24 所示,在如图22所示的原有结构上,该具体实施例提供的处理装置还包括:存储单元4、预处理单元5、直接内存存取(direct memory access,DMA)单元6和缓存单元7。
其中,存储单元4用于存储外部输入的输入神经元、权值字典、密码本和指令,以及接收运算单元3输出的输出神经元;
此外,存储单元4还可以存储未量化权值,且该未量化权值通过旁路直接输出至运算单元3,可见本公开的处理装置不仅可以处理量化权值,也可以处理未量化权值,可以根据不同的实际需求进行选择。
预处理单元5用于对外部输入的输入信息进行预处理,得到所述输入神经元、权值字典、密码本和指令,前述预处理包括切分、高斯滤波、二值化、正则化和归一化等。
缓存单元7包括:
指令缓存单元71,用于缓存所述指令;
权值字典缓存单元72,用于缓存所述权值字典;
密码本缓存单元73,用于缓存所述密码本;
输入神经元缓存单元74,用于缓存所述输入神经元;
以及输出神经元缓存单元75,用于缓存输出神经元。
外部输入的输入数据经过预处理单元5预处理后,得到输入神经元、权值字典、密码本和指令并输出至存储单元4存储。DMA单元6从存储单元4中直接读取输入神经元、权值字典、密码本和指令,并将指令输出至指令缓存单元71中缓存,将权值字典输出至权值字典缓存单元72中缓存,将密码本输出至密码本缓存单元73中缓存,将输入神经元输出至输入神经元缓存单元74中缓存。
控制单元1对其接收的指令译码,得到并输出查表控制信息和运算控制信息。查找表单元2根据接收的查表控制信息,对权值字典和密码本进行查表操作,得到量化权值,并输出至运算单元3。运算单元3根据其接收到的运算控制信息,选择运算部分及各运算部分的运算顺序,对量化权值和输入神经元进行运算处理,得到输出神经元并将其输出至输出神经元缓存单元75,最终再由该输出神经元缓存单元75输将输出神经元输出至存储单元4进行存储。
其中,第一运算部分的运算操作具体为:将输入数据1(in1)和输入数据2(in2)相乘,得到相乘之后的输出(out),表示为:out=in1*in2
第二运算部分可以由一个或多个加法器组成,以实现相加运算。此外,多个加法器也可以组成加法树,以实现不同级加法树的运算功能。其运算的操作具体为:将输入数据1(in1)通过加法树逐级相加得到输出数据(out1),其中输入数据1可以是一个长度为N的向量,N大于1,过程为:out1=in1[1]+in1[2]+...+in1[N];或者将输入数据1(in1)通过加法树累加之后,in1为一个长度为N的向量,N大于1,和输入数据2(in2)相加得到输出数据(out2),过程为:out2=in1[1]+in1[2]+...+in1[N]+in2;再或者将输入数据1(in1),和输入数据2(in2)相加得到输出数据(out3),其中该in1和in2均为一个数值,过程为: out3=in1+in2。
第三运算部分将输入数据(in)可以通过非线性函数(f)实现不同函数运算,从而得到输出数据(out),过程为:out=f(in),其中,非线性函数包括激活函数,其过程为: out=active(in),激活函数active包括但不限于sigmoid、tanh、relu和/或softmax。
第四运算部分将输入数据(in)进行池化操作,得到输出数据(out),过程为out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。
以上几个部分的运算可以自由选择一个或者多个部分进行不同顺序的组合,从而实现各种不同功能的运算。本公开的运算单元3包括但不限于上述四个运算部分,还可以包含异或、同或以及或等逻辑运算,且运算控制信息可以控制各运算部分中的一个或者多个运算部分进行不同顺序的组合,从而实现各种不同功能的运算。
本公开实施例的再一方面,还提供了一种处理方法,图25为本公开实施例的处理方法的步骤示意图,如图25所示,包括步骤:
S701、接收输入神经元、权值字典、密码本和指令;
其中,输入神经元、权值字典、密码本和指令,可以为对外部输入的输入信息经过预处理操作后得到的信息,预处理包括但不限于切分、高斯滤波、二值化、正则化、归一化等方式;
S702、对所述指令进行译码,以得到查找控制信息和运算控制信息;
其中,该指令为神经网络专用指令,包括所有专用于完成人工神经网络运算的指令。
神经网络专用指令包括但不仅限于控制指令,数据传输指令,运算指令和逻辑指令。其中,控制指令控制神经网络执行过程。
数据传输指令完成不同存储介质之间的数据传输,数据格式包括但不仅限于矩阵,向量和标量。
运算指令完成神经网络的算术运算,包括但不仅限于矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM 神经网络运算指令、RNN运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、 SIGMOID神经网络运算指令、TANH神经网络运算指令和MAXOUT神经网络运算指令。
逻辑指令完成神经网络的逻辑运算,包括但不仅限于向量逻辑运算指令和标量逻辑运算指令。
其中,RBM神经网络运算指令用于实现RBM神经网络运算。
LRN神经网络运算指令用于实现LRN神经网络运算。
LCN神经网络运算指令用于实现LCN神经网络运算。
LSTM神经网络运算指令用于实现LSTM神经网络运算。
RNN运算指令用于实现RNN运算。
RELU神经网络运算指令用于实现RELU神经网络运算。
PRELU神经网络运算指令用于实现PRELU神经网络运算。
SIGMOID神经网络运算指令用于实现SIGMOID神经网络运算
TANH神经网络运算指令用于实现TANH神经网络运算。
MAXOUT神经网络运算指令用于实现MAXOUT神经网络运算。
更进一步地,该神经网络专用指令包括Cambricon指令集。
所述Cambricon指令集包括至少一种Cambricon指令,且Cambricon指令的长度为64bit,该Cambricon指令包括操作码和操作数。Cambricon指令包含四种类型的指令,分别是Cambricon控制指令(control instructions)、Cambricon数据传输指令(data transferinstructions)、Cambricon运算指令(computational instructions)和Cambricon逻辑指令(logical instructions)。
其中,Cambricon控制指令用于控制执行过程。Cambricon控制指令包括跳转(jump)指令和条件分支(conditional branch)指令。
Cambricon数据传输指令用于完成不同存储介质之间的数据传输。Cambricon数据传输指令包括加载(load)指令、存储(store)指令和搬运(move)指令。load指令用于将数据从主存加载到缓存,store指令用于将数据从缓存存储到主存,move指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据。数据传输指令支持三种不同的数据组织方式,包括矩阵,向量和标量。
Cambricon运算指令用于完成神经网络算术运算。Cambricon运算指令包括Cambricon 矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令。
Cambricon矩阵运算指令完成神经网络中的矩阵运算,包括矩阵乘向量(matrixmultiply vector)、向量乘矩阵(vector multiply matrix)、矩阵乘标量(matrixmultiply scalar)、外积(outer product)、矩阵加矩阵(matrix add matrix)和矩阵减矩阵(matrix subtract matrix)。
Cambricon向量运算指令完成神经网络中的向量运算,包括向量基本运算(vectorelementary arithmetics)、向量超越函数运算(vector transcendental functions)、内积(dot product)、向量随机生成(random vector generator)和向量中最大/最小值(maximum/minimum of a vector)。其中向量基本运算包括向量加、减、乘、除(add、subtract、multiply、divide),向量超越函数是指不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数、对数函数、三角函数和反三角函数。
Cambricon标量运算指令完成神经网络中的标量运算,包括标量基本运算(scalarelementary arithmetics)和标量超越函数运算(scalar transcendental functions)。其中标量基本运算包括标量、减、乘、除(add、subtract、multiply、divide),标量超越函数是指那些不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数,对数函数,三角函数,反三角函数。
Cambricon逻辑指令用于神经网络的逻辑运算。Cambricon逻辑运算包括Cambricon向量逻辑运算指令和Cambricon标量逻辑运算指令。
Cambricon向量逻辑运算指令包括向量比较(vector compare)、向量逻辑运算(vector logical operations)和向量大于合并(vector greater than merge)。其中向量比较包括但不限于大于、小于,等于、大于或等于(≥)、小于或等于(≤)、不等于。向量逻辑运算包括与、或、非。
Cambricon标量逻辑运算包括标量比较(scalar compare),标量逻辑运算(scalarlogical operations)。其中标量比较包括但不限于大于、小于、等于、大于或等于(≥),小于或等于(≤) 和不等于。标量逻辑运算包括与、或、非。
S703、根据所述查找控制信息,查找权值字典和密码本得到量化权值,并根据所述运算控制信息,对该量化权值以及输入神经元进行运算操作,以得到输出神经元并输出。
此外,为了优化本公开的处理方法,使得处理更方便、有序,在本公开的一些实施例中还增加了步骤,图26为本公开实施例的一具体实施例的处理方法的步骤示意图,如图26所示,该具体实施例的处理方法中:
在步骤S701之前,还包括步骤S700:对外部输入的输入信息进行预处理,得到所述输入神经元、权值字典、密码本和指令。
其中,预处理包括切分、高斯滤波、二值化、正则化和归一化等;
在步骤S702之后还包括:
步骤S7021:存储输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及
步骤S7022:缓存所述指令、输入神经元、输出神经元、权值字典和密码本。之后的步骤同图26所示的处理方法,此处不再赘述。
其中,所述运算操作包括:将权值和输入神经元相加,该相加功能由一个或多个加法器实现,此外,所述多个加法器还可以构成加法树,实现权值和输入神经元的逐级相加,和/或;
将权值和输入神经元相乘,和/或;
对所述权值和输入神经元进行非线性函数运算,其中,非线性函数包括激活函数,所述激活函数包括sigmoid、tanh、relu和/或softmax,和/或;
对所述权值和输入神经元进行池化操作,所述权值包括量化权值和/或非量化权值,其中,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出 out相关的一个池化核中的数据。
前述几种运算可以自由选择一种或者多种进行不同顺序的组合,从而实现各种不同功能的运算。且本公开的运算步骤包括但不限于上述四种运算,还可以包含或、异或以及同或等逻辑运算。
此外,该处理方法也能用于处理未量化权值,可以根据运算控制信息,对该未量化权值和输入神经元进行运算,得到并将输出神经元输出。
在一个实施例里,本公开还提供了一种芯片,其包括了前述处理装置,该芯片能够同时对量化权值以及未量化权值进行多种运算,实现了运算的多元化。另外,通过采用针对多层人工神经网络运算算法的专用片上缓存,充分挖掘了输入神经元和权值数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络运算及其训练算法性能瓶颈的问题。
在一个实施例里,本公开提供了一个芯片封装结构,其包括了上述芯片。
在一个实施例里,本公开提供了一个板卡,其包括了上述芯片封装结构。
在一个实施例里,本公开提供了一个电子装置,其包括了上述板卡。
上述电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B 超仪和/或心电图仪。
本公开实施例所有的模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管、忆阻器、DNA计算机。
基于现有技术仅按神经网络的层为单位进行量化的技术问题,本公开提供了一种数据的量化方法,通过分组和聚类操作,对神经网络的权值进行分组,并将每组权值分成m个类,计算出每个类的中心权值,每个类中的所有权值都用该类对应的中心权值替换;以及对中心权值进行编码操作,以得到密码本和权值字典,形成了一套完整的量化方法。
此外,本公开还可以对神经网络进行重训练,且重训练只需训练密码本,权值字典内容保持不变,减小了工作量。还可以将该量化方法得到的量化权值应用在本公开提供的处理装置中,增加了查找表单元,每次进行处理时不需输入权值,只需根据查找控制指令查找权值字典和密码本即可获得量化权值,实现了系统化的操作,且通过充分挖掘神经网络的权值分布特性,得到低比特量化的权值,大大提高了处理速度,降低了权值存储开销和访存开销。
本公开某些实施例于后方将参照所附附图做更全面性地描述,其中一些但并非全部的实施例将被示出。实际上,本公开的各种实施例可以许多不同形式实现,而不应被解释为限于此数所阐述的实施例;相对地,提供这些实施例使得本公开满足适用的法律要求。
在本说明书中,下述用于描述本公开原理的各种实施例只是说明,不应该以任何方式解释为限制公开的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本公开的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不悖离本公开的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同附图标记用于相似功能和操作。在本公开中,术语“包括”和“含有”及其派生词意为包括而非限制。
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
本公开实施例的一方面,提供了一种数据的量化方法,图19为本公开实施例的数据的量化方法的步骤示意图,如图19所示,所述方法包括步骤:
S1901、对神经网络的权值进行分组。
进一步地,对神经网络的权值进行分组的策略可以按照分为一组、层类型分组、层间分组、层内分组、混合分组等方式进行;
S1902、根据聚类算法对每组的权值进行聚类操作,并以得到中心权值表示每个类别的权值。
具体的,将每组权值分成m个类,计算出每个类的中心权值,将每个类中的所有权值都用该类对应的中心权值替换。
其中,所述聚类算法包括但不限于K-measn、K-medoids、Clara和Clarans。
进一步地,所述一个类的中心权值选择方法为,使得代价函数J(w,w0)最小。
其中,w是一个类中的所有权值,w0是该类的中心权值,n是该类中权值的数量,wi是该类中第i个权值,i是大于或等于1且小于或等于n的整数。
S1903、对中心权值进行编码操作,得到密码本和权值字典。
该权值量化方法还可以对神经网络进行重训练,在重训练过程中,只训练密码本,权值字典内容保持不变。
具体的,重训练可以采用反向传播算法。
图20为本公开实施例的数据的量化的过程示意图,如图20所示,按照分组的策略对神经网络的权值进行分组,得到有序排列的权值矩阵。再对分组后的权值矩阵进行组内采样以及聚类操作,从而将值相近的权值划为同一类别,得到1.50、-0.13、-1.3和0.23这4个中心权值,并分别对应四个类别的权值。然后,对中心权值进行编码操作,将中心权值为-1.3的类别编码为00,将中心权值为-0.13的类别编码为01,将中心权值为0.23的类别编码为10,将中心权值为1.50的类别编码为11,此为密码本内容。另外,还分别用4个中心权值对应的编码内容(00、01、10和11)分别表示对应类别中的权值,从而得到权值字典。该量化过程充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,得到神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
接下来,对神经网络的数据的量化方法进行举例说明:
实施例1:将神经网络的所有权值归为一组,对每一组权值采用K-means聚类算法进行聚类,每个类计算出一个中心权值,每一个类中所有权值用中心权值进行替换。然后根据量化后的权值生成权值字典和密码本,对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
实施例2:将神经网络的权值按照层类型进行分组。比如该神经网络包括全连接层、卷积层和长短期记忆(long short term memory,LSTM)层。所有卷积层的权值为一组,所有全连接层的权值为一组,所有LSTM层的权值为一组。
若一个神经网络有i个卷积层,j个全连接层,m个LSTM层,共t种不同类型的层,其中i,j,m均为大于0的整数且满足i+j+m>=1,t为大于或等于1的整数且满足t=i+j+m,神经网络的权值将被分为t组。对t组权值中的每组权值采用K-medoids聚类算法进行聚类,计算出每个类的中心权值,将每一个类中所有权值用该类对应的中心权值进行替换。然后根据每一组内量化后的权值生成权值字典和密码本,最后对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
实施例3:将神经网络的权值按照层间结构进行分组。
具体地,将一个或者连续多个卷积层分为一组,一个或者连续多个全连接层分为一组,一个或者连续多个LSTM层分为一组。对每一组内权值采用Clara聚类算法进行聚类,值相近的权值将被划分到同一个类,计算出每个类的中心权值,将每个类中的所有权值都用该类对应的中心权值替换。然后根据每一组内量化后的权值生成权值字典和密码本,最后对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
实施例4:将神经网络的权值按照层内结构进行分组。
具体地,神经网络的卷积层可以看成是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin,Nfout,Kx,Ky是正整数,Nfin表示输入特征图像(feature map)数量,Nfout表示输出特征图像数量,(Kx,Ky)表示卷积核(kernel)的大小。卷积层的权值按(Bfin,Bfout,Bx,By)的组大小被分成Nfin*Nfout*Kx*Ky/(Bfin*Bfout*Bx*By)个不同的组,其中Bfin为小于或等于Nfin 的整数,Bfout为小于或等于Nfout的整数,Bx为小于或等于Kx的整数,By为小于或等于Ky的整数。
神经网络的全连接层可以看成是一个二维矩阵(Nin,Nout),其中Nin,Nout是正整数,Nin 表示输入神经元的个数,Nout表示输出神经元的个数,共有Nin*Nout个权值。全连接层权值按照(Bin,Bout)的组大小被分成(Nin*Nout)/(Bin*Bout)个不同的组,其中Bin是小于或等于Nin的整数,Bout是小于或等于Nout的整数。
神经网络的LSTM层权值可以看出多个全连接层的权值的组合,假设LSTM层的权值由n个全连接层权值组成,其中n为正整数,则每一个全连接层都可以按照全连接层的分组方式进行分组操作。
对每一组内权值采用Clarans聚类算法进行聚类,计算出每个类的中心权值,将每一个类中所有权值用该类对应的中心权值进行替换。然后根据每一组内量化后的权值生成权值字典和密码本,最后对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
实施例5:将神经网络的权值按照混合的方式进行分组,如所有卷积层为一组,所有全连接层按照层内结构进行分组,所有LSTM层按照层间结构进行分组。对每一组内权值采用Clarans聚类算法进行聚类,计算出每个类的中心权值,将每个类中的所有权值都用该类对应的中心权值替换。然后根据每一组内量化后的权值生成权值字典和密码本,最后对神经网络进行重训练,在重训练过程中仅仅训练密码本而不训练权值字典。具体的,重训练采用反向传播算法进行重新训练。
本公开实施例的另一方面,还提供了一种数据的量化装置,图21为本公开实施例的数据的量化装置的结构示意图,如图21所示,其包括:
存储器1,用于存储操作指令;所述操作指令一般为二进制数形式,由操作码和地址码构成,操作码指示处理器2即将进行的操作,地址码指示处理器2到存储器1中的地址中读取参与操作的数据。
处理器2,用于执行存储器1中的操作指令,在执行指令时依照上述的数据的量化方法进行操作。
本公开的数据的量化装置,处理器2通过执行存储器1中的操作指令,依照前述数据的量化方法进行操作,能够对杂乱无章的权值进行量化,得到低比特化且规范化的量化权值,充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,得到神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
本公开实施例的另一方面,提供了一种处理装置,图22为本公开实施例的处理装置的结构示意图,如图22所示,该处理装置包括:控制单元1、查找表单元2和运算单元3。
控制单元1接收指令,并对其进行译码,生成查找控制信息和运算控制信息。
其中,该指令为神经网络专用指令,包括所有专用于完成人工神经网络运算的指令。神经网络专用指令包括但不仅限于控制指令,数据传输指令,运算指令和逻辑指令。其中控制指令控制神经网络执行过程。数据传输指令完成不同存储介质之间的数据传输,数据格式包括但不仅限于矩阵,向量和标量。运算指令完成神经网络的算术运算,包括但不仅限于矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)神经网络运算指令、近邻归一化(Local Response Normalization,LRN)神经网络运算指令、局部对比度归一化(Local Contrast Normalization,LCN)神经网络运算指令、LSTM神经网络运算指令、递归神经网络(Recurrent Neural Networks,RNN)运算指令、线性修正单元(Rectified linear unit,RELU)神经网络运算指令、带参数的线性修正单元(Parametric Rectified Linear Unit,PRELU)神经网络运算指令、S型生长曲线(SIGMOID)神经网络运算指令、双曲正切函数(TANH)神经网络运算指令和最大输出值(MAXOUT)神经网络运算指令。逻辑指令完成神经网络的逻辑运算,包括但不仅限于向量逻辑运算指令和标量逻辑运算指令。
其中,RBM神经网络运算指令用于实现RBM神经网络运算。
LRN神经网络运算指令用于实现LRN神经网络运算。
LCN神经网络运算指令用于实现LCN神经网络运算。
LSTM神经网络运算指令用于实现LSTM神经网络运算。
RNN运算指令用于实现RNN运算。
RELU神经网络运算指令用于实现RELU神经网络运算。
PRELU神经网络运算指令用于实现PRELU神经网络运算。
SIGMOID神经网络运算指令用于实现SIGMOID神经网络运算
TANH神经网络运算指令用于实现TANH神经网络运算。
MAXOUT神经网络运算指令用于实现MAXOUT神经网络运算。
更进一步地,该神经网络专用指令包括Cambricon(寒武纪)指令集。
所述Cambricon指令集包括至少一种Cambricon指令,该Cambricon指令的长度可以为64bit,也可以根据实际需求,改变其长度。该Cambricon指令包括操作码和操作数。Cambricon指令包含四种类型的指令,分别是Cambricon控制指令(controlinstructions)、 Cambricon数据传输指令(data transfer instructions)、Cambricon运算指令(computational instructions)和Cambricon逻辑指令(logical instructions)。
其中,Cambricon控制指令用于控制执行过程。Cambricon控制指令包括跳转(jump)指令和条件分支(conditional branch)指令。
Cambricon数据传输指令用于完成不同存储介质之间的数据传输。Cambricon数据传输指令包括加载(load)指令、存储(store)指令和搬运(move)指令。load指令用于将数据从主存加载到缓存,store指令用于将数据从缓存存储到主存,move指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据。数据传输指令支持三种不同的数据组织方式,包括矩阵,向量和标量。
Cambricon运算指令用于完成神经网络算术运算。Cambricon运算指令包括Cambricon 矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令。
Cambricon矩阵运算指令完成神经网络中的矩阵运算,包括矩阵乘向量(matrixmultiply vector)、向量乘矩阵(vector multiply matrix)、矩阵乘标量(matrixmultiply scalar)、外积(outer product)、矩阵加矩阵(matrix add matrix)和矩阵减矩阵(matrix subtract matrix)。
Cambricon向量运算指令完成神经网络中的向量运算,包括向量基本运算(vectorelementary arithmetics)、向量超越函数运算(vector transcendental functions)、内积(dot product)、向量随机生成(random vector generator)和向量中最大/最小值(maximum/minimum of a vector)。其中向量基本运算包括向量加、减、乘、除(add、subtract、multiply、divide),向量超越函数是指不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数、对数函数、三角函数和反三角函数。
Cambricon标量运算指令完成神经网络中的标量运算,包括标量基本运算(scalarelementary arithmetics)和标量超越函数运算(scalar transcendental functions)。其中标量基本运算包括标量、减、乘、除(add、subtract、multiply、divide),标量超越函数是指不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数,对数函数,三角函数,反三角函数。
Cambricon逻辑指令用于神经网络的逻辑运算。Cambricon逻辑运算包括Cambricon向量逻辑运算指令和Cambricon标量逻辑运算指令。
Cambricon向量逻辑运算指令包括向量比较(vector compare)、向量逻辑运算(vector logical operations)和向量大于合并(vector greater than merge)。其中向量比较包括但不限于大于、小于,等于、大于或等于(≥)、小于或等于(≤)、不等于。向量逻辑运算包括与、或、非。
Cambricon标量逻辑运算包括标量比较(scalar compare),标量逻辑运算(scalarlogical operations)。其中标量比较包括但不限于大于、小于、等于、大于或等于(≥),小于或等于(≤)和不等于。标量逻辑运算包括与、或、非。
查找表单元2接收所述查找控制信息、权值字典和密码本,并根据查找控制信息,对权值字典和密码本进行查表操作,以得到量化权值;
运算单元3接收所述运算控制信息和输入神经元,并根据运算控制信息,对所述量化权值和输入神经元进行运算操作,以得到输出神经元并输出。
其中,运算单元3可以包括四个运算部分:第一运算部分,用于将所述量化权值和输入神经元相乘;第二运算部分,用于对所述量化权值和输入神经元通过一个或多个加法器实现相加操作(更进一步地,加法器也可以组成加法树,从而实现不同级加法树的运算功能);第三运算部分,用于对所述量化权值和输入神经元进行非线性函数运算;第四运算部分,用于对所述量化权值和输入神经元进行池化操作。本公开通过采用针对局部量化的多层人工神经网络运算的专用SIMD指令和定制的运算单元3,解决了CPU和GPU运算性能不足,前端译码开销大的问题,有效提高了对多层人工神经网络运算算法的支持。
图23为本公开实施例的查表的过程示意图,如图23所示,根据密码本可知该量化权值被分为四个类别,编码为00的类别,其中心权值为-1.30;编码为01的类别,其中心权值为-0.13;编码为10的类别,其中心权值为0.23;以及编码为11的类别,其中心权值为 1.50。同时,再参照权值字典可知,同一个类别的权值的分布情况,并用各类别的中心权值代替权值字典中的对应编码,即可得到量化权值。该操作充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,能够通过量化步骤中得到的权值字典和密码本进行查表,从而还原量化权值,具有良好的可操作性以及规范性。
为了优化本公开的处理装置,加入了存储单元4、预处理单元5和缓存单元7,以使得处理数据更有序,方便处理装置的处理操作,图24为本公开实施例的一具体实施例的处理装置的结构示意图,如图24所示,在如图24所示的原有结构上,该具体实施例提供的处理装置还包括:存储单元4、预处理单元5、直接内存存取(direct memory access,DMA) 单元6和缓存单元7。
其中,存储单元4用于存储外部输入的输入神经元、权值字典、密码本和指令,以及接收运算单元3输出的输出神经元;此外,存储单元4还可以存储未量化权值,且该未量化权值通过旁路直接输出至运算单元3,可见本公开的处理装置不仅可以处理量化权值,也可以处理未量化权值,可以根据不同的实际需求进行选择。
预处理单元5用于对外部输入的输入信息进行预处理,得到所述输入神经元、权值字典、密码本和指令,前述预处理包括切分、高斯滤波、二值化、正则化和归一化等。
缓存单元7包括
指令缓存单元71,用于缓存所述指令;
权值字典缓存单元72,用于缓存所述权值字典;
密码本缓存单元73,用于缓存所述密码本;
输入神经元缓存单元74,用于缓存所述输入神经元;
以及输出神经元缓存单元75,用于缓存输出神经元。
外部输入的输入数据经过预处理单元5预处理后,得到输入神经元、权值字典、密码本和指令并输出至存储单元4存储。DMA单元6从存储单元4中直接读取输入神经元、权值字典、密码本和指令,并将指令输出至指令缓存单元71中缓存,将权值字典输出至权值字典缓存单元72中缓存,将密码本输出至密码本缓存单元73中缓存,将输入神经元输出至输入神经元缓存单元74中缓存。控制单元1对其接收的指令译码,得到并输出查表控制信息和运算控制信息。查找表单元2根据接收的查表控制信息,对权值字典和密码本进行查表操作,得到量化权值,并输出至运算单元3。运算单元3根据其接收到的运算控制信息,选择运算部分及各运算部分的运算顺序,对量化权值和输入神经元进行运算处理,得到输出神经元并将其输出至输出神经元缓存单元75,最终再由该输出神经元缓存单元75 输将输出神经元输出至存储单元4进行存储。
其中,第一运算部分的运算操作具体为:将输入数据1(in1)和输入数据2(in2)相乘,得到相乘之后的输出(out),表示为:out=in1*in2
第二运算部分可以由一个或多个加法器组成,以实现相加运算。此外,多个加法器也可以组成加法树,以实现不同级加法树的运算功能。其运算的操作具体为:将输入数据1(in1)通过加法树逐级相加得到输出数据(out1),其中输入数据1可以是一个长度为N的向量,N大于1,过程为:out1=in1[1]+in1[2]+...+in1[N];或者将输入数据1(in1)通过加法树累加之后,in1为一个长度为N的向量,N大于1,和输入数据2(in2)相加得到输出数据(out2),过程为:out2=in1[1]+in1[2]+...+in1[N]+in2;再或者将输入数据1(in1),和输入数据2(in2)相加得到输出数据(out3),其中该in1和in2均为一个数值,过程为: out3=in1+in2。
第三运算部分将输入数据(in)可以通过非线性函数(f)实现不同函数运算,从而得到输出数据(out),过程为:out=f(in),其中,非线性函数包括激活函数,其过程为: out=active(in),激活函数active包括但不限于sigmoid、tanh、relu和/或softmax。
第四运算部分将输入数据(in)进行池化操作,得到输出数据(out),过程为out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。
以上几个部分的运算可以自由选择一个或者多个部分进行不同顺序的组合,从而实现各种不同功能的运算。本公开的运算单元3包括但不限于上述四个运算部分,还可以包含异或、同或以及或等逻辑运算,且运算控制信息可以控制各运算部分中的一个或者多个运算部分进行不同顺序的组合,从而实现各种不同功能的运算。
本公开实施例的另一方面,还提供了一种处理方法,图25为本公开实施例的处理方法的步骤示意图,如图25所示,包括步骤:
S701、接收输入神经元、权值字典、密码本和指令;
其中,输入神经元、权值字典、密码本和指令,可以为对外部输入的输入信息经过预处理操作后得到的信息,预处理包括但不限于切分、高斯滤波、二值化、正则化、归一化等方式;
S702、对所述指令译码,以得到查找控制信息和运算控制信息;
其中,该指令为神经网络专用指令,包括所有专用于完成人工神经网络运算的指令。神经网络专用指令包括但不仅限于控制指令,数据传输指令,运算指令和逻辑指令。其中控制指令控制神经网络执行过程。数据传输指令完成不同存储介质之间的数据传输,数据格式包括但不仅限于矩阵,向量和标量。运算指令完成神经网络的算术运算,包括但不仅限于矩阵运算指令、向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM神经网络运算指令、RNN运算指令、RELU神经网络运算指令、PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令和MAXOUT神经网络运算指令。逻辑指令完成神经网络的逻辑运算,包括但不仅限于向量逻辑运算指令和标量逻辑运算指令。
其中,RBM神经网络运算指令用于实现RBM神经网络运算。
LRN神经网络运算指令用于实现LRN神经网络运算。
LSTM神经网络运算指令用于实现LSTM神经网络运算。
RNN运算指令用于实现RNN运算。
RELU神经网络运算指令用于实现RELU神经网络运算。
PRELU神经网络运算指令用于实现PRELU神经网络运算。
SIGMOID神经网络运算指令用于实现SIGMOID神经网络运算
TANH神经网络运算指令用于实现TANH神经网络运算。
MAXOUT神经网络运算指令用于实现MAXOUT)神经网络运算。
更进一步地,该神经网络专用指令包括Cambricon指令集。
所述Cambricon指令集包括至少一种Cambricon指令,且Cambricon指令的长度为64bit,该Cambricon指令包括操作码和操作数。Cambricon指令包含四种类型的指令,分别是Cambricon控制指令(control instructions)、Cambricon数据传输指令(data transferinstructions)、Cambricon运算指令(computational instructions)和Cambricon逻辑指令(logical instructions)。
其中,Cambricon控制指令用于控制执行过程。Cambricon控制指令包括跳转(jump)指令和条件分支(conditional branch)指令。
Cambricon数据传输指令用于完成不同存储介质之间的数据传输。Cambricon数据传输指令包括加载(load)指令、存储(store)指令和搬运(move)指令。load指令用于将数据从主存加载到缓存,store指令用于将数据从缓存存储到主存,move指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据。数据传输指令支持三种不同的数据组织方式,包括矩阵,向量和标量。
Cambricon运算指令用于完成神经网络算术运算。Cambricon运算指令包括Cambricon 矩阵运算指令、Cambricon向量运算指令和Cambricon标量运算指令。
Cambricon矩阵运算指令完成神经网络中的矩阵运算,包括矩阵乘向量(matrixmultiply vector)、向量乘矩阵(vector multiply matrix)、矩阵乘标量(matrixmultiply scalar)、外积(outer product)、矩阵加矩阵(matrix add matrix)和矩阵减矩阵(matrix subtract matrix)。
Cambricon向量运算指令完成神经网络中的向量运算,包括向量基本运算(vectorelementary arithmetics)、向量超越函数运算(vector transcendental functions)、内积(dot product)、向量随机生成(random vector generator)和向量中最大/最小值(maximum/minimum of a vector)。其中向量基本运算包括向量加、减、乘、除(add、subtract、multiply、divide),向量超越函数是指不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数、对数函数、三角函数和反三角函数。
Cambricon标量运算指令完成神经网络中的标量运算,包括标量基本运算(scalarelementary arithmetics)和标量超越函数运算(scalar transcendental functions)。其中标量基本运算包括标量、减、乘、除(add、subtract、multiply、divide),标量超越函数是指不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数,对数函数,三角函数,反三角函数。
Cambricon逻辑指令用于神经网络的逻辑运算。Cambricon逻辑运算包括Cambricon向量逻辑运算指令和Cambricon标量逻辑运算指令。
Cambricon向量逻辑运算指令包括向量比较(vector compare)、向量逻辑运算(vector logical operations)和向量大于合并(vector greater than merge)。其中向量比较包括但不限于大于、小于,等于、大于或等于(≥)、小于或等于(≤)、不等于。向量逻辑运算包括与、或、非。
Cambricon标量逻辑运算包括标量比较(scalar compare),标量逻辑运算(scalarlogical operations)。其中标量比较包括但不限于大于、小于、等于、大于或等于(≥),小于或等于(≤) 和不等于。标量逻辑运算包括与、或、非。
S703、根据所述查找控制信息,查找权值字典和密码本得到量化权值,并根据所述运算控制信息,对该量化权值以及输入神经元进行运算操作,以得到输出神经元并输出。
此外,为了优化本公开的处理方法,使得处理更方便、有序,在本公开的一些实施例中还增加了步骤,图26为本公开实施例的一具体实施例的处理方法的步骤示意图,如图26所示,该具体实施例的处理方法中:
在步骤S701之前,还包括步骤S700:对外部输入的输入信息进行预处理,得到所述输入神经元、权值字典、密码本和指令,预处理包括切分、高斯滤波、二值化、正则化和归一化等;
在步骤S702之后还包括:
步骤S7021:存储输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及
步骤S7022:缓存所述指令、输入神经元、输出神经元、权值字典和密码本。之后的步骤同图7所示的处理方法,此处不再赘述。
其中,所述运算操作包括:将权值和输入神经元相加,该相加功能由一个或多个加法器实现,此外,所述多个加法器还可以构成加法树,实现权值和输入神经元的逐级相加;和/或将权值和输入神经元相乘;和/或对所述权值和输入神经元进行非线性函数运算,其中,非线性函数包括激活函数,所述激活函数包括sigmoid、tanh、relu和/或softmax;和/或对所述权值和输入神经元进行池化操作,所述权值包括量化权值和/或非量化权值,其中,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。前述几种运算可以自由选择一种或者多种进行不同顺序的组合,从而实现各种不同功能的运算。且本公开的运算步骤包括但不限于上述四种运算,还可以包含或、异或以及同或等逻辑运算。
此外,该处理方法也能用于处理未量化权值,可以根据运算控制信息,对该未量化权值和输入神经元进行运算,得到并将输出神经元输出。
在一个实施例里,本公开还提供了一种芯片,其包括了前述处理装置,该芯片能够同时对量化权值以及未量化权值进行多种运算,实现了运算的多元化。另外,通过采用针对多层人工神经网络运算算法的专用片上缓存,充分挖掘了输入神经元和权值数据的重用性,避免了反复向内存读取这些数据,降低了内存访问带宽,避免了内存带宽成为多层人工神经网络运算及其训练算法性能瓶颈的问题。
在一个实施例里,本公开提供了一个芯片封装结构,其包括了上述芯片。
在一个实施例里,本公开提供了一个板卡,其包括了上述芯片封装结构。
在一个实施例里,本公开提供了一个电子装置,其包括了上述板卡。
上述电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B 超仪和/或心电图仪。
本公开实施例所有的模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管、忆阻器、DNA计算机。
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开作进一步的详细说明。
本公开实施例的所有模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器,DNA计算机。
根据本公开的基本构思,提供一种压缩神经网络的方法,步骤包括:粗粒度剪枝和第一重训练,以及局部量化和第二重训练两个步骤。相比于传统的方法,能够使稀疏神经网络更加规则化,利于用硬件进行加速,同时减少目标权值位置的存储空间;局部量化能够充分挖掘神经网络的权值分布特性,减少表示每一个权值的比特数,从而进一步减少存储开销和访存开销。
图27是本公开实施例数据压缩方法流程图。该数据压缩方法包括:
S2701:根据滑动窗口从神经网络选取M个权值,当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零;对神经网络进行第一重训练,训练过程中已经被置为零的权值保持为零;
S2702:对神经网络的权值进行分组,然后对组内权值进行聚类和编码,对聚类和编码后的神经网络进行第二重训练。
其中步骤S2701可概括为粗粒度剪枝和第一重训练,具体可包括步骤
S27011:根据滑动窗口(sliding window)从训练完成的神经网络的选取M个权值。
S27012:当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零。
其中,上述预设条件为:
上述M个权值的信息量满足预设判断条件。
作为一种可选的实施方式,上述预设判断条件包括阈值判断条件。其中,阈值判断条件,可以包括:小于一给定阈值,小于等于一给定阈值,大于一给定阈值,大于等于一给定阈值,在一给定取值范围内或在一给定取值范围外中的一种或几种。
具体地,上述M个权值的信息量小于一给定阈值,其中,上述M个权值的信息量包括但不限于该M个权值绝对值的算术平均值、该M个权值绝对值的几何平均值和该M个权值绝对值的最大值。上述M个权值绝对值的算术平均值小于第一阈值;或者上述M个权值绝对值的几何平均值小于第二阈值;或者上述M个权值绝对值的最大值小于第三阈值。对于上述第一阈值、第二阈值和第三阈值中各自的选择,本领域技术人员可以根据情况进行预先设定,也可以通过改变预设公式中的输入参数的方式计算获得,还可以通过机器学习的方式获得。对于第一阈值、第二阈值以及第三阈值的获取方式,本公开并不做具体限定。
作为一种可选的实施方式,上述预设判断条件包括函数映射判断条件,该函数映射判断条件为判断上述M个权值经函数变换后是否满足给定条件。
上述神经网络的权值包括全连接层(fully-connected layer)的权值,卷积层(convolutional layer)的权值和长短期记忆(long short-term memory,LSTM)层的权值。
参见图2所示,神经网络的全连接层的权值可以看成是一个二维矩阵(Nin,Nout),其中Nin表示输入神经元的个数,Nout表示输出神经元的个数,上述全连接层共有Nin*Nout个权值。上述滑动窗口的大小为Bin*Bout,其中Bin为大于0且小于或等于Nin整数,Bout 为大于0且小于或等于Nout的整数;所述对神经网络的全连接层的权值进行剪枝,包括:
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,也可以沿着Bout的方向按照步长Sout进行滑动,其中所述Sin为大于0且小于或等于Bin的整数,所述Sout为大于0且小于或等于Bout的整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout。
参见图3所示,神经网络的卷积层的权值可以看成是一个四维矩阵(Nfin,Nfout,Kx, Ky),其中Nfin表示输入特征图像(feature map)数量,Nout表示输出特征图像数量,(Kx, Ky)表示卷积核(kernel)的大小。在粗粒度剪枝时,我们先设定上述滑动窗口的为大小为 Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且1小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0且小于或等于Ky的整数;所述对神经网络的卷积层的权值进行剪枝包括:
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长Sx进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By。
上述神经网络的LSTM层的权值由多个全连接层权值组成,假设LSTM层的权值由i个全连接层权值组成,其中i为大于0的整数。每个全连接层权值分别为二维矩阵(Nin_i,Nout_i),其中Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连阶层权值输出神经对于第i个全连阶层,所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;对神经网络的LSTM层进行剪枝包括:
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的整数,Sout_i为大于0且小于或等于Bout_i的整数;
通过所述滑动窗口从所述Nin_i*Nout_i个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
S27013:根据反向传播(back propagation)算法对剪枝后的神经网络进行重新训练,训练过程中已经被置为0的权值将一直保持0。
第一重训练:将剪枝后的神经网络使用反向传播算法(back propagation)进行重新训练,训练过程中已经被置为0的权值将一直保持0。不断重复粗粒度剪枝和重训练直至在保证精度不损失x%的前提下没有权值能被置为0,x为大于0小于100的数,x根据不同的神经网络以及不同的应用可以有不同的选择。在一个实施例里,x的值可以为0-5。
对于步骤S2702,可概括为量化和重训练,可以包括步骤:
S27021:对神经网络权值进行分组;
S27022:对每一组权值用聚类算法进行聚类操作,将一组权值分成m个类,计算出每个类的中心权值,将每个类中的所有权值都用该类对应的中心权值替换;其中m是大于0的整数。
S27023:对中心权值进行编码操作,得到密码本和权值字典
S27024:根据反向传播算法对神经网络使用进行重新训练,训练过程中已经被置为0 的权值将一直保持0,且只训练密码本,不训练权值字典。
对于步骤S27021中的分组:对神经网络的权值进行分组操作,包括:
将所述神经网络的权值分为一组,和/或;
按照层类型对所述神经网络的权值进行分组,和/或;
按照层间和/或层内对神经网络的权值进行分组。
图23为本公开实施例的权值量化的过程示意图,如图23所示,按照分组的策略对权值进行分组,得到有序排列的权值矩阵。再对分组后的权值矩阵进行组内采样以及聚类操作,从而将值相近的权值划为同一类别,得到1.50、-0.13、-1.3和0.23这4个中心权值,并分别对应四个类别的权值。然后,对中心权值进行编码操作,将中心权值为-1.3的类别编码为00,将中心权值为-0.13的类别编码为01,将中心权值为0.23的类别编码为10,将中心权值为1.50的类别编码为11,此为密码本内容。另外,还分别用4个中心权值对应的编码内容(00、01、10和11)分别表示对应类别中的权值,从而得到权值字典。该量化过程充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,得到神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
其中中心权值选择方法可以为使得代价函数J(w,w0)最小,代价函数为:
其中w是类中所有权值,w0是中心权值,n是类中权值数量,wi是类中第i个权值, i是大于0且小于或等于n的整数。
进一步的,局部量化中按照层类型对神经网络的权值进行分组。比如将所有卷积层的权值分为一组,将所有全连接层的权值分为一组,将所有LSTM层的权值分为为一组。
若一个神经网络有i个卷积层,j个全连阶层,m个LSTM层,共t种不同类型的层,其中i,j,m均为大于0的整数且满足i+j+m>=1,t为大于0的整数且满足t=i+j+m,神经网络的权值将被分为t组。
进一步的,局部量化中按照层间将神经网络的权值进行分组。比如将一个或者连续多个卷积层分为一组,将一个或者连续多个全连阶层分为一组,将一个或者连续多个LSTM 层分为一组。
进一步的,局部量化中按照层内分组对神经网络的权值进行分组,将神经网络的卷积层,全连接层和LSTM内部进行分组量化。
更进一步的,神经网络的卷积层可以看成是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin,Nfout,Kx,Ky均为大于0的正整数,Nfin表示输入特征图像(feature map)数量,Nout表示输出特征图像数量,(Kx,Ky)表示卷积核(kernel)的大小。卷积层的权值按照(Mfin, Mfout,Mx,My)的组大小被分成Nfin*Nfout*Kx*Ky/(Mfin*Mfout*Mx*My)个不同的组,其中Mfin为大于0且小于或等于Nfin的正=整数,Mfout为大于0且小于或等于Nfout的整数,Mx为大于0且小于或等于Kx的整数,My为大于0且小于或等于Ky的整数。
更进一步的,神经网络的全连接层的权值可以看成是一个二维矩阵(Nin,Nout),其中 Nin,Nout是大于0的整数,Nin表示输入神经元的个数,Nout表示输出神经元的个数,共有Nin*Nout个权值。全连接层权值按照(Min,Mout)的组大小被分成 (Nin*Nout)/(Min*Mout)个不同的组,其中Min是大于0且小于或等于Nin的整数,Mout 是大于0且小于或等于Nout的整数。
更进一步的,神经网络的LSTM层权值可以看出多个全连接层的权值的组合,假设LSTM层的权值由n个全连接层权值组成,其中n为大于0的整数,则每一个全连接层都可以按照全连接层的分组方式进行分组操作。
本公开实施例的另一方面,还提供了一种神经网络数据压缩装置,图21为本公开实施例压缩装置的结构示意图,如图21所示,其包括:
存储器1,用于存储操作指令;所述操作指令一般为二进制数形式,由操作码和地址码构成,操作码指示处理器2即将进行的操作,地址码指示处理器2到存储器1中的地址中读取参与操作的数据。
处理器2,用于执行存储器1中的操作指令,在执行指令时依照上述的权值的方法进行操作。
本公开的压缩装置,处理器2通过执行存储器1中的操作指令,依照前述粗粒度剪枝和量化方法进行操作,能够规则化地对神经网络进行稀疏,减少神经网络参数,同时对杂乱无章的权值进行量化,得到低比特化且规范化的量化权值,充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,得到神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
图28是本公开实施例的一种处理装置的结构示意图。本公开提供了一种处理装置应用于神经网络处理器,使得神经网络处理器能够充分挖掘粗粒度细数和局部量化的特性,减少访存和计算量,从而获得加速比并降低能耗。
本公开实施例的处理装置包括粗粒度选数单元,查找表单元和运算单元。
粗粒度选数单元,用于接收输入神经元和目标权值位置信息,选择出需要进行计算的神经元。
查找表单元,用于接收目标权值字典和目标权值密码本,进行查表操作得到神经网络的目标权值。
运算单元接收被选中的神经元和目标权值,完成神经网络运算并将输出神经元重新传输给存储单元。
更进一步的,粗粒度选数单元具体用于接收输入神经元和目标权值位置信息,并根据目标权值的位置信息选择出目标权值对应的神经元(即被选择的神经元)并传输给运算单元。
更进一步的,查找表单元对于量化的目标权值,根据密码本和字典查找出目标权值并传输给运算单元,对于没量化的目标权值直接通过旁路传输给运算单元。
更进一步的,运算单元执行运算包括第一部分是将所述输入数据1和输入数据2相乘,得到相乘之后的数据;和/或第二部分执行加法树运算,用于将输入数据1通过加法树逐级相加,或者将所述输入数据1通过和输入数据2相加得到输出数据;和/或第三部分执行激活函数运算,对输入数据通过激活函数(active)运算得到输出数据;和/或第四部分执行池化运算,out=(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。以上几个部分的运算可以自由选择一个多个部分进行不同顺序的组合,从而实现各种不同功能的运算。
具体的,运算单元包括但不仅限于:第一部分乘法器,第二部分加法树,第三部分为激活函数单元。第一部分将输入数据1(in1)和输入数据2(in2)相乘得到相乘之后的输出(out),过程为:out=in1*in2;第二部分将输入数据in1通过加法树逐级相加得到输出数据(out),其中in1是一个长度为N的向量,N大于1,过程为:out=in1[1]+in1[2]+...+in1[N],和/或将输入数据(in1)通过加法树累加之后和输入数据(in2)相加得到输出数据(out),过程为:out=in1[1]+in1[2]+...+in1[N]+in2,或者将输入数据(in1)和输入数据(in2)相加得到输出数据(out),过程为:out=in1+in2;第三部分将输入数据(in)通过激活函数(active) 运算得到激活输出数据(out),过程为:out=active(in),激活函数active可以是sigmoid、tanh、 relu、softmax等,除了做激活操作,第三部分可以实现其他的非线性函数,可将输入数据 (in)通过运算(f)得到输出数据(out),过程为:out=f(in);和/或池化单元,池化单元将输入数据(in)通过池化运算得到池化操作之后的输出数据(out),过程为out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。
更进一步的,参见图29所示,神经网络处理器还包括预处理单元。该预处理单元对原始数据进行预处理,包括切分、高斯滤波、二值化、正则化、归一化等等。
进一步的,处理器还包括存储单元,用来存储神经网络的神经元,权值以及指令。
更进一步的,存储单元存放权值时只存放目标权值以及目标权值的位置信息。存储单元存放量化的目标权值时只存放目标权值密码本和目标权值字典。
进一步的,处理器还包括指令控制单元,用来接收存储单元中的指令,经过译码后生成控制信息控制粗粒度选数单元进行选数操作,查找表进行查表操作和运算单元进行计算操作。
可选地,所述指令可以为神经网络专用指令。
所述神经网络专用指令,包括所有专用于完成人工神经网络运算的指令。神经网络专用指令包括但不仅限于控制指令,数据传输指令,运算指令和逻辑指令。其中控制指令控制神经网络执行过程。数据传输指令完成不同存储介质之间的数据传输,数据格式包括但不仅限于矩阵,向量和标量。运算指令完成神经网络的算术运算,包括但不仅限于矩阵运算指令,向量运算指令,标量运算指令,卷积神经网络运算指令,全连接神经网络运算指令,池化神经网络运算指令,RBM神经网络运算指令,LRN神经网络运算指令,LCN神经网络运算指令,LSTM神经网络运算指令,RNN运算指令,RELU神经网络运算指令,PRELU 神经网络运算指令,SIGMOID神经网络运算指令,TANH神经网络运算指令,MAXOUT 神经网络运算指令。逻辑指令完成神经网络的逻辑运算,包括但不仅限于向量逻辑运算指令和标量逻辑运算指令。
更具体的,所述神经网络专用指令包括Cambricon指令集。
所述Cambricon指令集的特征在于,指令集中每一条指令长度为定长,例如指令长度为64bit,指令由操作码和操作数组成。指令集包含四种类型的指令,分别是控制指令(control instructions),数据传输指令(data transfer instructions),运算指令(computational instructions),逻辑指令(logical instructions)。
进一步的,控制指令用于控制执行过程。控制指令包括跳转(jump)指令和条件分支 (conditional branch)指令。
进一步的,数据传输指令用于完成不同存储介质之间的数据传输。数据传输指令包括加载(load)指令,存储(store)指令,搬运(move)指令。load指令用于将数据从主存加载到缓存,store指令用于将数据从缓存存储到主存,move指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据。数据传输指令支持三种不同的数据组织方式,包括矩阵,向量和标量。
进一步的,运算指令用于完成神经网络算术运算。运算指令包括矩阵运算指令,向量运算指令和标量运算指令。
更进一步的,矩阵运算指令完成神经网络中的矩阵运算,包括矩阵乘向量(matrixmultiply vector),向量乘矩阵(vector multiply matrix),矩阵乘标量(matrixmultiply scalar),外积(outer product),矩阵加矩阵(matrix add matrix),矩阵减矩阵(matrix subtract matrix)。
更进一步的,向量运算指令完成神经网络中的向量运算,包括向量基本运算(vector elementary arithmetics),向量超越函数运算(vector transcendentalfunctions),内积(dot product),向量随机生成(random vector generator),向量中最大/最小值(maximum/minimum of a vector)。其中向量基本运算包括向量加,减,乘,除(add,subtract,multiply,divide),向量超越函数是指那些不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数,对数函数,三角函数,反三角函数。
更进一步的,标量运算指令完成神经网络中的标量运算,包括标量基本运算(scalar elementary arithmetics)和标量超越函数运算(scalar transcendentalfunctions)。其中标量基本运算包括标量加,减,乘,除(add,subtract,multiply,divide),标量超越函数是指那些不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数,对数函数,三角函数,反三角函数。
进一步的,逻辑指令用于神经网络的逻辑运算。逻辑运算包括向量逻辑运算指令和标量逻辑运算指令。
更进一步的,向量逻辑运算指令包括向量比较(vector compare),向量逻辑运算(vector logical operations)和向量大于合并(vector greater than merge)。其中向量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于。向量逻辑运算包括与,或,非。
更进一步的,标量逻辑运算包括标量比较(scalar compare),标量逻辑运算(scalar logical operations)。其中标量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于。标量逻辑运算包括与,或,非。
更进一步的,参见图29所示,神经网络处理器还包括直接数据存取(directmemory access,DMA)单元。
更进一步的,参见图29所示,神经网络处理器还包括指令缓存单元,输入神经元缓存单元,目标权值密码本缓存单元,目标权值字典缓存单元,目标权值位置缓存单元,输出神经元缓存单元。
特别的,存储单元主要用来存储神经网络的神经元,权值以及指令。其中存放权值时只存放目标权值以及目标权值的位置信息。存储单元存放量化的目标权值时只存放目标权值密码本和目标权值字典。
特别的,DMA单元用于在所述存储单元、指令缓存单元、目标权值密码本缓存单元、目标权值字典缓存单元、目标权值位置缓存单元,输入神经元缓存单元和输出神经元缓存单元中进行数据或者指令读写。
指令缓存单元,用于存储专用指令;
目标权值密码本缓存单元,用于缓存目标权值密码本;
目标权值字典缓存单元,用于缓存目标权值权值字典;
目标权值位置缓存单元,用于缓存目标权值位置数据;目标权值位置缓存单元将输入数据中每个连接权值一一对应到相应的输入神经元。
一种情形下目标权值位置缓存单元缓存一一对应的方法为采用1表示有连接,0表示无连接,每组输出与所有输入的连接状态组成一个0和1的字符串来表示该输出的连接关系。另一种情形下目标权值位置缓存单元缓存一一对应的方法为采用1表示有连接,0表示无连接,每组输入与所有输出的连接状态组成一个0和1的字符串来表示该输入的连接关系。另一种情形下目标权值位置缓存单元缓存一一对应的方法为将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
输入神经元缓存单元,用于缓存输入到粗粒度选数单元的输入神经元;
输出神经元缓存单元,用于缓存运算单元输出的输出神经元。
查找表单元,用于接收目标权值字典和目标权值密码本,经过查找操作获得目标权值。对于没量化的目标权值直接通过旁路传输给运算单元。
需要指出的是,上述预处理单元、存储单元、DMA单元、粗粒度剪枝单元、指令缓存单元、指令控制单元、目标权值缓存单元、目标权值位置缓存单元、输入神经元缓存单元、输出神经元缓存单元、粗粒度选数单元和运算单元均为实体硬件器件,不是功能性软件单元。
本公开还提供了一种神经网络数据压缩装置,包括存储装置,指令译码装置和计算装置组成。存储装置中存储了压缩神经网络的指令序列,指令序列包含控制指令,数据传输指令,计算指令等,能够控制计算装置完成神经网络格式转化,对应格式压缩的任务;指令译码装置接收存储装置中的指令经过译码后生成控制信号控制计算装置;计算装置接收控制信号对神经网络完成上述粗粒度剪枝和量化操作。计算装置用于执行存储装置中的可执行指令,在执行指令时依照以上所述的数据压缩方法进行操作。
本公开还提供了一种神经网络数据的处理方法,如图30所示,该处理方法包括步骤:
S3001:接收输入神经元、目标权值字典、目标权值密码本和指令,所述目标权值为绝对值大于预设阈值的权值;
S3002:对指令进行译码,以得到选数控制信息、查找控制信息和运算控制信息;
S3003:根据选数控制信息、查找控制信息和运算控制信息进行选取输入神经元、目标权值并进行运算,得到输出神经元。
在一些实施例中,所述处理方法还包括:接收未量化的目标权值以进行神经网络运算。
在一些实施例中,处理方法还包括:接收指令,并经过译码后生成控制信息控制神经网络的运算。
在一些实施例中,运算包括以下至少一种:乘法运算,将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;加法运算,将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;激活函数运算,对第五数据通过激活函数运算得到输出数据,所述激活函数为sigmoid、tanh、relu或softmax函数操作。
在一些实施例中,所述运算还包括池化操作,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
在一些实施例中,所述指令为神经网络专用指令,包括控制指令,数据传输指令,运算指令和逻辑指令。
在一些实施例中,所述控制指令用于控制神经网络执行过程,包括跳转指令和条件分支指令。
在一些实施例中,数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令,存储指令,搬运指令。
在一些实施例中,所述运算指令用于完成神经网络的算术运算,包括矩阵运算指令,向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)神经网络运算指令、近邻归一化(Local Response Normalization,LRN)神经网络运算指令、局部对比度归一化(Local Contrast Normalization,LCN)神经网络运算指令、LSTM神经网络运算指令、递归神经网络(Recurrent Neural Networks,RNN)运算指令、线性修正单元(Rectifiedlinear unit, RELU)神经网络运算指令、带参数的线性修正单元(Parametric RectifiedLinear Unit,PRELU) 神经网络运算指令、S型生长曲线(SIGMOID)神经网络运算指令、双曲正切函数(TANH) 神经网络运算指令和最大输出值(MAXOUT)神经网络运算指令。
其中,RBM神经网络运算指令用于实现RBM神经网络运算。
其中,LRN神经网络运算指令用于实现LRN神经网络运算。
其中,LCN神经网络运算指令用于实现LCN神经网络运算。
其中,LSTM神经网络运算指令用于实现LSTM神经网络运算。
其中,RNN神经网络运算指令用于实现RNN运算。
其中,RELU神经网络运算指令用于实现RELU神经网络运算。
其中,PRELU神经网络运算指令用于实现PRELU神经网络运算。
其中,SIGMOID神经网络运算指令用于实现SIGMOID神经网络运算
其中,TANH神经网络运算指令用于实现TANH神经网络运算。
其中,MAXOUT神经网络运算指令用于实现MAXOUT神经网络运算。
在一些实施例中,神经网络专用指令为Cambricon指令集,所述Cambircon指令集中每一条指令长度为定长,例如指令长度为64bit,指令由操作码和操作数组成。
在一些实施例中,逻辑指令用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
在一些实施例中,向量逻辑运算指令包括向量比较、向量逻辑运算和向量大于合并指令;优选的,向量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤) 和不等于;优选的,向量逻辑运算包括逻辑与,逻辑或,或者逻辑非。
在一些实施例中,标量逻辑运算包括标量比较,标量逻辑运算;优选的,所述标量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,所述标量逻辑运算包括逻辑与,逻辑或,以及逻辑非。
在一些实施例中,处理方法还包括步骤:对输入神经元和目标权值位置信息进行预处理,所述预处理包括切分、高斯滤波、二值化、正则化和、或归一化。
在一些实施例中,处理方法中,接收被选中的神经元和目标权值之后,还包括步骤:存储输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及缓存所述指令、输入神经元、输出神经元。
在一个实施例里,本公开公开了一个芯片,其包括了上述神经网络处理器。
在一个实施例里,本公开公开了一个芯片封装结构,其包括了上述芯片。
在一个实施例里,本公开公开了一个板卡,其包括了上述芯片封装结构。
在一个实施例里,本公开公开了一个电子装置,其包括了上述板卡。
电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶和/或油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
所有的模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器,DNA计算机。
通过本公开实施例的数据压缩方法和处理方法,能够规则、高压缩比地压缩神经网络。加速装置内部集成了压缩方法,实现对神经网络的压缩功能。加速器能够充分挖掘压缩后的神经网络的特性,减少访存同时减少计算量,从而获得加速比并降低能耗。
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开作进一步的详细说明。
本公开实施例的所有模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器,DNA计算机。
根据本公开的基本构思,提供一种压缩神经网络的方法,步骤包括:粗粒度剪枝和第一重训练,以及局部量化和第二重训练两个步骤。相比于传统的方法,能够使稀疏神经网络更加规则化,利于用硬件进行加速,同时减少目标权值位置的存储空间;局部量化能够充分挖掘神经网络的权值分布特性,减少表示每一个权值的比特数,从而进一步减少存储开销和访存开销。
图27是本公开实施例数据压缩方法流程图。该数据压缩方法包括:
S2701:根据滑动窗口从神经网络选取M个权值,当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零;对神经网络进行第一重训练,训练过程中已经被置为零的权值保持为零;
S2702:对神经网络的权值进行分组,然后对组内权值进行聚类和编码,对聚类和编码后的神经网络进行第二重训练。
其中步骤S2701可概括为粗粒度剪枝和第一重训练,具体可包括步骤
S27011:根据滑动窗口(sliding window)从训练完成的神经网络的选取M个权值。
S27012:当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零。
其中,上述预设条件为:
上述M个权值的信息量满足预设判断条件。
作为一种可选的实施方式,上述预设判断条件包括阈值判断条件。其中,阈值判断条件,可以包括:小于一给定阈值,小于等于一给定阈值,大于一给定阈值,大于等于一给定阈值,在一给定取值范围内或在一给定取值范围外中的一种或几种。
具体地,上述M个权值的信息量小于一给定阈值,其中,上述M个权值的信息量包括但不限于该M个权值绝对值的算术平均值、该M个权值绝对值的几何平均值和该M个权值绝对值的最大值。上述M个权值绝对值的算术平均值小于第一阈值;或者上述M个权值绝对值的几何平均值小于第二阈值;或者上述M个权值绝对值的最大值小于第三阈值。对于上述第一阈值、第二阈值和第三阈值中各自的选择,本领域技术人员可以根据情况进行预先设定,也可以通过改变预设公式中的输入参数的方式计算获得,还可以通过机器学习的方式获得。对于第一阈值、第二阈值以及第三阈值的获取方式,本公开并不做具体限定。
作为一种可选的实施方式,上述预设判断条件包括函数映射判断条件,该函数映射判断条件为判断上述M个权值经函数变换后是否满足给定条件。
上述神经网络的权值包括全连接层(fully-connected layer)的权值,卷积层(convolutional layer)的权值和长短期记忆(long short-term memory,LSTM)层的权值。
参见图2所示,神经网络的全连接层的权值可以看成是一个二维矩阵(Nin,Nout),其中Nin表示输入神经元的个数,Nout表示输出神经元的个数,上述全连接层共有Nin*Nout个权值。上述滑动窗口的大小为Bin*Bout,其中Bin为大于0且小于或等于Nin整数,Bout 为大于0且小于或等于Nout的整数;所述对神经网络的全连接层的权值进行剪枝,包括:
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,也可以沿着Bout的方向按照步长Sout进行滑动,其中所述Sin为大于0且小于或等于Bin的整数,所述Sout为大于0且小于或等于Bout的整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout。
参见图3所示,神经网络的卷积层的权值可以看成是一个四维矩阵(Nfin,Nfout,Kx, Ky),其中Nfin表示输入特征图像(feature map)数量,Nout表示输出特征图像数量,(Kx, Ky)表示卷积核(kernel)的大小。在粗粒度剪枝时,我们先设定上述滑动窗口的为大小为 Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout 为大于0且1小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0且小于或等于Ky的整数;所述对神经网络的卷积层的权值进行剪枝包括:
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长Sx进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述 M=Bfin*Bfout*Bx*By。
上述神经网络的LSTM层的权值由多个全连接层权值组成,假设LSTM层的权值由i个全连接层权值组成,其中i为大于0的整数。每个全连接层权值分别为二维矩阵(Nin_i,Nout_i),其中Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连阶层权值输出神经对于第i个全连阶层,所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;对神经网络的LSTM层进行剪枝包括:
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的整数,Sout_i为大于0且小于或等于Bout_i的整数;
通过所述滑动窗口从所述Nin_i*Nout_i个权值中选取M个权值;当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
S27013:根据反向传播(back propagation)算法对剪枝后的神经网络进行重新训练,训练过程中已经被置为0的权值将一直保持0。
第一重训练:将剪枝后的神经网络使用反向传播算法(back propagation)进行重新训练,训练过程中已经被置为0的权值将一直保持0。不断重复粗粒度剪枝和重训练直至在保证精度不损失x%的前提下没有权值能被置为0,x为大于0小于100的数,x根据不同的神经网络以及不同的应用可以有不同的选择。在一个实施例里,x的值可以为0-5。
对于步骤S2702,可概括为量化和重训练,可以包括步骤:
S27021:对神经网络权值进行分组;
S27022:对每一组权值用聚类算法进行聚类操作,将一组权值分成m个类,计算出每个类的中心权值,将每个类中的所有权值都用该类对应的中心权值替换;其中m是大于0的正整数。
S27023:对中心权值进行编码操作,得到密码本和权值字典
S27024:将神经网络使用反向传播算法(back propagation)进行重新训练,训练过程中已经被置为0的权值将一直保持0,且只训练密码本,不训练权值字典。
对于步骤S27021中的分组:对神经网络的权值进行分组操作,包括:
将所述神经网络的权值分为一组,和/或;
按照层类型对所述神经网络的权值进行分组,和/或;
按照层间和/或层内对神经网络的权值进行分组。
图23为本公开实施例的权值量化的过程示意图,如图23所示,按照分组的策略对权值进行分组,得到有序排列的权值矩阵。再对分组后的权值矩阵进行组内采样以及聚类操作,从而将值相近的权值划为同一类别,得到1.50、-0.13、-1.3和0.23这4个中心权值,并分别对应四个类别的权值。然后,对中心权值进行编码操作,将中心权值为-1.3的类别编码为00,将中心权值为-0.13的类别编码为01,将中心权值为0.23的类别编码为10,将中心权值为1.50的类别编码为11,此为密码本内容。另外,还分别用4个中心权值对应的编码内容(00、01、10和11)分别表示对应类别中的权值,从而得到权值字典。该量化过程充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,得到神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
其中,中心权值选择方法可以为使得代价函数J(w,w0)最小,代价函数为:
其中w是类中所有权值,w0是中心权值,n是类中权值数量,wi是类中第i个权值, i是大于0且小于或等于n的整数。
进一步的,局部量化中按照层类型对神经网络的权值按照层类型进行分组。比如将所有卷积层的权值分为一组,将所有全连接层的权值分为一组,将所有LSTM层的权值分为一组。
若一个神经网络有i个卷积层,j个全连阶层,m个LSTM层,共t种不同类型的层,其中i,j,m均为大于0的整数且满足i+j+m>=1,t为大于0的整数且满足t=i+j+m,神经网络的权值将被分为t组。
进一步的,局部量化中按照层间将神经网络的权值进行分组。比如将一个或者连续多个卷积层分为一组,将一个或者连续多个全连阶层分为一组,将一个或者连续多个LSTM 层分为一组。
进一步的,局部量化中按照层内分组对神经网络的权值进行分组,将神经网络的卷积层,全连接层和LSTM内部进行分组量化。
更进一步的,神经网络的卷积层可以看成是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin,Nfout,Kx,Ky均为大于0的正整数,Nfin表示输入特征图像(feature map)数量,Nout表示输出特征图像数量,(Kx,Ky)表示卷积核(kernel)的大小。卷积层的权值按照(Mfin, Mfout,Mx,My)的组大小被分成Nfin*Nfout*Kx*Ky/(Mfin*Mfout*Mx*My)个不同的组,其中Mfin为大于0且小于或等于Nfin的正=整数,Mfout为大于0且小于或等于Nfout的整数,Mx为大于0且小于或等于Kx的整数,My为大于0且小于或等于Ky的整数。
更进一步的,神经网络的全连接层的权值可以看成是一个二维矩阵(Nin,Nout),其中 Nin,Nout是大于0的整数,Nin表示输入神经元的个数,Nout表示输出神经元的个数,共有Nin*Nout个权值。全连接层权值按照(Min,Mout)的组大小被分成 (Nin*Nout)/(Min*Mout)个不同的组,其中Min是大于0且小于或等于Nin的整数,Mout 是大于0且小于或等于Nout的整数。
更进一步的,神经网络的LSTM层权值可以看出多个全连接层的权值的组合,假设LSTM层的权值由n个全连接层权值组成,其中n为大于0的整数,则每一个全连接层都可以按照全连接层的分组方式进行分组操作。
本公开实施例的另一方面,还提供了一种神经网络数据压缩装置,图21为本公开实施例压缩装置的结构示意图,如图21所示,其包括:
存储器1,用于存储操作指令;所述操作指令一般为二进制数形式,由操作码和地址码构成,操作码指示处理器2即将进行的操作,地址码指示处理器2到存储器1中的地址中读取参与操作的数据。
处理器2,用于执行存储器1中的操作指令,在执行指令时依照上述的权值的方法进行操作。
本公开的压缩装置,处理器2通过执行存储器1中的操作指令,依照前述粗粒度剪枝和量化方法进行操作,能够规则化地对神经网络进行稀疏,减少神经网络参数,同时对杂乱无章的权值进行量化,得到低比特化且规范化的量化权值,充分挖掘了神经网络层间权值的相似性以及层内权值局部相似性,得到神经网络的权值分布特性从而进行低比特量化,减小了表示每一个权值的比特数,从而降低了权值存储开销和访存开销。
图28是本公开实施例的一种处理装置的结构示意图。本公开提供了一种处理装置应用于神经网络处理器,使得神经网络处理器能够充分挖掘粗粒度细数和局部量化的特性,减少访存和计算量,从而获得加速比并降低能耗。
本公开实施例的处理装置包括粗粒度选数单元,查找表单元和运算单元。
粗粒度选数单元,用于接收输入神经元和目标权值位置信息,选择出需要进行计算的神经元。
查找表单元,用于接收目标权值字典和目标权值密码本,进行查表操作得到神经网络的目标权值。
运算单元接收被选中的神经元和目标权值,完成神经网络运算并将输出神经元重新传输给存储单元。
更进一步的,粗粒度选数单元具体用于接收输入神经元和目标权值位置信息,并根据目标权值的位置信息选择出目标权值对应的神经元(即被选择的神经元)并传输给运算单元。
更进一步的,查找表单元对于量化的目标权值,根据密码本和字典查找出目标权值并传输给运算单元,对于没量化的目标权值直接通过旁路传输给运算单元。
更进一步的,运算单元执行运算包括第一部分是将所述输入数据1和输入数据2相乘,得到相乘之后的数据;和/或第二部分执行加法树运算,用于将输入数据1通过加法树逐级相加,或者将所述输入数据1通过和输入数据2相加得到输出数据;和/或第三部分执行激活函数运算,对输入数据通过激活函数(active)运算得到输出数据;和/或第四部分执行池化运算,out=(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。以上几个部分的运算可以自由选择一个多个部分进行不同顺序的组合,从而实现各种不同功能的运算。
具体的,运算单元包括但不仅限于:第一部分乘法器,第二部分加法树,第三部分为激活函数单元。第一部分将输入数据1(in1)和输入数据2(in2)相乘得到相乘之后的输出(out),过程为:out=in1*in2;第二部分将输入数据in1通过加法树逐级相加得到输出数据(out),其中in1是一个长度为N的向量,N大于1,过程为:out=in1[1]+in1[2]+...+in1[N],和/或将输入数据(in1)通过加法树累加之后和输入数据(in2)相加得到输出数据(out),过程为:out=in1[1]+in1[2]+...+in1[N]+in2,或者将输入数据(in1)和输入数据(in2)相加得到输出数据(out),过程为:out=in1+in2;第三部分将输入数据(in)通过激活函数(active) 运算得到激活输出数据(out),过程为:out=active(in),激活函数active可以是sigmoid、tanh、 relu、softmax等,除了做激活操作,第三部分可以实现其他的非线性函数,可将输入数据 (in)通过运算(f)得到输出数据(out),过程为:out=f(in);和/或池化单元,池化单元将输入数据(in)通过池化运算得到池化操作之后的输出数据(out),过程为out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据。
更进一步的,参见图29所示,神经网络处理器还包括预处理模块。该模块对原始数据进行预处理,包括切分、高斯滤波、二值化、正则化、归一化等等。
进一步的,处理器还包括存储单元,用来存储神经网络的神经元,权值以及指令。
更进一步的,存储单元存放权值时只存放目标权值以及目标权值的位置信息。存储单元存放量化的目标权值时只存放目标权值密码本和目标权值字典。
进一步的,处理器还包括指令控制单元,用来接收存储单元中的指令,经过译码后生成控制信息控制粗粒度选数单元进行选数操作,查找表进行查表操作和运算单元进行计算操作。
可选地,所述指令可以为神经网络专用指令。
所述神经网络专用指令,包括所有专用于完成人工神经网络运算的指令。神经网络专用指令包括但不仅限于控制指令,数据传输指令,运算指令和逻辑指令。其中控制指令控制神经网络执行过程。数据传输指令完成不同存储介质之间的数据传输,数据格式包括但不仅限于矩阵,向量和标量。运算指令完成神经网络的算术运算,包括但不仅限于矩阵运算指令,向量运算指令,标量运算指令,卷积神经网络运算指令,全连接神经网络运算指令,池化神经网络运算指令,受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)神经网络运算指令、近邻归一化(Local Response Normalization,LRN)神经网络运算指令、局部对比度归一化(Local Contrast Normalization,LCN)神经网络运算指令、LSTM神经网络运算指令、递归神经网络(Recurrent Neural Networks,RNN)运算指令、线性修正单元(Rectified linear unit,RELU)神经网络运算指令、带参数的线性修正单元(ParametricRectified Linear Unit,PRELU)神经网络运算指令、S型生长曲线(SIGMOID)神经网络运算指令、双曲正切函数(TANH)神经网络运算指令和最大输出值(MAXOUT)神经网络运算指令。逻辑指令完成神经网络的逻辑运算,包括但不仅限于向量逻辑运算指令和标量逻辑运算指令。
其中,RBM神经网络运算指令用于实现RBM神经网络运算。
其中,LRN神经网络运算指令用于实现LRN神经网络运算。
LCN神经网络运算指令用于实现LCN神经网络运算。
LSTM神经网络运算指令用于实现LSTM神经网络运算。
RNN运算指令用于实现RNN运算。
RELU神经网络运算指令用于实现RELU神经网络运算。
PRELU神经网络运算指令用于实现PRELU神经网络运算。
SIGMOID神经网络运算指令用于实现SIGMOID神经网络运算
TANH神经网络运算指令用于实现TANH神经网络运算。
更具体的,所述神经网络专用指令包括Cambricon指令集。
所述Cambricon指令集的特征在于,指令由操作码和操作数组成。指令集包含四种类型的指令,分别是控制指令(control instructions),数据传输指令(dara transferinstructions),运算指令(computational instructions),逻辑指令(logicalinstructions)。
优选的,指令集中每一条指令长度为定长。例如,指令集中每一条指令长度可以为64bit。
进一步的,控制指令用于控制执行过程。控制指令包括跳转(jump)指令和条件分支(conditional branch)指令。
进一步的,数据传输指令用于完成不同存储介质之间的数据传输。数据传输指令包括加载(load)指令,存储(store)指令,搬运(move)指令。load指令用于将数据从主存加载到缓存,store指令用于将数据从缓存存储到主存,move指令用于在缓存与缓存或者缓存与寄存器或者寄存器与寄存器之间搬运数据。数据传输指令支持三种不同的数据组织方式,包括矩阵,向量和标量。
进一步的,运算指令用于完成神经网络算术运算。运算指令包括矩阵运算指令,向量运算指令和标量运算指令。
更进一步的,矩阵运算指令完成神经网络中的矩阵运算,包括矩阵乘向量(matrixmultiply vector),向量乘矩阵(vector multiply matrix),矩阵乘标量(matrixmultiply scalar),外积(outer product),矩阵加矩阵(matrix add matrix),矩阵减矩阵(matrix subtract matrix)。
更进一步的,向量运算指令完成神经网络中的向量运算,包括向量基本运算(vector elementary arithmetics),向量超越函数运算(vector transcendentalfunctions),内积(dot product),向量随机生成(random vector generator),向量中最大/最小值(maximum/minimum of a vector)。其中向量基本运算包括向量加,减,乘,除(add,subtract,multiply,divide),向量超越函数是指那些不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数,对数函数,三角函数,反三角函数。
更进一步的,标量运算指令完成神经网络中的标量运算,包括标量基本运算(scalar elementary arithmetics)和标量超越函数运算(scalar transcendentalfunctions)。其中标量基本运算包括标量加,减,乘,除(add,subtract,multiply,divide),标量超越函数是指那些不满足任何以多项式作系数的多项式方程的函数,包括但不仅限于指数函数,对数函数,三角函数,反三角函数。
进一步的,逻辑指令用于神经网络的逻辑运算。逻辑运算包括向量逻辑运算指令和标量逻辑运算指令。
更进一步的,向量逻辑运算指令包括向量比较(vector compare),向量逻辑运算(vector logical operations)和向量大于合并(vector greater than merge)。其中向量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于。向量逻辑运算包括与,或,非。
更进一步的,标量逻辑运算包括标量比较(scalar compare),标量逻辑运算(scalar logical operations)。其中标量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于。标量逻辑运算包括与,或,非。
更进一步的,参见图29所示,神经网络处理器还包括直接内存存取(directmemory access,DMA)单元。
更进一步的,参见图29所示,神经网络处理器还包括指令缓存单元,输入神经元缓存单元,目标权值密码本缓存单元,目标权值字典缓存单元,目标权值位置缓存单元,输出神经元缓存单元。
特别的,存储单元主要用来存储神经网络的神经元,权值以及指令。其中存放权值时只存放目标权值以及目标权值的位置信息。存储单元存放量化的目标权值时只存放目标权值密码本和目标权值字典。
特别的,DMA单元用于在所述存储单元、指令缓存单元、目标权值密码本缓存单元、目标权值字典缓存单元、目标权值位置缓存单元,输入神经元缓存单元和输出神经元缓存单元中进行数据或者指令读写。
指令缓存单元,用于存储专用指令;
目标权值密码本缓存单元,用于缓存目标权值密码本;
目标权值字典缓存单元,用于缓存目标权值权值字典;
目标权值位置缓存单元,用于缓存目标权值位置数据;目标权值位置缓存将输入数据中每个连接权值一一对应到相应的输入神经元。
一种情形下目标权值位置缓存单元缓存一一对应的方法为采用1表示有连接,0表示无连接,每组输出与所有输入的连接状态组成一个0和1的字符串来表示该输出的连接关系。另一种情形下目标权值位置缓存单元缓存一一对应的方法为采用1表示有连接,0表示无连接,每组输入与所有输出的连接状态组成一个0和1的字符串来表示该输入的连接关系。另一种情形下目标权值位置缓存一一对应的方法为将一组输出第一个连接所在的输入神经元位置距离第一个输入神经元的距离、所述输出第二组输入神经元距离上一个输入神经元的距离,所述输出第三组输入神经元距离上一个输入神经元的距离,......,依次类推,直到穷举所述输出的所有输入,来表示所述输出的连接关系。
输入神经元缓存单元,用于缓存输入到粗粒度选数单元的输入神经元;
输出神经元缓存单元,用于缓存运算单元输出的输出神经元。
查找表单元接收权值字典和权值密码本,经过查找操作获得权值。对于没量化的权值直接通过旁路传输给运算单元。
上述预处理单元、存储单元、DMA单元、指令缓存单元、指令控制单元、目标权值密码本缓存单元、目标权值字典缓存单元、目标权值位置缓存单元、输入神经元缓存单元、输出神经元缓存单元、查找表单元、粗粒度选数单元和运算单元均为实体硬件器件,不是功能性软件单元。
本公开还提供了一种神经网络压缩装置,包括存储装置,指令译码装置和计算装置组成。存储装置中存储了压缩神经网络的指令序列,指令序列包含控制指令,数据传输指令,计算指令等,能够控制计算装置完成神经网络格式转化,对应格式压缩的任务;指令译码装置接收存储单元中的指令经过译码后生成控制信号控制计算装置;计算装置接收控制信号对神经网络完成上述粗粒度剪枝和量化操作。计算装置用于执行存储装置中的可执行指令,在执行指令时依照以上所述的数据压缩方法进行操作。
本公开还提供了一种神经网络数据的处理方法,如图30所示,该处理方法包括步骤:
S3001:接收输入神经元、目标权值字典、目标权值密码本和指令,述目标权值为绝对值大于预设阈值的权值;
S3002:对指令进行译码,以得到选数控制信息、查找控制信息和运算控制信息;
S3003:根据选数控制信息、查找控制信息和运算控制信息进行选取输入神经元、目标权值并进行运算,得到输出神经元。
在一些实施例中,所述处理方法还包括:接收未量化的目标权值以进行神经网络运算。
在一些实施例中,处理方法还包括:接收指令,并经过译码后生成控制信息控制神经网络的所述运算。
在一些实施例中,运算包括以下至少一种:乘法运算,将所述第一输入数据和第二输入数据相乘,得到相乘之后的数据;加法运算,将第三输入数据通过加法树逐级相加,或者将所述第三输入数据通过和第四输入数据相加得到相加之后的数据;激活函数运算,对第五数据通过激活函数运算得到输出数据,所述激活函数为sigmoid、tanh、relu或softmax函数操作。
在一些实施例中,所述运算还包括池化操作,用于对输入的第六数据通过池化运算得到池化操作之后的输出数据,所述池化操作包括:平均值池化,最大值池化或者中值池化。
在一些实施例中,所述指令为神经网络专用指令,包括控制指令,数据传输指令,运算指令和逻辑指令。
在一些实施例中,所述控制指令用于控制神经网络执行过程,包括跳转指令和条件分支指令。
在一些实施例中,数据传输指令用于完成不同存储介质之间的数据传输,包括加载指令,存储指令,搬运指令。
在一些实施例中,所述运算指令用于完成神经网络的算术运算,包括矩阵运算指令,向量运算指令、标量运算指令、卷积神经网络运算指令、全连接神经网络运算指令、池化神经网络运算指令、RBM神经网络运算指令、LRN神经网络运算指令、LCN神经网络运算指令、LSTM神经网络运算指令、RNN神经网络运算指令、RELU神经网络运算指令、 PRELU神经网络运算指令、SIGMOID神经网络运算指令、TANH神经网络运算指令和 MAXOUT神经网络运算指令。
在一些实施例中,神经网络专用指令为Cambricon指令集,所述Cambircon指令集中每一条指令长度为64bit,指令由操作码和操作数组成。
在一些实施例中,逻辑指令用于完成神经网络的逻辑运算,包括向量逻辑运算指令和标量逻辑运算指令。
在一些实施例中,向量逻辑运算指令包括向量比较、向量逻辑运算和向量大于合并指令;优选的,向量比较包括但不限于大于,小于,等于,大于或等于(≥),小于或等于(≤) 和不等于;优选的,向量逻辑运算包括逻辑与,逻辑或,或者逻辑非。
在一些实施例中,标量逻辑运算包括标量比较,标量逻辑运算;优选的,所述标量比较包括但大于,小于,等于,大于或等于(≥),小于或等于(≤)和不等于;优选的,所述标量逻辑运算包括逻辑与,逻辑或,以及逻辑非。
在一些实施例中,处理方法还包括步骤:对输入神经元和目标权值位置信息进行预处理,所述预处理包括切分、高斯滤波、二值化、正则化和、或归一化。
在一些实施例中,处理方法中,接收被选中的神经元和目标权值之后,还包括步骤:存储输入神经元、权值字典、密码本和指令,以及存储输出神经元;以及缓存所述指令、输入神经元、输出神经元。
在一个实施例里,本公开公开了一个芯片,其包括了上述神经网络处理器。
在一个实施例里,本公开公开了一个芯片封装结构,其包括了上述芯片。
在一个实施例里,本公开公开了一个板卡,其包括了上述芯片封装结构。
在一个实施例里,本公开公开了一个电子装置,其包括了上述板卡。
电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶和/或油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
所有的模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器,DNA计算机。
通过本公开实施例的数据压缩方法和处理方法,能够规则、高压缩比地压缩神经网络。加速装置内部集成了压缩方法,实现对神经网络的压缩功能。加速器能够充分挖掘压缩后的神经网络的特性,减少访存同时减少计算量,从而获得加速比并降低能耗。
在本说明书中,下述用于描述本公开原理的各种实施例只是说明,不应该以任何方式解释为限制发明的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本公开的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不背离本公开的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同参考数字用于相似功能和操作。在本公开中,术语“包括”和“含有”及其派生词意为包括而非限制。
本说明书中“行/列”的含义表示行或者列,并且带有“行/列”的名词,行与行对应,列与列对应,比如:输出神经元与输入神经元组成的特征图行/列的连接状态数组筛选出用于计算的特征图行/列和与之对应的权值行/列代表如下含义:输出神经元与输入神经元组成的特征图行的连接状态数组筛选出用于计算的特征图行和与之对应的权值行或者输出神经元与输入神经元组成的特征图列的连接状态数组筛选出用于计算的特征图列和与之对应的权值列。
本发明提供了一种运算装置、运算方法和芯片,通过在输入神经元与输出神经元之间设置筛选单元,利用输出神经元与输入神经元组成的特征图的连接状态数组实现了结构剪裁,筛选出结构剪裁后人工神经网络中参与后续运算的特征图和与其对应的权值,避免了将所有输入神经元和权值都参与网络运算造成的运算量冗余和访存冗余,解决了CPU和 GPU运算性能不足,前端译码开销大的问题,且充分挖掘了输入神经元和权值数据的重用性,降低了内存访问带宽,减小了运算量与访存量,实现高效率输出。
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步详细说明。
在本发明的第一个示例性实施例中,提供了一种运算装置。图31A为根据本发明一实施例所示运算装置的筛选单元功能示意图;图31B为根据本发明另一实施例所示运算装置的筛选单元功能示意图;图31C为根据本发明又一实施例所示运算装置的筛选单元功能示意图;图31D为根据本发明再一实施例所示运算装置的筛选单元功能示意图。图32A为根据本发明实施例所示人工神经网络中卷积层在进行结构剪裁前的运算对比示意图;图32B为根据本发明实施例所示人工神经网络中卷积层在进行结构剪裁后的运算对比示意图。图33为根据本发明第一实施例所示运算装置的结构示意图。
结合图31A至图31D、图32A和图32B以及图33所示,一种运算装置,包括:
存储单元100,其存储数据和指令;
缓存单元300,包括:输入缓存单元310,以及输出神经元缓存单元320,其中输入缓存单元310包括:指令缓存单元311,权值缓存单元312以及输入神经元缓存单元313;
筛选单元400,根据输出神经元与输入神经元组成的特征图(Input map)的连接状态数组(Index)筛选出上述特征图(Input map)及其对应的权值(Kernel),并将该特征图及其对应的权值输出至运算单元;
控制单元500,其从指令缓存单元311中读取专用指令,并将其译码成运算单元指令并输入至运算单元;
运算单元600,其根据存储单元100中存储的指令对输入的数据执行相应的运算;
直接内存存取(direct memory access,DMA)单元200,其在存储单元100与指令缓存单元311、权值缓存单元312、输入神经元缓存单元313和输出神经元缓存单元320中进行数据或者指令读写;并将连接状态数组输送到筛选单元400;
其中,输出神经元与输入神经元组成的特征图的连接状态数组由DMA单元200从存储单元100输送到筛选单元400;输入神经元从存储单元100中依次经由DMA单元200、输入神经元缓存单元313输送到筛选单元400;权值从存储单元100中依次经由DMA单元 200、权值缓存单元312输送到筛选单元400;
下面对运算装置的各个部分进行详细介绍。
存储单元100存储的数据包括:输入神经元组成的特征图,权值,连接状态数组以及输出神经元等;
指令缓存单元311,用于存储专用指令;
权值缓存单元312,用于缓存权值;
输入神经元缓存单元313,用于缓存输入神经元;
输出神经元缓存单元320,用于缓存输出神经元;
如图31A至31D所示,筛选单元400和运算单元600的功能如下:
对于权值未经过离线筛选的情况,筛选单元400根据输出神经元与输入神经元组成的特征图(Input map)的连接状态数组(Index)筛选出参与后续运算的特征图及其对应的权值(Kernel),并根据规模将筛选出来的特征图中的输入神经元和对应的权值一次性或分批传给运算单元600,对应图31A所示情况;或者
对于权值未经过离线筛选的情况,筛选单元400根据输出神经元与输入神经元组成的特征图中行/列的连接状态数组筛选出参与后续运算的特征图行/列和与其对应的权值行/ 列,并根据规模将筛选出来的特征图中的输入神经元和对应的权值一次性或分批传给运算单元600,对应图3 1C所示情况;
对于权值已经离线筛选完成的情况,筛选单元400根据输出神经元与输入神经元组成的特征图的连接状态数组筛选出参与后续运算的特征图,并根据规模将筛选出来的特征图中的输入神经元一次性或分批传给运算单元600,同时将经过离线筛选后的权值直接传给运算单元,对应图31B中所示情况;或者
对于权值已经离线筛选完成的情况,筛选单元400根据输出神经元与输入神经元组成的特征图中行/列的连接状态数组筛选出参与后续运算的特征图行/列,并根据规模将筛选出来的特征图中的输入神经元一次性或分批传给运算单元,同时将经过离线筛选后的权值行/ 列直接传给运算单元600,对应图31D所示情况;
以卷积层为例,经过筛选单元实现结构剪裁后的卷积层前后运算对比示意图如图32A 和32B所示,结构剪裁之前,所有的特征图(Input map)和权值(Kernel)都参与了运算,而经过筛选单元的筛选过程,只有与输出神经元存在连接关系的输入神经元才作为有效的特征图被筛选出来参与后续运算,减小了计算量和访存量,实现了结构裁剪,提高了运算效率,降低了内存访问带宽;
下面对人工神经网络的结构如何实现裁剪和连接状态数组的表示形式做详细介绍。图 34为根据本发明实施例所示人工神经网络中卷积层的结构示意图;图35为根据本发明实施例所示采用筛选单元对人工神经网络实现结构裁剪的结构示意图;图36为根据本发明实施例所示采用连接状态数组的一种表示实现图35所示结构裁剪的示意图;图37为根据本发明实施例所示采用连接状态数组的另一种表示实现图35所示结构裁剪的示意图。
参照图34所示,人工神经网络主要基于卷积运算,以一个卷积层为例,设输入层由N 个输入神经元I1,I2,...,IN组成,输出层由M个输出神经元O1,O2,...,OM组成,则有NM个权值Wij,i=1,2,...,N,j=1,2,...,M。筛选前,某个输出神经元Oj由所有的N个输入神经元组成的特征图和权值W1j,W2j,...,WNj生成,生成过程为Wij分别在Ii上滑动做内积得到N 个中间结果特征图,i=1,2,...,N,每个中间结果特征图的大小和Oj相同,之后这N个中间结果特征图对位相加,累加成一个输出神经元组成的特征图,即Oj;Oj中的输出神经元可以共用一个连接状态数组,也可以每个输出神经元对应一个连接状态数组;这里全部的NM 个Wij为筛选前的权值;
其中,权值可以经过筛选单元筛选,也可以事先离线筛选完成。
输出神经元与输入神经元组成的特征图的连接状态数组,即Index,连接状态数组可以有多种表示方式,可选的,其中第一种表示如下:对每个输出神经元对应的Index A,由于输入层有N个节点,所以A有N位,每一位的值为1或0,第i位的值Ai为1表示Ii与该输出神经元之间有连接,0表示Ii与该输出神经元之间无连接;在筛选单元中,Index是已知的,筛选后得到的用于计算出该输出神经元的每个Ik和Wkj满足:Ak=1,k∈{1,2,...,N},该输出神经元在Oj内;另外,也可以采用0表示有连接,1表示无连接,分析同上;
连接状态数组的第二种表示如下:对每个输出神经元对应的Index A,每一位的值为非负整数,设与该输出神经元相连的输入神经元组成的特征图为 它们的值未知。则Index A有n位,第1位的值A1,表示第一个连接所在的输入神经元位置距离I1的距离;第p位的值AP,p=2,3,...,n,表示当前连接所在的输入神经元位置距离上一个连接所在的输入神经元的距离。筛选单元中,连接状态数组是已知的,筛选后得到的用于计算出该输出神经元的输入神经元组成的特征图为与之相对应的权值为满足:k1=A1+1,kp=Ap+kp-1,该输出神经元在Oj内;
可以理解,除了上述第一种以及第二种表示方式外,本领域人员还可以根据需求选择其他的表示方式来表示连接状态数组。
为了更方便理解本披露提供的筛选单元的功能,下面以具体的人工神经网络为例,参照图35来看,以N=4,M=2为例,即输入层由4个输入神经元:I1,I2,I3,I4组成,输出层由2个输出神经元O1,O2组成,介绍筛选单元中的数据操作过程。
该卷积层有4个输入神经元:I1,I2,I3,I4;有2个输出神经元:O1,O2;用于生成O1,O2的筛选前的权值分别为:W11,W21,W31,W41和W12,W22,W32,W42;假设每个输出神经元组成的特征图中的输出神经元共用一个连接状态数组,O1,O2对应的连接状态数组为A(1),A(2),图35 中的虚线四边形表示进行结构剪裁后被去除的权值,即筛选后的权值分别为:W11,W31,W41和W22,W32,结果如图35所示;
若连接状态数组采用第一种表示,这里用1表示有连接,0表示无连接:
若连接状态数组采用第二种表示:
如图37所示,O1中的输出神经元对应的Index A(1)为021。由此得到,对于O1, k1=0+1=1,k2=2+1=3,k3=1+3=4;。所以筛选后得到的用于计算出O1的输入神经元组成的特征图为I1,I3,I4,与之相对应的权值为W11,W31,W41。
以上两种Index的表示方式都可以实现对输入神经元组成的特征图和权值的筛选;
运算单元600包括但不仅限于:第一部分乘法器,第二部分加法树,第三部分激活函数单元;
第一部分乘法器实现如下功能:将输入数据1,和输入数据2相乘,得到相乘之后的输出结果,过程为:out=in1*in2,其中,将输入数据1记作in1,输入数据2记作in2,将相乘后的输出结果记作out;
第二部分加法树实现如下功能:将输入数据in1通过加法树逐级相加,得到逐级相加的输出数据,其中in1是一个长度为N的向量,N大于1,累加的过程为:out’=in1[1]+in1[2]+...+in1[N],将输入数据1通过加法数逐级相加之后得到的输出数据和输入数据2相加,其过程表达为:out”=in1[1]+in1[2]+...+in1[N]+in2;或者将输入数据1和输入数据2相加得到输出数据,过程为:out”’=in1+in2,其中out’,out”,out”表示三种输出结果;
第三部分激活函数单元将输入数据(in)通过激活函数(active)运算得到激活输出数据(out),过程为:out=active(in),激活函数active可以是sigmoid、tanh、relu、softmax等,除了做激活操作,第三部分可以实现其他的非线性函数的运算,将输入数据(in)通过运算(f)得到输出数据(out)的函数过程为:out=f(in);其中一种为池化运算,即将输入数据(in)经过池化运算得到池化操作之后的输出数据(out),过程为out=pool(in),其中pool 为池化操作,该池化操作是由池化单元实现的,是在第三部分与激活函数单元并列存在的单元,池化操作包括但不限于:平均值池化,最大值池化,中值池化;输入数据是和输出数据相关的一个池化核中的数据;
运算单元执行的运算包括神经网络计算;该网络计算包括:第一部分是将所述输入数据1和输入数据2相乘,得到相乘之后的数据;第二部分执行加法树运算,用于将输入数据1通过加法树逐级相加,或者将输入数据1通过和输入数据2相加得到输出数据;第三部分执行激活函数运算,对输入数据通过激活函数运算得到输出数据;第四部分执行池化运算,out=pool(in),其中pool为池化操作,池化操作包括但不限于:平均值池化,最大值池化,中值池化,输入数据in是和输出out相关的一个池化核中的数据;以上几个部分的运算可以自由选择一个多个部分进行不同顺序的组合,从而实现各种不同功能的运算。
图38A为根据图33所示运算装置进行运算的方法流程图;图38B为如图38A所示步骤S808对应的实施子步骤流程图;参照图33、图38A和图38B所示,一种运算装置的运算方法,包括:
步骤S802:DMA单元200将存储单元100中的输入神经元和权值分别传给输入神经元缓存单元313和权值缓存单元312,并同时将相应指令传入指令缓存单元311中;
步骤S804:DMA单元200将存储单元100中的连接状态数组传给筛选单元400,筛选单元400从输入神经元缓存单元313和权值缓存单元312中分别获取输入神经元组成的特征图和权值,并根据连接状态数组筛选出参与后续运算的特征图和与之分别相对应的权值,并将其传给运算单元600;
步骤S806:控制单元500从指令缓存单元311中读取专用指令,并将其译码成运算单元指令并输入至运算单元600;
步骤S808:运算单元600调取筛选后的特征图和权值并进行运算获得输出神经元;
基于上述,运算单元600进行运算的过程分为如下子步骤:
子步骤S808a:将筛选后的输入神经元组成的特征图中的输入神经元和相对应的权值数据相乘,得到各个数据乘以权重的结果;
子步骤S808b:对各个数据乘以权重的结果执行加法树运算,得到加权和,根据需要对加权和加偏置或不做处理;
子步骤S808c:对上一步得到的加权和执行激活函数运算,得到输出神经元;
步骤S810:运算单元600将得到的输出神经元放入输出神经元缓存单元320;
步骤S812:DMA单元200将输出神经元缓存单元320中的数据转入存储单元100。
重复进行上述步骤直至得到网络最终层的输出。
值得强调的是,本发明中提到的输入神经元和输出神经元并非是指整个神经网络的输入层中神经元和输出层中神经元,而是对于网络中任意相邻的两层,处于网络前馈运算前端的下层中的神经元即为输入神经元,处于网络前馈运算后端的上层中的神经元即为输出神经元;具体来说,设一个卷积神经网络有L层,K=1,2,...,L-1,对于第K层和第K+1层来说,我们将第K层称为输入层,其中的神经元为所述输入神经元,第K+1层称为输出层,其中的神经元为所述输出神经元。即除最后一层外,每一层都可以作为输入层,其下一层为对应的输出层,每层神经元的个数是预知的。
上述提到,权值可以经过筛选单元筛选,也可以事先离线筛选完成,在第一个实施例中,权值是经过筛选单元筛选实现的,在本发明的第二个示例性实施例中,提供了另外一种运算装置,适用于离线筛选权值而不经过筛选单元筛选权值的情况。图39为根据本发明第二实施例所示运算装置的结构示意图,如图39所示,本实施例中提供的运算装置包含的各个模块单元均相同,与第一个实施例的区别在于:筛选单元的功能400有所不同,在本实施例中,权值不经过筛选单元400进行筛选,而是直接从权值缓存单元312输送至运算单元600;
对应本实施例所示运算装置的运算方法,同样参照图38A与图38B,与第一个实施例中所述运算装置的运算方法大致相同,只在步骤S804中替换成如下步骤:
S804’:DMA单元200将存储单元100中的连接状态数组传给筛选单元400,筛选单元400从输入神经元缓存单元313中获取输入神经元组成的特征图,并根据连接状态数组筛选出参与后续运算的特征图,并将其传给运算单元600;与此同时,离线筛选后的权值从权值缓存单元312传入运算单元600;
以上两个实施例所示的运算装置均是从权值缓存单元312和输入神经元缓存单元313 分别读取权值和输入神经元组成的特征图输送到筛选单元400中,而在实际操作中也可以直接从DMA单元200将权值和输入神经元组成的特征图直接读入到筛选单元400中,据此,本发明的第三个示例性实施例中还提出了一种运算装置。
图40为根据本发明第三实施例所示运算装置的结构示意图,如图40所示,本实施例中提供的运算装置与第一实施例的模块单元相同,与第一实施例的区别在于以下几点:
1、与第一个实施例相比,位置设置的区别在于:筛选单元400设置成与DMA单元200直接相连,并且直接从DMA单元200向筛选单元400传输权值和输入神经元组成的特征图,然后经过筛选单元400筛选后的权值和输入神经元组成的特征图分别传入权值缓存单元312和输入神经元缓存单元313,最后传给运算单元600;
2、与第一个实施例相比,功能的设置区别在于:还多设置了一种离线筛选权值的数据处理路径,具体表现为:权值除了可以通过筛选单元400进行筛选然后传输至权值缓存单元312,最终传给运算单元600之外,还可以通过权值缓存单元312直接传给运算单元600,而这种情形适用于已经离线筛选好权值的情形。
基于以上设置,第三个实施例提供的运算装置可以同时实现权值经过离线筛选和不经过离线筛选两种情形的数据处理,参照图38A和图38B以及以上第一个实施例中提供的运算装置的运算方法,本实施例的运算装置的运算方法,只需将第一个实施例中描述的运算装置的运算方法中步骤S802和步骤S804换成如下步骤即可:
步骤S802”:DMA单元200将存储单元100中的指令传入指令缓存单元311中;
步骤S804”a:DMA单元200将存储单元100中的连接状态数组、输入神经元组成的特征图和权值传给筛选单元400,筛选单元400根据连接状态数组筛选出参与后续运算的特征图和与之分别相对应的权值,并分别将筛选后的输入神经元组成的特征图中的输入神经元和对应的权值传入至输入神经元缓存单元313和权值缓存单元312;
步骤S804”b:DMA单元200将存储单元100中的连接状态数组和输入神经元组成的特征图传给筛选单元400,筛选单元400根据连接状态数组,筛选出用于计算得到输出神经元的特征图,并将其中的输入神经元传入至输入神经元缓存单元313,于此同时,DMA 单元200将存储单元100中已经筛选完毕的权值传入权值缓存单元312;
上述步骤的执行过程如下:若权值不经过离线筛选,执行完步骤S802”之后继续执行步骤步骤S804”a;若权值完成了离线筛选,执行完步骤S802”之后继续执行步骤步骤S804”b。
一个实施例中,上述运算装置还包括连接关系生成单元,用于根据输入神经元、权值和输出神经元生成连接关系。
一个实施例中,上述连接关系生成单元独立于上述运算装置之外,可以是连接关系生成单元包含于主处理器中,运算装置包含于协处理器中;或者连接关系生成单元包含于从处理器中,运算装置包含主协处理器中。
在本发明的第四个示例性实施例中,还提供了一种电子装置,包括板卡,该板卡包括芯片封装结构,该芯片封装结构包括芯片,该芯片包括本发明实施例中提供的运算装置;
以上提到的电子装置在实际应用中包括:数据数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器以及医疗设备等;
以上交通工具包括飞机、轮船以及车辆等;以上家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶和油烟机等;以上医疗设备包括核磁共振仪、B超仪和心电图仪等。
综上所述,本发明实施例提供了一种运算装置及运算方法,通过在输入神经元与输出神经元之间设置筛选单元,利用输出神经元和输入神经元组成的特征图的连接状态数组实现了结构剪裁,筛选出结构剪裁后人工神经网络中参与后续运算的特征图和相对应的权值,避免了将所有输入神经元和权值都参与网络运算造成的运算量冗余和访存冗余,并且还适用于权值经过离线筛选和不经过离线筛选两种情形,解决了CPU和GPU运算性能不足,前端译码开销大的问题,且充分挖掘了输入神经元和权值数据的重用性,降低了内存访问带宽,减小了运算量与访存量,实现了高效率输出。
特别强调的是,所有的模块都可以是硬件结构,硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器,DNA计算机。应注意,贯穿附图,相同的元素由相同或相近的附图标记来表示。在可能导致对本发明的理解造成混淆时,将省略常规结构或构造。应注意,图中各部件的形状和尺寸不反映真实大小和比例,而仅示意本发明实施例的内容。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (24)
1.一种处理装置,其特征在于,包括:
粗粒度剪枝单元,用于对神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值;
运算单元,用于根据剪枝后的权值对所述神经网络进行训练;
其中,所述粗粒度剪枝单元具体用于:
通过滑动窗口从神经网络的权值中选取出M个权值,所述M为大于1的整数;
当所述M个权值满足预设条件时,将所述M个权值的全部或者部分置为零;
所述粗粒度剪枝单元和所述运算单元均采用硬件的形式实现且均为集成电路;
所述神经网络包括全连接层、卷积层和/或长短期记忆LSTM层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连接层权值输出神经元个数;所述粗粒度剪枝单元具体用于:
当对所述全连接层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数,Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout;
当对所述卷积层的权值进行粗粒度剪枝操作时,所述滑动窗口为大小为Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bfin*Bfout*Bx*By;
当对所述LSTM层的权值进行粗粒度剪枝操作时,所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
2.根据权利要求1所述的装置,其特征在于,所述预设条件为:
所述M个权值的信息量小于第一预设阈值。
3.根据权利要求2所述的装置,其特征在于,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于所述第一阈值,或者所述M个权值绝对值的几何平均值小于所述第二阈值,或者所述M个权值的最大值小于所述第三阈值。
4.根据权利要求1-3任一项所述的装置,其特征在于,所述粗粒度剪枝单元和运算单元用于:
重复对所述神经网络的权值进行粗粒度剪枝以及根据剪枝后的权值进行训练,直至保证在精度不损失设定精度的前提下没有权值满足所述预设条件。
5.根据权利要求4所述的装置,其特征在于,所述设定精度为x%,其中,所述x介于0-5之间。
6.根据权利要求5所述的装置,其特征在于,所述运算单元具体用于:
根据剪枝后的权值和通过反向传播算法对所述神经网络进行重新训练。
8.根据权利要求5-7任一项所述的装置,其特征在于,所述装置还包括存储单元、指令控制单元和粗粒度选数单元;所述粗粒度剪枝单元与所述存储单元连接,所述存储单元与所述指令控制单元、所述粗粒度选数单元及所述运算单元连接,所述指令控制单元与所述粗粒度选数单元和所述运算单元连接,
所述存储单元,用于存储指令、所述神经网络的输入神经元、输出神经元、权值及其位置信息;
所述粗粒度选数单元,用于接收输入神经元和目标权值的位置信息,选出目标权值及其对应的输入神经元;并将所述目标权值及其对应的输入神经元传输至所述运算单元;
所述运算单元,还用于对所述目标权值及其对应的输入神经元完成神经网络运算,得到输出神经元,并将所述输出神经元传输至所述存储单元;
所述指令控制单元,用于从所述存储单元中获取所述指令,并将所述指令译码后生成控制信息,以控制所述粗粒度选数单元进行选数操作和所述运算单元进行计算操作。
9.根据权利要求5-7任一项所述的装置,其特征在于,所述装置还包括:预处理单元、存储单元、直接存储访问DMA单元、指令缓存单元、第一缓存单元、第二缓存单元、第三缓存单元、第四缓存单元、粗粒度选数单元、指令控制单元和运算单元,
其中,所述预处理单元与所述存储单元连接,所述存储单元与所述DMA单元连接,所述DMA单元与所述指令缓存单元、粗粒度剪枝单元、第二缓存单元、第三缓存单元和第四缓存单元连接,所述粗粒度剪枝单元与所述第一缓存单元连接,所述指令缓存单元与所述指令控制单元连接,所述第二缓存单元和第三缓存单元与所述粗粒度选数单元连接,所述指令控制单元、粗粒度选数单元、第一缓存单元和第四缓存单元与所述运算单元连接;
所述预处理单元,用于对原始数据进行预处理,并将预处理后的数据存储至所述存储单元;所述原始数据包括输入神经元、输出神经元和权值;所述预处理包括切分、高斯滤波、二值化、正则化和/或归一化;
所述存储单元,用于存储输入神经元、输出神经元、权值以及指令;其中当存储所述指令时只存储目标权值及其位置信息;
所述DMA单元,用于在所述存储单元与所述指令缓存单元、粗粒度剪枝单元、第一缓存单元、第二缓存单元、第三缓存单元或第四缓存单元之间中进行数据或者指令读写;
所述粗粒度剪枝单元,具体用于通过所述DMA单元从所述存储单元中获取所述权值,然后对所述权值进行粗粒度剪枝,以得到剪枝后的权值,并将所述剪枝后的权值存储至所述第一缓存单元中
所述指令缓存单元,用于缓存所述指令;
所述第一缓存单元,用于缓存目标权值,所述目标权值为绝对值大于第二预设阈值的权值;
所述第二缓存单元,用于缓存所述目标权值的位置信息;
所述第三缓存单元,用于缓存输入到所述粗粒度选数单元的输入神经元;
所述第四缓存单元,用于缓存所述运算单元输出的输出神经元和根据输出神经元得到的输出神经元梯度;
所述指令控制单元,用于接收所述指令缓存单元中的指令,将该指令译码生成控制信息以控制所述运算单元进行计算操作;
所述粗粒度选数单元,用于接收输入神经元和所述目标权值的位置信息,并根据所述目标权值的位置信息选出需要进行运算的输入神经元,并将该输入神经元传输至所述运算单元;
所述运算单元,还用于根据所述指令控制单元传输的控制信息对输入神经元和目标权值进行运算,以得到输出神经元,将该输出神经元存储所述第四缓存单元中;并根据所述输出神经元得到输出神经元梯度,并将该输出神经元梯度存储到所述第四缓存单元中。
10.根据权利要求9所述的装置,其特征在于,所述粗粒度选数单元具体用于:
根据输入神经元生成神经元索引,所述神经元索引用于指示对应的输入神经元是否有用;
对所述神经元索引与所述目标权值的位置信息进行“与”操作,以得到神经元标志;所述神经元标志中的每一位指示对应的神经元是否被选择;
添加所述神经元标志的每一位,以获得累加的字符串;
对所述累加的字符串和所述神经元标志执行“与”操作,以得到用于选择输入神经元的目标字符串;
根据所述目标字符串来选择输入神经元,并将选择的输入神经元输入到上述运算单元。
11.根据权利要求10所述的装置,其特征在于,所述运算单元包括多个处理单元,所述多个处理单元中的每个处理单元包括权值缓冲区、权值解码器模块、权值选择器模块和神经元功能单元,
所述权值缓冲区,用于缓冲权值;
所述权值解码器模块,用于根据本地量化中使用的码本和字典中的压缩值提取权值,并将该权值传输至所述权值选择器模块;
所述权值选择器模块,用于获取索引字符串,根据索引字符串和来自所述权值解码器模块的权值,获取选择的权值;所述选择的权值为对所述神经元功能单元进行计算有用的权值;
所述神经元功能单元,用于获取所述选择的输入神经元,并对所述选择的权值和所述选择的输入神经元进行运算,以得到输出神经元。
12.一种神经网络运算装置,其特征在于,所述神经网络运算装置包括一个或多个如权利要求1-11任一项所述的处理装置,用于从其他处理装置中获取待运算数据和控制信息,并执行指定的神经网络运算,将执行结果通过I/O接口传递给其他处理装置;
当所述神经网络运算装置包含多个计算装置时,所述多个所述计算装置间可以通过特定的结构进行连接并传输数据;
其中,多个所述计算装置通过快速外部设备互连总线PCIE总线进行互联并传输数据,以支持更大规模的神经网络的运算;多个所述计算装置共享同一控制系统或拥有各自的控制系统;多个所述计算装置共享内存或者拥有各自的内存;多个所述计算装置的互联方式是任意互联拓扑。
13.一种组合处理装置,其特征在于,所述组合处理装置包括如权利要求12所述的神经网络运算装置,通用互联接口和其他处理装置;
所述神经网络运算装置与所述其他处理装置进行交互,共同完成用户指定的计算操作。
14.根据权利要求13所述的组合处理装置,其特征在于,还包括:存储装置,该存储装置分别与所述神经网络运算装置和所述其他处理装置连接,用于保存所述神经网络运算装置和所述其他处理装置的数据。
15.一种神经网络芯片,其特征在于,所述神经网络芯片包括如权利要求12所述的神经网络运算装置或如权利要求13所述的组合处理装置或如权利要求14所述的组合处理装置。
16.一种板卡,其特征在于,所述板卡包括权利要求15所述的神经网络芯片。
17.一种电子装置,其特征在于,所述电子装置包括权利要求16所述的板卡。
18.一种用于神经网络计算的计算机芯片的处理方法,其特征在于,应用于处理装置,所述处理装置包括粗粒度剪枝单元和运算单元,包括:
所述粗粒度剪枝单元对神经网络的权值进行粗粒度剪枝,以得到剪枝后的权值;
所述运算单元根据所述剪枝后的权值对神经网络进行运算;
其中,所述对神经网络进行粗粒度剪枝,以得到剪枝后的权值,包括:
通过滑动窗口从神经网络的权值中选取出M个权值,所述M为大于1的整数;
当所述M个权值满足预设条件时,将所述M个权值全部或者部分置为零,以得到剪枝后的权值;
所述粗粒度剪枝单元和所述运算单元均采用硬件的形式实现且均为集成电路;
所述神经网络包括全连接层、卷积层和/或长短期记忆LSTM层,其中,所述全连接层的权值是一个二维矩阵(Nin,Nout),其中Nin是输入神经元的个数,Nout是输出神经元的个数,所述全连接层有Nin*Nout个权值;所述卷积层的权值是一个四维矩阵(Nfin,Nfout,Kx,Ky),其中Nfin是输入特征图像的个数,Nfout是输出特征图像的个数,(Kx,Ky)是卷积核的大小,所述卷积层有Nfin*Nfout*Kx*Ky个权值;所述LSTM层的权值有m个全连接层的权值组成,所述m为大于0的整数,第i个全连接层权值为(Nin_i,Nout_i),其中i是大于0且小于或等于m的整数,Nin_i表示第i个全连接层权值输入神经元个数,Nout_i表示第i个全连接层权值输出神经元个数;所述对神经网络进行粗粒度剪枝包括:
当对所述神经网络的全连接层的权值进行粗粒度剪枝时,所述滑动窗口的大小为Bin*Bout的滑动窗口,其中所述Bin为大于0且小于或等于Nin整数,所述Bout为大于0且小于或等于Nout的整数;
使所述滑动窗口能够沿着Bin的方向按照步长Sin进行滑动,或者沿着Bout的方向按照步长Sout进行滑动,其中Sin为大于0且小于或等于Bin的正整数,Sout为大于0且小于或等于Bout的正整数;
通过所述滑动窗口从所述Nin*Nout个权值中选取M个取值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin*Bout;
当对所述神经网络的卷积层的权值进行粗粒度剪枝时,所述滑动窗口为大小为Bfin*Bfout*Bx*By的四维滑动窗口,其中Bfin为大于0且小于或等于Nfin的整数,Bfout为大于0且小于或等于Nfout的整数,Bx为大于0且小于或等于Kx的整数,By为大于0且小于或等于Ky的整数;
使所述滑动窗口沿着Bfin的方向按照步长Sfin进行滑动,或者沿着Bfout的方向按照步长Sfout进行滑动,或者沿着Bx的方向按照步长S进行滑动,或沿着By的方向按照步长Sy进行滑动,其中Sfin为大于0且小于或等于Bfin的整数,Sfout为大于0且小于或等于Bfout的整数,Sx为大于0且小于或等于Bx的整数,Sy为大于0且小于或等于By的整数;
通过所述滑动窗口从所述Nfin*Nfout*Kx*Ky个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bfin*Bfout*Bx*By;
当对所述神经网络的LSTM层的权值进行粗粒度剪枝时,所述滑动窗口的大小为Bin_i*Bout_i,其中Bin_i为大于0且小于或等于Nin_i的整数,Bout_i为大于0且小于或等于Nout_i的整数;所述对神经网络的LSTM层的权值进行粗粒度剪枝具体包括:
使所述滑动窗口沿着Bin_i的方向按照步长Sin_i进行滑动,或沿着Bout_i的方向按照步长Sout_i进行滑动,其中Sin_i为大于0且小于或等于Bin_i的正整数,Sout_i为大于0且小于或等于Bout_i的正整数;
通过所述滑动窗口从所述Bin_i*Bout_i个权值中选取M个权值,当所述M个权值满足所述预设条件时,将所述M个权值全部或者部分置为零,其中,所述M=Bin_i*Bout_i。
19.根据权利要求18所述的方法,其特征在于,所述预设条件为:
所述M个权值的信息量小于第一预设阈值。
20.根据权利要求19所述的方法,其特征在于,所述M个权值的信息量为所述M个权值绝对值的算术平均值、所述M个权值绝对值的几何平均值或者所述M个权值的最大值,所述第一预设阈值为第一阈值、第二阈值或者第三阈值,所述M个权值的信息量小于第一预设阈值包括:
所述M个权值绝对值的算术平均值小于第一阈值,或者所述M个权值绝对值的几何平均值小于第二阈值,或者所述M个权值绝对值的最大值小于第三阈值。
21.根据权利要求19或20所述的方法,其特征在于,所述方法还包括:
重复对所述神经网络的权值进行粗粒度剪枝以及根据剪枝后的权值进行训练,直至保证在精度不损失设定精度的前提下没有权值满足所述预设条件。
22.根据权利要求21所述的方法,其特征在于,所述设定精度为x%,其中x介于0至5之间。
23.根据权利要求22所述的方法,其特征在于,所述根据所述剪枝后的权值对神经网络进行训练具体为:
根据所述剪枝后的权值和通过反向传播算法对所述神经网络进行重新训练。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910474387.7A CN110175673B (zh) | 2017-05-23 | 2018-05-23 | 处理方法及加速装置 |
Applications Claiming Priority (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710370905.1A CN108960420B (zh) | 2017-05-23 | 2017-05-23 | 处理方法及加速装置 |
CN2017103709051 | 2017-05-23 | ||
CN2017104567594 | 2017-06-16 | ||
CN201710456759.4A CN109146069B (zh) | 2017-06-16 | 2017-06-16 | 运算装置、运算方法和芯片 |
CN2017106780388 | 2017-08-09 | ||
CN201710677987.4A CN109389218B (zh) | 2017-08-09 | 2017-08-09 | 数据压缩方法及压缩装置 |
CN2017106779874 | 2017-08-09 | ||
CN201710678038.8A CN109389208B (zh) | 2017-08-09 | 2017-08-09 | 数据的量化装置及量化方法 |
PCT/CN2018/088033 WO2018214913A1 (zh) | 2017-05-23 | 2018-05-23 | 处理方法及加速装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910474387.7A Division CN110175673B (zh) | 2017-05-23 | 2018-05-23 | 处理方法及加速装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109478251A CN109478251A (zh) | 2019-03-15 |
CN109478251B true CN109478251B (zh) | 2021-01-05 |
Family
ID=65678543
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880002821.5A Active CN109478251B (zh) | 2017-05-23 | 2018-05-23 | 处理方法及加速装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109478251B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111832737B (zh) * | 2019-04-18 | 2024-01-09 | 中科寒武纪科技股份有限公司 | 一种数据处理方法及相关产品 |
CN112115095B (zh) * | 2020-06-12 | 2022-07-08 | 苏州浪潮智能科技有限公司 | 一种用于哈希算法的可重构硬件及运行方法 |
CN113253724A (zh) * | 2021-04-30 | 2021-08-13 | 深圳市优必选科技股份有限公司 | 一种步态规划方法、装置、计算机可读存储介质及机器人 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105512723A (zh) * | 2016-01-20 | 2016-04-20 | 南京艾溪信息科技有限公司 | 一种用于稀疏连接的人工神经网络计算装置和方法 |
CN105787500A (zh) * | 2014-12-26 | 2016-07-20 | 日本电气株式会社 | 基于人工神经网络的特征选择方法和装置 |
-
2018
- 2018-05-23 CN CN201880002821.5A patent/CN109478251B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105787500A (zh) * | 2014-12-26 | 2016-07-20 | 日本电气株式会社 | 基于人工神经网络的特征选择方法和装置 |
CN105512723A (zh) * | 2016-01-20 | 2016-04-20 | 南京艾溪信息科技有限公司 | 一种用于稀疏连接的人工神经网络计算装置和方法 |
Non-Patent Citations (2)
Title |
---|
Deep Compression: Compression Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding;Song Han, et al.;《arXiv:1510.00149v5》;20160215;第2-3节 * |
基于在线学习RBF神经网络的故障预报;黄红梅,胡寿松;《南京航空航天大学学报》;20070430;第39卷(第2期);第1.3节 * |
Also Published As
Publication number | Publication date |
---|---|
CN109478251A (zh) | 2019-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2018214913A1 (zh) | 处理方法及加速装置 | |
CN111221578B (zh) | 计算装置以及计算方法 | |
US11531541B2 (en) | Processing apparatus and processing method | |
US11507350B2 (en) | Processing apparatus and processing method | |
CN109997154A (zh) | 信息处理方法及终端设备 | |
TWI827432B (zh) | 計算裝置、機器學習運算裝置、組合處理裝置、神經網絡芯片、電子設備、板卡、及計算方法 | |
CN109478251B (zh) | 处理方法及加速装置 | |
CN109389208B (zh) | 数据的量化装置及量化方法 | |
US10657439B2 (en) | Processing method and device, operation method and device | |
CN110909870B (zh) | 训练装置及方法 | |
CN109389218B (zh) | 数据压缩方法及压缩装置 | |
CN108960420B (zh) | 处理方法及加速装置 | |
CN109389209B (zh) | 处理装置及处理方法 | |
CN109697507B (zh) | 处理方法及装置 | |
CN110175673B (zh) | 处理方法及加速装置 | |
CN109978156B (zh) | 集成电路芯片装置及相关产品 | |
CN109977446B (zh) | 集成电路芯片装置及相关产品 | |
CN109146069B (zh) | 运算装置、运算方法和芯片 | |
CN111047024A (zh) | 一种计算装置及相关产品 | |
CN111198714A (zh) | 重训练方法及相关产品 |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20201207 Address after: Room 611-194, R & D center building, China (Hefei) international intelligent voice Industrial Park, 3333 Xiyou Road, hi tech Zone, Hefei City, Anhui Province Applicant after: Anhui Cambrian Information Technology Co., Ltd Address before: 201306 floor 6, block B, 168 Tonghui Road, Pudong New Area, Shanghai. Applicant before: Shanghai Cambricon Information Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |