弹性网络回归模型_数据模型剪枝

弹性网络回归模型_数据模型剪枝本文首发于PandaCV公众号。导语:模型剪枝算法核心在于找到“不重要”的参数并且实现裁剪。为寻找到较优的剪枝策略,我们往往需要尝试多种剪枝策略和剪枝策略性能评估。通常剪枝策略评估方法是将剪枝后的模型训练到收敛或者训练规定好数量epoch后进行性能比较。不管是人工调试剪枝策略还是自动搜索剪枝策略,都需要多次评估剪枝策略。剪枝策略的评估效率一定程度上影响了整体压缩效率。因此,本文提出了一种能够快速衡量剪枝后模型性能的方法,经实验能够对MobilenetV1减少50%的FLOPs情况下,仍能保证在Image

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本文首发于PandaCV公众号。

导语:模型剪枝算法核心在于找到“不重要”的参数并且实现裁剪。为寻找到较优的剪枝策略,我们往往需要尝试多种剪枝策略剪枝策略性能评估。通常剪枝策略评估方法是将剪枝后的模型训练到收敛或者训练规定好数量epoch后进行性能比较。不管是人工调试剪枝策略还是自动搜索剪枝策略,都需要多次评估剪枝策略。剪枝策略的评估效率一定程度上影响了整体压缩效率。因此,本文提出了一种能够快速衡量剪枝后模型性能的方法,经实验能够对MobilenetV1减少50%的FLOPs情况下,仍能保证在Imagenet数据集上Top1精度达到70.9%。

论文链接:https://arxiv.org/abs/2007.02491

论文repo:https://github.com/anonymous47823493/EagleEye

引言

随着AI技术的发展,人们对于AI的需求也越发多样化。在手机端、嵌入式设备上部署模型的需求已经十分普遍。一般移动端、嵌入式设备无法满足神经网络的计算需求。因此,我们一般需要利用模型压缩技术,尽量不影响模型性能的前提下,减少模型的参数量和计算量,使其满足硬件的限制。

  • 将剪枝后模型训练至收敛后,评估网络性能。
  • 将剪枝后模型训练规定数量epoch后,评估网络性能。
  • 直接对剪枝后的模型评估性能

当需要进行多次迭代尝试时,前两种方法所需要的时间成本都很较大,第三种办法常常面临不准确的问题。因此,EagleEye提出一种快速并且准确衡量子网络性能的方法,加快剪枝的过程。

EagleEye

动机

传统模型剪枝的三步流程是:模型预训练、模型剪枝和finetuning。为什么会需要finetuning这个环节呢?因为剪枝后模型精度下降比较明显,finetuning能够有效提升剪枝后模型精度。EagleEye论文中,对这一现象提出了两个问题:

  • 裁剪的权重通常被认为是“不重要”的权重,为什么模型精度还会有如此大的下降?

  • 未进行finetuning的模型精度和finetuning收敛后的模型精度是否成存在正相关?

针对这两个问题,EagleNet论文中进行了研究和实验。如下图,右图主要展示了在finetuning过程中模型权重的变化情况,其中x轴表示卷积核的L1范数大小,y轴表示卷积核数量,z轴表示不同epoch下权重分布情况。在finetuning过程中,权重分布只发生了一点偏移,但是finetuning前后模型性能发生巨大变化。

在左图中,我们可以看出finetuning前后的模型性能分布差别较大,finetuning前后模型的精度没有较强的正相关 

弹性网络回归模型_数据模型剪枝

那么问题的答案是什么呢?EagleNet论文认为是网络中的BN层对于模型的精度评估有较强的影响。在没有进行finetuning的模型,模型的BN层参数继承于原模型,和当前模型的权重参数并不match,影响了模型的精度,并且导致finetuning前后模型精度不成正相关的问题在finetuning的过程,模型的精度逐渐在上升,是因为其参数在逐渐被优化,BN层的参数也在逐渐“适应”新的网络结构。但是这种方法并不高效,因此论文中引出Adaptive Batch Normalization结构,解决这个问题。

Adaptive Batch Normalization

Adaptive Batch Normalization方法是非常的朴素,论文提出的思路是将网络中的其他参数冻住,然后利用训练集(不是测试集)的样本进行前向计算,修正“继承”来的BN层参数。Adaptive Batch Normalization的方法效果对比图如下:

弹性网络回归模型_数据模型剪枝

 图中横纵坐标分别是finetuning前后模型的精度。其中,左图是没有采用Adpative BN的finetuning模型前后的模型精度关系,右图则是使用adpative BN之后的表现,可以看出成比较明显的正相关。

工作流程

EagleEye的核心点在于利用Adaptive BN方法,一定程度上解决了传统剪枝工作流下,finetuning前后模型精度弱相关的问题。Finetuning前后模型精度具备强相关性的话,我们就能省去传统finetuning的过程,极大的加速整个迭代流程。

