网络压缩
Why ?
在未来我们可能需要model放到model device上面,但这些device上面的资源是有限的,包括存储控价有限和computing power有限
Network Pruning(修剪)
Network can be pruned
Network Pruning
对于训练好的network,我们要判断其weight和neural的重要性:
- 如果某个weight接近于0,那么我们可以认为这个weight是不那么重要的,是可以pruning的;如果是某个很正或很负的值,该weight就被认为对该network很重要;
- 如果某个neural在给定的dataset下的输出都是0,那么我们就可以认为该neural是不那么重要的
在评估出weight和neural的重要性后,再进行排序,来移除一些不那么重要的weight和neural,这样network就会变得smaller,但network的精确度也会随之降低,因此还需要进行fine-tuning
最好是每次都进行小部分的remove,再进行fine-tuing,如果一次性remove很多,network的精确度也不会再恢复
Why Pruning?
那么为什么不直接train一个小的network呢?
因为小的network比较难train,大的network更容易optimize(优化)
Lottery Ticket Hypothesis(彩票假说)
我们先对一个network进行初始化(红色的weight),再得到训练好的network(紫色的weight),再进行pruned,得到一个pruned network
- 如果我们使用pruned network的结构,再进行随机初始化random init(绿色的weight),会发现这个network不能train下去
- 如果我们使用pruned network的结构,再使用原始随机初始化original random init(红色的weight),会发现network可以得到很好的结果
train这个network就像买大乐透一样,有的random可以tranin起来,有的不可以
Pratical Issue(实际问题)
如果我们现在进行weight pruning,进行weight pruning之后的network会变得不规则,有些neural有2个weight,有些neural有4个weight,这样的network是不好implement(实行)出来的;
GPU对矩阵运算进行加速,但现在我们的weight是不规则的,并不能使用GPU加速;
实做的方法是将pruning的weight写成0,仍然在做矩阵运算,仍然可以使用GPU进行加速;但这样也会带来一个新的问题,我们并没有将这些weight给pruning掉,只是将它写成0了而已
实际上做weight pruning是很麻烦的,通常我们都进行neuron pruning,可以更好地进行implement,也很容易进行speedup
Knowledge Distillation
Student and Teacher
我们可以使用一个small network(student)来学习teacher net的输出分布(1:0.7…),并计算两者之间的cross-entropy,使其最小化,从而可以使两者的输出分布相近
teacher提供了比label data更丰富的资料,比如teacher net不仅给出了输入图片和1很像的结果,还说明了1和7长得很像,1和9长得很像;所以,student跟着teacher net学习,是可以得到更多的information的
Ensemble(合奏)
在实际生活中,设备往往放不下太多的model,这时我们就可以使用Knowledge Distillation的思想,使用student net来对teacher进行学习,在实际的应用中,我们只需要student net的model就好
Temperature
Parameter Quantization(参数量化)
Architecture Design(架构设计)
Low rank approximation(低阶近似)
中间插入一个linear层,大小为K,那么也可以减少需要训练的参数
Review: Standard CNN
每个filter要处理所有的channel
Depthwise Separable Convolution(深度可分离卷积)
每个filter只处理一个channel,不同channel之间不会相互影响
和一般的convolution是一样的,有4个filter,就有4个不同的matrix
第一步用到的参数量为3 x 3 x 2 = 18,第二步用到的参数量为2 x 4 = 8,一共有26个参数
Standard CNN vs Depthwise Separable Convolution
Dynamic Computation
本文图片来自李宏毅老师课程PPT,文字是对李宏毅老师上课内容的笔记或者原话复述,在此感谢李宏毅老师的教导。