前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ICML Workshop | NNCodec: 神经网络编码 ISO/IEC 标准的开源软件实现

ICML Workshop | NNCodec: 神经网络编码 ISO/IEC 标准的开源软件实现

作者头像
用户1324186
发布2023-09-19 15:52:43
3480
发布2023-09-19 15:52:43
举报
文章被收录于专栏:媒矿工厂媒矿工厂

题目:NNCodec: An Open Source Software Implementation of the Neural Network Coding ISO/IEC Standard 作者:Daniel Becking, Paul Haase 等 来源:ICML 2023 文章地址:https://openreview.net/pdf?id=5VgMDKUgX0 内容整理:杨晓璇 本文介绍了神经网络编码 (NNC) 标准 (ISO/IEC 15938-17) 的第一个开源和符合标准的实现 NNCodec,并描述了其软件架构和主要编码工具。编码引擎的核心是上下文自适应算术编码器,可动态调整其二进制概率模型以适应权重统计。作者表明,NNCodec 实现了比常用于神经网络压缩的霍夫曼代码更高的压缩,而且 NNCodec 的平均码字长度通常低于香农熵界。该软件和演示可以在 https://github.com/fraunhoferhhi/nncodec 上获得。

引言

人工智能方法在信号处理许多领域的普遍应用导致对底层神经网络(NN)的高效分配、训练、推理和存储的需求不断增加。为此,需要寻求有效的压缩方法,提供最小的编码率的同时,神经网络性能指标(例如分类精度)不会降低。

如果数据源包含可以利用的依赖性或统计特性,熵编码可以有效地压缩原始数据。它能将输入元素序列

\omega

压缩成长度约为

-log_2P(\omega)

比特的输出码字。这样,出现频率较高的元素就可以用较少的比特来表示。这种可变长度编码方案可用于进一步压缩已经量化的 NN。哈夫曼编码(Huffman)就是这样一种可变长度熵编码策略。然而,在实践中,哈夫曼编码可能需要庞大的编码词表,计算复杂,会产生的比特流冗余。算术编码是一种改进的熵编码策略。由于输入元素序列

\omega

的算术编码是迭代构建的,因此不需要存储编码字表。对于图像或视频等经典源信号,自适应算术编码方案的优越性已得到证实。最近,它对 NN 源数据的高效适用性也得到了证实。因此,DeepCABAC 的上下文自适应二进制算术编码器成为最近发布的 NNC 标准(ISO,2022)的编码核心,本文介绍了该标准的开源软件实现。主要贡献如下:

  • 高级 NNCodec 架构说明。
  • 完全符合 ISO/IEC 神经网络编码 (NNC) 标准的实现。
  • 特定 NNC 工具的功能说明,这些工具利用信号统计实现高压缩增益。
  • 对编码工具效果的信号统计分析。
  • 完整编码工具组合的广泛编码结果,以及与其他熵编码方法的比较。

NNCodec:NNC 标准软件实施和架构概述

NNCodec 是 NNC 标准的首个公开实现方案。它提供了一个布局清晰的用户界面(参见图 1),从而帮助机器学习(ML)社区在各种 ML 场景中对 NNs 进行高效压缩。NNCodec 内置支持 TensorFlow 和 PyTorch 等常用框架,可广泛适用于各种应用中的各种 NN。此外,NNCodec 还支持数据驱动的压缩方法(见第 3 章),例如基于 ImageNet 数据集的分类模型的局部缩放适应(LSA)。不过,其模块化架构设计允许扩展到任意模型和数据集。NNCodec 软件结构如图 1 所示,是一个 python 软件包,包括三个模块:nnc_core、framework 和 nnc,以及与之直接相连的基于 C++ 的 DeepCABAC 快速编码引擎扩展。在这里,nnc_core 模块提供了核心编码和压缩功能,为参数近似(量化)和熵编码提供了高级语法(hls)信号,并为模型处理和数据驱动方法提供了数据结构(nnr_model)和接口规范(ModelExecute)。它以通用形式实现压缩,以便不受任何外部框架的影响。对 PyTorch、TensorFlow 和 ImageNet 的支持由框架模块处理,该模块定义了从通用数据结构(nnc_model 和 ModelExecute)派生的框架特定数据结构。这确保了 nnc_core 的正确处理,同时在更高层次上实现了框架的特定功能。下一小节将介绍主要的编码工具。

图 1 NNCodec 软件结构和软件包

NNC 相关技术

