Press "Enter" to skip to content

OpenHarmony啃论文俱乐部—一种深度神经网压缩算法

************************************************************************************************************************************************************************************************************************************************************************************************************************************

场景

自动驾驶 / AR语音信号流视频GPU 渲染科学、云计算内存缩减科学应用医学图像数据库服务器人工智能图像文本传输GAN媒体压缩图像压缩文件同步数据库系统通用数据

技术

点云压缩‎稀疏快速傅里叶变换‎有损视频压缩网格压缩动态选择压缩算法框架无损压缩分层数据压缩医学图像压缩无损通用压缩人工智能图像压缩短字符串压缩GAN 压缩的在线多粒度蒸馏图像压缩文件传输压缩快速随机访问字符串压缩高通量并行无损压缩

开源项目

​Draco​ ​​ / 基于深度学习算法/​ ​PCL​ ​​/​ ​OctNet​​SFFT​​AV1​ ​​ / ​ ​H.266编码​ ​​ / ​ ​H.266解码​ ​​/​ ​VP9​​MeshOpt​ ​​ / ​ ​Draco​​Ares​​LZ4​​HCompress​​DICOM​​Brotli​​RAISR​​AIMCS​​OMGD​​OpenJPEG​​rsync​​FSST​​ndzip​

 

引言

近年来,为了追求让深度神经网络(DNNs)在复杂的机器学习任务中能够表现出更良好的性能,采取了不断扩大 DNNs 尺寸的方式,这就使模型在内存方面变得越来越复杂,不仅意味着更大的内存需求,还很可能造成更慢的运行时和更多的能量消耗,因此便需要对它们进行有效的压缩已满足多方面要求。DeepCABAC 是一种用于 DNN 的通用压缩算法,它基于应用于 DNN 参数的上下文自适应二进制算术编码器(CABAC)。CABAC 最初是针对于 H.264 / AVC 视频编码标准而设计的,并且成为了视频压缩无损压缩部分的最先进技术。DeepCABAC 运用了一种新的量化方案,实现了最小化信息率失真函数,同时也考虑了量化对 DNN 性能的影响。

深度神经网络成功可以归因于三个现象:(1)获得大量数据(2)研究人员设计了新的优化算法和模型架构,允许训练非常深入的神经网络(3)增长计算资源的可用性。

在资源受限的设备(如移动可穿戴设备)和分布式学习场景(如联邦学习)上部署深度模型的需求也越来越大。这些方法在隐私、延迟和效率问题上有直接的优势。然而,这些模型所需参数数量不断增长,这意味着模型在内存方面变得越来越复杂。高内存复杂性极大地增加了神经网络在用例中的适用性,特别是在联邦学习中,因为网络的参数是通过带宽有限的通信信道传输的。

而引出模型压缩显得尤为重要:只留下解决任务所需的内存,降低通信和计算成本,压缩算法有利于生成更高的熵,因为它们使数据更加紧凑。我们使用一个基础数据集,用各种算法压缩每个文件。

信源编码

通常所谓的编码,更确切地说是“压缩”,即去掉一些多杂的信息一保留必要的信息,再进行传输,因此在传输前要进行多种处理。其中为 了提高传输效率的有效性编码叫做信源编码。信源编码是信息论的一个分支,研究所谓码的性质。 通常由编码器和解码器两部分组成。

如图,首先,编码器通过两个过程将概率源 P(w)的输入样本 w 映射到二进制表示b,将输入量化,将其映射为整数 i = Q(w)。然后,通过一个二值化过程将该整数映射为其对应的二进制表示形式 b = b (i)。 解码器通过应用逆函数 B−1(B) = i 类比地将二进制表示映射回其整数值,并为其分配一个重构值(或量化点)Q−1(i) = Q。我们强调 Q – 1 不一定是 Q 的倒数。

简单地说,源编码研究的是查找最大限度地压缩一组输入样本的代码,同时在容错约束下保持输入值和重构值之间的误差。我们同时还可以分为两种类型的码,所谓的无损码和有损码(往期的文章里讲述过,感兴趣可以回顾,篇幅原因只做简述)。

 

无损编码

无损码也称熵编码或可逆编码:Huffman 编码、算术编码、字典编码。

有损编码

有损码也称不可逆码:标量量化、向量量化、预测编码、变换编码、JPEG、子带编码、小波编码、JPEG2000、分析-综合编码。

信道编码

 

