首页 / 专利库 / 电脑零配件 / 硬件 / 神经网络模型分块压缩方法、训练方法、计算装置及系统

神经网络模型分压缩方法、训练方法、计算装置及系统

阅读:649发布:2024-01-27

专利汇可以提供神经网络模型分压缩方法、训练方法、计算装置及系统专利检索,专利查询,专利分析的服务。并且一种用于神经网络的网络模型分 块 压缩方法,包括:权重矩阵获得步骤,获得经过训练得到的神经网络的网络模型的权重矩阵;权重矩阵分块步骤,按照预定阵列大小将权重矩阵划分成由若干初始子块组成的阵列;待裁剪权值元素集中步骤,根据子块中的矩阵元素的权值绝对值和值,通过行列交换,将权值较小的矩阵元素集中到待裁剪子块中,使得该待裁剪子块中的矩阵元素的权值绝对值和值相对于不是待裁剪子块的其他子块中的矩阵元素的权值绝对值和值更小;子块裁剪步骤,将上述待裁剪子块中的矩阵元素的权值裁剪掉,获得最终的权重矩阵,以实现对神经网络的网络模型的压缩。实现能够节省资源开销,在有限资源的条件下布置规模巨大的神经网络。,下面是神经网络模型分压缩方法、训练方法、计算装置及系统专利的具体信息内容。

1.一种用于神经网络的网络模型分压缩方法,包括:
权重矩阵获得步骤,获得经过训练得到的神经网络的网络模型的权重矩阵;
权重矩阵分块步骤,按照预定阵列大小将权重矩阵划分成由若干初始子块组成的阵列;
待裁剪权值元素集中步骤,根据子块中的矩阵元素的权值绝对值和值,通过行列交换,将权值较小的矩阵元素集中到待裁剪子块中,使得该待裁剪子块中的矩阵元素的权值绝对值和值相对于不是待裁剪子块的其他子块中的矩阵元素的权值绝对值和值更小;和子块裁剪步骤,将上述待裁剪子块中的矩阵元素的权值裁剪掉,获得最终的权重矩阵,以实现对神经网络的网络模型的压缩。
2.根据权利要求1所述的网络模型分块压缩方法,其中,根据压缩率或根据阈值来设定所述待裁剪子块的数量。
3.根据权利要求1所述的网络模型分块压缩方法,其中,待裁剪权值元素集中步骤包括如下步骤:
确定预裁剪子块步骤,确定作为裁剪候选的预裁剪子块;
标记行列步骤,选择并标记预裁剪子块所在的所有行和所有列作为换位行和换位列,其中,根据压缩率设定所述预裁剪子块的数量;
交换行步骤和交换列步骤,对每一行中的矩阵元素的权值绝对值求和,并且将和值小的行依次与所标记的换位行进行位置交换,以及,对每一列中的矩阵元素的权值绝对值求和,并且将和值小的列依次与所标记的换位列进行位置交换;
重复上述步骤,直到交换也不能改变所有预裁剪子块中的矩阵元素的权值绝对值的总和,此时的预裁剪子块作为待裁剪子块。
4.根据权利要求3所述的网络模型分块压缩方法,其中,确定预裁剪子块步骤还包括:
计算每一个初始子块中的矩阵元素的权值绝对值的总和,将和值小的子块作为预裁剪子块。
5.一种神经网络训练方法,包括如下步骤:
对神经网络进行训练,得到网络模型的权重矩阵;
根据权利要求1-4所述的网络模型分块压缩方法对所述权重矩阵进行压缩;和迭代进行上述步骤,直至达到预定迭代中止要求。
6.一种用于神经网络计算的计算装置,包括存储器和处理器,存储器中存储有计算机可执行指令,所述计算机可执行指令包括网络模型压缩指令,当处理器执行所述网络模型压缩指令时,执行下述方法:
权重矩阵获得步骤,获得经过训练得到的神经网络的网络模型的权重矩阵;
权重矩阵分块步骤,按照预定阵列大小将权重矩阵划分成由若干初始子块组成的阵列;
待裁剪权值元素集中步骤,根据子块中的矩阵元素的权值绝对值和值,通过行列交换,将权值较小的矩阵元素集中到待裁剪子块中,使得该待裁剪子块中的矩阵元素的权值绝对值和值相对于不是待裁剪子块的其他子块中的矩阵元素的权值绝对值和值更小;
子块裁剪步骤,将上述待裁剪子块中的矩阵元素的权值裁剪掉,获得最终的权重矩阵,以实现对神经网络的网络模型的压缩。
7.根据权利要求6所述的计算装置,其中,根据压缩率或根据阈值来设定所述待裁剪子块的数量。
8.根据权利要求6所述的计算装置,其中,待裁剪权值元素集中步骤包括如下步骤:
确定预裁剪子块步骤,确定作为裁剪候选的预裁剪子块;
标记行列步骤,选择并标记预裁剪子块所在的所有行和所有列作为换位行和换位列,其中,根据压缩率设定所述预裁剪子块的数量;
交换行步骤和交换列步骤,对每一行中的矩阵元素的权值绝对值求和,并且将和值小的行依次与所标记的换位行进行位置交换,以及,对每一列中的矩阵元素的权值绝对值求和,并且将和值小的列依次与所标记的换位列进行位置交换;
重复上述步骤,直到交换也不能改变所有预裁剪子块中的矩阵元素的权值绝对值的总和,此时的预裁剪子块作为待裁剪子块。
9.根据权利要求8所述的计算装置,其中,确定预裁剪子块步骤还包括:计算每一个初始子块中的矩阵元素的权值绝对值的总和,将和值小的子块作为预裁剪子块。
10.根据权利要求6所述的计算装置,其中,所述计算机可执行指令还包括网络模型应用指令,当处理器执行所述网络模型应用指令时,执行下述方法:
输入数据处理步骤,根据行列交换顺序,对输入数据进行交换;
矩阵乘法运算步骤,将交换后的输入数据与执行所述网络模型压缩指令后得到的最终的权重矩阵进行矩阵乘法运算;和
输出数据处理步骤,根据行列交换顺序,对矩阵乘法运算的结果进行反向交换并且作为输出数据输出。
11.根据权利要求10所述的计算装置,其中,所述计算机可执行指令还包括网络模型训练指令,当处理器执行所述网络模型训练指令时,执行下述方法:
对神经网络进行训练,得到网络模型的初始权重矩阵;
执行所述网络模型压缩指令得到压缩后的最终的权重矩阵;
执行所述网络模型应用指令进行训练;和
迭代进行上述压缩和训练步骤,直至达到预定的迭代中止要求。
12.一种采用如权利要求1-4所述的网络模型分块压缩方法、如权利要求5所述的神经网络训练方法和如权利要求6-11所述的计算装置进行网络模型压缩、应用和训练的硬件系统,包括:
神经网络硬件芯片,神经网络硬件芯片具有通过电路器件以硬件形式执行矩阵向量乘的操作的基本模块,
其中,与待裁剪子块中的矩阵元素所对应的位置未设置电路器件。
13.根据权利要求12所述的硬件系统,其中,所述电路器件为忆阻器或TrueNorth芯片的神经突触。

