深度神经网络压缩与加速总结


参考文献:纪荣嵘, 林绍辉, 晁飞,等. 深度神经网络压缩与加速综述[J]. 计算机研究与发展, 2018, 55(09):1871-1888.

1. 深度神经网络压缩与加速的任务

(1)加速——卷积层
(2)压缩——全连接层
压缩和加速深度神经网络是两个不同的任务,具体来说卷积神经网络(Convolutional neural networks,CNNs)分2种类型的计算层,即卷积层和全连接层:1)卷积层——计算耗时最大的层,也是卷积神经网络能够通过获得高层语义信息重要层,在卷积层内,可以通过权值共享,减少了对权值的大量存储。2)全连接层——不同于卷积层的局部感知,在全连接层中,每一个输出单元都与所有输入单元相关,通过密集的权值进行连接,因此需要大量的参数。因此卷积层与全连接层内在的本质区别在于:通常把卷积层的计算加速和全连接层的内存压缩认为是2种不同的任务。这2类计算层之间又是紧密联系的,卷积层为全连接层提供分层的高层特征,全连接层通过分类指导卷积层的高判别力特征提取。

2. 模型压缩与加速方法

(1) 参数剪枝

主要通过设计判断参数重要与否的准则,移除冗余的参数。网络/参数剪枝是通过对已有的训练好的深度网络模型移除冗余的、信息量少的权值,从而减少了网络模型的参数,进而加速模型的计算和压缩模型的存储空间。不仅如此,通过剪枝网络,能防止模型过拟合。以是否一次性删除整个节点或滤波为依据,参数剪枝工作可细分为非结构化剪枝和结构化剪枝,非结构化剪枝考虑每个滤波的每个元素,删除滤波中元素为0的参数,而结构化剪枝直接考虑删除整个滤波结构化信息。

(2) 参数共享

主要探索模型参数的冗余性,利用Hash或量化等技术对权值进行压缩。参数共享是通过设计一种映射将多个参数共享同一个数据。量化作为参数共享的最直接表现形式,得到广泛的应用。此外,Hash函数和结构化线性映射也可以作为参数共享的表现形式。
参数量化压缩与加速深度网络模型主要的核心思想是利用较低的位(bit)代替原始32b浮点型的参数(也可记为全精度权值(full-precision weight))。

(3) 低秩分解

利用矩阵或张量分解技术估计并分解深度模型中的原始卷积核。基于低秩分解的深度神经网络与加速的核心思想是利用矩阵或张量分解技术估计并分解深度模型中的原始卷积核。卷积计算是整个卷积神经网络中计算复杂度最高的计算操作,通过分解4D卷积核张量,可以有效地减少模型内部的冗余性。此外,对于2D的全连接层矩阵参数,同样可以利用低秩分解技术进行处理。

(4) 紧性滤波设计

主要通过设计特殊的结构化卷积核或紧性卷积计算单元,减少模型的存储与计算复杂度

(5) 知识蒸馏

主要利用大型网络的设计,并将其知识迁移到紧性蒸馏的模型中。
如表1所示,简要介绍了上述主流的5种压缩与加速神经网络的方法,一般来说,除了紧性卷积核的设计只能用于卷积核外,剩余的4种均能应用于卷积层和全连接层。低秩分解与紧性卷积核的设计能够在CPU/GPU下简单实现端对端(end-to-end)训练,然而参数共享,参数剪枝需要多步或逐层完成压缩与加速任务,关于训练过程中是否需要重新开始训练还是依赖于预训练模型的问题上,参数共享、低秩分解都较为灵活有效,既能适应重新训练也能适应于预训练模型。然而紧性卷积核的设计和知识蒸馏只能支持重新训练,另外参数剪枝只能依赖于预训练模型。从上述方法能否相应组合方面,紧性卷积核的设计方法和知识蒸馏还不能结合其他方法,参数剪枝与参数共享或低秩分解方法结合甚密,通过2种方法的互相融合,能够在一定程度进一步压缩与加速深度网络。
在这里插入图片描述

3. 深度神经网络压缩与加速算法相关工作

(1) 基于参数剪枝的深度神经网络压缩与加速