EagleEye的整体工作流程如下:

  • 采用随机策略生成大量的剪枝方案

  • 对于不同的剪枝策略,修正其BN层参数

  • 对于不同的剪枝策略,衡量其剪枝策略的精度,并且选取最优的剪枝策略。

  • 对于最优的剪枝策略进行finetuning,精度恢复。

弹性网络回归模型_数据模型剪枝

 

实验效果

  • 相似性实验

    论文中进行了更为详细的相似性实验,其中分别是在不同FLOPs限制的剪枝策略前提下,Adaptive BN方法效果的对比图。从实验结果,我们可以看出其方法在多种FLOPs限制下,都保持了较好的效果。

弹性网络回归模型_数据模型剪枝

 

  • 对比实验

效率方面

EagleEye主要的优势在于其省掉了finetuning步骤,在剪枝效率方面有很大的优势。其中,我们可以看出与ThiNet、AMC和Meta-Pruning方法进行对比,EagleEye所需要的GPU Hours完全不再一个数量级。

弹性网络回归模型_数据模型剪枝

弹性网络回归模型_数据模型剪枝

总结

EagleEye论文的思想比较简单,但是其一定程度上解释了剪枝后模型精度下降的原因,并且提出了修正finetuning前后模型精度弱相关的办法,从而省去了评估剪枝策略中finetuning模型过程,极大地加快剪枝迭代速度。另外,由于其方法简单,能够很方便的应用在其他剪枝算法中,提升剪枝算法速度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170739.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Boost Lockfree「建议收藏」

    Boost Lockfree「建议收藏」BoostLockfreeflyfish2014-9-30为了最大限度的挖掘并行编程的性能考虑使用与锁无关的数据结构来编程与锁无关的数据结构不是依赖于锁和互斥来确保线程安全。Lockfree的重要操作就是CAS(CompareAndSet)原子操作原子操作就是多个线程访问同一个资源时,有且仅有唯一一个线程对该资源进行操作BOOST中的宏定义BOOST_

  • latex中的希腊字母表在哪里_表示角度的希腊字母

    latex中的希腊字母表在哪里_表示角度的希腊字母在写论文的过程中,编辑公式部分会有一些希腊字母需要用LaTeX形式,将其汇总如下,方便查阅。希腊字母小写、大写LaTeX形式希腊字母大小LaTeX形式αA\alphaAαA\alphaAμN\muNμN\muNβB\betaBβB\betaBξΞ\xi\XiξΞ\xi\XiγΓ\gamma\GammaγΓ\gamma\GammaoOoOoOoOδΔ\delta\DeltaδΔ\delta\DeltaπΠ\pi\P

    2022年10月11日
  • 扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)「建议收藏」

    扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)「建议收藏」扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)文章目录扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)理论讲解KF和EKF模型对比雅可比矩阵计算计算实例应用实例线性模型CV模型:CA模型非线性模型CTRV模型:CTRV实例(python)smalldemo抛物线demo飞机高度demoC++实例参考文献我们上篇提到的卡尔曼滤波是用于线性系统,预测(运动)模型和观测模型是在假设高斯和线性情况下进行的。简单的卡尔曼滤波必须应用在符合高斯分布

  • C语言实现关机程序

    C语言实现关机程序这次写一个关机程序,要知道关机程序是shutdown这是关机指令。但这是系统指令,所以要调用执行系统命令的函数,system,但是也要引system的头文件:stdlib.h边写代码边解释#include<stdio.h>#include<stdlib.h>//调用system函数所需的头文件#include<string.h>//调用strcmp所需的头文件intmain(){charinput[20]={0};//这里是创建一个存储字符的数

  • Vue中 使用定时器 (setInterval、setTimeout)[通俗易懂]

    Vue中 使用定时器 (setInterval、setTimeout)[通俗易懂]js中定时器有两种,一个是循环执行setInterval,另一个是定时执行setTimeout。定时器需要在页面销毁的时候清除掉,不然会一直存在!1.循环执行(setInterval)顾名思义,循环执行就是设置一个时间间隔,每过一段时间都会循环执行这个方法,直到这个定时器被销毁掉;语法:setInterval(code,milliseconds);setInterval(function,milliseconds,param1,param2,…);code/funct

  • 写给夏燕第十一个男人「建议收藏」

    写给夏燕第十一个男人「建议收藏」悲哀,(李旧)是她第十一个男人。她想要什么呢???很多男人吗?很多是多少?我是她第十个男人,我原理她了:“说自己以前走的路不可能回头了,叫我不要在过问她以前的事了”。过也两个月后,可还死不改心,还有多少男人被她骗呢?   夏燕(安徽宿松人) 她电话13764996496 15300910532 13917482046   过年回家时,我和夏燕(我第一个女人)认识我不到24小时,就和她发生过关系,还

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号