说明书全文

神经网络模型分压缩方法、训练方法、计算装置及系统

技术领域

[0001] 本发明总体地涉及神经网络技术领域,更具体地涉及用于神经网络的网络模型分块压缩方法、训练方法、计算装置以及硬件系统。

背景技术

[0002] 随着摩尔定律逐渐失效,传统芯片工艺进步放缓,人们不得不面向新应用和新器件。近年来,神经网络(Neural Network,NN)计算取得了突破性进展,在图像识别、语言识别、自然语言处理等诸多领域均取得了很高的准确率,但神经网络需要海量计算资源,传统的通用处理器已经很难满足深度学习的计算需求,设计专用芯片已经成为了一个重要的发展方向。
[0003] 具体地,神经网络的建模通常以若干神经元为一层,层与层之间相互连接来构建,图1所示的是一种链状的神经网络,图中每一个圆表示一个神经元,每一个箭头表示神经元之间的连接,每个连接均有权重,实际神经网络的结构不限于链状的网络结构。
[0004] 神经网络的核心计算是矩阵向量乘操作,包含n个神经元的层Ln产生的输出可以用长度为n的向量Vn表示,与包含m个神经元的层Lm全相联,连接权重可以表示成矩阵Mn×m,矩阵大小为n行m列,每个矩阵元素表示一个连接的权重。则加权之后输入到Lm的向量为Mn×mVn,这样的矩阵向量乘法运算是神经网络最核心的计算。
[0005] 由于矩阵向量乘计算量非常大,在传统的通用处理器上进行大量的矩阵乘运算需要耗费大量的时间,因此神经网络加速芯片也都是以加速矩阵乘法运算为主要的设计目标。
[0006] 忆阻器阵列是一种能够实现上述矩阵乘法运算的硬件器件。每个忆阻器的电阻阻值可以在特定的输入电流下改变,并且阻值可以用来存储数据。相比传统的DRAM(动态随机存储器)和SRAM(静态随机存储器),忆阻器具有存储密度高且在失去供电的情况下也不会丢失数据的特点。
[0007] 图2示出了基于忆阻器的交叉开关(Crossbar)结构的示意图。
[0008] 如图2所示,通过将线路排布成交叉开关(Crossbar),并在相交点用忆阻器相连,将忆阻器的电导值G(电阻的倒数)设置为权重矩阵的矩阵元数值,通过在输入端输入电压值V,电压V与忆阻器电导G相乘并叠加输出电流,输出电流与接地电阻Rs相乘得到输出电压V’,由此在输出端即可完成矩阵向量乘法运算。以此为基本单元,可以构建基于新型器件的神经形态芯片。
[0009] 由于整个过程在模拟电路下实现,具有速度快,面积小的优点。
[0010] 然而,使用基于忆阻器的芯片计算也存在精度低、扰动大,数模/模数转换开销大,矩阵规模受限等不足。
[0011] 类似地,TrueNorth也是能够进行矩阵向量乘法运算的芯片。TrueNorth是IBM公司的神经形态芯片,每块芯片上集成了4096个神经突触核,每个神经突触核可以处理256×256的神经突触计算。
[0012] 虽然忆阻器阵列和TrueNorth芯片均可以高效地进行矩阵向量乘法运算,但是由于神经网络规模巨大,需要数量惊人的阵列,这带来了海量的资源开销,使得基于这些芯片器件实现的神经网络,很难在有限资源的条件下布置规模巨大的初始神经网络。
[0013] 因此,需要将神经网络模型进行压缩,以减小资源开销,提高神经网络计算效率。
[0014] 现有的Deep Compression(深度压缩)是CNN网络常见的压缩方法。深度压缩的实现主要分为三步:权值裁剪、权值共享和霍夫曼编码。
[0015] (1)权值裁剪:一、正常训练模型得到网络权值;二、将所有低于一定阈值的权值设为0;三、重新训练网络中剩下的非零权值。将以上三步反复迭代
[0016] (2)权值共享:采用kmeans算法来将权值进行聚类,在每一个类中,所有的权值共享该类的聚类质心,因此最终存储的结果就是一个码书和索引表。
[0017] (3)霍夫曼编码:主要用于解决编码长短不一带来的冗余问题。深度压缩针对卷积层统一采用8bit编码,而全连接层采用5bit,所以采用这种熵编码能够更好地使编码bit均衡,减少冗余。
[0018] 该方法能在保持精度不变将模型压缩达到90%的压缩率。
[0019] 这些现有技术虽然能极大地压缩模型规模,但是并不能适配于基于忆阻器以及TrueNorth等能够进行矩阵向量乘法运算的芯片所应用的神经网络模型。例如,因为权值裁剪裁掉的权值不集中,不能减少所需阵列的数量;使用权值共享会降低忆阻器阵列的运行速度;忆阻器阵列的权值编码是固定的,无法压缩。
[0020] 因此,需要一种用于神经网络计算的网络模型压缩技术,以解决上述问题。

