学习笔记:深度学习之通道剪枝
最近刚接触深度学习项目,负责网络模型压缩与加速。基于自己的理解,写一下对通道剪枝的理解。博主主要通过叙述帮助你理解为什么要进行通道剪枝,本文涉及的数学理论知识较少,希望阅读本文后能帮助你建立一个概念,我为什么要干这件事?以及这件事干了有意义吗?文中有出错的地方,欢迎批评指正。
初步理解
通道剪枝,顾名思义,就是对卷积通道 进行裁剪,以达到网络模型减小的目的。但是这里就涉及到两个问题:如何裁剪?裁剪之后模型性能如何评价?这里通过一个例子具体介绍一下。假设现在拥有一个表现网络,其结构描述如下:
我们用已经处理好的数据集训练得到了一个表现最好的模型,并将模型参数进行保存。那么我们可以想象,某些位置的卷积核并不重要,有些位置的卷积核比较重要,并且去掉这些不重要的卷积核,网络的性能是几乎不受影响的,也就是说,经过卷积核(即通道)裁剪之后,模型的表现还是十分优秀的,那么我们的裁剪是十分有意义的。为什么这么说呢,用小的模型就能实现与复杂模型相同的性能,何乐而不为?
问题就来了,我怎么选择不重要的卷积核呢?可以这样做,给所有卷积核打个分,排个名次,得分越低表现就越不好,那么这些卷积核就是不重要的,我们可以考虑把这些“划水”的卷积核给去掉!常见的衡量卷积核表现好坏的指标有以下几种:卷积核的L1范数、L2范数的大小。
好了,现在选出了划水卷积核担当们,那我们可以把它们去掉了,剩下的就是精华了,我们只使用剩下的较少的卷积核,把之前训练好的模型中与这些精英卷积核对应的参数给赋值过来,那么这样一个瘦身后的模型就诞生了,可是它的表现很差怎么办?所以啊,我们要考验一下这个模型,看它和原来的表现最优的模型相比性能怎么样。很简单!我们只需要使得这个小的模型分类正确率≈原来模型的分类正确率(当然哦,如果准确率下降一丢丢也是可以的!)
最后,我们再对这个小的模型进行进一步提升,让它从训练数据集中再学习一些知识,这个过程称为fine tune,然后我们可以把fine tune后的模型保存啦。
数学公式呢,无非就是把上面这些文字变成了数学符号,所以在阅读文献时候,要学会“翻译”!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)