联系我们
- 地 址:北京市海淀区北四环西路9号 ,主 营:人脸识别,活体检测,身份证识别,银行卡识别,名片识别,车牌识别,OCR识别等及智能识别技术。
- 电 话:13146317170 廖经理
- 传 真:
- 邮 箱:398017534@qq.com
关于AI深度学习中模型压缩方法的综述
关于AI深度学习中模型压缩方法的综述
前言
目前在深度学习范畴分类两个派系,一派为学院派,研讨强大、复杂的模型网络和实验办法,为了追求更高的性能;另一派为工程派,旨在将算法更稳定、高效的落地在硬件平台上,效率是其追求的目的。复杂的模型固然具有更好的性能,但是高额的存储空间、计算资源耗费是使其难以有效的应用在各硬件平台上的重要缘由。
最近正好在关注有关深度学习模型紧缩的办法,发现目前已有越来越多关于模型紧缩办法的研讨,从理论研讨到平台完成,获得了十分大的停顿。
2015年,Han发表的Deep Compression是一篇关于模型紧缩办法的综述型文章,将裁剪、权值共享和量化、编码等方式运用在模型紧缩上,获得了十分好的效果,作为ICLR2016的best paper,也惹起了模型紧缩办法研讨的热潮。其实模型紧缩最早能够追溯到1989年,Lecun老爷子的那篇Optimal Brain Damage(OBD)就提出来,能够将网络中不重要的参数剔除,到达紧缩尺寸的作用,想想就可怕,那时分连个深度网络都锻炼不出来,更没有如今这么兴旺的技术,Lecun就曾经想好怎样做裁剪了,真是有先见之明,目前很多裁剪计划,都是基于老爷子的OBD办法。
目前深度学习模型紧缩办法的研讨主要能够分为以下几个方向:
更精密模型的设计,目前的很多网络都具有模块化的设计,在深度和宽度上都很大,这也形成了参数的冗余很多,因而有很多关于模型设计的研讨,如SqueezeNet、MobileNet等,运用愈加细致、高效的模型设计,可以很大水平的减少模型尺寸,并且也具有不错的性能。
模型裁剪,构造复杂的网络具有十分好的性能,其参数也存在冗余,因而关于已锻炼好的模型网络,能够寻觅一种有效的评判手腕,将不重要的connection或者filter停止裁剪来减少模型的冗余。
核的稠密化,在锻炼过程中,对权重的更新停止诱导,使其愈加稠密,关于稠密矩阵,能够运用愈加紧致的存储方式,如CSC,但是运用稠密矩阵操作在硬件平台上运算效率不高,容易遭到带宽的影响,因而加速并不明显。
除此之外,量化、Low-rank合成、迁移学习等办法也有很多研讨,并在模型紧缩中起到了十分好的效果。
基于核的稠密化办法
核的稠密化,是在锻炼过程中,对权重的更新加以正则项停止诱导,使其愈加稠密,使大局部的权值都为0。核的稠密化办法分为regular和irregular,regular的稠密化后,裁剪起来愈加容易,特别是对im2col的矩阵操作,效率更高;而irregular的稠密化后,参数需求特定的存储方式,或者需求平台上稠密矩阵操作库的支持,能够参考的论文有:
Learning Structured Sparsity in Deep Neural Networks 论文地址
本文作者提出了一种Structured Sparsity Learning的学习方式,可以学习一个稠密的构造来降低计算耗费,所学到的构造性稠密化可以有效的在硬件上停止加速。 传统非构造化的随机稠密化会带来不规则的内存访问,因而在GPU等硬件平台上无法有效的停止加速。 作者在网络的目的函数上增加了group lasso的限制项,能够完成filter级与channel级以及shape级稠密化。一切稠密化的操作都是基于下面的loss func停止的,其中Rg为group lasso:
这里写图片描绘
则filter-channel wise:
这里写图片描绘
而shape wise:
这里写图片描绘
由于在GEMM中将weight tensor拉成matrix的构造,因而能够经过将filter级与shape级的稠密化停止分离来将2D矩阵的行和列稠密化,再分别在矩阵的行和列上裁剪掉剔除全为0的值能够来降低矩阵的维度从而提升模型的运算效率。该办法是regular的办法,紧缩粒度较粗,能够适用于各种现成的算法库,但是锻炼的收敛性和优化难度不肯定。
作者提出了一种动态的模型裁剪办法,包括以下两个过程:pruning和splicing,其中pruning就是将以为不中要的weight裁掉,但是常常无法直观的判别哪些weight能否重要,因而在这里增加了一个splicing的过程,将哪些重要的被裁掉的weight再恢复回来,相似于一种外科手术的过程,将重要的构造修补回来,它的算法如下:
这里写图片描绘
作者经过在W上增加一个T来完成,T为一个2值矩阵,起到的相当于一个mask的功用,当某个位置为1时,将该位置的weight保存,为0时,裁剪。在锻炼过程中经过一个可学习mask将weight中真正不重要的值剔除,从而使得weight变稠密。由于在删除一些网络的衔接,会招致网络其他衔接的重要性发作改动,所以经过优化最小损失函数来锻炼删除后的网络比拟适宜。
该算法采取了剪枝与嫁接相分离、锻炼与紧缩相同步的战略完成网络紧缩任务。经过网络嫁接操作的引入,防止了错误剪枝所形成的性能损失,从而在实践操作中更好地迫近网络紧缩的理论极限。属于irregular的方式,但是ak和bk的值在不同的模型以及不同的层中无法肯定,并且容易遭到稠密矩阵算法库以及带宽的限制。
Training Skinny Deep Neural Networks with Iterative Hard Thresholding Methods 论文地址
作者想经过锻炼一个稠密度高的网络来降低模型的运算量,经过在网络的损失函数中增加一个关于W的L0范式能够降低W的稠密度,但是L0范式就招致这是一个N-P难题,是一个难优化求解问题,因而作者从另一个思绪来锻炼这个稠密化的网络。算法的流程如下:
先正常锻炼网络s1轮,然后Ok(W)表示选出W中数值最大的k个数,而将剩下的值置为0,supp(W,k)表示W中最大的k个值的序号,继续锻炼s2轮,仅更新非0的W,然后再将之前置为0的W放开停止更新,继续锻炼s1轮,这样重复直至锻炼终了。 同样也是对参数停止诱导的方式,边锻炼边裁剪,先将以为不重要的值裁掉,再经过一个restore的过程将重要却被误裁的参数恢复回来。也是属于irregular的方式,边训边裁,性能不错,紧缩的力度难以保证。
总结
以上三篇文章都是基于核稠密化的办法,都是在锻炼过程中,对参数的更新停止限制,使其趋向于稠密,或者在锻炼的过程中将不重要的衔接截断掉,其中第一篇文章提供了却构化的稠密化,能够应用GEMM的矩阵操作来完成加速。第二篇文章同样是在权重更新的时分增加限制,固然经过对权重的更新停止限制能够很好的到达稠密化的目的,但是给锻炼的优化增加了难度,降低了模型的收敛性。此外第二篇和第三篇文章都是非构造化的稠密化,容易遭到稠密矩阵算法库以及带宽的限制,这两篇文章在截断衔接后还运用了一个surgery的过程,可以降低重要参数被裁剪的风险。之后还会对其他的模型紧缩办法停止引见。
目前在深度学习范畴分类两个派系,一派为学院派,研讨强大、复杂的模型网络和实验办法,为了追求更高的性能;另一派为工程派,旨在将算法更稳定、高效的落地在硬件平台上,效率是其追求的目的。复杂的模型固然具有更好的性能,但是高额的存储空间、计算资源耗费是使其难以有效的应用在各硬件平台上的重要缘由。
最近正好在关注有关深度学习模型紧缩的办法,发现目前已有越来越多关于模型紧缩办法的研讨,从理论研讨到平台完成,获得了十分大的停顿。
2015年,Han发表的Deep Compression是一篇关于模型紧缩办法的综述型文章,将裁剪、权值共享和量化、编码等方式运用在模型紧缩上,获得了十分好的效果,作为ICLR2016的best paper,也惹起了模型紧缩办法研讨的热潮。其实模型紧缩最早能够追溯到1989年,Lecun老爷子的那篇Optimal Brain Damage(OBD)就提出来,能够将网络中不重要的参数剔除,到达紧缩尺寸的作用,想想就可怕,那时分连个深度网络都锻炼不出来,更没有如今这么兴旺的技术,Lecun就曾经想好怎样做裁剪了,真是有先见之明,目前很多裁剪计划,都是基于老爷子的OBD办法。
目前深度学习模型紧缩办法的研讨主要能够分为以下几个方向:
更精密模型的设计,目前的很多网络都具有模块化的设计,在深度和宽度上都很大,这也形成了参数的冗余很多,因而有很多关于模型设计的研讨,如SqueezeNet、MobileNet等,运用愈加细致、高效的模型设计,可以很大水平的减少模型尺寸,并且也具有不错的性能。
模型裁剪,构造复杂的网络具有十分好的性能,其参数也存在冗余,因而关于已锻炼好的模型网络,能够寻觅一种有效的评判手腕,将不重要的connection或者filter停止裁剪来减少模型的冗余。
核的稠密化,在锻炼过程中,对权重的更新停止诱导,使其愈加稠密,关于稠密矩阵,能够运用愈加紧致的存储方式,如CSC,但是运用稠密矩阵操作在硬件平台上运算效率不高,容易遭到带宽的影响,因而加速并不明显。
除此之外,量化、Low-rank合成、迁移学习等办法也有很多研讨,并在模型紧缩中起到了十分好的效果。
基于核的稠密化办法
核的稠密化,是在锻炼过程中,对权重的更新加以正则项停止诱导,使其愈加稠密,使大局部的权值都为0。核的稠密化办法分为regular和irregular,regular的稠密化后,裁剪起来愈加容易,特别是对im2col的矩阵操作,效率更高;而irregular的稠密化后,参数需求特定的存储方式,或者需求平台上稠密矩阵操作库的支持,能够参考的论文有:
Learning Structured Sparsity in Deep Neural Networks 论文地址
本文作者提出了一种Structured Sparsity Learning的学习方式,可以学习一个稠密的构造来降低计算耗费,所学到的构造性稠密化可以有效的在硬件上停止加速。 传统非构造化的随机稠密化会带来不规则的内存访问,因而在GPU等硬件平台上无法有效的停止加速。 作者在网络的目的函数上增加了group lasso的限制项,能够完成filter级与channel级以及shape级稠密化。一切稠密化的操作都是基于下面的loss func停止的,其中Rg为group lasso:
这里写图片描绘
则filter-channel wise:
这里写图片描绘
而shape wise:
这里写图片描绘
由于在GEMM中将weight tensor拉成matrix的构造,因而能够经过将filter级与shape级的稠密化停止分离来将2D矩阵的行和列稠密化,再分别在矩阵的行和列上裁剪掉剔除全为0的值能够来降低矩阵的维度从而提升模型的运算效率。该办法是regular的办法,紧缩粒度较粗,能够适用于各种现成的算法库,但是锻炼的收敛性和优化难度不肯定。
作者提出了一种动态的模型裁剪办法,包括以下两个过程:pruning和splicing,其中pruning就是将以为不中要的weight裁掉,但是常常无法直观的判别哪些weight能否重要,因而在这里增加了一个splicing的过程,将哪些重要的被裁掉的weight再恢复回来,相似于一种外科手术的过程,将重要的构造修补回来,它的算法如下:
这里写图片描绘
作者经过在W上增加一个T来完成,T为一个2值矩阵,起到的相当于一个mask的功用,当某个位置为1时,将该位置的weight保存,为0时,裁剪。在锻炼过程中经过一个可学习mask将weight中真正不重要的值剔除,从而使得weight变稠密。由于在删除一些网络的衔接,会招致网络其他衔接的重要性发作改动,所以经过优化最小损失函数来锻炼删除后的网络比拟适宜。
该算法采取了剪枝与嫁接相分离、锻炼与紧缩相同步的战略完成网络紧缩任务。经过网络嫁接操作的引入,防止了错误剪枝所形成的性能损失,从而在实践操作中更好地迫近网络紧缩的理论极限。属于irregular的方式,但是ak和bk的值在不同的模型以及不同的层中无法肯定,并且容易遭到稠密矩阵算法库以及带宽的限制。
Training Skinny Deep Neural Networks with Iterative Hard Thresholding Methods 论文地址
作者想经过锻炼一个稠密度高的网络来降低模型的运算量,经过在网络的损失函数中增加一个关于W的L0范式能够降低W的稠密度,但是L0范式就招致这是一个N-P难题,是一个难优化求解问题,因而作者从另一个思绪来锻炼这个稠密化的网络。算法的流程如下:
先正常锻炼网络s1轮,然后Ok(W)表示选出W中数值最大的k个数,而将剩下的值置为0,supp(W,k)表示W中最大的k个值的序号,继续锻炼s2轮,仅更新非0的W,然后再将之前置为0的W放开停止更新,继续锻炼s1轮,这样重复直至锻炼终了。 同样也是对参数停止诱导的方式,边锻炼边裁剪,先将以为不重要的值裁掉,再经过一个restore的过程将重要却被误裁的参数恢复回来。也是属于irregular的方式,边训边裁,性能不错,紧缩的力度难以保证。
总结
以上三篇文章都是基于核稠密化的办法,都是在锻炼过程中,对参数的更新停止限制,使其趋向于稠密,或者在锻炼的过程中将不重要的衔接截断掉,其中第一篇文章提供了却构化的稠密化,能够应用GEMM的矩阵操作来完成加速。第二篇文章同样是在权重更新的时分增加限制,固然经过对权重的更新停止限制能够很好的到达稠密化的目的,但是给锻炼的优化增加了难度,降低了模型的收敛性。此外第二篇和第三篇文章都是非构造化的稠密化,容易遭到稠密矩阵算法库以及带宽的限制,这两篇文章在截断衔接后还运用了一个surgery的过程,可以降低重要参数被裁剪的风险。之后还会对其他的模型紧缩办法停止引见。
上一条:支持护照比对的人证一体机
下一条:桌面人证比对终端