信道是指传输信号的通道,但信号在传输过程中往往由于各种原因,在传输中会产生误码,只要接收设备能判别出1码和0码,信号就不会丢失,因此,在散字信号传输中最重要的,也就是防止误码,也就是要尽量降低误码率,因此,要在信号源的原数码序列中用某些编码,以实现自动纠错或检错的目的,进就是信道编码或纠错编码。

 

人类在信道编码上的第一次突破发生在1949年。R.Hamming和M.Golay提出了第一个实用的差错控制编码方案——汉明码。

CABAC

 

CABAC的发展

比较早流行的是 H.264/AVC ,CABAC(上下自适应二进制算术编码Context-adaptive binary arithmetic coding )是一种用于 H.264/AVC 和 HEVC 的熵编码形式。高效视频编码 (HEVC)由视频编码联合协作团队 (JCT-VC) 开发,它的编码效率有望比 H.264/AVC 提高 50%。HEVC 使用几种新工具来提高编码效率,包括更大的块和变换大小、额外的环路滤波器和高度自适应的熵编码。

 

CABAC的优势

算术编码是一种熵编码,它可以通过有效地将符号(即语法元素)映射到具有非整数位数的码字来实现接近序列熵的压缩。 在 H.264/AVC 中,CABAC 比基于 Huffman 的 CAVLC 提高了 9% 到 14%。 在 HEVC (HM-3.0) 的早期测试模型中,CABAC 比 CAVLC 提高了 5%–9%。

CABAC涉及三个主要功能

CABAC 涉及三个主要功能:二值化、上下文建模和算术编码。

二值化

二值化将语法元素映射到二进制符号(bins)。二值化的方案共有7种:

 

    1. 一元码(Unary)。

 

    1. 截断一元码(TU,Truncated Unary)。

 

    1. k阶指数哥伦布编码(kth order Exp-Golomb,EGk)。

 

    1. 定长编码(FL,Fixed-Length)。

 

    1. mb_type与sub_mb_type特有的查表方式。

 

    1. 4位FL与截断值为2的TU联合二值化方案。

 

    1. TU与EGk的联合二值化方案(UEGk,Unary/kth order Exp-Golomb)。

 

 

上下文建模

以JM中的上下文结构体为例。

//! struct for context management
struct bi_context_type 
{ 
 unsigned long count; 
 byte state; //uint16 state; // index into state-table CP
 unsigned char MPS; // Least Probable Symbol 0/1 CP 
};

上下文包含两个变量:MPS,pStateIdx(count只是用于计数)。在CABAC编码的过程中会碰到需要修改这两个值的情况(如上面的状态变换),这些修改都是以上下文为单位的。

算术编码

 

该过程可分为5个步骤

1.通过当前编码器区间范围R得到其量化值ρ作为查表索引,然后利用状态索引pStateIdx与ρ进行查表得出RLPS的概率区间大小。

2.根据要编码的符号是否是MPS来更新算术编码中的概率区间起点L以及区间范围R。

3.pStateIdx==0表明当前LPS在上下文状态更新之前已经是0.5的概率,那幺此时还输入LPS,表明它已经不是LPS了,因此需要进行LPS、MPS的转换。

4.更新上下文模型概率状态。

5.重归一化,输出编码比特。

 

 

由上文, 编码器希望用尽可能少的数据样本找到一个(本地)解决方案。Deep- CABAC被提出。

 

Deep- CABAC

 

Deep- CABAC 的编码程序

 

 

    1. Deep- CABAC 按行长顺序扫描网络各层的权值参数。

 

    1. 选择一个特定的超参数β,将定义量化点集。

 

    1. 对权重值应用量化器,以最小化各自的加权率失真函数。

 

    1. 通过应用改编版本的 CABAC 压缩量化参数。

 

    1. 对网络进行重构,并对网络的精度进行测量。对于不同的超参数β重复这个过程,直到在精度和网络大小之间达到预期的平衡。

 

    1. 对一组超参数β重复该过程,直到所需的精度 vs。实现了-size 权衡。

 

 

 

Deep-CABAC 编码器

 

Deep-CABAC 无损编码器

 

 

    1. 第一个SigFlag 决定权重元素是否是一个重要元素,即表示权值是否为 0。然后使用二进制算术编码器对这个 bin 进行编码,根据其各自的上下文模型(用灰色颜色编码)。上下文模型最初设置为 0.5(因此,权重元素为 0 或不为 0 的概率为 50%),但随着 DeepCABAC 编码更多的元素,将自动适应权重参数的本地统计数据。

 

    1. 如果元素不为 0,则根据其各自的上下文模型对符号库或 SignFlag 进行类似的编码。

 

 

 

 

    1. 一系列容器被类比编码,确定元素是否大于 1,2,…,n∈n。数字 n 成为编码器的超参数。

 

    1. 剩余部分使用指数-Golomb 编码代码,其中一元部分的每个 bin 也相对于它们的上下文模型进行编码。只有固定长度的代码部分没有使用上下文模型进行编码(用蓝色颜色编码)。

 

 

 

