范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

总结了6种卷积神经网络压缩方法

  本文分享自华为云社区《卷积神经网络压缩方法总结-云社区-华为云》,作者:嵌入式视觉 。
  我们知道,在一定程度上,网络越深,参数越多,模型越复杂,其最终效果越好。神经网络的压缩算法是,旨在将一个庞大而复杂的预训练模型(pre-trained model)转化为一个精简的小模型。
  按照压缩过程对网络结构的破坏程度,我们将模型压缩技术分为"前端压缩"和"后端压缩"两部分。前端压缩,是指在不改变原网络结构的压缩技术,主要包括知识蒸馏  、轻量级网络(紧凑的模型结构设计)以及滤波器(filter)层面的剪枝(结构化剪枝)  等;后端压缩,是指包括低秩近似  、未加限制的剪枝(非结构化剪枝/稀疏)、参数量化  以及二值网络等,目标在于尽可能减少模型大小,会对原始网络结构造成极大程度的改造。
  总结:前端压缩几乎不改变原有网络结构(仅仅只是在原模型基础上减少了网络的层数或者滤波器个数),后端压缩对网络结构有不可逆的大幅度改变,造成原有深度学习库、甚至硬件设备不兼容改变之后的网络。其维护成本很高。一,低秩近似
  简单理解就是,卷积神经网络的权重矩阵往往稠密且巨大,从而计算开销大,有一种办法是采用低秩近似的技术将该稠密矩阵由若干个小规模矩阵近似重构出来,这种方法归类为低秩近似算法。
  一般地,行阶梯型矩阵的秩等于其"台阶数"-非零行的行数。
  低秩近似算法能减小计算开销的原理如下:
  基于以上想法,Sindhwani   等人提出使用结构化矩阵来进行低秩分解的算法,具体原理可自行参考论文。另一种比较简便的方法是使用矩阵分解来降低权重矩阵的参数,如 Denton 等人提出使用奇异值分解  (Singular Value Decomposition,简称 SVD)分解来重构全连接层的权重。1.1,总结
  低秩近似算法在中小型网络模型上,取得了很不错的效果,但其超参数量与网络层数呈线性变化趋势,随着网络层数的增加与模型复杂度的提升,其搜索空间会急剧增大,目前主要是学术界在研究,工业界应用不多。二,剪枝与稀疏约束
  给定一个预训练好的网络模型,常用的剪枝算法一般都遵从如下操作:衡量神经元的重要程度移除掉一部分不重要的神经元,这步比前 1 步更加简便,灵活性更高对网络进行微调,剪枝操作不可避免地影响网络的精度,为防止对分类性能造成过大的破坏,需要对剪枝后的模型进行微调。对于大规模行图像数据集(如ImageNet)而言,微调会占用大量的计算资源,因此对网络微调到什么程度,是需要斟酌的返回第一步,循环进行下一轮剪枝
  基于以上循环剪枝框架,不同学者提出了不同的方法,Han等人提出首先将低于某个阈值的权重连接全部剪除,之后对剪枝后的网络进行微调以完成参数更新的方法,这种方法的不足之处在于,剪枝后的网络是非结构化的,即被剪除的网络连接在分布上,没有任何连续性,这种稀疏的结构,导致CPU高速缓冲与内存频繁切换,从而限制了实际的加速效果。
  基于此方法,有学者尝试将剪枝的粒度提升到整个滤波器级别,即丢弃整个滤波器,但是如何衡量滤波器的重要程度是一个问题,其中一种策略是基于滤波器权重本身的统计量,如分别计算每个滤波器的 L1 或 L2 值,将相应数值大小作为衡量重要程度标准。
  利用稀疏约束来对网络进行剪枝也是一个研究方向,其思路是在网络的优化目标中加入权重的稀疏正则项,使得训练时网络的部分权重趋向于 0 ,而这些 0 值就是剪枝的对象。2.1,总结
  总体而言,剪枝是一项有效减小模型复杂度的通用压缩技术,其关键之处在于如何衡量个别权重对于整体模型的重要程度  。剪枝操作对网络结构的破坏程度极小,将剪枝与其他后端压缩技术相结合,能够达到网络模型最大程度压缩,目前工业界有使用剪枝方法进行模型压缩的案例。三,参数量化
  相比于剪枝操作,参数量化则是一种常用的后端压缩技术。所谓"量化",是指从权重中归纳出若干"代表",由这些"代表"来表示某一类权重的具体数值。"代表"被存储在码本(codebook)之中,而原权重矩阵只需记录各自"代表"的索引即可,从而极大地降低了存储开销。这种思想可类比于经典的词包模型(bag-of-words model)。常用量化算法如下:标量量化(scalar quantization  )。标量量化会在一定程度上降低网络的精度,为避免这个弊端,很多算法考虑结构化的向量方法,其中一种是乘积向量(Product Quantization, PQ)  ,详情咨询查阅论文。以PQ方法为基础,Wu等人设计了一种通用的网络量化算法:QCNN(quantized CNN)  ,主要思想在于Wu等人认为最小化每一层网络输出的重构误差,比最小化量化误差更有效。
  这三类基于聚类的参数量化算法,其本质思想在于将多个权重映射到同一个数值,从而实现权重共享,降低存储开销的目的。3.1,总结
  参数量化是一种常用的后端压缩技术,能够以很小的性能损失实现模型体积的大幅下降,不足之处在于,量化的网络是"固定"的,很难对其做任何改变,同时这种方法通用性差,需要配套专门的深度学习库来运行网络。
  这里,权重参数从浮点转定点、二值化等方法都是是试图避免浮点计算耗时而引入的方法,这些方法能加快运算速率,同时减少内存和存储空间的占用,并保证模型的精度损失在可接受的范围内,因此这些方法的应用是有其现实价值的。更多参数量化知识,请参考此 github仓库。四,二值化网络二值化网络可以视为量化方法的一种极端情况:所有的权重参数取值只能为pm 1±1 ,也就是使用 1bit  来存储Weight   和 Feature  。在普通神经网络中,一个参数是由单精度浮点数来表示的,参数的二值化能将存储开销降低为原来的 1/32  。二值化神经网络以其高的模型压缩率和在前传中计算速度上的优势,近几年格外受到重视和发展,成为神经网络模型研究中的非常热门的一个研究方向。但是,第一篇真正意义上将神经网络中的权重值和激活函数值同时做到二值化的是 Courbariaux   等人 2016 年发表的名为《Binarynet: Training deep neural networks with weights and activations constrained to +1 or -1》的一篇论文。这篇论文第一次给出了关于如何对网络进行二值化和如何训练二值化神经网络的方法。CNN 网络一个典型的模块是由卷积(Conv  )->批标准化(BNorm  )->激活(Activ  )->池化(Pool  )这样的顺序操作组成的。对于异或神经网络,设计出的模块是由批标准化(BNorm  )->二值化激活(BinActiv)->二值化卷积(BinConv  )->池化(Pool  )的顺序操作完成。这样做的原因是批标准化以后,保证了输入均值为 0  ,然后进行二值化激活,保证了数据为 -1   或者 +1  ,然后进行二值化卷积,这样能最大程度上减少特征信息的损失。二值化残差网络结构定义实例代码如下:def residual_unit(data, num_filter, stride, dim_match, num_bits=1):     """残差块 Residual Block 定义     """     bnAct1 = bnn.BatchNorm(data=data, num_bits=num_bits)     conv1 = bnn.Convolution(data=bnAct1, num_filter=num_filter, kernel=(3, 3), stride=stride, pad=(1, 1))     convBn1 = bnn.BatchNorm(data=conv1, num_bits=num_bits)     conv2 = bnn.Convolution(data=convBn1, num_filter=num_filter, kernel=(3, 3), stride=(1, 1), pad=(1, 1))     if dim_match:         shortcut = data     else:         shortcut = bnn.Convolution(data=bnAct1, num_filter=num_filter, kernel=(3, 3), stride=stride, pad=(1, 1))     return conv2 + shortcut 4.1,二值网络的梯度下降
  现在的神经网络几乎都是基于梯度下降算法来训练的,但是二值网络的权重只有pm 1±1,无法直接计算梯度信息,也无法进行权重更新。为解决这个问题,Courbariaux 等人提出二值连接(binary connect)算法,该算法采取单精度与二值结合的方式来训练二值神经网络,这是第一次给出了关于如何对网络进行二值化和如何训练二值化神经网络的方法。过程如下:权重 weight   初始化为浮点前向传播 Forward Pass  :利用决定化方式(sign(x)函数  )把 Weight 量化为 +1/-1  , 以0为阈值利用量化后的 Weight (只有+1/-1)来计算前向传播,由二值权重与输入进行卷积运算(实际上只涉及加法),获得卷积层输出。反向传播 Backward Pass  :把梯度更新到浮点的 Weight 上(根据放松后的符号函数,计算相应梯度值,并根据该梯度的值对单精度的权重进行参数更新)训练结束: 把 Weight 永久性转化为 +1/-1  , 以便 inference   使用4.1,两个问题
  网络二值化需要解决两个问题:如何对权重进行二值化和如何计算二值权重的梯度。
  1,如何对权重进行二值化?
  权重二值化一般有两种选择:
  2,如何计算二值权重的梯度?
  4.3,二值连接算法改进
  之前的二值连接算法只对权重进行了二值化,但是网络的中间输出值依然是单精度的,于是 Rastegari 等人对此进行了改进,提出用单精度对角阵与二值矩阵之积来近似表示原矩阵的算法,以提升二值网络的分类性能,弥补二值网络在精度上弱势。该算法将原卷积运算分解为如下过程:
  可以看到的是权重二值化神经网络(BWN)  和全精度神经网络的精确度几乎一样,但是与异或神经网络(XNOR-Net)相比而言,Top-1 和 Top-5 都有 10+% 的损失。
  相比于权重二值化神经网络,异或神经网络将网络的输入也转化为二进制值,所以,异或神经网络中的乘法加法 (Multiplication and ACcumulation) 运算用按位异或 (bitwise xnor) 和数 1 的个数 (popcount) 来代替。
  更多内容,可以看这两篇文章:https://github.com/Ewenwan/MVision/tree/master/CNN/Deep_Compression/quantization/BNN二值神经网络(Binary Neural Network,BNN)4.4,二值网络设计注意事项不要使用 kernel = (1, 1) 的 Convolution   (包括 resnet 的 bottleneck):二值网络中的 weight 都为 1bit, 如果再是 1x1 大小, 会极大地降低表达能力增大 Channel   数目 + 增大 activation bit 数 要协同配合:如果一味增大 channel 数, 最终 feature map 因为 bit 数过低, 还是浪费了模型容量。 同理反过来也是。建议使用 4bit 及以下的 activation bit  , 过高带来的精度收益变小, 而会显著提高 inference 计算量五,知识蒸馏
  本文只简单介绍这个领域的开篇之作-Distilling the Knowledge in a Neural Network,这是蒸 "logits"方法,后面还出现了蒸 "features" 的论文。想要更深入理解,中文博客可参考这篇文章-知识蒸馏是什么?一份入门随笔。
  知识蒸馏(knowledge distillation),是迁移学习(transfer learning)的一种,简单来说就是训练一个大模型(teacher)和一个小模型(student),将庞大而复杂的大模型学习到的知识,通过一定技术手段迁移到精简的小模型上,从而使小模型能够获得与大模型相近的性能。
  在知识蒸馏的实验中,我们先训练好一个 teacher   网络,然后将 teacher   的网络的输出结果q作为 student   网络的目标,训练 student   网络,使得 student   网络的结果p接近q,因此,student   网络的损失函数为L = CE(y,p)+alpha CE(q,p)。这里 CE   是交叉熵(Cross Entropy),y是真实标签的 onehot   编码,q 是 teacher   网络的输出结果,p 是 student   网络的输出结果。
  但是,直接使用 teacher   网络的 softmax 的输出结果q,可能不大合适。因此,一个网络训练好之后,对于正确的答案会有一个很高的置信度。例如,在 MNIST 数据中,对于某个 2 的输入,对于 2 的预测概率会很高,而对于 2 类似的数字,例如 3 和 7 的预测概率为10^-6和10^-9。这样的话,teacher   网络学到数据的相似信息(例如数字 2 和 3,7 很类似)很难传达给 student   网络,因为它们的概率值接近0  。因此,论文提出了 softmax-T  (软标签计算公式),公式如下所示:
  所以,可以知道 student   模型最终的损失函数由两部分组成:第一项是由小模型的预测结果与大模型的"软标签"所构成的交叉熵(cross entroy);第二项为预测结果与普通类别标签的交叉熵。
  这两个损失函数的重要程度可通过一定的权重进行调节,在实际应用中,T   的取值会影响最终的结果,一般而言,较大的 T 能够获得较高的准确度,T(蒸馏温度参数) 属于知识蒸馏模型训练超参数的一种。T 是一个可调节的超参数、T 值越大、概率分布越软(论文中的描述),曲线便越平滑,相当于在迁移学习的过程中添加了扰动,从而使得学生网络在借鉴学习的时候更有效、泛化能力更强,这其实就是一种抑制过拟合的策略。知识蒸馏的整个过程如下图:
  student   模型的实际模型结构和小模型一样,但是损失函数包含了两部分,分类网络的知识蒸馏 mxnet 代码示例如下:# -*-coding-*-  : utf-8   """ 本程序没有给出具体的模型结构代码,主要给出了知识蒸馏 softmax 损失计算部分。 """ import mxnet as mx  def get_symbol(data, class_labels, resnet_layer_num,Temperature,mimic_weight,num_classes=2):     backbone = StudentBackbone(data)  # Backbone 为分类网络 backbone 类     flatten = mx.symbol.Flatten(data=conv1, name="flatten")     fc_class_score_s = mx.symbol.FullyConnected(data=flatten, num_hidden=num_classes, name="fc_class_score")     softmax1 = mx.symbol.SoftmaxOutput(data=fc_class_score_s, label=class_labels, name="softmax_hard")      import symbol_resnet  # Teacher model     fc_class_score_t = symbol_resnet.get_symbol(net_depth=resnet_layer_num, num_class=num_classes, data=data)          s_input_for_softmax=fc_class_score_s/Temperature     t_input_for_softmax=fc_class_score_t/Temperature      t_soft_labels=mx.symbol.softmax(t_input_for_softmax, name="teacher_soft_labels")     softmax2 = mx.symbol.SoftmaxOutput(data=s_input_for_softmax, label=t_soft_labels, name="softmax_soft",grad_scale=mimic_weight)     group=mx.symbol.Group([softmax1,softmax2])     group.save("group2-symbol.json")      return group
  tensorflow  代码示例如下:# 将类别标签进行one-hot编码 one_hot = tf.one_hot(y, n_classes,1.0,0.0) # n_classes为类别总数, n为类别标签 # one_hot = tf.cast(one_hot_int, tf.float32) teacher_tau = tf.scalar_mul(1.0/args.tau, teacher) # teacher为teacher模型直接输出张量, tau为温度系数T student_tau = tf.scalar_mul(1.0/args.tau, student) # 将模型直接输出logits张量student处于温度系数T objective1 = tf.nn.sigmoid_cross_entropy_with_logits(student_tau, one_hot) objective2 = tf.scalar_mul(0.5, tf.square(student_tau-teacher_tau)) """ student模型最终的损失函数由两部分组成: 第一项是由小模型的预测结果与大模型的"软标签"所构成的交叉熵(cross entroy); 第二项为预测结果与普通类别标签的交叉熵。 """ tf_loss = (args.lamda*tf.reduce_sum(objective1) + (1-args.lamda)*tf.reduce_sum(objective2))/batch_size
  tf.scalar_mul   函数为对 tf   张量进行固定倍率 scalar   缩放函数。一般 T 的取值在 1 - 20 之间,这里我参考了开源代码,取值为 3。我发现在开源代码中 student   模型的训练,有些是和 teacher   模型一起训练的,有些是 teacher 模型训练好后直接指导 student 模型训练。六,浅层/轻量网络
  浅层网络:通过设计一个更浅(层数较少)结构更紧凑的网络来实现对复杂模型效果的逼近, 但是浅层网络的表达能力很难与深层网络相匹敌。因此,这种设计方法的局限性在于只能应用解决在较为简单问题上。如分类问题中类别数较少的 task  。
  轻量网络:使用如 MobilenetV2、ShuffleNetv2   等轻量网络结构作为模型的 backbone  可以大幅减少模型参数数量。参考资料神经网络模型压缩和加速之知识蒸馏https://github.com/chengshengchan/model_compression/blob/master/teacher-student.pyhttps://github.com/dkozlov/awesome-knowledge-distillationXNOR-Net解析卷积神经网络-深度学习实践手册知识蒸馏(Knowledge Distillation)简述(一)
  点击下方,第一时间了解华为云新鲜技术~
  华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云
  #华为云开发者联盟#