1) LeCun等人[1]提出了最优化脑损失(optimal brain damage)算法,大大稀疏化多层网络的系数,同时保证模型预测精度依然处于零损失或最小量化损失状态。其实这种学习方式模仿了哺乳动物的生物学习过程,通过寻找最小激活的突触连接,然后在突触删减过程中大大减少了连接个数。
2) 利用相似的思想,Hassibi和Stork[2]提出了最优化脑手术(optimal brain surgeon)剪枝策略,利用反向传播计算权值的二阶偏导信息(hessian矩阵),同时利用此矩阵构建每个权值的显著性得分,从而删除低显著性的权值。
3) 不同于最优化脑手术剪枝策略,Srinivas等人[3]提出了不依赖于训练数据(data-free pruning)和反向传播,直接构建并排序权重的显著性矩阵,删除不显著冗余的节点。由于不依赖于训练数据及后向传播计算梯度信息,因此该网络剪枝构成较为快速。
4) 韩松等人[4,5]提出了一种基于低值连接的删除策略(low-weight connection pruning),该剪枝方法包括3个阶段,即训练阶段、删除阶段、重训练阶段。第1阶段通过正常训练,学习重要的连接;第2阶段通过计算权值矩阵的范数,删除节点权重的范数值小于指定的阈值的连接,将原始的密集网络(dense network)变成稀疏网络;第3阶段通过重新训练稀疏网络,恢复网络的识别精度。以上剪枝方法通常引入非结构化的稀疏连接,在计算过程中会引起不规则的内存获取,相反会影响网络的计算效率。
5) 近几年,基于结构化剪枝的深度网络的压缩方法陆续被提出,克服了非结构化稀疏连接导致的无法加速问题[1,2,3,4,5],其核心思想依靠滤波显著性准则(即鉴定最不重要的滤波的准则),从而直接删除显著性滤波,加速网络的计算。
6) 2016年,Lebedev等人[6]提出在传统的深度模型的损失函数中加入结构化的稀疏项,利用随机梯度下降法学习结构化稀疏的损失函数,并将小于给定阈值的滤波赋值为0,从而测试阶段直接删除值为0的整个卷积滤波。
7) 温伟等人[7]通过对深度神经网络的滤波、通道、滤波形状、网络层数(filters,channels,filter shape,layer depth)的正则化限制加入到损失函数中,利用结构化稀疏学习的方法,学习结构化的卷积滤波。
8) Zhou等人[8]将结构化稀疏的限制加入目标函数中,并利用前向后向分裂(forward-backward splitting)方法解决结构稀疏化限制的优化问题,并在训练过程中直接决定网络节点的个数和冗余的节点。另外,近年来,直接测量滤波的范数值直接判断滤波的显著性也相继被提出[9],例如:直接删除给定当前层最小L1范数的滤波,即移除相应的特征图(feature map),然后下一层的卷积滤波的通道数也相应地减少,最后通过重训练的方式提高删除后模型的识别精度。由于大量的ReLU非线性激活函数存在于主流的深度网络中,使得输出特征图高度稀疏化。
9) Hu等人[10]利用此特点,计算每个滤波所对应输出特征图的非零比列,作为判断滤波重要与否的标准。NVIDIA公司Molchanov[11]等人提出一种基于全局搜索显著性滤波的策略,对需要删除的滤波用0值代替,并对目标函数紧性泰勒公式展开(taylor expansion),判断使目标函数变换最小的滤波为显著滤波。通过卷积计算方式,可以建立当前层的滤波与下一层的卷积滤波的输入通道存在一一对应关系。
10) 利用通过卷积计算方式,可以建立当前层的滤波与下一层的卷积滤波的输入通道存在一一对应关系这一特点,Luo等人[12]探索下一层卷积核的输入通道重要性,代替直接考虑当前层滤波,并建立一个有效的通道选择优化函数,从而删除冗余的通道以及相应的当前层的滤波。

(2) 基于参数共享的深度神经网络压缩与加速

