神经网络部署--网络压缩技术Network Compression

1 network pruning

network pruning技术的思路是:训练一个大的神经网络→评价网络中参数和神经元的重要度→根据重要度排序,移除不重要的weight和神经元(置0)
神经网络部署--网络压缩技术Network Compression_第1张图片
为什么要训练一个大的网络再压缩,而不是直接训练一个小的网络呢?
因为研究表明,大的网络比较容易训练,效果也更好。

2 knowledge distillation

训练一个大的,效果好的神经网络→训练一个小的网络,但是损失函数不以实际值为参照,而是以大的网络的输出为参照进行训练
这种做法通常效果不佳

3 parameter quantization

parameter quantization是一种减少神经网络需要的储存空间的技术

  • 采用较少的bit来储存神经网络的值
  • 首先将weight进行聚类,直接储存类别和类别代表的值,而不是储存每一个weight,这样就会减少存储的需要的空间
  • 也可以采用huffman编码等方式来减少储存
  • 采用binary connect来设置权重,即权重都是+1或者-1

4 Architecture Design

设计网络架构来减少权重的个数,例如下图的网络,从前一层神经元个数N到后面一层神经元个数是M,W的个数为N×M。
神经网络部署--网络压缩技术Network Compression_第2张图片
如果在两层之间增加一层的话,如下图所示,那么W的个数为N×K+M×K,合理设置K的值,就能使权重的数量减少
神经网络部署--网络压缩技术Network Compression_第3张图片
现在采用这种技术的网络主要有:

  • depth separable convolution
  • squeezeNet
  • mobileNet
  • shuffleNet
  • Xception

5 dynamic computaion

动态计算追寻的是一种“先求有,再求好”理念,例如著名的Multi-Scale Dense Networks,首先训练一个多重分类器,然后在选择其中某一层的输出作为最终的分类器。
神经网络部署--网络压缩技术Network Compression_第4张图片
训练完一整个分类器后,可以将layer1或者layer2的输出作为压缩的分类器使用。

你可能感兴趣的:(python,人工智能)