Deep-CABAC 有损编码器

找到将量化点(或聚类中心)最优分配给每个权重参数的量化器 Q。

 

    1. 量化点:因为为大量的点找到正确的映射 Q – 1 是非常复杂的,我们用一个特定的步长Δ来约束它们彼此之间的等距离。即,每个点 qk 可以改写为 qk = ΔIk, ik∈Z。这不仅极大地简化了问题,而且也鼓励了定点表示,可以利用定点表示以较低的复杂度执行推理。

 

    1. 赋值:因此,量化器有两个可配置的超参数β = (Δ, λ),前者定义量化点的集合,后者定义量化强度。一旦给定一个特定的元组,量化器 Qβ将通过最小化加权率失真函数 将每个权重参数赋给对应的量化点 qk。

 

 

 

 

    1. DeepCABAC-版本1 (DC-v1):在 DC-v1 中,我们首先利用可扩展贝叶斯技术估计 FIM 的对角线。得到了每个参数的平均值μj 和标准差 σj,其中前者可以解释为其(新的)值(即 wi→μi),而后者则是它们对扰动的“鲁棒性”的度量。在估算完 fim -对角线后,我们将考虑的步长集定义如下:

 

 

其中σmin 为最小标准差,wmax 为幅度值最大的参数。然后 S 是量化器的超参数,控制量化点的 “粗糙程度”。

 

    1. DeepCABAC-版本2 (DC-v2):因为版本1需要估计 FIM 的对角线,成本还是很高。考虑对整个 网 络 直 接 尝 试 寻 找 一 个 好 的 候 选 集 合 Δ∈{Δ0 , … , Δm−1}。通过应用第一轮网格搜索算法,同时应用最近邻量化方案(即λ = 0)来实现这一点。在有限的计算预算下,这种方法的优点是我们可以直接搜索更优步长集Δ。

 

 

实验

 

将标量 huffman、csr-huffman和 bzip2无损编码算法应用于量化网络后获得的最佳压缩结果。括号内是结果的top-1精度,括号内是通过非零参数的数量除以参数总数所获得的稀疏比。

 

 

深度压缩包括应用稀疏化技术,然后是k-Means算法,然后是CSR-Huffman熵编码器,最后是将聚类中心微调到损失函数。相比之下,我们可以通过简单地 应用DeepCABAC 获得更高精度的压缩性能,而无需对量化点进行任何后先验微调。

 

使用三种不同的量化器对Small-VGG网进行量化,然后使用不同的通用无损编码器对它们进行压缩。具体地,我们利用 DC-v2、加权Lloyd算法和最近邻量化器对模型进行量化。然后应用标量Huffman代码、CSR- Huffman代码 、bzip2算法和DeepCABAC的cabac组件。此外,我们还计算了量化网络的一阶熵,从而测量了网络的熵无损压缩所获得的压缩比不同。

 

 

轻易看到,CABAC 能够在所有量化版本的 Small-VGG16 网络中获得更高的压缩增益。使用 CABAC 的好处在于其固有的灵活性,它可以用于获取权重参数的先验统计数据。DeepCABAC通过定义前文所述的二值化过程,能够快速捕获最大值接近于0的单峰分布和非对称分布的统计信息。此外,也方便CABAC捕获一行中元素之间的相关性。这也很重要,因为 CABAC的估计是以自回归的方式更新的,因此,它的压缩性能也取决于扫描顺序。如上表所示,CABAC能够捕捉权重参数之间的相关性,从而将它们压缩到参数分布的一阶熵之外。与之前提出的通用熵编码器(如标量 Huffman、CSR-Huffman)相比,由于其平均码长受到一阶熵的限制,因此不可能获得比 CABAC更低的码长,因此该特性更加突出了它的优越性。

 

总结

H.264/HEVC 和 H.265/HEVC 视频编码标准中采用的最先进的通用无损编码器——上下文的自适应二进制算术编码器 (CABAC),论文中提出了一种新的深度神经网络压缩算法DeepCABAC,码长更短更灵活,减少训练次数和大量数据的访问。技术一代一代更新,后浪奔涌,前浪不是沉舟或病树,而是巨人的肩膀,引领后辈,奔向更神秘的新世界。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注