总结了6种卷积神经网络压缩方法
本文分享自华为云社区《卷积神经网络压缩方法总结云社区华为云》,作者:嵌入式视觉。
我们知道,在一定程度上,网络越深,参数越多,模型越复杂,其最终效果越好。神经网络的压缩算法是,旨在将一个庞大而复杂的预训练模型(pretrainedmodel)转化为一个精简的小模型。
按照压缩过程对网络结构的破坏程度,我们将模型压缩技术分为前端压缩和后端压缩两部分。前端压缩,是指在不改变原网络结构的压缩技术,主要包括知识蒸馏、轻量级网络(紧凑的模型结构设计)以及滤波器(filter)层面的剪枝(结构化剪枝)等;后端压缩,是指包括低秩近似、未加限制的剪枝(非结构化剪枝稀疏)、参数量化以及二值网络等,目标在于尽可能减少模型大小,会对原始网络结构造成极大程度的改造。
总结:前端压缩几乎不改变原有网络结构(仅仅只是在原模型基础上减少了网络的层数或者滤波器个数),后端压缩对网络结构有不可逆的大幅度改变,造成原有深度学习库、甚至硬件设备不兼容改变之后的网络。其维护成本很高。一,低秩近似
简单理解就是,卷积神经网络的权重矩阵往往稠密且巨大,从而计算开销大,有一种办法是采用低秩近似的技术将该稠密矩阵由若干个小规模矩阵近似重构出来,这种方法归类为低秩近似算法。
一般地,行阶梯型矩阵的秩等于其台阶数非零行的行数。
低秩近似算法能减小计算开销的原理如下:
基于以上想法,Sindhwani等人提出使用结构化矩阵来进行低秩分解的算法,具体原理可自行参考论文。另一种比较简便的方法是使用矩阵分解来降低权重矩阵的参数,如Denton等人提出使用奇异值分解(SingularValueDecomposition,简称SVD)分解来重构全连接层的权重。1。1,总结
低秩近似算法在中小型网络模型上,取得了很不错的效果,但其超参数量与网络层数呈线性变化趋势,随着网络层数的增加与模型复杂度的提升,其搜索空间会急剧增大,目前主要是学术界在研究,工业界应用不多。二,剪枝与稀疏约束
给定一个预训练好的网络模型,常用的剪枝算法一般都遵从如下操作:衡量神经元的重要程度移除掉一部分不重要的神经元,这步比前1步更加简便,灵活性更高对网络进行微调,剪枝操作不可避免地影响网络的精度,为防止对分类性能造成过大的破坏,需要对剪枝后的模型进行微调。对于大规模行图像数据集(如ImageNet)而言,微调会占用大量的计算资源,因此对网络微调到什么程度,是需要斟酌的返回第一步,循环进行下一轮剪枝
基于以上循环剪枝框架,不同学者提出了不同的方法,Han等人提出首先将低于某个阈值的权重连接全部剪除,之后对剪枝后的网络进行微调以完成参数更新的方法,这种方法的不足之处在于,剪枝后的网络是非结构化的,即被剪除的网络连接在分布上,没有任何连续性,这种稀疏的结构,导致CPU高速缓冲与内存频繁切换,从而限制了实际的加速效果。
基于此方法,有学者尝试将剪枝的粒度提升到整个滤波器级别,即丢弃整个滤波器,但是如何衡量滤波器的重要程度是一个问题,其中一种策略是基于滤波器权重本身的统计量,如分别计算每个滤波器的L1或L2值,将相应数值大小作为衡量重要程度标准。
利用稀疏约束来对网络进行剪枝也是一个研究方向,其思路是在网络的优化目标中加入权重的稀疏正则项,使得训练时网络的部分权重趋向于0,而这些0值就是剪枝的对象。2。1,总结
总体而言,剪枝是一项有效减小模型复杂度的通用压缩技术,其关键之处在于如何衡量个别权重对于整体模型的重要程度。剪枝操作对网络结构的破坏程度极小,将剪枝与其他后端压缩技术相结合,能够达到网络模型最大程度压缩,目前工业界有使用剪枝方法进行模型压缩的案例。三,参数量化
相比于剪枝操作,参数量化则是一种常用的后端压缩技术。所谓量化,是指从权重中归纳出若干代表,由这些代表来表示某一类权重的具体数值。代表被存储在码本(codebook)之中,而原权重矩阵只需记录各自代表的索引即可,从而极大地降低了存储开销。这种思想可类比于经典的词包模型(bagofwordsmodel)。常用量化算法如下:标量量化(scalarquantization)。标量量化会在一定程度上降低网络的精度,为避免这个弊端,很多算法考虑结构化的向量方法,其中一种是乘积向量(ProductQuantization,PQ),详情咨询查阅论文。以PQ方法为基础,Wu等人设计了一种通用的网络量化算法:QCNN(quantizedCNN),主要思想在于Wu等人认为最小化每一层网络输出的重构误差,比最小化量化误差更有效。
这三类基于聚类的参数量化算法,其本质思想在于将多个权重映射到同一个数值,从而实现权重共享,降低存储开销的目的。3。1,总结
参数量化是一种常用的后端压缩技术,能够以很小的性能损失实现模型体积的大幅下降,不足之处在于,量化的网络是固定的,很难对其做任何改变,同时这种方法通用性差,需要配套专门的深度学习库来运行网络。
这里,权重参数从浮点转定点、二值化等方法都是是试图避免浮点计算耗时而引入的方法,这些方法能加快运算速率,同时减少内存和存储空间的占用,并保证模型的精度损失在可接受的范围内,因此这些方法的应用是有其现实价值的。更多参数量化知识,请参考此github仓库。四,二值化网络二值化网络可以视为量化方法的一种极端情况:所有的权重参数取值只能为pm11,也就是使用1bit来存储Weight和Feature。在普通神经网络中,一个参数是由单精度浮点数来表示的,参数的二值化能将存储开销降低为原来的132。二值化神经网络以其高的模型压缩率和在前传中计算速度上的优势,近几年格外受到重视和发展,成为神经网络模型研究中的非常热门的一个研究方向。但是,第一篇真正意义上将神经网络中的权重值和激活函数值同时做到二值化的是Courbariaux等人2016年发表的名为《Binarynet:Trainingdeepneuralnetworkswithweightsandactivationsconstrainedto1or1》的一篇论文。这篇论文第一次给出了关于如何对网络进行二值化和如何训练二值化神经网络的方法。CNN网络一个典型的模块是由卷积(Conv)批标准化(BNorm)激活(Activ)池化(Pool)这样的顺序操作组成的。对于异或神经网络,设计出的模块是由批标准化(BNorm)二值化激活(BinActiv)二值化卷积(BinConv)池化(Pool)的顺序操作完成。这样做的原因是批标准化以后,保证了输入均值为0,然后进行二值化激活,保证了数据为1或者1,然后进行二值化卷积,这样能最大程度上减少特征信息的损失。二值化残差网络结构定义实例代码如下:defresidualunit(data,numfilter,stride,dimmatch,numbits1):残差块ResidualBlock定义bnAct1bnn。BatchNorm(datadata,numbitsnumbits)conv1bnn。Convolution(databnAct1,numfilternumfilter,kernel(3,3),stridestride,pad(1,1))convBn1bnn。BatchNorm(dataconv1,numbitsnumbits)conv2bnn。Convolution(dataconvBn1,numfilternumfilter,kernel(3,3),stride(1,1),pad(1,1))ifdimmatch:shortcutdataelse:shortcutbnn。Convolution(databnAct1,numfilternumfilter,kernel(3,3),stridestride,pad(1,1))returnconv2shortcut4。1,二值网络的梯度下降
现在的神经网络几乎都是基于梯度下降算法来训练的,但是二值网络的权重只有pm11,无法直接计算梯度信息,也无法进行权重更新。为解决这个问题,Courbariaux等人提出二值连接(binaryconnect)算法,该算法采取单精度与二值结合的方式来训练二值神经网络,这是第一次给出了关于如何对网络进行二值化和如何训练二值化神经网络的方法。过程如下:权重weight初始化为浮点前向传播ForwardPass:利用决定化方式(sign(x)函数)把Weight量化为11,以0为阈值利用量化后的Weight(只有11)来计算前向传播,由二值权重与输入进行卷积运算(实际上只涉及加法),获得卷积层输出。反向传播BackwardPass:把梯度更新到浮点的Weight上(根据放松后的符号函数,计算相应梯度值,并根据该梯度的值对单精度的权重进行参数更新)训练结束:把Weight永久性转化为11,以便inference使用4。1,两个问题
网络二值化需要解决两个问题:如何对权重进行二值化和如何计算二值权重的梯度。
1,如何对权重进行二值化?
权重二值化一般有两种选择:
2,如何计算二值权重的梯度?
4。3,二值连接算法改进
之前的二值连接算法只对权重进行了二值化,但是网络的中间输出值依然是单精度的,于是Rastegari等人对此进行了改进,提出用单精度对角阵与二值矩阵之积来近似表示原矩阵的算法,以提升二值网络的分类性能,弥补二值网络在精度上弱势。该算法将原卷积运算分解为如下过程:
可以看到的是权重二值化神经网络(BWN)和全精度神经网络的精确度几乎一样,但是与异或神经网络(XNORNet)相比而言,Top1和Top5都有10的损失。
相比于权重二值化神经网络,异或神经网络将网络的输入也转化为二进制值,所以,异或神经网络中的乘法加法(MultiplicationandACcumulation)运算用按位异或(bitwisexnor)和数1的个数(popcount)来代替。
更多内容,可以看这两篇文章:https:github。comEwenwanMVisiontreemasterCNNDeepCompressionquantizationBNN二值神经网络(BinaryNeuralNetwork,BNN)4。4,二值网络设计注意事项不要使用kernel(1,1)的Convolution(包括resnet的bottleneck):二值网络中的weight都为1bit,如果再是1x1大小,会极大地降低表达能力增大Channel数目增大activationbit数要协同配合:如果一味增大channel数,最终featuremap因为bit数过低,还是浪费了模型容量。同理反过来也是。建议使用4bit及以下的activationbit,过高带来的精度收益变小,而会显著提高inference计算量五,知识蒸馏
本文只简单介绍这个领域的开篇之作DistillingtheKnowledgeinaNeuralNetwork,这是蒸logits方法,后面还出现了蒸features的论文。想要更深入理解,中文博客可参考这篇文章知识蒸馏是什么?一份入门随笔。
知识蒸馏(knowledgedistillation),是迁移学习(transferlearning)的一种,简单来说就是训练一个大模型(teacher)和一个小模型(student),将庞大而复杂的大模型学习到的知识,通过一定技术手段迁移到精简的小模型上,从而使小模型能够获得与大模型相近的性能。
在知识蒸馏的实验中,我们先训练好一个teacher网络,然后将teacher的网络的输出结果q作为student网络的目标,训练student网络,使得student网络的结果p接近q,因此,student网络的损失函数为LCE(y,p)alphaCE(q,p)。这里CE是交叉熵(CrossEntropy),y是真实标签的onehot编码,q是teacher网络的输出结果,p是student网络的输出结果。
但是,直接使用teacher网络的softmax的输出结果q,可能不大合适。因此,一个网络训练好之后,对于正确的答案会有一个很高的置信度。例如,在MNIST数据中,对于某个2的输入,对于2的预测概率会很高,而对于2类似的数字,例如3和7的预测概率为106和109。这样的话,teacher网络学到数据的相似信息(例如数字2和3,7很类似)很难传达给student网络,因为它们的概率值接近0。因此,论文提出了softmaxT(软标签计算公式),公式如下所示:
所以,可以知道student模型最终的损失函数由两部分组成:第一项是由小模型的预测结果与大模型的软标签所构成的交叉熵(crossentroy);第二项为预测结果与普通类别标签的交叉熵。
这两个损失函数的重要程度可通过一定的权重进行调节,在实际应用中,T的取值会影响最终的结果,一般而言,较大的T能够获得较高的准确度,T(蒸馏温度参数)属于知识蒸馏模型训练超参数的一种。T是一个可调节的超参数、T值越大、概率分布越软(论文中的描述),曲线便越平滑,相当于在迁移学习的过程中添加了扰动,从而使得学生网络在借鉴学习的时候更有效、泛化能力更强,这其实就是一种抑制过拟合的策略。知识蒸馏的整个过程如下图:
student模型的实际模型结构和小模型一样,但是损失函数包含了两部分,分类网络的知识蒸馏mxnet代码示例如下:coding:utf8本程序没有给出具体的模型结构代码,主要给出了知识蒸馏softmax损失计算部分。importmxnetasmxdefgetsymbol(data,classlabels,resnetlayernum,Temperature,mimicweight,numclasses2):backboneStudentBackbone(data)Backbone为分类网络backbone类flattenmx。symbol。Flatten(dataconv1,nameflatten)fcclassscoresmx。symbol。FullyConnected(dataflatten,numhiddennumclasses,namefcclassscore)softmax1mx。symbol。SoftmaxOutput(datafcclassscores,labelclasslabels,namesoftmaxhard)importsymbolresnetTeachermodelfcclassscoretsymbolresnet。getsymbol(netdepthresnetlayernum,numclassnumclasses,datadata)sinputforsoftmaxfcclassscoresTemperaturetinputforsoftmaxfcclassscoretTemperaturetsoftlabelsmx。symbol。softmax(tinputforsoftmax,nameteachersoftlabels)softmax2mx。symbol。SoftmaxOutput(datasinputforsoftmax,labeltsoftlabels,namesoftmaxsoft,gradscalemimicweight)groupmx。symbol。Group(〔softmax1,softmax2〕)group。save(group2symbol。json)returngroup
tensorflow代码示例如下:将类别标签进行onehot编码onehottf。onehot(y,nclasses,1。0,0。0)nclasses为类别总数,n为类别标签onehottf。cast(onehotint,tf。float32)teachertautf。scalarmul(1。0args。tau,teacher)teacher为teacher模型直接输出张量,tau为温度系数Tstudenttautf。scalarmul(1。0args。tau,student)将模型直接输出logits张量student处于温度系数Tobjective1tf。nn。sigmoidcrossentropywithlogits(studenttau,onehot)objective2tf。scalarmul(0。5,tf。square(studenttauteachertau))student模型最终的损失函数由两部分组成:第一项是由小模型的预测结果与大模型的软标签所构成的交叉熵(crossentroy);第二项为预测结果与普通类别标签的交叉熵。tfloss(args。lamdatf。reducesum(objective1)(1args。lamda)tf。reducesum(objective2))batchsize
tf。scalarmul函数为对tf张量进行固定倍率scalar缩放函数。一般T的取值在120之间,这里我参考了开源代码,取值为3。我发现在开源代码中student模型的训练,有些是和teacher模型一起训练的,有些是teacher模型训练好后直接指导student模型训练。六,浅层轻量网络
浅层网络:通过设计一个更浅(层数较少)结构更紧凑的网络来实现对复杂模型效果的逼近,但是浅层网络的表达能力很难与深层网络相匹敌。因此,这种设计方法的局限性在于只能应用解决在较为简单问题上。如分类问题中类别数较少的task。
轻量网络:使用如MobilenetV2、ShuffleNetv2等轻量网络结构作为模型的backbone可以大幅减少模型参数数量。参考资料神经网络模型压缩和加速之知识蒸馏https:github。comchengshengchanmodelcompressionblobmasterteacherstudent。pyhttps:github。comdkozlovawesomeknowledgedistillationXNORNet解析卷积神经网络深度学习实践手册知识蒸馏(KnowledgeDistillation)简述(一)
点击下方,第一时间了解华为云新鲜技术
华为云博客大数据博客AI博客云计算博客开发者中心华为云
华为云开发者联盟
我国生育率持续下降,是什么原因导致的?在广东生活的吴小姐算了一笔账养一个孩子每月需要约1。6万元开销。我负担不起,30多岁的吴小姐说。结婚已经十年,她决定不要孩子。上幼儿园每个月要2000左右日常开销大约3000,包括
2022年我国全部工业增加值40。16万亿元,比上年增长3。4北京商报讯(记者方彬楠陆珊珊)2月28日,国家统计局发布中华人民共和国2022年国民经济和社会发展统计公报,其中显示,2022年全年我国全部工业增加值401644亿元,比上年增长3
龙口政府送来政策红利助力民企挑战高精尖近日,记者来到龙口亨嘉智能装备公司生产车间,只见一台台智能数控机床已套上了白色的塑料袋,整齐排列在车间内,准备装箱出口土耳其。该公司负责人告诉记者,2023年开年,公司订单翻了番,
荣耀80和vivos16哪个好?别被数据坑了!全面对比评测结果出炉荣耀80和vivoS16作为当前比较热门的两款5G机型,正面外观设计风格基本一致,均采用了相对高端的极点曲面屏设计,拥有着几乎一致的售价与上市时间,因此荣耀80与vivoS16成为
济南2025年营商环境达到全国前列日前,济南市十四五时期优化营商环境规划印发。到2025年,优化营商环境改革的创新引领作用显著增强,公平便捷的市场环境舒心满意的政务环境公正规范的法治环境诚信包容的人文环境协同联动的
专家商用密码的智能化发展是大势所趋环球网科技综合报道2月27日消息,2023年中国网络和数据安全产业高峰论坛商用密码创新应用分论坛于近日举办,论坛以推动密码应用创新,夯实网络安全基座为主题,围绕基础通信车联网工业互
最新世界排名丁俊晖265万24,奥沙利文768万第1,墨菲417万第6北京时间2月27日消息,2023年斯诺克球员锦标赛圆满落幕。魔术师肖恩墨菲,以104横扫机长阿里卡特夺得冠军。最新世界排名方面,夺得冠军的墨菲上升到6位,火箭罗尼奥沙利文继续高居第
边缘计算技术引领AI智能行为分析系统革新近日,一家领先的AI智能行为分析系统开发商聆眼智能宣布,其最新推出的智能行为分析系统将采用边缘计算技术,为用户提供更加准确高效安全的智能服务。据悉,该智能行为分析系统可以通过监控摄
人工智能未来会应用在战争中?现在,人类有责任通过确保武力的使用与军事目标相称,来保护平民和限制战斗损害。但如果在战场上部署人工智能武器,当发生不必要的平民死亡时,谁应该为此负责?这个非常重要的问题还没有明确的
人工智能技术可从零开始生成原始蛋白质研究人员已经开发了一个人工智能系统,可以从头开始生成人工酶。在实验室实验中,其中一些酶表现出与天然酶相媲美的功效,即使其人工创造的氨基酸序列大大偏离了任何已知的天然蛋白质。该实验表
今天到了,就请好好爱它不少人都会被电影功夫熊猫里的一段台词触动到昨天是段历史,明天是个谜团,而今天是天赐的礼物,要像珍惜礼物一样珍惜今天。今天是什么?今天就是我们所拥有的当下,是我们所经历的,最生动最真
马云刘强东俞敏洪会回来吗?鼓励社会力量提供多样化的教育服务,并且强调电商平台数字经济的重要地位。民办教育电商的春天到了吗?那么马云刘强东俞敏洪等大佬会回来吗?他们会不会回来,我们可以等等看。我想说的是,砖家
30个二线城市排名沈阳领先无锡,石家庄远超潍坊,中山第25在前不久由第一财经新一线城市研究所发布的全国337个地级以上城市排名中,一共拥有30个二线城市,在全国是仅次于4个一线城市和15个新一线城市,处于前49。就网友的反映来看,还是比较
刘学伟中国防控放松时,面临的是一个什么样的世界局面?文观察者网专栏作者刘学伟近日,中国的疫情对策出现了一个大变局,对已经坚持了好几年的动态清零政策做了重大调整。现在的总政策,还在摸索试探中,也能看出各地各级政府维持平稳过渡的努力。从
西安又杀出一匹造芯黑马!大约一年多前,张博辞去大学教授职务,全身心投入他的造芯事业。个人社交账号上,除转发行业新闻之外,无论是卡通动漫头像,抑或是点赞日本动漫灌篮高手,张博俨然一名80后大男孩。以至于见面
常州楼市分析第62篇现在常州房价还是跌个不停,尽管常州楼市的底子还是很强的,但是常州房价太高了,已经超过了常州年轻人能承受的极限了。上周常州的二手房挂牌价从16720元跌至了16685元,这个跌幅不算
转阴15天后才会产生抗体?感染科专家辟谣了近日,一则阳康后要15天才能产生抗体的消息在社交平台大量传播。该消息称,北京新冠疫情二次感染率达到20,其原因就是阳康后要有十五天才能产生抗体,很多人以为不发烧就是可以放松了,好了
铆足劲大刀阔斧干!谈成合作重拾发展信心央视网消息在东京期间,对组团寻单的浙江企业来说,除了参加展会展示新品之外,更是走访客户洽谈合作的好机会。时隔三年登门拜访,进展怎么样?天色渐黑,东京街头下起了雨。徐益红淋着雨,一路
口碑反转?因退烧药2元20片推上涨停!却被翻出涉垄断要罚1。33亿图片来源抖音人民网视频截图12月19日,A股新冠药物中药等医药板块继续退烧,热门个股纷纷下跌,而老牌药企东北制药(000597)却逆势一字涨停,截至当日收盘报涨停价7。76元股,收
打了这么久的扑克牌,牌上的12个人都是谁?他们为何会出现在牌上1hr打扑克牌这种娱乐方式在大众之间非常普及。但你有没有仔细注意过在K这一组牌面上,只有一个人是侧着脸的?为什么他们的神色都无比凝重,好像即将会发生什么大事一样。牌面上这些人究竟是
我期待的潘帕斯雄鹰终于再次飞上了天穹文奎鹏波澜起伏,跌宕惊险!幸运之神最后垂青了潘帕斯草原上的雄鹰!北京时间12月19日凌晨,阿根廷在2022卡塔尔世界杯冠亚军决赛中,经过长达120分钟的鏖战,最后以点球大战险胜法国
沙洲日记朱为善与修善亭12月18日星期日晴长亭外,古道边,芳草碧连天。晚风拂柳笛声残,夕阳山外山。天之涯,地之角,知交半零落。一壶浊酒尽余欢,今宵别梦寒每当李叔同的送别曲响起,我就会想到家乡古驿道上的座