深度学习(十四)network compression

李宏毅老师课程链接
为能够把神经网络放到移动端设备或者能进行实时计算,就需要压缩网络的大小提高效率。
本节介绍几种压缩网络的办法

network pruning

一个庞大的网络中,其实有很多节点和权重几乎是没有作用的,那么压缩网络最直接的方式当然就是把这些没用的剪掉。

网络剪枝的大概步骤如下:
首先要训练好一个较大的网络,然后评估网络中每个节点或者每个权重的重要性,去除那些不重要的部分。最后再次训练恢复网络的功能。
一次去除可能是不够的,一般需要多次迭代剪枝。
在这里插入图片描述
这个过程有几点需要注意的地方。
首先是剪枝之后的网络,调整训练的初始值应该用剪枝之前网络的初始值,因为并不是所有的初始值都能保证可以训练成功的,而之前的网络已经证明了这组初始值可以训练成功,所以直接用之前的初始值就好。
在这里插入图片描述
第二个问题是选择去除weight还是neural,在网络的图中就是去除某几条边还是去除整个节点。
如果选择去除某一些边,我们可以把网络压缩的比较小,但是这样去除以后整个网络就不规则了,训练会变得困难,并且GPU也很难加速。
在这里插入图片描述所以我们一般还是选择去除整个节点,这样去除以后整个网络的结构仍旧是规则的。
在这里插入图片描述

knowledge distillation

知识蒸馏的基本原理,是先训练一个较大的“教师”网络,让教师网络输出一个结果,然后把这个输出作为较小的“学生”网络的目标值。
这个输出和标签数据有点像,但是它包涵的信息比标签更完整,标签通常是非黑即白的,网络学习标签数据是知其然而不知其所以然,尤其是比较小的网络可能就没法训练成功。而教师网络输出的内容让学生网络知其然且知其所以然。
在这里插入图片描述
知识蒸馏还有一个小技巧。比如说在分类中,可以适当缩小几个类之间的差距,否则如果输出的结果是某种分类的结果是接近100%,那这种数据与标签就几乎没有区别了。
在这里插入图片描述

parameter quantization

量化参数,简单来说就是想办法用更小的空间来储存参数。
最直接的方法就是缩小储存的位数,但是这种办法效率并不高。
第二中办法是进行权值聚类,就是把属于某个范围的数都用它们的平均值进行代替。
第三种方法是根据参数出现的频率进行编码,出现频率越高的参数储存空间越小,原理类似于霍夫曼编码。
在这里插入图片描述
还有一种办法是把每次迭代得到的weight近似为最接近的整数值,并用整数点的梯度进行下降。
在这里插入图片描述

architecture design

重新设计网络的结构自然也是压缩网络的一种方法。
调整网络结构使其变得简单的一种常用方法,是在两个复杂层中间加上一个简单层。
加入原本两层的节点个数分别为M,N,则参数量为M×N,如果在其中加入一个K节点层,则参数数量变成了(M+N)×K。如果K远小于M,N这参数明显减少。
当然这种做法也会在一定程度上破坏网络的原有功能。
在这里插入图片描述
这种办法在CNN中比较常见,称为DSCNN。
普通CNN如下图,通过4个filter的卷积可以有4个feature map。
在这里插入图片描述
而对于两个通道的输入,DSCNN先用两个filter对两个通道分别进行卷积。在通过4个1×1的filter得到最终的feature map。
在这里插入图片描述
这样一来参数量显然大大减少了。
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值