前言
神经网络压缩(二)其他方法
一、Knowledge distillation
先train一个大的network叫做teacher network,小的network叫做student network。Student network跟teacher network学。假设要做手写数字识别,把训练资料输入teacher net,teacher产生output,输出是一个分布。给学生一样的图片,学生不是根据正确答案学习,而是把老师的输出当做正确答案,学生的输出尽量逼近老师的输出。为什么不直接训练小的network,答案跟network pruning中一样,小的network train的效果不如大的network。为什么knowledge distillation为什么有用,一个解释是teacher network会提供student network额外的资讯,这样小的network学的可能会比直接根据正确答案学要好一些。
假设teacher训练时看到过7这个数字,但是student训练时没有看到过7这个数字,但是光凭着teacher告诉student 1和7像,都有机会学到7什么样子。Teacher network不一定是单一的network,他可以是多个network。Ensemble:把多个模型的输出平均起来,把多个teacher network的输出做ensemble,让student network去学这个输出。使用knowledge distillation有一个小技巧,就是把softmax的函数稍微改变,在softmax上加入temperature。Softmax可以让输出变成一个介于0-1中的一个概率分布。Temperature就是在做指数运算的时候每一个数值都除一个T,T是需要调的参数,T大于1时就是让比较集中的分布变得平滑一点。为什么需要把集中的分布变得平滑一点,如果比较集中,那么就会导致经过softmax后,不集中的那几个都会接近于0,跟直接和正确答案学没有区别,好的老师会告诉那些类别相似。对老师而言加上这个temperature结果不会变,最高分还是最高分,最低的还是最低,分类结果不变,但是评分会比较平滑,这个结果给student学才有意义。
二、Parameter quantization
1.是否可以用更少的存储空间存一个参数,比如之前用32bit,是否16bit就足够
2.weight clustering
把network中的weights分区,把大小相近的分到一个区,相同分区的用同一个数值表示,这样在存储的时候,就只需要存储一个表格表示分区和分区对应的数值。
3.huffman encoding:常出现的用比较少的bit描述,比较少出现的用多的bit描述。
Binary weights
是否可以只用一个bit描述weights,比如只有正负1.一共只有两种情况,这样就可以只用一个bit描述。
三、Architecture design
1.depthwise convolution
有几个channel就有几个filter,每隔filter只管一个channel。Input跟output的channel的数量一样。不过有一个问题就是channel和channel之间没有互动,如果有些需要跨channel的pattern是没有办法解决的。
2.pointwise convolution
Filter的大小限制为1*1,只考虑channel之间的关系,不考虑同一个channel内部的关系。
比较普通的convolution和depthwise加pointwise convolution的参数差异
o通常是一个很大的值,所以如果采用两者相加的方法,kernel size越大,那么参数的数量就会相比于普通的越少。
把一般的convolution拆成两部分的时候,相当于吧一层的network拆成两层对于参数的需求就减少了。
四、Dynamic computation
希望network可以自由的调整它需要的运算量。一个可能的方法是可以让network自由调整深度。在相邻layer间添加一个额外的layer根据hidden layer的输出,决定现在分类的结果是什么。当运算资源充足时,可以跑所有的layer,当不充足时,可以决定在那个layer后输出结果。一般只关注最后一个layer的输出和真实值的差距是多少,现在也可以让真实值和每一个额外的layer的输出越接近越好,把所有两者间的距离相加得到L,让L越小越好。
不仅可以改变深度,也可以改变宽度。
总结
学习视频地址:https://www.bilibili.com/video/BV13Z4y1P7D7/?p=36&spm_id_from=333.880.my_history.page.click&vd_source=3a369b537e1d34ff9ba8f8ab23afedec