CN109859281B - 一种稀疏神经网络的压缩编码方法 - Google Patents
一种稀疏神经网络的压缩编码方法 Download PDFInfo
- Publication number
- CN109859281B CN109859281B CN201910073303.9A CN201910073303A CN109859281B CN 109859281 B CN109859281 B CN 109859281B CN 201910073303 A CN201910073303 A CN 201910073303A CN 109859281 B CN109859281 B CN 109859281B
- Authority
- CN
- China
- Prior art keywords
- data
- bit
- quantization
- coding
- neural network
- 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
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及一种稀疏神经网络的压缩编码方法。本发明首先进行量化和预处理,根据稀疏程度选择压缩编码方法:稀疏度S≥ε2时,采用零游程和k阶指数哥伦布组合编码;稀疏度ε1<S<ε2时,采用k阶GX编码;稀疏度S≤ε1时,采用k阶指数哥伦布编码;ε1和ε2为设定阈值。k阶GX编码方法是:若预处理完成数据为0,直接编码为二进制形式的1,若大于0,以二进制形式表示,不足k位,高位补0,去掉该二进制比特序列的低k位后得到的序列转换为十进制数y;若高位补0后为k位,则y为0;计算y+1二进制形式的最低有效位数LSB,先输出LSB个0,然后输出y+1比特序列,将去掉的k位二进制序列放在输出的最低位之后,得到编码后码字。本发明利用了稀疏神经网络权重矩阵分布特性,具有更高的压缩率和更低的实现复杂度。
Description
技术领域
本发明属于计算机技术领域,具体是神经网络领域,涉及一种稀疏神经网络的压缩编码方法。
背景技术
随着人工智能时代的到来,图像识别、语音识别、自然语言处理等智能任务在生活中无处不在。而神经网络作为当前实现这类智能任务最有效的算法之一,已经获得学术界和工业界广泛关注和应用。然而大型的神经网络具有大量的层级和节点,导致其权重参数数量大,网络训练过程耗时,同时训练好的模型占用很大的存储空间。神经网络计算密集和存储密集的特点使得其难以被部署到资源有限的移动端和嵌入式系统上。因此神经网络压缩就成了解决这个问题的主流手段。
神经网络中各个神经元之间的连接关系由一系列权重矩阵表示。训练好的网络模型虽然预测准确度高,但其权重矩阵都是稠密的,即矩阵中几乎没有零值元素,从而导致大量的存储和计算资源被消耗。研究表明,大型的神经网络模型通常是过参数化的,也就是说,通常不需要那么多参数就可以表达出网络模型特征。故而,在确保模型准确度可接受条件下,许多神经网络稀疏化训练手段被提出,比如在训练过程中采用L1/L2正则化,或者运用剪枝技术等。剪枝是把预训练模型权重矩阵中不重要的元素置为零,会影响神经网络的准确度,一般通过重训练来调整剩余权重,从而减小准确度的损失。通过稀疏手段来增加模型参数中的零值元素比例,推断过程中与这些零值元素相关的计算就可以直接跳过,从而达到模型运算加速的目的。
神经网络的推断过程本来就需要进行大量的内存访问,去获取权值以及进行大量的点乘操作,对存储的需求非常巨大。相对于稠密型神经网络,稀疏神经网络的权重矩阵的零值比例虽然增加了,但其尺寸大小依旧没变,里面的零值元素依旧占用存储空间。稀疏化神经网络依旧需要进一步在存储需求上得到改善。而一个浮点数比一个8bit定点数多占用3倍的内存空间,因此将权重矩阵进行量化和压缩编码应运而生。现有技术大多数直接采用哈夫曼编码,该方法编码较复杂,同时需要在存储或传输编码后数据之前必须保存一份编码表,以供解码端重建信息时使用。
发明内容
本发明的目的就是根据稀疏神经网络的数据特性,提供一种稀疏神经网络的压缩编码方法,降低神经网络的存储需求的同时提高编码效率。
本发明方法首先对神经网络中的权重和激活数据进行量化和预处理,根据预处理后的权重和激活数据的稀疏程度选择压缩编码方法:稀疏度S≥ε2时,采用零游程和k阶指数哥伦布组合编码;稀疏度ε1<S<ε2时,采用k阶GX编码;稀疏度S≤ε1时,采用k阶指数哥伦布编码;ε1和ε2为设定阈值,0≤ε1<ε2≤1。
所述的量化是对目标神经网络中的权重或激活数据进行聚类量化,量化方式包含对权重矩阵按指定量化比特进行均匀量化或者非均匀量化。
所述的预处理具体方法是:
步骤(1).零值对应:将实际浮点零值和量化零值相对应;
步骤(2).紧凑数据:如果存在闲置区间free_range≥4,将已量化数据中闲置区间以外的数据,进行整体偏移,偏移方法如下:
pre_out1为整体偏移前的数据,pre_out2为整体偏移后的数据;thr_r~thr_l为量化数据闲置区间的范围大小,thr_l和thr_r为闲置区间的左边界和右边界,满足thr_l<0<thr_r;所述的闲置区间为量化后数据未占用的量化级的范围,该范围为包括量化零值的连续范围;
如果free_range<4,直接进入步骤(3);
步骤(3).数据溢出:如果存在溢出量化比特n的可表示范围[-2n-1,2n-1-1]的数据,将溢出数据映射到可表示范围内空缺的数值上;映射采用对称翻转或循环翻转;
对称翻转表示为:
pre_out3为映射后数据,bias为量化偏置;
循环翻转表示为:
步骤(4).将pre_out3进行映射,使之满足压缩算法对输入数据的要求,映射方法如下:
pre_out4为预处理完成数据,获得特定分布的数据。
所述的k阶指数哥伦布编码以及零游程和k阶指数哥伦布组合编码方法采用现有技术(徐勇,徐智勇,张启衡,et al.适于硬件实现的低复杂度图像压缩[J].光学精密工程,2009,17(9):2262-2268.)。
所述的k阶GX编码的编码方法如下:
a.预处理完成数据为非负数x,若x为0,直接编码为二进制形式的1;若x大于0,进入步骤b;
b.将x-1以二进制形式表示,若不足k位,高位补0;去掉该二进制比特序列的低k位后得到的序列转换为十进制数y;若高位补0后为k位,则y为0;
c.计算数字y+1二进制形式的最低有效位数LSB,以二进制形式,先输出LSB个0,然后输出y+1的二进制比特序列;
d.将步骤b中去掉的k位二进制序列放在步骤c输出的最低位之后,得到编码后的码字。
对于大多数稀疏神经网络,不同层的权重矩阵和激活数据的稀疏度一般不同,本发明首先对神经网络中的权重和激活数据进行量化和预处理,预处理后的权重和激活数据不局限一种压缩算法,根据其稀疏度选择最优的编码算法。k阶GX编码同时编码零值和非零值,用二进制1编码零值更能凸显零值元素的特殊性。当稀疏度处于中等水平时,k阶GX编码相比于零游程和k阶指数哥伦布组合编码以及指数哥伦布编码,具有更高的压缩率。
本发明方法降低神经网络的存储需求的同时提高编码效率。该方法不仅适用于压缩神经网络中稀疏的权重参数,也适用于网络中稀疏的激活数据,以节省模型推断过程数据交互所需要的带宽。同时该方法可扩展至神经网络压缩传输领域。
附图说明
图1为本发明方法的流程图;
图2为稀疏神经网络的权重矩阵数据分布示意图;
图3为权重矩阵8bit量化后的数据分布示意图;
图4为预处理过程数据分布变化示意图。
具体实施方式
以下结合说明书附图及实施例进一步说明本发明。需要指出,本实施方法仅仅用于解释本发明,并不限定本发明的实施场景。
如图1,一种稀疏神经网络的压缩编码方法,首先对神经网络中的权重和激活数据进行量化和预处理,根据预处理后的权重和数据的稀疏程度选择压缩编码方法:稀疏度S≥ε2时,采用零游程和k阶指数哥伦布组合编码;稀疏度ε1<S<ε2时,采用k阶GX编码;稀疏度S≤ε1时,采用k阶指数哥伦布编码;ε1和ε2为设定阈值,0≤ε1<ε2≤1。
本实施例采用tensorflow在github上开源的预训练模型ResNet V2_50,下载地址为https://github.com/tensorflow/models/tree/master/research/slim。获取模型中名为“resnet_v2_50/block3/unit_5/bottleneck_v2/conv2/weights/ExponentialMovingAver age”的卷积层权重。该卷积层权重矩阵的维度为[3,3,256,256],为浮点数据,占内存大小为2304千字节(KB)。当前权重矩阵为稠密矩阵,为了模拟利用稀疏化手段得到稀疏矩阵,直接对该稠密权重矩阵按指定比例50%进行小值清零处理,将稠密权重矩阵变为稀疏权重矩阵,其数据分布的变化情况如图2所示。图2中上图为稠密权重矩阵的数据分布,中图为剪枝后的稀疏矩阵的数据分布,下图为稀疏矩阵中非零值数据分布。
所述的量化是对目标神经网络中的权重或激活数据进行聚类量化,量化方式包含对权重矩阵按指定量化比特进行均匀量化或者非均匀量化。
对图3所示卷积层的权重矩阵数据进行8比特均匀量化,具体的均匀量化公式为:
其中,x为输入的浮点权重矩阵;min、max分别为x的最小值和最大值;n为量化比特,量化阶数为2n-1;round为四舍五入函数;scale为量化步长;bias为量化偏置。
量化后的数据分布如图3所示,其中quan∈[0,255],bias=132。图中上图为量化后全部数据的分布情况,下图为非bias值的数据分布情况。可见剪枝后的量化数据存在一个闲置区间。
预处理具体方法是:
步骤(1).零值对应:将实际浮点零值和量化零值相对应;
本实施例中,采用的是均匀量化,偏置对应着实际浮点零值,所以具体实现可表示为:
pre_out1=quan-bias;
处理后pre_out1∈[-132,123],为9比特表示的数值。
步骤(2).紧凑数据:如果量化数据存在闲置区间,将已量化数据中闲置区间以外的数据,进行整体偏移,偏移方法如下:
thr_l和thr_r为量化数据闲置区间的左边界和右边界,满足thr_l<0<thr_r;pre_out1为整体偏移前的数据,pre_out2为整体偏移后的数据。
闲置区间为量化后数据未占用的量化级的范围,该范围为包括量化零值的连续范围。
如果不存在闲置区间,直接进入步骤(3)。
本实施例中,存在闲置区间为[-5,5],进行偏移后得到数据pre_out2∈[-128,119]。
步骤(3).数据溢出:如果存在溢出量化比特n的可表示范围[-2n-1,2n-1-1]的数据,将溢出数据映射到可表示范围内空缺的数值上;映射采用对称翻转或循环翻转。
对称翻转表示为:
pre_out3为映射后数据,bias为量化偏置;
循环翻转表示为:
本实施例中,pre_out2∈[-128,119]没有溢出8比特的可表示范围[-128,127],所以直接进入步骤(4)。
步骤(4).将pre_out3进行映射,使之满足压缩算法对输入数据的要求,映射方法如下:
pre_out4为预处理完成数据,获得特定分布的数据。预处理后的结果pre_out4∈[0,255]。
本实施例中,将预处理后的多维数据按最后一个维度扩展成一维数据。如图4,预处理完成数据的稀疏比例约为50%,处于中等水平,可直接遍历k阶GX编码进行选择最优结果。
k阶GX编码的编码方法如下:
a.预处理完成数据为非负数x,若x为0,直接编码为二进制形式的1;若x大于0,进入步骤b;
b.将x-1以二进制形式表示,若不足k位,高位补0;去掉该二进制比特序列的低k位后得到的序列转换为十进制数y;若高位补0后为k位,则y为0;
c.计算数字y+1二进制形式的最低有效位数LSB,以二进制形式,先输出LSB个0,然后输出y+1的二进制比特序列;
d.将步骤b中去掉的k位二进制序列放在步骤c输出的最低位之后,得到编码后的码字。
k阶GX编码的码表示例如表1所示。其中只示例了部分非负数0阶到3阶GX编码的码表,其它阶数的GX编码可按上述编码方法得到。
表1k阶GX编码的码表示例
x | k=0 | k=1 | k=2 | k=3 |
0 | 1 | 1 | 1 | 1 |
1 | 01 | 010 | 0100 | 01000 |
2 | 0010 | 011 | 0101 | 01001 |
3 | 0011 | 00100 | 0110 | 01010 |
4 | 000100 | 00101 | 0111 | 01011 |
5 | 000101 | 00110 | 001000 | 01100 |
6 | 000110 | 00111 | 001001 | 01101 |
7 | 000111 | 0001000 | 001010 | 01110 |
8 | 00001000 | 0001001 | 001011 | 01111 |
9 | 00001001 | 0001010 | 001100 | 0010000 |
10 | 00001010 | 0001011 | 001101 | 0010001 |
11 | 00001011 | 0001100 | 001110 | 0010010 |
12 | 00001100 | 0001101 | 001111 | 0010011 |
13 | 00001101 | 0001110 | 00010000 | 0010100 |
14 | 00001110 | 0001111 | 00010001 | 0010101 |
15 | 00001111 | 000010000 | 00010010 | 0010110 |
16 | 0000010000 | 000010001 | 00010011 | 0010111 |
对于任意k阶GX编码过程可转换为用0阶GX进行编码:设待编码正整数x,阶数是k,先用0阶GX编码数字x+2k-1,然后从上一步的结果中删除高位的k个前导零。
为了进一步比较本发明编码方法与现有编码方法的性能,采用所提的三种压缩算法遍历不同的阶数进行压缩。其中,零游程编码和k阶指数哥伦布的组合编码具体表示的是先进行零游程编码,其结果再进行k阶指数哥伦布编码。
本实施例中,当前卷积层权重的量化数据按字节存储大小为576KB。经过数据预处理后数据大小保持不变。采用所提的三种压缩算法遍历不同的阶数进行编码压缩后的大小如表2所示。可见,对于该卷积层权重数据采用3阶GX编码的压缩率最高。
表2不同编码方法的性能比较
数据类型 | 大小(KB) |
浮点数据 | 2304 |
量化数据 | 576 |
0阶指数哥伦布编码 | 293.65 |
1阶指数哥伦布编码 | 303.75 |
2阶指数哥伦布编码 | 321.40 |
3阶指数哥伦布编码 | 345.95 |
零游程编码 | 567.99 |
零游程和0阶指数哥伦布组合编码 | 304.31 |
零游程和1阶指数哥伦布组合编码 | 306.88 |
零游程和2阶指数哥伦布组合编码 | 319.82 |
零游程和3阶指数哥伦布组合编码 | 342.12 |
0阶GX编码 | 318.32 |
1阶GX编码 | 293.65 |
2阶GX编码 | 275.50 |
3阶GX编码 | 268.28 |
4阶GX编码 | 273.57 |
5阶GX编码 | 292.70 |
6阶GX编码 | 324.38 |
为了便于实际应用,现将k阶GX编码的解码过程进行描述:
a.读入比特流,是0则继续,是1则停止读入,进行下面步骤。
b.统计已读入0的个数为i。
c.如果i=0,解码后的数值为0。
d.如果i≥1,接着读入i+k-1位比特串,该比特串对应的十进制数值为offset。解码后的数值为:2i+k-1+2k+offset-1。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围种稀疏神经网络的压缩编码方法。
Claims (3)
1.一种稀疏神经网络的压缩编码方法,其特征在于:首先对神经网络中的权重和激活数据进行量化和预处理,根据预处理后的权重和激活数据的稀疏程度选择压缩编码方法:稀疏度S≥ε2时,采用零游程和k阶指数哥伦布组合编码;稀疏度ε1<S<ε2时,采用k阶GX编码;稀疏度S≤ε1时,采用k阶指数哥伦布编码;ε1和ε2为设定阈值,0≤ε1<ε2≤1;
所述的量化是对目标神经网络中的权重或激活数据进行聚类量化;
所述的预处理具体方法是:
步骤(1).零值对应:将实际浮点零值和量化零值相对应;
步骤(2).紧凑数据:如果存在闲置区间free_range≥4,将已量化数据中闲置区间以外的数据,进行整体偏移,偏移方法如下:
pre_out1为整体偏移前的数据,pre_out2为整体偏移后的数据;thr_r~thr_l为量化数据闲置区间的范围大小,thr_l和thr_r为闲置区间的左边界和右边界,满足thr_l<0<thr_r;所述的闲置区间为量化后数据未占用的量化级的范围,该范围为包括量化零值的连续范围;
如果free_range<4,直接进入步骤(3);
步骤(3).数据溢出:如果存在溢出量化比特n的可表示范围[-2n-1,2n-1-1]的数据,将溢出数据映射到可表示范围内空缺的数值上;映射采用对称翻转或循环翻转;
对称翻转表示为:
pre_out3为映射后数据,bias为量化偏置;
循环翻转表示为:
步骤(4).将pre_out3进行映射,使之满足压缩算法对输入数据的要求,映射方法如下:
pre_out4为预处理完成数据,获得特定分布的数据。
2.如权利要求1所述的一种稀疏神经网络的压缩编码方法,其特征在于:所述的k阶GX编码的编码方法如下:
a.预处理完成数据为非负数x,若x为0,直接编码为二进制形式的1;若x大于0,进入步骤b;
b.将x-1以二进制形式表示,若不足k位,高位补0;去掉该二进制比特序列的低k位后得到的序列转换为十进制数y;若高位补0后为k位,则y为0;
c.计算数字y+1二进制形式的最低有效位数LSB,以二进制形式,先输出LSB个0,然后输出y+1的二进制比特序列;
d.将步骤b中去掉的k位二进制序列放在步骤c输出的最低位之后,得到编码后的码字。
3.如权利要求1所述的一种稀疏神经网络的压缩编码方法,其特征在于:所述的量化方式包含对权重矩阵按指定量化比特进行均匀量化或者非均匀量化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910073303.9A CN109859281B (zh) | 2019-01-25 | 2019-01-25 | 一种稀疏神经网络的压缩编码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910073303.9A CN109859281B (zh) | 2019-01-25 | 2019-01-25 | 一种稀疏神经网络的压缩编码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109859281A CN109859281A (zh) | 2019-06-07 |
CN109859281B true CN109859281B (zh) | 2022-12-02 |
Family
ID=66896123
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910073303.9A Active CN109859281B (zh) | 2019-01-25 | 2019-01-25 | 一种稀疏神经网络的压缩编码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109859281B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532466A (zh) * | 2019-08-21 | 2019-12-03 | 广州华多网络科技有限公司 | 直播平台训练数据的处理方法、装置、存储介质及设备 |
CN112332853B (zh) * | 2020-11-02 | 2022-06-03 | 重庆邮电大学 | 一种基于电力系统的时序数据压缩与恢复方法 |
CN114697672B (zh) * | 2020-12-30 | 2023-06-27 | 中国科学院计算技术研究所 | 基于游程全零编码的神经网络量化压缩方法及系统 |
CN114697673B (zh) * | 2020-12-30 | 2023-06-27 | 中国科学院计算技术研究所 | 基于流间数据混洗的神经网络量化压缩方法及系统 |
CN114697654B (zh) * | 2020-12-30 | 2023-06-30 | 中国科学院计算技术研究所 | 一种神经网络量化压缩方法及系统 |
CN112883982B (zh) * | 2021-01-08 | 2023-04-18 | 西北工业大学 | 一种面向神经网络稀疏特征的数据去零编码及封装方法 |
CN114465826B (zh) * | 2022-04-11 | 2022-07-15 | 深圳市天兴诚科技有限公司 | 编码技术的数据加密方法、系统及储存介质 |
CN115081588A (zh) * | 2022-05-30 | 2022-09-20 | 华为技术有限公司 | 一种神经网络参数量化方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1333679B1 (en) * | 2002-02-05 | 2004-04-14 | Siemens Aktiengesellschaft | Data compression |
CN100593954C (zh) * | 2007-03-28 | 2010-03-10 | 中国科学院微电子研究所 | 一种对哥伦布码进行解码的装置及方法 |
US8913686B2 (en) * | 2010-05-07 | 2014-12-16 | Yale University | Sparse superposition encoder and decoder for communications system |
CN109245773B (zh) * | 2018-10-30 | 2021-09-28 | 南京大学 | 一种基于块循环稀疏矩阵神经网络的编解码方法 |
-
2019
- 2019-01-25 CN CN201910073303.9A patent/CN109859281B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109859281A (zh) | 2019-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109859281B (zh) | 一种稀疏神经网络的压缩编码方法 | |
CN111641832B (zh) | 编码方法、解码方法、装置、电子设备及存储介质 | |
CN107832837B (zh) | 一种基于压缩感知原理的卷积神经网络压缩方法及解压缩方法 | |
CN109635935B (zh) | 基于模长聚类的深度卷积神经网络模型自适应量化方法 | |
CN110880038B (zh) | 基于fpga的加速卷积计算的系统、卷积神经网络 | |
US11403528B2 (en) | Self-tuning incremental model compression solution in deep neural network with guaranteed accuracy performance | |
CN111147862B (zh) | 一种基于目标编码的端到端图像压缩方法 | |
JP7356513B2 (ja) | ニューラルネットワークのパラメータを圧縮する方法および装置 | |
CN111641826B (zh) | 对数据进行编码、解码的方法、装置与系统 | |
US6567781B1 (en) | Method and apparatus for compressing audio data using a dynamical system having a multi-state dynamical rule set and associated transform basis function | |
CN114970853A (zh) | 一种跨范围量化的卷积神经网络压缩方法 | |
CN113467949B (zh) | 边缘计算环境下用于分布式dnn训练的梯度压缩方法 | |
CN117095685B (zh) | 一种联发科平台终端设备及其控制方法 | |
CN101467459A (zh) | 受约束的矢量量化 | |
TW202406344A (zh) | 一種點雲幾何資料增強、編解碼方法、裝置、碼流、編解碼器、系統和儲存媒介 | |
Sitaram et al. | Efficient codebooks for vector quantization image compression with an adaptive tree search algorithm | |
CN115361559A (zh) | 图像编码方法、图像解码方法、装置以及存储介质 | |
JP5580295B2 (ja) | 規則的点ネットワークにおけるベクトルをカウントする方法 | |
CN113902097A (zh) | 针对稀疏化cnn神经网络模型的游程编码加速器及方法 | |
CN113177627A (zh) | 优化系统、重新训练系统及其方法及处理器和可读介质 | |
CN112101548A (zh) | 数据压缩方法及装置、数据解压方法及装置、电子设备 | |
CN109302614B (zh) | 一种基于三阶张量自编码网络的视频压缩方法 | |
CN114640357B (zh) | 数据编码方法、设备及存储介质 | |
CN114781604B (zh) | 神经网络权重参数的编码方法、编码器及神经网络处理器 | |
CN114882133B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |