这篇文章主要是根据李宏毅老师介绍的知识要点进行总结
【機器學習2021】神經網路壓縮 (Network Compression) (一) - 類神經網路剪枝 (Pruning) 與大樂透假說 (Lottery Ticket Hypothesis)
【機器學習2021】神經網路壓縮 (Network Compression) (二) - 從各種不同的面向來壓縮神經網路
由于很多模型需要移植到硬件设备上,以及对模型运行效率有比较高的要求,所以我们需要对我们的模型进行剪枝以及压缩等操作。 以下将通过5个方面讲解模型压缩知识:
- Network Pruning(剪枝)
- Knowledge Distillation(蒸馏)
- Parameter Quantization(量化)
- Architecture Design(结构设计)
- Dynamic Computation (动态计算)
一、Network Purning(剪枝)
通过上图可以看出随着人类成长 ,经过剪枝,我们的神经元连接是越来越少。我们如何对我们的参数进行剪枝呢?我们需要剪枝哪些参数呢?
-
参数
显而易见的我们可以理解为当我们的参数(权重)的绝对值越大,我们认为该参数(权重)对模型影响越重要。 -
神经元
当然我们也可以根据神经元不为0的次数判断其重要性
最终我们的希望的是通过剪枝我们的模型的准确率不会下降太大。剪枝完之后,我们再剪枝后的模型进行finetune,接着在评价参数重要性进行剪枝,可以进行多轮,但是切记我们剪枝不要剪枝过多,否则网络很难还原。
weight purning在进行
权重剪枝
的时候,我们很难将权重直接干掉如上图所示,这样不仅很难部署,同时也很难做到GPU加速。
neuron pruning
在进行
神经元剪枝
的时候,我们可以很容易的进行部署及GPU加速。
为什么要从大的网络开始训练然后再剪枝呢?因为小的神经网络不容易训练。大的网络可以认为是很多小的子网络,子网络不一定能训练出来,但是众多子网络只要其中一个人成功,大的网络就能成功。
上图可以得出的结论:
-
初始绝对值不重要,正负号才重要。
反大乐透假说
★★★★ Learning Efficient Convolution Network through Network Slimming
分值小的剪枝 对gama做正则
二、 知识蒸馏
先训练大的神经网络(Teacher
),进行修剪再训练小的神经网络(Student
)。如下图所示:
学生训练的label为老师的预测的soft label继续训练。直接训练小的神经网络不如从大的神经网络输出结果进行训练效果好。这里认为老师不仅学习到本身的label知识,还能学到隐含的知识,比如1
和7
很像,老师学习的结果通过soft label 非one-hot label通过概率可以知道很相近,学生更容易去学习到,而让小的神经网络去学习是非常难的事情。
这里该机制也类似于
ensemble
的机制,就是组合多个模型输出,接着通过小的网络直接训练,往往再很多比赛的时候使用该机制。
三、 Parameter Quantization
- using less bits to represent a value(用少bit减少空间存储参数)
- weight clustering
- Represent frequent clusters by less bits, represent rare clusters by more bits(
e.g Huffman encoding
)
四、 Architecture Design
(Depthwise Separable Convolustion)
reference可防止overfitting
五、 Dynamic Computation
The network adjusts the computation it need.
不同阶段有输出,根据资源决定在哪里输出端输出
网友评论