NNC 编码流程包括三个阶段:预处理、量化和熵编码。首先,量化和熵编码这两个核心编码阶段将分别在 3.1 和 3.2 小节中介绍。经典的 NN 数据缩减方法,如稀疏化、剪枝或低秩分解,可在核心编码之前应用。作为预处理阶段的一部分,批量标准化折叠和局部缩放适应是修改信号统计量的具体方法,分别在第 3.3 和 3.4 小节中介绍。

量化

与其他编码标准类似,NNC 也有一个参数量化阶段,可提供:

  1. 进一步压缩
  2. 可进行无损熵编码的整数量化索引。

为此,NNC 规定了使用均匀重构量化器(URQ)进行标量量化的方法和使用依赖量化(DQ)进行矢量量化的方法,DQ 也称为 Trellis-coded 量化(TCQ),通常可在相同模型性能水平下实现更高的压缩效率。标量量化方法使用一个具有均匀间隔重构级别的 URQ。相比之下,DQ 采用两个标量量化器,具有不同的重构级别和可切换的程序。对于这两种方法,重构级别都可以由整数量化指数决定,而对于 DQ,还可以由应用的量化器决定。NNC 规定传输整数编码本,该编码本可从任意量化方法(如 K-means 聚类)的输出中导出。在所有情况下,量化步长

\Delta

都来自整数量化参数 qp,它提供了一种速率-性能的权衡机制。NNC 允许为每个模型参数(张量)指定一个单独的 qp 值。优化这些 qp 值可以显著提高压缩效率。为此,NNCodec 提供了无数据 qp 优化技术(通过“--opt qp”启用),该技术基于张量统计,如标准差或权重。

熵编码

对于熵编码,NNC 采用基于上下文的自适应二进制算术编码 (CABAC) 方案的改编版本。它由三个阶段组成:二值化、上下文建模和二进制算术编码。

二值化阶段将每个要编码的符号(例如量化权重)映射到二进制符号序列(bins)。上下文建模阶段将每个二进制符号与上下文模型联系起来,该模型将概率估计值与二进制符号联系起来。二进制算术编码阶段利用上下文模型提供的概率估计值对二进制符号进行编码(或解码)。每个上下文模型都实现了后向自适应概率估计器,该估计器会保持一个代表概率估计值的内部状态。在编码(或解码)一个 bin 后,状态会被更新。如果处理了一个值为 1 的 bin,则 bin = 1 的概率估计值会增加;如果处理了一个值为 0 的 bin,则 bin = 1 的概率会降低。概率估计值的增减程度可以通过自适应速率参数来控制。

NNC 支持每个上下文模型的自适应速率设置的前向信号,即编码器可以优化每个上下文模型的自适应速率(和初始概率)并在比特流中传输这些优化的参数。对于(量化整数)权重的二值化,截断一元码与符号标志和指数哥伦布码组合。这确保了较小量级的权重由较少的二进制符号表示。此外,复杂的上下文建模确保 DeepCABAC 能够适应各种不同形状的权重分布。

批量标准化折叠

批量标准化(BN)是一种对每个数据批次的 NN 层输入激活进行归一化的技术,以获得更稳定的训练。批量标准化折叠(BNF)是一种将 BN 乘法部分

\alpha

“折叠”到前一个 NN 层权重

\mathcal W

中的技术,即

\mathcal W_{fold} = \alpha\mathcal W

,并用

\delta

替换该层的偏置

b

\begin{equation} \alpha=\gamma/\sqrt{Var(x)+\epsilon} \ \epsilon=\beta+\alpha(b-E(x)) \end{equation}

在解码器中,

\delta

参数可以加载到权重模块的偏置缓冲区

b

中(这样可以从计算图中移除相关的 BN 模块,以提高模型速度),或者加载到 BN 模块的

\beta

缓冲区中,同时将其余 BN 参数设置为默认值,即

E=0

Var=1

\gamma=1

局部缩放自适应

局部缩放自适应(LSA)为每个输出元素的 NN 层配备了额外的可训练缩放因子

s

。具体来说,每个张量行分配一个缩放因子,而张量行又可以代表一个卷积滤波器或单个输出神经元。量化后,除缩放因子外的所有模型参数都是固定的。这样,NNCodec 编码器就能在一定程度上补偿可能产生的量化误差,从而通过更粗的量化支持更高的压缩率。随后,缩放因子可以通过乘法与

\alpha

合并,即

\alpha:= \alpha s

,这样 LSA 与 BNF 结合使用时就不会引入额外的编码参数。最后,NNCodec 的解码器将

\alpha

向量与

\mathcal W

的相乘。

神经网络参数统计