发明内容

[0021] 鉴于上述情况,做出了本发明。
[0022] 根据本发明的一个方面,提供了一种用于神经网络的网络模型分块压缩方法,包括:权重矩阵获得步骤,获得经过训练得到的神经网络的网络模型的权重矩阵;权重矩阵分块步骤,按照预定阵列大小将权重矩阵划分成由若干初始子块组成的阵列;待裁剪权值元素集中步骤,根据子块中的矩阵元素的权值绝对值和值,通过行列交换,将权值较小的矩阵元素集中到待裁剪子块中,使得该待裁剪子块中的矩阵元素的权值绝对值和值相对于不是待裁剪子块的其他子块中的矩阵元素的权值绝对值和值更小;子块裁剪步骤,将上述待裁剪子块中的矩阵元素的权值裁剪掉,获得最终的权重矩阵,以实现对神经网络的网络模型的压缩。
[0023] 根据上述网络模型分块压缩方法,可以根据压缩率或根据阈值来设定所述待裁剪子块的数量。
[0024] 根据上述网络模型分块压缩方法,待裁剪权值元素集中步骤可以包括如下步骤:确定预裁剪子块步骤,确定作为裁剪候选的预裁剪子块;标记行列步骤,选择并标记预裁剪子块所在的所有行和所有列作为换位行和换位列,其中,根据压缩率设定所述预裁剪子块的数量;交换行步骤和交换列步骤,对每一行中的矩阵元素的权值绝对值求和,并且将和值小的行依次与所标记的换位行进行位置交换,以及,对每一列中的矩阵元素的权值绝对值求和,并且将和值小的列依次与所标记的换位列进行位置交换;重复上述步骤,直到交换也不能改变所有预裁剪子块中的矩阵元素的权值绝对值的总和,此时的预裁剪子块作为待裁剪子块。
[0025] 根据上述网络模型分块压缩方法,确定预裁剪子块步骤可以包括:计算每一个初始子块中的矩阵元素的权值绝对值的总和,将和值小的子块作为预裁剪子块。
[0026] 根据本发明的另一个方面,提供一种神经网络训练方法,包括如下步骤:对神经网络进行训练,得到网络模型的权重矩阵;根据上述网络模型分块压缩方法对所述权重矩阵进行压缩;以及迭代进行上述步骤,直至达到预定迭代中止要求。
[0027] 根据本发明的另一个方面,提供一种用于神经网络计算的计算装置,包括存储器和处理器,存储器中存储有计算机可执行指令,所述计算机可执行指令包括网络模型压缩指令,当处理器执行所述网络模型压缩指令时,执行下述方法:权重矩阵获得步骤,获得经过训练得到的神经网络的网络模型的权重矩阵;权重矩阵分块步骤,按照预定阵列大小将权重矩阵划分成由若干初始子块组成的阵列;待裁剪权值元素集中步骤,根据子块中的矩阵元素的权值绝对值和值,通过行列交换,将权值较小的矩阵元素集中到待裁剪子块中,使得该待裁剪子块中的矩阵元素的权值绝对值和值相对于不是待裁剪子块的其他子块中的矩阵元素的权值绝对值和值更小;子块裁剪步骤,将上述待裁剪子块中的矩阵元素的权值裁剪掉,获得最终的权重矩阵,以实现对神经网络的网络模型的压缩。
[0028] 根据上述计算装置,可以根据压缩率或根据阈值来设定所述待裁剪子块的数量。
[0029] 根据上述计算装置,待裁剪权值元素集中步骤可以包括如下步骤:确定预裁剪子块步骤,确定作为裁剪候选的预裁剪子块;标记行列步骤,选择并标记预裁剪子块所在的所有行和所有列作为换位行和换位列,其中,根据压缩率设定所述预裁剪子块的数量;交换行步骤和交换列步骤,对每一行中的矩阵元素的权值绝对值求和,并且将和值小的行依次与所标记的换位行进行位置交换,以及,对每一列中的矩阵元素的权值绝对值求和,并且将和值小的列依次与所标记的换位列进行位置交换;重复上述步骤,直到交换也不能改变所有预裁剪子块中的矩阵元素的权值绝对值的总和,此时的预裁剪子块作为待裁剪子块。
[0030] 根据上述计算装置,确定预裁剪子块步骤可以还包括:计算每一个初始子块中的矩阵元素的权值绝对值的总和,将和值小的子块作为预裁剪子块。
[0031] 根据上述计算装置,所述计算机可执行指令可以包括网络模型应用指令,当处理器执行所述网络模型应用指令时,执行下述方法:输入数据处理步骤,根据行列交换顺序,对输入数据进行交换;矩阵乘法运算步骤,将交换后的输入数据与执行所述网络模型压缩指令后得到的最终的权重矩阵进行矩阵乘法运算;和输出数据处理步骤,根据行列交换顺序,对矩阵乘法运算的结果进行反向交换并且作为输出数据输出。
[0032] 根据上述计算装置,所述计算机可执行指令可以还包括网络模型训练指令,当处理器执行所述网络模型训练指令时,执行下述方法:对神经网络进行训练,得到网络模型的初始权重矩阵;执行所述网络模型压缩指令得到压缩后的最终的权重矩阵;执行所述网络模型应用指令进行训练;和迭代进行上述压缩和训练步骤,直至达到预定的迭代中止要求。
[0033] 根据本发明的另一方面,提供一种采用上述网络模型分块压缩方法、根据上述的神经网络训练方法和根据上述的计算装置进行网络模型压缩、应用和训练的硬件系统,包括:神经网络硬件芯片,神经网络硬件芯片具有通过电路器件以硬件形式执行矩阵向量乘的操作的基本模块,其中,与待裁剪子块中的矩阵元素所对应的位置未设置电路器件。
[0034] 根据上述硬件系统,所述电路器件可以为忆阻器或TrueNorth芯片的神经突触。
[0035] 根据本发明的一个方面,提供了一种用于神经网络的网络模型分块压缩方法,从而节省资源开销,以在有限资源的条件下布置规模巨大的神经网络。附图说明
[0036] 从下面结合附图对本发明实施例的详细描述中,本发明的这些和/或其它方面和优点将变得更加清楚并更容易理解,其中:
[0037] 图1示出了链状的神经网络的示意图。
[0038] 图2示出了基于忆阻器的交叉开关结构的示意图。
[0039] 图3示出了根据本发明的神经网络的网络模型分块压缩技术的应用情境的示意图。
[0040] 图4示出了根据本发明的网络模型分块压缩方法的总体流程图
[0041] 图5示出了根据上述方法的待裁剪权值元素集中步骤的分解流程图。
[0042] 图6a-6c示出了在多种数据集和不同的网络规模下,采用根据本发明的压缩方法在不同的压缩率的情况下的正确率。

