深度神经网络模型与弱硬件(一)——深度神经网络模型压缩与加速

深度神经网络模型的部署与落地是一个系统工程。除去伦理、隐私等其他层面的考虑外,如何使深度神经网络模型运行于有别于训练环境的设备上,尤其是移动设备和嵌入式设备等弱硬件(weak hardware),且保持可接受的模型性能与推理时间,是技术层面上最值得重视的问题。

针对这一问题,目前的方法分别从四个方面出发:

一是面向深度神经网络模型的压缩与加速;

二是加速库/框架的研发;

三是研发具有更强计算性能与AI推理性能的处理器(Processor)供移动设备和嵌入式设备使用,包括但不限于GPU、CPU、FPGA、专用处理器、边缘AI处理器等;

四是协同设计匹配的硬件与算法。

笔者希望对此进行较为系统的回顾,因此将分四篇博文对相应方法进行整理。

本文是本系列第一篇文章,针对深度神经网络模型的压缩与加速方法展开。

本文主要参考文献为:

Model Compression and Acceleration for Deep Neural Networks

其他参考文献见后文列表。

常见方法

常见的深度神经网络模型压缩与加速方法可以分为四类:

  1. 量化、剪枝及参数共享
  2. 低秩分解
  3. 知识蒸馏
  4. 轻量级神经网络设计

此外还有如注意力机制、全局平均池化等方法等未被归纳入以上四类方法,将在最后做简要介绍。

1. 量化、剪枝及参数共享

此类方法的关键在于移去或者替换模型中冗余的参数或者连接。

剪枝是指剪去模型中一些冗余、不重要的参数,同时又最小化精度的损失,因此涉及如何衡量参数的重要性、冗余性。剪枝方法包括根据参数本身绝对值的大小剪枝(认为越小越不重要)、根据剪去参数对损失的影响(最经典方法莫过于Lecun的最佳脑损伤(OBD)和Hassibi的最佳脑手术(OBS)了)、根据剪去参数对特征输出的可重建性的影响等进行的方法,还是越来越多的衡量标准在研究当中,读者可自行深入了解。

通过后向传播算法实现的深度神经网络通常用32-bit浮点来表示权重。量化则是通过减少表示每个权重所需的比特数(the number of bits)来压缩原始网络,常用的比特数有16-bit、8-bit、乃至2-bit。其中,二进制权重神经网络,即每个权重用1-bit表示的极端情况,有许多卷积神经网络的例子,例如Binary-ConnectBinaryNetXNORNetworks。 主要思想是在模型训练期间直接学习二进制权重或激活。事实上,二值化使用的权重值如果是+1和-1,则乘法可以变为符号变换,还能进一步节省计算时间。

参数共享是一类使部分连接共享相同参数,从而减少参数量的方法。我们知道,CNN之所以比全连接高效,有一个重要原因就是它使用了权值共享,减少了参数数量,控制了模型复杂度,可有效避免模型过拟合。参数共享可以作为一种有效的模型压缩与加速方法正式出于这个道理。

值得一提的是,聚类也是实现量化的一个重要思想,使用此类方法显然离不开参数共享,因此此类方法实际上是参数共享量化的一个结合。例如,借鉴了传统信号处理/图像处理领域使用K均值聚类对向量进行量化的经验而提出的权重量化方法。其具体思路,可以通过下面这个例子来说明:

文献[1] 提出一种三步压缩法:剪枝、量化和编码,如下图所示。首先修剪不重要的连接,重新训练稀疏连接的网络。然后使用权重共享来量化权重(“Weight sharing by scalar quantization”,即“使用标量量化来共享权重”)。具体操作是:使用K-means算法,对每一层都做一个weight的聚类,属于同一个 cluster 的就共享同一个权值大小。再对量化后的权重和码本(codebook)使用霍夫曼编码,进一步压缩模型。

在这里,剪枝减少了权重的数量,量化减少了权重的比特数,编码做进一步压缩。
三步压缩法

2. 低秩分解
3. 知识蒸馏
4. 轻量级神经网络设计
5. 其他方法

参考资料

https://cloud.tencent.com/developer/article/1631704

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值