一个 NN 的权重统计是不对称的单调递减分布,其平均值接近零(类似高斯或拉普拉斯)。为了利用大量的零值,DeepCABAC 在第一个二值化步骤中确定权重元素是否为“重要的”非零元素,或者是否量化为 0。该 SigFlag 的上下文模型初始设置为 50% 的概率,但会根据统计数据自动调整。

图 2 展示了一个编码数据单元(由卷积层及批量标准化折叠模块组成)的参数分布情况。根据公式(1),图 2 左侧的原始 BatchNorm 参数被折叠成各自的乘法(

\alpha

)和加法(

\delta

)混合。然后,

\alpha

\delta

和权重

\mathcal W

被均匀量化(参见图 2 中间)。此外,还可选择应用 LSA 来训练缩放因子

s

,将其与

\alpha

相乘,然后与

\beta

\mathcal W

一起在一个编码单元中进行编码。在解码器中,通过将整数表示与其相关的 qp 值相乘、将

\alpha

\mathcal W

合并以及将

\delta

载入 BatchNorm 模块的

\beta

参数来重构参数;其余 BN 参数设置为默认值(参见图 2 右侧)。

图 2 编码过程中的 NN 参数分布

编码结果

编码工具配置分析

图 3 描述了 ResNet-56 的编码结果,在 CIFAR-100 上预训练达到 66.79% top-1 准确率。图 3 中的左表列出了启用工具的 16 种组合。然后,左侧矩阵显示对于每个组合生成的比特流大小以及重构解码的神经网络后所达到的精度。在 x 轴上,基础 qp 包含一系列不同的量化步长

\Delta

,从精细 (qp = −36) 到粗略 (qp = −10)。每个参数的实际 qp 可能会偏离基本 qp,例如,对于非权重参数或者如果启用了 opt_qp。右侧的矩阵显示反转的结果,即文本的准确性和比特流大小。左侧矩阵使所有没有精度下降的编码神经网络都以黄色突出显示。这种基于颜色的行边界可以更轻松地识别所有组合中的适当率失真结果,例如,使用工具组合 15 和 qp = −16 编码的 NN(在图 3 中以红色补丁突出显示)。

图 3 使用不同编码工具组合在 CIFAR-100 上训练对 ResNet-56 进行编码的结果

比较结果

香农熵标记了表示一个符号(此处为权重

\hat \omega

的整数表示)所需的平均位数的下限。量化的神经网络参数

\hat{\mathcal{W}}

的熵可以定义为

H_P(\hat{\mathcal{W}}) = −\sum_{\hat\omega\in\mathcal{C}}P(\hat\omega)log_2P(\hat\omega)

,其中

\mathcal C

是一组量化级别,

\hat\omega

的概率值

P(\hat\omega)

是它在

\hat{\mathcal{W}}

中出现的次数除以

\#\mathcal W

(其所有元素的计数)

应用 bzip2、Huffman 码和 NNCodec 分别对每个单元的数据有效负载进行编码,并将生成的比特流大小与香农界

H_P(\hat{\mathcal{W}})

进行比较,如图 4 所示。Huffman 码是最佳熵编码,但是对于长符号序列,例如,对于具有较大

\#\mathcal W

的 NN 层,码本会变得非常大。bzip2 也部署了霍夫曼代码,但是,它在顶部使用了额外的游程编码和转换。bzip2 通常接近香农熵界,但始终高于香农熵界。图 4 证实 NNCodec 比特流长度大部分低于香农界,这是通过在码流期间调整上下文模型的各种概率估计器来实现的。只有包含极少量权重元素的比特流才能高于界限,因为它们不提供足够长的序列来使上下文模型充分适应二进制编码的分布。

图 4 NNcodac vs Huffman vs bzip2

结论

本文介绍了 NNCodec,这是最近发布的 ISO/IEC NNC 标准的第一个开源软件实现。本文概述了软件架构和工具。文章分析了整个编码过程中的 NN 数据分布,结果表明 NNCodec 的平均码字长度通常低于香农熵界,因此优于用于 NN 压缩的其他常见 NN 编码策略。作者探索了 NNCodec 的超参数空间以及不同 NN 架构的压缩比。将为 ICML 神经压缩研讨会准备 NNCodec 演示。

通过这项工作,作者希望鼓励机器学习社区在其 AI 中使用这款符合 ISO/IEC 标准的压缩软件。NNC 标准的第二版正在进行中,另外还针对分布式场景中差分 NN 的编码进行更新。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-15 10:21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • NNCodec:NNC 标准软件实施和架构概述
  • NNC 相关技术
    • 量化
      • 熵编码
        • 批量标准化折叠
          • 局部缩放自适应
          • 神经网络参数统计
          • 编码结果
            • 编码工具配置分析
              • 比较结果
              • 结论
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档