开源可视化页面生成器MtBird,快速构建落地页网站小程序开源精选是我们分享Github开源社区中优质项目的栏目,包括技术学习实用与各种有趣的内容。本期推荐的是由一个低代码可视化页面生成器MtBird。星搭精卫MtBird是一款可视化页面最便宜,有效的长寿,护肾法宝,呼吁大家做起来!大家都知道,肾友们需要通过改善生活方式来预防肾病的进展,良好的生活方式可以延缓肾病的进展,增强心肺功能,减少心脑血管疾病的发生。多选1。问以下那些生活方式是对肾友有益的?A。规律作频频错播中国国歌绝非偶然,应坚决反击!赛事现场2月28日在波黑举行的世界冰球锦标赛上,中国香港男子冰球代表队参加的世界冰球锦标赛第三级别比赛,但主办方在播放中国国歌时出错!三番五次出错,这就不是失误可以解释的了!而且,染发打耳洞奇装异服,不是中国男明星该有的样,这才是中国审美这几天內娱很多明星都受邀参加了米兰时装周,引发了一个有趣的话题,什么样的装扮更适合中国男明星呢?或者什么样的装扮更能代表中国男性的审美呢?其实內娱年轻一代男星,妆容造型的审美基本上大反转!陈冠希新鞋真香预警当下鞋圈最受争议该是陈冠希今年发售的第一款鞋CLOTxNikeClotez,凭借一鞋多穿的新颖创意圈粉无数,但同时说丑难看的言论也有不少。部分鞋友认为充斥着老北京布鞋既视感,更离谱牢记幸存者偏差在日常生活中,我们经常会听到一些人用幸存者的成功来建议别人。比如说,某人成功创业了,于是他就告诉别人也要创业,或者某人在极端困境下成功了,于是他就告诉别人也要像他那样去做。然而,这江南气息常常站在河水湖水边上发呆。那些有了千百年历史的老屋小巷寺庙石桥,还有那翠翠的树林,白白的炊烟,应该都与水有关。水乡的水,浸泡过长长的光阴,也浸泡过短短的情怀。墨绿小河,墨绿小道,水3年1。2亿,恭喜湖人!詹姆斯绝配被激活,他的崛起比新援更加重要主场战胜鹈鹕,这场大胜,说实话对于湖人而言,都不能算是久违了,这已经是罕见了。本赛季,湖人一般在垃圾时间里派上一些轮换末端的球员时,他们往往都是落后的一方。这次对阵鹈鹕,湖人是牢牢从一条曲线看经济增速回暖视频加载中用电量被称为衡量经济发展水平和企业信心的晴雨表。春节过后,江西省用电量持续攀升。据国网江西省电力有限公司对10。89万户10千伏及以上高压用户用电监测显示,春节后,江西大火爆募集80亿!首批混合估值法产品卖爆债基迎建仓时点?点蓝字关注,不迷路来源券商中国在去年底债基赎回导致产品难卖的背景下,兔年首批创新式产品逆流而上。证券时报券商中国记者获悉,兔年首批创新式基金产品发行持续受到投资者热捧,鹏华基金旗下中国企业动力电池装车量约占全球23与日韩企业进入全球竞争新阶段21世纪经济报道记者左茂轩北京报道2月7日,韩国市场调研机构SNEResearch公布的数据显示,2022年,全球动力电池装车量达517。9GWh,同比增长71。8。得益于全球新能
艾顿我不会坐这儿谈论判罚但我喜欢高强度的对抗直播吧3月17日讯在前天结束的一场NBA常规赛中,太阳在主场以104116不敌雄鹿。今天,艾顿在球队训练结束后接受了记者采访。谈到那场比赛的判罚(个人五犯零罚球),他说道我不会坐在新加坡大满贯赛十大美女,日本三将,国乒钱天一上榜,你喜欢谁?新加坡大满贯进入白热化,晋级队员实力越来越强,比赛也随之越来越激烈,在紧张刺激的比赛之余,聊点轻松愉快的话题,也算是让紧张的神经得到片刻的放松!在本届赛事中,笔者几乎全程(3台切换中医治疗外耳道炎的原理和方法有哪些?外耳道炎在我们生活并不少见,通过中医学的穴位疗法也可以治疗外耳道炎,它通过刺激人体特定的穴位,调节身体的气血运行,从而达到治疗的目的。而对于外耳道炎这种常见的疾病,今天为大家从中医又剪辑视频又玩3A游戏的方法有几种?国内3款新兴远控软件横评大家好,我是高达。我最近算是有些入坑远程控制了,因为手头上有一些剪辑视频的任务,但是渲染的时间又太长,想玩玩原神什么的又不敢动电脑,就一直在找能同时剪辑视频和玩3A游戏的方法,没想20道家常菜,好吃下饭,做法还简单,家人夸我是大厨!苦株子豆腐干一原料苦株子豆腐干150克酸椒粒100克青蒜粒10克二调料盐2克生抽5克猪油50克三做法1把苦株子豆腐干放在清水中浸泡3小时。放入锅中,加水淹没,小火加温,浸熟后改刀成Fabric。js摆正元素的4种方法(带过渡动画)掘金本文简介这次要讲的是4个摆正元素的方法,这是我工作中遇到的场景。我不知道straighten使用摆正这个词来翻译正不正确,反正我就是要这么叫!straighten根据距离的远近,将想要越过越幸福,试试这6个方法凡事提前做准备凡事预则立,不预则废。任何事情,学会提前做准备,将选择权掌握在自己手中,哪怕遇到突发情况,也能为自己争取到缓冲的时间。凡事提前做准备,让自己更加淡定从容,不仅是对他人音响常见问题及处理方法,想玩音响你要学会这些!音响常见问题及处理方法如下没有声音或声音低检查音量设置,确保音量没有被调低或关闭,检查喇叭是否正确连接,检查音频源设备是否正常工作。有杂音检查喇叭是否正确连接,检查音频线是否有损坏还是北京街拍姑娘会打扮,烂大街的小黑裤牛仔裤,个个穿得时髦真正聪明的女人,从来不会被物质和物品捆绑住自己的思想和行动,她们拥有明确的目标和规划好的衣橱,不仅不会频繁购置流行的潮流单品,还懂得多多购买使用率高的基础单品。基础款单品的魅力在于看不见你吖Loveisamysteriousforcethatcanchangethecourseofourlives爱情是一种神秘的力量,它能够改变我们的人生轨迹Dontforgettok自从踏入全职妈妈这个圈子后,我好像被边缘化,异类化全职妈妈的称呼是女性为了照顾孩子和家庭,辞去工作,在家全职带娃而得来的!在我们父母辈,女人负责生孩子照顾家庭,男人就负责赚钱养家!这样的社会现象是大流,是理所当然,也是顺理成章。没