(四十八:2021.09.09)《关于模型压缩和加速的调查【2017】》

讲在前面

  • 二. 当你从零开始接触一个东西的时候,第一步就是做一个survey,而survey的第一步就是看survey的论文;
  • 三. 我设计了几种字体颜色用于更加醒目地表现关键的思想和主题:
    • 红色表示尚未理解透彻的一些概念
    • 蓝色表示对原来的理解做的一些修改或补充
    • 绿色表示此处需要参考的论文其他部分
    • 橙色表示本文的重要关键字
    • 紫色表示后续更新的内容
    • 我会用删除线将自己曾经不到位的理解进行删除
  • 四.查询论文索引请根据原论文:https://arxiv.org/abs/1710.09282

摘要

深度神经网络 (DNN) 最近在许多视觉识别任务中取得了巨大成功。 然而,现有的深度神经网络模型计算成本高且内存密集,阻碍了它们在内存资源低的设备或具有严格延迟要求的应用程序中的部署。 因此,一个自然的想法是在不显着降低模型性能的情况下在深度网络中进行模型压缩和加速。 过去五年,该领域取得了巨大进展。 在本文中,我们回顾了最近用于压缩和加速 DNN 模型的技术。 一般来说,这些技术分为四类:参数修剪和量化低秩分解转移/压缩卷积滤波器知识蒸馏。 首先介绍参数修剪和量化的方法,然后介绍其他技术。 对于每个类别,我们还提供有关性能、相关应用程序、优缺点的深入分析。 然后我们介绍一些最近成功的方法,例如动态容量网络和随机深度网络。 之后,我们调查了评估矩阵、用于评估模型性能的主要数据集和最近的基准测试工作。 最后,我们总结了本文,讨论剩余的挑战和未来工作的可能方向。

一、介绍

近年来,深度神经网络最近受到了很多关注,被应用于不同的应用程序,并在许多任务中取得了显着的精度提升。 这些工作依赖于具有数百万甚至数十亿参数的深度网络,而具有非常高计算能力的 GPU 的可用性对其成功起着关键作用。 例如,Krizhevsky 等人的工作【1】 在 2012 年 ImageNet 挑战赛中取得突破性成果,该网络包含 6000 万个参数,具有五个卷积层和三个全连接层。 通常,使用 NVIDIA K40 机器在 ImagetNet 数据集上训练整个模型需要两到三天的时间。 另一个例子是LFW 数据集的顶面验证结果是通过包含数亿个参数的网络获得的,使用卷积、局部连接和完全连接层的混合 【2】,【3】。这样同样花费时间,在仅依赖于全连接层的架构中,参数数量可以增长到数十亿【4】。
随着考虑具有更多层和节点的更大的神经网络,降低它们的存储和计算成本变得至关重要,尤其是对于一些实时应用,例如在线学习和增量学习。 此外,近年来虚拟现实、增强现实和智能可穿戴设备取得了重大进展,为研究人员解决将深度学习系统部署到资源有限(例如内存、CPU、 能量、带宽)。 高效的深度学习方法可以对分布式系统、嵌入式设备和人工智能 FPGA 产生重大影响。 例如,具有 50 个卷积层的 ResNet-50在处理图像时需要超过 95MB 的内存用于存储和超过 38 亿次浮点乘法。 丢弃一些冗余权重后,网络仍然照常工作,但节省了 75% 以上的参数和 50% 的计算时间。 对于手机、FPGA等只有几兆资源的设备,如何压缩它们上使用的模型也很重要。
实现这些目标需要来自多个学科的联合解决方案,包括但不限于机器学习、优化、计算机架构、信号处理和硬件设计。 在本文中,我们回顾了最近在压缩和加速深度神经网络方面的工作,这些工作引起了深度学习社区的大量关注,并且在过去几年中已经取得了很多进展。 根据它们的特性,我们将这些方法分为四类:参数修剪和量化低秩分解转移/压缩卷积滤波器知识蒸馏
基于参数修剪和量化的方法探索模型参数中的冗余,并尝试去除冗余和不重要的参数。 基于低秩分解的技术使用矩阵/张量分解来估计 DNN 的信息参数。 基于转移/紧凑卷积滤波器的方法设计特殊结构的卷积滤波器以减少参数空间并节省存储/计算。 基于知识蒸馏的方法学习蒸馏模型并训练更紧凑的神经网络以重现更大网络的输出。
表1中,我们简短的摘要了这些方法的类型。参数修剪和量化、低秩分解和知识蒸馏方法可以部署在具有卷积层和全连接层的 DNN 模型中,实现不错的性能。 另一方面,使用转移/压缩滤波器的方法仅适用于卷积层。 基于低秩分解和转移/压缩过滤器的方法提供了端到端的管道,并且可以在 CPU/GPU 环境中轻松实现。 参数修剪和量化使用不同的策略,例如二进制编码和稀疏约束来执行任务。
考虑到训练协议,基于参数剪枝/量化和低秩分解的模型可以从预先训练的模型中提取或从头开始训练。 而转移/压缩过滤器和知识蒸馏模型只能支持从头开始的训练。 这些方法中的大多数都是独立设计的,并且相互补充。 例如,传输层和参数修剪和量化可以一起部署。 另一个例子是,模型量化和二值化可以与低秩近似一起使用,以实现进一步的压缩/加速。 我们将在以下各节中详细描述它们的特性,并分析其优缺点。
表1:
在这里插入图片描述

二、参数修剪和量化

早期的工作表明,网络修剪和量化在降低网络复杂性和解决过拟合问题方面是有效的【6】。 在发现剪枝可以为神经网络带来正则化从而提高泛化能力后,压缩 DNN 得到了广泛的研究。 这些技术可以进一步映射为三个子类别:量化和二值化网络剪枝结构矩阵

