深度学习(十四)network compression

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

network pruning

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

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

knowledge distillation

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

parameter quantization

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

architecture design

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

你可能感兴趣的:(深度学习,深度学习,机器学习,人工智能)