写点什么

【ELT.ZIP】OpenHarmony 啃论文俱乐部—一种深度神经网压缩算法

作者:ELT.ZIP
  • 2022 年 6 月 14 日
  • 本文字数:5452 字

    阅读完需:约 18 分钟

  • 本文出自ELT.ZIP团队,ELT<=>Elite(精英),.ZIP 为压缩格式,ELT.ZIP 即压缩精英。

  • 成员:上海工程技术大学大二在校生合肥师范学院大二在校生清华大学大二在校生成都信息工程大学大一在校生黑龙江大学大一在校生华南理工大学大一在校生

  • 我们是来自7个地方的同学,我们在OpenHarmony成长计划啃论文俱乐部里,与华为、软通动力、润和软件、拓维信息、深开鸿等公司一起,学习和研究操作系统技术



Table of Contents


【往期回顾】

 2 月 23 日 《老子到此一游系列》之 老子为什么是老子 —— 综述视角解读压缩编码 3 月 11 日 《老子到此一游系列》之 老子带你看懂这些风景 —— 多维探秘通用无损压缩 3 月 25 日 《老子到此一游系列》之 老子见证的沧海桑田 —— 轻翻那些永垂不朽的诗篇 4 月 4 日 《老子到此一游系列》之 老子游玩了一条河 —— 细数生活中的压缩点滴 4 月 18 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——一文穿透多媒体过往前沿 4 月 18 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——这些小风景你不应该错过 4 月 18 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——浅析稀疏表示医学图像 4 月 29 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——计算机视觉数据压缩应用 4 月 29 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——点燃主缓存压缩技术火花 4 月 29 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——即刻征服3D网格压缩编码 5 月 10 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——云计算数据压缩方案 5 月 10 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——大数据框架性能优化系统 5 月 10 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——物联网摇摆门趋势算法 5 月 22 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——电子设备软件更新压缩 5 月 22 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——人工智能短字符串压缩 5 月 22 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——多层存储分级数据压缩  6 月 3 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——数据高通量无损压缩方案  6 月 3 日 【ELT.ZIP】OpenHarmony啃论文俱乐部——快速随机访问字符串压缩

【本期看点】

  • 信源编码

  • 信道编码

  • CABAC的发展

  • Deep-CABAC编码程序

  • Deep-CABAC 编码器

【技术 DNA】


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区


【智慧场景】



引言

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

【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

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


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区


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


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区


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

信源编码

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


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

  • 如图,首先,编码器通过两个过程将概率源 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 码,信号就不会丢失,因此,在散字信号传输中最重要的,也就是防止误码,也就是要尽量降低误码率,因此,要在信号源的原数码序列中用某些编码,以实现自动纠错或检错的目的,进就是信道编码或纠错编码。

【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区


  • 人类在信道编码上的第一次突破发生在 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 使用几种新工具来提高编码效率,包括更大的块和变换大小、额外的环路滤波器和高度自适应的熵编码。


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

CABAC 的优势

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

CABAC 涉及三个主要功能

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

二值化

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

  1. 一元码(Unary)

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

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

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

  5. mb_type 与 sub_mb_type 特有的查表方式

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

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

上下文建模

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

//! struct for context managementstruct bi_context_type {  unsigned long count;  byte state; //uint16 state; // index into state-table CP unsigned char MPS; // Least Probable Symbol 0/1 CP };
1.2.3.4.5.6.7.8.1.2.3.4.5.6.7.1.2.3.4.5.6.7.
复制代码

复制

  • 上下文包含两个变量: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.重归一化,输出编码比特。


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

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

Deep- CABAC

Deep- CABAC 的编码程序

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

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

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

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

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

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


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

Deep-CABAC 编码器

Deep-CABAC 无损编码器

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

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

【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

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

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

【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

Deep-CABAC 有损编码器

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

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

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


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

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


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区

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

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

实验

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


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区


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

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


【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法-开源基础软件社区


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

总结

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

引用

【1】S. Wiedemann et al., “DeepCABAC: A Universal Compression Algorithm for Deep Neural Networks,” in IEEE Journal of Selected Topics in Signal Processing, vol. 14, no. 4, pp. 700-714, May 2020, doi: 10.1109/JSTSP.2020.2969554.

【2】池秀清. 信源编码与信道编码[J]. 科技情报开发与经济, 2001, 11(6): 71-72.

【3】Sze V, Budagavi M. High throughput CABAC entropy coding in HEVC[J]. IEEE Transactions on Circuits and Systems for Video Technology, 2012, 22(12): 1778-1791.

发布于: 刚刚阅读数: 5
用户头像

ELT.ZIP

关注

商务合作可私信 2022.02.19 加入

ELT<=>Elite(精英),.ZIP为压缩格式,ELT.ZIP即压缩精英。

评论

发布
暂无评论
【ELT.ZIP】OpenHarmony啃论文俱乐部—一种深度神经网压缩算法_OpenHarmony_ELT.ZIP_InfoQ写作社区