模型压缩之 BinaryNet

1. 动机

深度学习在图像、语音、文本等领域都取得了巨大的成功,推动了一系列智能产品的落地。但深度模型存在着参数众多,训练和 inference 计算量大的不足。目前,基于深度学习的产品大多依靠服务器端运算能力的驱动,非常依赖良好的网络环境。

很多时候,出于响应时间、服务稳定性和隐私方面的考虑,我们更希望将模型部署在本地(如智能手机上)。为此,我们需要解决模型压缩的问题——将模型大小、内存占用、功耗等降低到本地设备能够承受的范围之内。

2. 方法

神经网络具有分布式的特点——特征表征和计算都分散于各个层、各个参数。因此,神经网络在结构上天然具有冗余的特点。冗余是神经网络进行压缩的前提。

压缩模型一般可以有几种常见的方法:

2.1 使用小模型

设计小模型

可以直接将模型大小做为约束,在模型结构设计和选择时便加以考虑。对于全连接,使用 bottleneck 是一个有效的手段(如 LSTMP)。HighwayResNetDenseNet 等带有 skip connection 结构的模型也被用来设计窄而深的网络,从而减少模型整体参数量和计算量。对 CNN 网络,SqueezeNet 通过引入1 x 1的小卷积核、减少 feature map 数量等方法,在分类精度与 AlexNet 相当的前提下,将模型大小压缩在 1M 以内,而模型大小仅是 Alexnet 的50分之一。更新的还有 MobileNet、ShuffleNet 等。

模型小型化

一般而言,相比于小模型,大模型更容易通过训练得到更优的性能。那么,能否用一个较小的模型,“提炼”出训练好的大模型的知识能力,从而使得小模型在特定任务上,达到或接近大模型的精度?Knowledge Distilling(e.g. 12)便尝试解决这一问题。knowledge distilling 将大模型的输出做为 soft target 来训练小模型,达到知识“凝练“的效果。实验表明,distilling 方法在 MNIST 及声学建模等任务上有着很好的表现。

2.2 利用稀疏性

我们也可以通过在模型结构上引入稀疏性,从而达到减少模型参数量的效果。

裁剪已有模型

将训练好的模型进行裁剪的方法,至少可以追溯到90年代。 Optimal Brain DamageOptimal Brain Surgeon 通过一阶或二阶的梯度信息,删除不对性能影响不显著的连接,从而压缩模型规模。

学习稀疏结构

稀疏性也可以通过训练获得。更近的一系列工作(Deep compression: abcHashedNets)在控制模型性能的前提下,学习稀疏的模型结构,从而极大的压缩模型规模。

2.3 降低运算精度

不同传统的高性能计算,神经网络对计算精度的要求不高。目前,基本上所有神经网络都采用单精度浮点数进行训练(这在很大程度上决定着 GPU 的架构设计)。已经发布的 NVIDIA Pascal 架构的最大特色便是原生的支持半精度(half float)运算。在服务端,FPGA 等特殊硬件在许多数据中心得到广泛应用,多采用低精度(8 bit)的定点运算。

参数量化

除了使用低精度浮点运算(float32, float16)外,量化参数是另一种利用简化模型的有效方法。
将参数量化有如下二个优势:
* 减少模型大——将 32 或 16 位浮点数量化为 8 位甚至更少位的定点数,能够极大减少模型占用的空间;
* 加速运算——相比于复杂的浮点运算,量化后的定点运算更容易利用特殊硬件(FPGA,ASIC)进行加速。

上面提到的 Deep Compression 使用不同的位数量化网络。Lin 等的工作,在理论上讨论上,在不损失性能的前提下,CNN 的最优量化策略。此外,还有量化 CNNRNN 权值的相关工作。

参数二值化

量化的极限是二值化,即每一个参数只占用一个 bIt。本文讨论的正是这个种压缩模型的方法。

3. BinaryNet

BinaryNet [1] 研究对象是前馈网络(全连接结构或卷积结构)(这方法在 RNN 上并不成功 [4])。这里,我们更关心权值的二值化对 inference 的精度和速度的影响,而不关心模型的训练速度(量化梯度以加速模型训练的工作可以参见 [3])。

前馈模型(卷积可以看成是一种特殊的全连接)可以用如下公式表示:

xk=σ(Wkxk1) x k = σ ( W k ⋅ x k − 1 )

其中, xk x k 为第 k k 层的输入,

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值