具体实施方式

[0043] 为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明作进一步详细说明。
[0044] 图3示出了根据本发明的神经网络的网络模型分块压缩技术的应用情境1000的示意图。
[0045] 如图3所示,本公开的总体发明构思在于:对神经网络应用1100进行初步神经网络训练,学习得到网络模型1200,对该网络模型1200通过网络模型分块压缩方法1300以预定的压缩率进行分块压缩,然后重新进行训练,然后再压缩-再训练-再压缩-再训练…,如此迭代,以便微调并且学习来提升准确率,直至达到预定的迭代中止要求,从而确定最终的网络模型1400,由此可以在不影响效果的情况下,减少神经网络芯片所需要的分块运算单元器件,进而在有限资源的条件下布置规模巨大的神经网络。
[0046] 一、网络模型分块压缩方法
[0047] 图4和图5示出了根据本发明一实施例的网络模型分块压缩方法1300的流程图,其中图4示出了根据本发明的网络模型分块压缩方法的总体流程图,图5示出了根据上述方法的待裁剪权值元素集中步骤的分解流程图。具体地,所述网络模型分块压缩方法包括如下步骤:
[0048] 1.权重矩阵获得步骤S210,获得经过训练得到的神经网络的网络模型的权重矩阵。
[0049] 这里,为了更好地说明本发明的方法,假设初始权重矩阵为6*6大小,并且以下面的表1的矩阵进一步说明。
[0050] 表1初始权重矩阵
[0051]0.9373 0.0419 0.7959 0.8278 -0.4288 0.6854
0.3311 0.6683 0.8686 0.1087 0.3058 -0.6641
0.0879 -0.7366 0.5453 -0.017 -0.8295 0.5781
0.3964 0.0769 -0.4809 -0.1507 0.0296 -0.2923
0.9786 -0.9656 0.8449 0.6284 -0.9309 0.4138
0.754 0.7859 -0.8424 0.9 -0.4225 0.0847
[0052] 2.权重矩阵分块步骤S220:按照预定阵列大小将权重矩阵划分成由若干初始子块组成的阵列。
[0053] 对上述权重矩阵,按照例如矩阵大小为2*2的子块进行压缩,则上述矩阵被分为3*3=9的子块阵列。
[0054] 这里,本领域技术人员可以理解,所划分的子块大小是可以根据权重矩阵的规模以及压缩率的需要设定的,例如也可以设置4*4,8*8…256*256这样的子块矩阵大小。
[0055] 3.待裁剪权值元素集中步骤S230,根据子块中的矩阵元素的权值绝对值和值(下文中简称为子块和值),通过行列交换,将权值较小的矩阵元素集中到待裁剪子块中,使得该待裁剪子块的和值相对于不是待裁剪子块的其他子块的和值更小,其中,根据压缩率设定所述待裁剪子块的数量;
[0056] 更具体地,图5示出了根据上述方法的待裁剪权值元素集中步骤S230的分解流程图,包括以下步骤:
[0057] a.确定预裁剪子块步骤S2301:确定作为裁剪候选的预裁剪子块。
[0058] 在本实施方式中,计算每一个初始子块和值,将和值小的子块作为预裁剪子块。
[0059] 具体地,首先,对表1的权重矩阵取绝对值,获得表2的矩阵。
[0060] 表2取绝对值得到的矩阵
[0061]  C0 C1 C2 C3 C4 C5
R0 0.9373 0.0419 0.7959 0.8278 0.4288 0.6854
R1 0.3311 0.6683 0.8686 0.1087 0.3058 0.6641
R2 0.0879 0.7366 0.5453 0.017 0.8295 0.5781
R3 0.3964 0.0769 0.4809 0.1507 0.0296 0.2923
R4 0.9786 0.9656 0.8449 0.6284 0.9309 0.4138
R5 0.754 0.7859 0.8424 0.9 0.4225 0.0847
[0062] 为了便于理解后续的行列交换,在表2中,顺序标记出换位前的权重矩阵的行列序号,其中行以R打头,列以C打头。
[0063] 其次,对表2的矩阵,以2*2的子块为单位计算子块和值,即获得表3。
[0064] 表3子块和值
[0065]
[0066]
[0067] 最后,选取和值最小的子块作为预裁剪子块,并且标记为True,其他子块标记为False,获得表4,其中子块序号以B打头。
[0068] 表4预裁剪子块
[0069]B11:False B12:False B13:False
B21:True B22:True B23:True
B31:False B32:False B33:True
[0070] 至于所标记的预裁剪子块的数量,根据压缩率确定。具体地,假设压缩率为50%,那么设定预裁剪子块的数量应该为子块总数×压缩率,9*50%=4.5,然后取整为4。因此,结合表3和表4可知,总和数值最小的4个子块被标记为True。
[0071] b.标记行列步骤S2302:选择并标记预裁剪子块所在的所有行和所有列作为换位行和换位列,并且对换位行和换位列进行标记。
[0072] 根据表3和表4可知,和值最小的四个子块B21、B22、B23和B33作为预裁剪子块被标记“True”。那么,以预裁剪子块所在的行列作为换位行和换位列,则换位行为R2、R3、R4、R5以及换位列为C0-C5,如此标记换位行为ER2、ER3、ER4、ER5以及换位列为EC0-EC5,其中换位行以ER打头,换位列以EC打头,区别于以R和C打头的一般的行列。
[0073] c.交换行步骤S2303:对每一行中的矩阵元素的权值绝对值求和,并且将和值小的行依次与所标记的换位行进行位置交换。
[0074] 对表2的各行总和进行计算,得到下表5。
[0075] 表5各行总和
[0076]R0 3.7171
R1 2.9466
R2 2.7944
R3 1.4268
R4 4.7622
R5 3.7895
[0077] 根据表5可知,各行的总和,从小到大的顺序为R3<R2<R1<R0<R5<R4,那么按照此顺序依次换到ER2、ER3、ER4、ER5这些标记行,即:
[0078] R3换位到ER2→R【0 1 3 2 4 5】(此时由于R3和R2已经对换,所以不再对R2进行换位了);
[0079] R1换位到ER4→R【0 4 3 2 1 5】;
[0080] R0换位到ER5→R【5 4 3 2 1 0】。
[0081] 此时,获得如下表6,
[0082] 表6行交换后的矩阵
[0083]R5 0.754 0.7859 0.8424 0.9 0.4225 0.0847
R4 0.9786 0.9656 0.8449 0.6284 0.9309 0.4138
R3 0.3964 0.0769 0.4809 0.1507 0.0296 0.2923
R2 0.0879 0.7366 0.5453 0.017 0.8295 0.5781
R1 0.3311 0.6683 0.8686 0.1087 0.3058 0.6641
R0 0.9373 0.0419 0.7959 0.8278 0.4288 0.6854
[0084] 也就是说,现在交换后获得的第1行为原矩阵的第R5行,第2行为原矩阵的第R4行,…,以此类推。
[0085] d.交换列步骤S2304:对每一列中的矩阵元素的权值绝对值求和,并且将和值小的列依次与所标记的换位列进行位置交换。
[0086] 对表5的各列总和进行计算,得到下表7。
[0087] 表7各列总和
[0088]C0 C1 C2 C3 C4 C5
3.4853 3.2752 4.378 2.6326 2.9471 2.7184
[0089] 根据表7可知,各列的总和,从小到大的顺序为C3<C5<C4<C1<C0<C2,那么按照此顺序依次换到EC0、EC1、EC2、EC3、EC4、EC5这些标记列,即:
[0090] C3换位到EC0→C【3 1 2 0 4 5】
[0091] C5换位到EC1→C【3 5 2 0 4 1】;
[0092] C4换位到EC2→C【3 5 4 0 2 1】;
[0093] C1换位到EC3→C【3 5 4 1 2 0】;
[0094] C0换位到EC4→C【3 5 4 1 0 2】;
[0095] C2换位到EC5→C【3 5 4 1 0 2】。
[0096] 此时,获得如下表8。
[0097] 表8列交换后的矩阵
[0098]C3 C5 C4 C1 C0 C2
0.9 0.0847 0.4225 0.7859 0.754 0.8424
0.6284 0.4138 0.9309 0.9656 0.9786 0.8449
0.1507 0.2923 0.0296 0.0769 0.3964 0.4809
0.017 0.5781 0.8295 0.7366 0.0879 0.5453
0.1087 0.6641 0.3058 0.6683 0.3311 0.8686
0.8278 0.6854 0.4288 0.0419 0.9373 0.7959
[0099] 也就是说,现在交换后获得的第1列为原矩阵的第C3列,第2列为原矩阵的第C5列…,以此类推。
[0100] 本领域技术人员可以理解,上述行或列的标记以及交换操作没有顺序约束,先进行行交换,再进行列交换,或者反过来,都是可以的。
[0101] 因此,第一次行列交换处理的结果是:
[0102] 行顺序为:R【5,4,3,2,1,0】
[0103] 列顺序为:C【3,5,4,1,0,2】
[0104] e.判断交换是否结束步骤S2305:
[0105] 首先,计算存储子块总和Sum1。Sum1为在未进行此次行列交换之前的预裁剪子块的子块总和。具体地,根据表3,Sum1为未进行此次行列交换之前的四个预裁剪子块B21、B22、B23和B33的和值之总和,即Sum1=6.0731,将其作为存储子块总和存储起来,以供比较并判断行列交换是否完成来使用。
[0106] 其次,计算预裁剪子块总和Sum2。四个预裁剪子块B21、B22、B23和B33的和值如下表9所示,将四个和值相加获得预裁剪子块总和Sum2=7.1541。
[0107] 表9子块和
[0108]2.0269 3.1049 3.4199
1.0381 1.6726 1.5105
2.286 1.4448 2.9329
[0109] 再次,将预裁剪子块总和Sum2与存储子块总和Sum1进行比较。此时,存储子块总和Sum1<预裁剪子块总和Sum2,两者不相等,则设定存储子块总和Sum1=预裁剪子块总和Sum2。即由于6.0731<7.1541,则将存储子块总和Sum1设定为7.154。
[0110] 这里,由于Sum1小于Sum2,说明当前交换操作仍可以继续进行,因此重复步骤S2301~S2305,即再次通过行列交换操作将待裁剪权值元素集中到预裁剪子块位置,并且判断是否预裁剪子块总和等于作为比较值的存储子块总和,如下详述。
[0111] 从上面的说明可以看出,预裁剪子块总和是在交换处理之后,根据交换处理之前确定的预裁剪子块的位置,进行子块和值计算得到的,而存储子块总和则是在每次循环最后的交换处理之后,根据判断结果设定的。具体地,每次判断时,只要存储子块总和与预裁剪子块总和不相同,就要将该预裁剪子块总和作为存储子块总和存储,以供下一次比较使用。在上面的过程中,存储子块总和的初值就按照循环初始确定的预裁剪子块总和来设定了。
[0112] f.重复上述步骤S2301-2305
[0113] 确定预裁剪子块步骤S2301:确定作为裁剪候选的预裁剪子块。
[0114] 此时仍将和值小的子块作为预裁剪子块,因此根据表9,重新选取预裁剪子块,如下表10所示。
[0115] 表10标记预裁剪子块
[0116]B11:False B12:False B13:False
B21:True B22:True B23:True
B31:False B32:True B33:False
[0117] 标记行列步骤S2302:选择并标记预裁剪子块所在的所有行和所有列作为换位行和换位列,并且对换位行和换位列进行标记。
[0118] 根据表10可知,和值最小的四个子块B21、B22、B23和B32作为预裁剪子块被标记“True”,以预裁剪子块所在的行列作为换位行和换位列,则换位行和换位列包括:R2、R3、R4、R5,以及C0-C5,如此标记换位行为ER2、ER3、ER4、ER5以及换位列为EC0-EC5。
[0119] 交换行步骤S2303:对每一行中的矩阵元素的权值绝对值求和,并且将和值小的行依次与所标记的换位行进行位置交换。
[0120] 表11各行总和
[0121]R0 3.7895
R1 4.7622
R2 1.4268
R3 2.7944
R4 2.9466
R5 3.7171
[0122] 根据表11可知,各行的总和,从小到大的顺序为R2<R3<R4<R5<R0<R1,那么按照此顺序依次换到ER2、ER3、ER4、ER5这些标记行。由于此时权值小的行的顺序与换位行的顺序一一对应,所以不再进行行换位了,仍为表8。
[0123] 交换列步骤S2304:对每一列中的矩阵元素的权值绝对值求和,并且将和值小的列依次与所标记的换位列进行位置交换。
[0124] 对表8的各列总和进行计算,得到下表12。
[0125] 表12各列总和
[0126]C0 C1 C2 C3 C4 C5
2.6326 2.7184 2.9471 3.2752 3.4853 4.378
[0127] 根据表12可知,各列的总和,从小到大的顺序为C0<C1<C2<C3<C4<C5,那么按照此顺序依次换到EC0、EC1、EC2、EC3、EC4、EC5这些标记列。由于此时权值小的列的顺序与换位列的顺序一一对应,所以不再进行列换位了,仍为表8。
[0128] 判断交换是否结束步骤S2305:
[0129] 此时,存储子块总和Sum1已经在第一次行列交换处理中设定为7.154,即进行第二次行列交换之前的预裁剪子块总和。
[0130] 计算预裁剪子块总和,四个预裁剪子块B21、B22、B23和B32的和值如下表13(由于第二次行列交换,如上所述并未进行,所以表13与表9相同)所示,将四个和值相加获得预裁剪子块总和Sum2=5.666。将其与存储子块总和Sum1=7.154进行比较。此时,仍然依据Sum1和Sum2不同则将设定存储子块总和Sum1=预裁剪子块总和Sum2的原则处理。Sum1=7.154>Sum2=5.666,将Sum1设定为5.666。
[0131] 表13子块和
[0132]2.0269 3.1049 3.4199
1.0381 1.6726 1.5105
2.286 1.4448 2.9329
[0133] 这里,当Sum1大于Sum2,说明当前交换操作仍可以继续进行,因此重复步骤S2301~S2305,即再次通过行列交换操作将待裁剪权值元素集中到预裁剪子块位置,并且判断是否预裁剪子块总和等于作为比较值的存储子块总和,如下详述。
[0134] 因此,第二次行列交换处理的结果是:
[0135] 行顺序为:R【5,4,3,2,1,0】
[0136] 列顺序为:C【3,5,4,1,0,2】
[0137] h.重复上述步骤S2301-2305
[0138] 确定预裁剪子块步骤S2301:确定作为裁剪候选的预裁剪子块。
[0139] 此时仍将和值小的子块作为预裁剪子块,根据表13可知,四个预裁剪子块B21、B22、B23和B32的和值仍为最小子块和值,所以预裁剪子块不变。
[0140] 在预裁剪子块不变的情况下,则换位行和换位列也不变,同时由于在第二次处理中表8也未改变行列,因此,在第三次行列交换的处理中,实际的行列并未进行交换,均与第二次行列交换处理的各个步骤结果相同。
[0141] 因此,第三次行列交换处理的结果仍然是:
[0142] 行顺序为:R【5,4,3,2,1,0】
[0143] 列顺序为:C【3,5,4,1,0,2】
[0144] 然而,不同于第二次行列交换处理的是,在第三次行列交换的处理中,存储子块总和Sum1等于5.666,并且预裁剪子块总和Sum2也等于5.666,也就是说存储子块总和Sum1=预裁剪子块总和Sum2。当满足该条件时,交换行列的处理循环结束。
[0145] 因此,根据上面的过程可以得知,当存储子块总和Sum1不等于预裁剪子块总和Sum2时,说明根据行列交换操作获得的结果仍没有稳定下来,仍有可能改变,因此继续进行行列交换。只有当存储子块总和Sum1等于预裁剪子块总和Sum2时,才说明根据行列交换操作获得的结果已经稳定下来,使得该待裁剪子块中的矩阵元素的权值绝对值和值相对于不是待裁剪子块的其他子块中的矩阵元素的权值绝对值和值更小,也就是说已经确定地将小权值的矩阵元素集中到待裁剪子块中了,可以进行裁剪,如此才会从行列交换处理的循环中结束退出并进入下一步骤。
[0146] 4.子块裁剪步骤S240:将上述待裁剪子块中的矩阵元素的权值裁剪掉,以实现对神经网络的网络模型的压缩。
[0147] 需要说明的是,这里的裁剪,并不限于将矩阵本身元素的数值设置为0,对于通过电路器件以硬件形式执行矩阵向量乘的操作的基本模块,可以直接将矩阵元素所对应的位置的器件省略。更具体地,在布置相应的硬件器件以实现该权重矩阵时,该对应位置的进行分块计算的器件被去掉。
[0148] 如此,通过上述步骤,将待裁剪权值元素集中到矩阵子块中,然后直接裁掉该矩阵子块,再以此为初始值进行神经网络训练,在保证网络效果的前提下,减少阵列的使用,从而极大地减少了资源开销。
[0149] 本发明提出的方法完全适用于基于忆阻器以及TrueNorth芯片的神经网络。相比,传统的网络压缩方法并不适用于基于忆阻器或TrueNorth芯片的神经网络,因为即使将网络模型压缩得很小,也不能减少阵列的使用,无法减少资源消耗。
[0150] 另外,需要说明的是,上述所给出的行列交换的步骤仅做示例,但这样的行列交换方式并不是唯一的可选方式。具体而言,例如在上面的一次行交换处理中,各行的总和,从小到大的顺序为R3<R2<R1<R0<R5<R4,那么按照此顺序依次换到ER2、ER3、ER4、ER5这些标记行。也就是说,在本发明中,采用选择和值最小的子块所在的行作为交换行来进行交换,这样可以大大加快行列交换的效率,以更快速地将和值小的待裁剪权值元素交换并集中到矩阵子块中。然而,显然,也可以直接按照和值的大小顺序将各个行交换到各个顺序行,例如,各行的总和,从小到大的顺序为R3<R2<R1<R0<R5<R4,那么就按照此顺序依次换到R【0,1,2,3,4,5】,然后再循序进行其他步骤,也是可以的。只是这样的交换次数会增多,而且效率较低,不是优选方案。
[0151] 另外,虽然在本发明中通过设定压缩率来确定待裁剪子块的数量,但是也可以通过设定阈值来确定待裁剪子块的数量,只要能够满足压缩目的即可。
[0152] 综上所述,本发明的发明构思的核心在于通过行列交换获得可裁剪的子块,以适用于子块运算应用,而不限制具体可采用的交换方式。
[0153] 二、实际示例
[0154] 下面给出实际的示例来说明以同样的输入以及同样的运算方法,采用本发明的压缩方法得到的权重矩阵与初始权重矩阵均会输出相同的计算结果。
[0155] 表14为根据本发明的压缩方法进行行列交换后的权重矩阵(对应于表8),其中黑体下划线的Null标识出预裁剪矩阵元素。
[0156] 表14进行行列交换后的权重矩阵
[0157]0.9 0.0847 -0.4225 0.7859 0.754 -0.8424
0.6284 0.4138 -0.9309 -0.9656 0.9786 0.8449
Null Null Null Null Null Null
Null Null Null Null Null Null
0.1087 -0.6641 Null Null 0.3311 0.8686
0.8278 0.6854 Null Null 0.9373 0.7959
[0158] 表15为将表14按照初始的行列顺序(即下面的顺序)还原而成的初始矩阵,其中黑体下划线的Null标识出预裁剪矩阵元素。
[0159] 行顺序为:R【5,4,3,2,1,0】
[0160] 列顺序为:C【3,5,4,1,0,2】
[0161] 表15未行列交换的权重矩阵
[0162]0.9373 Null 0.7959 0.8278 Null 0.6854
0.3311 Null 0.8686 0.1087 Null -0.6641
Null Null Null Null Null Null
Null Null Null Null Null Null
0.9786 -0.9656 0.8449 0.6284 -0.9309 0.4138
0.754 0.7859 -0.8424 0.9 -0.4225 0.0847
[0163] 从上面可以看出,表15与表14的本质区别在于,表15中的预裁剪元素被分散,而表14的预裁剪元素以2*2子块的形式聚集在一起。因此在实际布置中,根据表14(即经过行列交换后的矩阵)来实现硬件布置,以适应分块计算的需要,这也是本发明的发明总体构思之所在,也就是使压缩方法适用于相应的分块计算应用的关键。
[0164] 下面,基于表14和15给出两者的输入和输出的比较。
[0165] 1.对于未行列交换的初始权重矩阵(表15)
[0166] 假设输入向量数据为:
[0167] 表16初始的输入向量
[0168]0.3769 0.9087 0.6857 0.0513 0.6081 0.9523
[0169] 与表15中的未行列交换的初始权重矩阵点乘,即对向量和矩阵的相应元素的乘积求和,输出点乘结果1为:
[0170] 表17点乘结果1
[0171]1.9673 0.1612 0.8008 1.6500 -0.9684 -0.0128
[0172] 2.对于经过行列交换的权重矩阵(表14)
[0173] 在与表14中的行列交换后的权重矩阵点乘之前,需要首先按照行顺序R【0,1,2,3,4,5】→R【5,4,3,2,1,0】对表16给出的初始的输入向量进行调换,即
[0174] 表18经过行交换的输入向量
[0175]0.9523 0.6081 0.0513 0.6857 0.9087 0.3769
[0176] 将经过行交换的输入向量与表14中的经过行列交换的权重矩阵点乘,即对向量和矩阵的相应元素的乘积求和,输出点乘结果2为:
[0177] 表19点乘结果2
[0178]1.6500 -0.0128 -0.9684 0.1612 1.9673 0.8008
[0179] 再按照列顺序C【3,5,4,1,0,2】→C【0,1,2,3,4,5】对点乘结果2进行调换。
[0180] 表20经过交换的点乘结果2
[0181]1.9673 0.1612 0.8008 1.6500 -0.9684 -0.0128
[0182] 比较上面的表17和表20的数据结果,可以看出,在同一输入向量的情况下,只要经过合理的行列交换,根据本发明的压缩方法获得的经过数据压缩的权重矩阵,仍然能够获得与初始矩阵一致的点乘结果。也就是说,根据本发明的压缩方法,并不会影响器件所要实现的计算功能,而且由于能够实现分块压缩,还可以有效地减少器件数量,在有限的资源情况下,实现更大规模的神经网络布置。
[0183] 当然,这也意味着,根据本发明的压缩方法得到的权重矩阵,在应用于数据时,需要在处理前根据行列交换顺序,对输入数据进行交换,然后将交换后的输入数据与最终的权重矩阵进行矩阵乘法运算,最后再根据行列交换顺序,对矩阵乘法运算的结果进行反向交换并且作为输出数据输出。
[0184] 三、效果验证
[0185] 为了验证本发明的算法的实际压缩效果,申请人做了一系列的实验。
[0186] 图6a示出CIFAR10数据集在压缩后的正确率,其中CIFAR10数据集有60000个32*32像素的彩色图片,每张图片都属于10种分类之一。图6b示出MNIST数据集在LENET网络下压缩后的正确率,其中MNIST数据集有60000个28*28像素的黑白手写数字图片。图6c示出MNIST数据集在MLP网络下压缩后的正确率。
[0187] 图中,横坐标为压缩率,纵坐标为正确率,不同颜色的线代表不同规模的阵列。在0-80%的压缩率的情况下,对CIFAR10数据集,正确率在84%-85%之间,对MNIST数据集,不管是采用16*16的阵列,还是256*256的阵列,正确率基本都在98%-99%,甚至更高,这也从多个度证明了本发明的数据压缩方法的正确率是相当好的。换言之,在多种数据集和不同的网络规模下,本发明的压缩方法都可以在不影响正确率的前提下,极大的压缩网络规模,节约资源开销。
[0188] 当然,从图6c中也可以看出,部分结果的压缩率不高,这样的结果是跟阵列规模太大有关的,例如波动最大的一组数据采用的是256*256的阵列规模,这样大的阵列规模导致有效数据被裁剪过多,从而影响了正确率。
[0189] 另外,随着压缩率的上升,正确率会有所下降,这也是牺牲正确率换取更多的压缩所必然带来的结果。对于不同的应用情况,本领域技术人员可以根据实际需要选择合适的压缩率以保证足够的正确率。
[0190] 需要说明的是,附图中按某顺序显示了各个步骤,并不表示这些步骤只能按照显示或者描述的顺序执行,只要不存在逻辑矛盾,步骤执行顺序可以不同于所显示的。
[0191] 以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。因此,本发明的保护范围应该以权利要求的保护范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