1) 龚云超等人[15]及Wu等人[16]利用向量量化的技术,在参数空间内对网络中的权值进行量化。
2) 近年来,利用低比特位的量化被提出用于加速与压缩深度神经网络。Gupta等人[17]将全精度浮点型参数量化到16b固定长度表示,并在训练过程中使用随机约束(stochastic rounding)技术,从而缩减网络存储和浮点计算次数。使用动态固定点(dynamic fixed point)量化。在量化AlexNet网络时,几乎可以做到无损压缩。
3) Ma等人[18]将权值和激活分别量化到8b和10b,且没有利用微调权值,随后Gysel等人[19]利用微调,将权值和激活全部量化到8b。
4) 为了更大程度地缩减内存和浮点计算次数,对网络参数进行二值化表示已被大量提出。其主要思想是在模型训练过程中直接学习二值权值或激活。BinaryConnect(BC)[20]通过直接量化权值为-1或1,只需要加和减计算,减少了卷积计算,但因激活为全精度,无法大幅度加速网络计算。为此,通过同时量化权值和激活为-1和1,Courbariaux等人[21]提出了BNN,将原始的卷积计算变成Bitcount和XNOR,大幅度加速和压缩深度网络时(如AlexNet),分类精度大大降低。
5) 为了减少精度的丢失,Rastegari等人[22]分别提出了BWN和XNOR-Net引入了尺度因子(Scale factor),用于缩小量化误差,并保存第一层和最后一层的权值和输入为32b的浮点型。同时,改变卷积核正则化的顺序,即先执行正则化、后卷积,减少了激活的动态幅度范围。伴随着这些改变,BWN和XNOR-Net分别获得了相对于原始AlexNet0.8%和11%的分类错误率增加。
6) 在近期的工作中[23,24],通过增加激活的位数(大于1),并探索不同的低比特权值与激活的组合量化全精度权值和激活,提高量化后的网络在ImageNet数据集分类上的效果。但是在训练这些量化网络中会出现梯度不匹配问题。
7) Cai等人[25]通过分析权值和激活的分布情况,设计一种新的半波高斯量化器(half-wave Gaussian quantizer)及其BP过程中不同的梯度近似,提出了HWGQ-Net,有效解决了训练过程中梯度不匹配的问题。
8) 由于权值近似分布于均值为0的高斯分布,即 ,进一步考虑0作为量化后的值,可能减少量化误差。基于此思想,三元权值网络(ternary weight nets,TWN)[26]将全精度权值网络量化到三元网络(即 ,0和 ),其中 通过统计估计得到的量化值。通过改变对称的 ,训练的三元量化[27](trained ternary quantization,TTQ)引入了不同的量化(即 ,0和 ),且通过训练得到该因子,在量化AlexNet时分类错误率只增加了0.6%。
如表4所示,列出了以上量化网络的性能比较及相应的量化比特数比较结果
在这里插入图片描述

注意:“*”表示该方法不应用于第一层或最后一层,并且“↑”表示增加
9) 对于传统网络(如AlexNet和VGG-16),全连接层的参数存储占整个网络模型的95%以上,所以探索全连接层参数冗余性将变得异常重要。利用Hash函数和结构化线性映射相继提出,可用于实现全连接层的参数共享,大大降低模型的内寸开销。
10) Chen等人[28]提出了HashNet模型,利用2个低耗的Hash函数对不同的网络参数映射到相同的Hash桶中,实现参数共享。
11) Cheng等人[29]提出基于一种简单有效的循环投影方法,即利用存储量极小的循环矩阵替代原始矩阵,同时使用快速傅里叶变换(fast Fourier transform,FFT)加速矩阵的乘积计算。
12) 另外,Yang等人[30]引入了新的Adaptive Fastfood变换,重新定义了全连接层的矩阵与向量之间的乘积计算,减少了参数量和计算量。
(3) 基于低秩分解的深度神经网络压缩与加速
但由于卷积层与全连接层的分解方式不同,本文分别从卷积层和全连接层2个不同角度回顾与分析低秩分解技术

Putty使用技巧, 1. PuTTY 中文教程 1. 更新记录 2. 版权声明 3. 序言 4. 一些基本知识 5. 简介 6. 安装 7. 第一印象,开始登录一台远程主机 8. 首次登录一台主机时 9. 又看到了中文乱码 10. 怎么还是乱码? 11.PuTTY 里面怎样选中,复制和粘贴? 2. 实时保存会话 1. 关于注销登录的一些事情 2. 窗口保存的输出有点少,前面的都看不到了 3. 新建一个会话时,还有些东西再啰嗦一下 1. 保持连接,不要自动断开 2. 自动登录用户 3. 自动设置环境变量 4. 设置代理服务器 5. 自动执行一个命令 6. 数据自动压缩传输,变相的提高传输速率 7. 无需口令登录 8. X11 转发能够让你在 Windows 上使用 Linux 的程序 9. 用 SSH Tunnels(SSH 隧道),突破防火墙 4. 象特洛伊木马一样建立一条 SSH 反向隧道 5.PuTTY 作为一个安全的代理服务器来使用 1. 设置 PuTTY 的默认设置 2. 备份 PuTTY 的设置 3. 删除 PuTTY 的设置 6.PuTTYgen 来生成密钥,以后可以不用密码登录服务器了 1. 开始用 PuTTYgen 创建密钥 2. 用密钥登录服务器的流程 7. Pagent 加载密钥,每次开机后只需要输入一次密钥口令 8. 用 SSH 来传输文件 1. PSCP 的使用 2. 再来看看 PSFTP 3. 其他可选的 SFTP 客户端 9. 用 Plink 更方便快捷的执行远程主机上的命令 10. 用假象去迷惑敌人 11. Tips(小技巧) 12. FAQ(常见问题) 13. 附录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值