A. 量化和二值化

网络量化通过减少表示每个权重所需的位数来压缩原始网络。 龚等人【6】 和吴等人【7】 将 k-means标量量化应用于参数值。 万豪克等人【8】表明,参数的 8 位量化可以显着提高速度,同时将精度损失降至最低。【9】中的工作在基于随机舍入的 CNN 训练中使用 16 位定点表示,这显着减少了内存使用和浮点运算,而分类精度损失很小。
【10】中提出的方法使用权重共享对链路权重进行量化,然后将霍夫曼编码应用于量化的权重以及码本以进一步降低速率。 如图1所示,它首先通过正常的网络训练学习连接,然后修剪小权重连接。 最后,重新训练网络以学习剩余稀疏连接的最终权重。 这项工作在所有基于量化的方法中取得了最先进的性能。 在【11】中,表明 Hessian 权重可用于衡量网络参数的重要性,并提出将 Hessian 加权量化误差平均到聚类参数的平均值最小化。 量化是一种非常有效的模型压缩和加速方式。
图1:
在这里插入图片描述
在每个权重的 1 位表示的极端情况下,即二进制权重神经网络。 主要思想是在模型训练期间直接学习二进制权重或激活。 有几项工作直接使用二进制权重训练 CNN,例如 BinaryConnect【12】、BinaryNet【13】和 XNOR【14】。【15】中的一项系统研究表明,经过反向传播训练的网络可以对特定的权重失真(包括二进制权重)具有弹性。
讨论:在处理 GoogleNet 等大型 CNN 时,二进制网络的准确性显着降低。 这种二元网络的另一个缺点是现有的二值化方案基于简单的矩阵近似,而忽略了二值化对精度损失的影响。 为了解决这个问题.【16】中的工作提出了一种具有对角 Hessian 近似的近端牛顿算法,即直接最小化与二元权重相关的损失。【17】 中的工作通过随机二值化权重并将隐藏状态计算中的乘法转换为显着变化,减少了训练阶段浮点乘法的时间。 赵等人【18】提出半波高斯量化来学习低精度网络,取得了可喜的结果。

B.网络裁剪

早期的修剪方法是偏置权重衰减【19】。 Optimal Brain Damage【20】和 Optimal Brain Surgeon【21】方法基于损失函数的 Hessian 减少了连接数。 他们的工作表明,这种剪枝比基于幅度的剪枝(例如权重衰减方法)具有更高的准确性。
这个方向的后续趋势是在预训练的 DNN 模型中修剪冗余的、无信息的权重。 例如,Srinivas 和 Babu【22】探索了神经元之间的冗余,并提出了一种无数据修剪方法来去除冗余神经元。 韩等人【23】提出减少整个网络中参数和操作的总数。 陈等人【24】提出了一种 HashedNets 模型,该模型使用低成本哈希函数将权重分组到哈希桶中以进行参数共享。【25】中的深度压缩方法去除冗余连接并量化权重,然后使用霍夫曼编码对量化的权重进行编码。 在【26】中,提出了一种基于软权重共享的简单正则化方法,它在一个简单的训练过程(重新训练或者微调)中包括量化和剪枝。 上述修剪方案通常会在 DNN 中产生连接修剪。
人们对训练具有稀疏约束的紧凑型 DNN 也越来越感兴趣。 这些稀疏约束通常在优化问题中作为 L0 或 L1 范数正则化器引入。【26】 中的工作对卷积滤波器施加了组稀疏约束以实现结构化脑损伤,即以组方式修剪卷积核的条目。 在【27】中,在训练阶段引入了神经元上的群稀疏正则化器,以学习具有减少滤波器的紧凑型 CNN。 温等人。【28】在每一层上添加了一个结构化的稀疏正则化器,以减少琐碎的过滤器、通道甚至层。 在过滤器级修剪中,上述所有工作都使用了 L1 或 L2 范数正则化器。【29】中的工作使用 L1正则来选择和修剪不重要的过滤器。
讨论:使用网络修剪存在一些问题。 首先,使用 L1 或 L2 正则化进行剪枝需要比一般方法更多的迭代来收敛。 此外,所有修剪标准都需要手动设置层的灵敏度,这需要对参数进行微调,并且对于某些应用程序来说可能很麻烦。 最后,网络剪枝通常能够减少模型大小但不能提高效率(训练或推理时间)。

C.设计结构矩阵

在包含全连接层的架构中,探索全连接层中参数的这种冗余至关重要,这通常是因存消耗的瓶颈。 这些网络层使用非线性变换 f ( x , M ) = σ ( M x ) f(x,M) = σ(Mx) f(x,M)=σ(Mx),其中 σ ( ⋅ ) σ(·) σ() 是元素级非线性算子, x x x 是输入向量, M M M m × n m×n m×n 参数矩阵【30】。 当 M 是一个大的一般稠密矩阵时,在 O ( m n ) O(mn) O(mn) 时间内存储 m n mn mn 个参数和计算矩阵向量乘积的成本。 因此,修剪参数的一种直观方法是将 x x x 作为参数化结构矩阵强加。 可以使用比 m n mn mn 少得多的参数来描述的 m × n m × n m×n矩阵称为结构化矩阵。 通常,该结构不仅应该降低内存成本,而且还应通过快速矩阵向量乘法和梯度计算显着加速推理和训练阶段。
沿着上面所说的方向,【31】、【32】的工作提出了一种基于循环预测的简单而有效的方法,同时保持有竞争力的错误率。给出一个向量 r r r:
r = ( r

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值