人工智能-深度学习:神经网络模型压缩技术(Network Compression)

一、技术背景

  • 一般情况下,Neural Networks的深度和效果成正比,网络参数越多,准确度越高,基于这个假设,ResNet50(152)极大提升了CNN的效果,但计算量也变得很大。这种网络很难跑在前端移动设备上。这几年如火如荼的各种神经网络芯片,其思路是对于给定的计算任务用专用硬件加速。
  • 另一个思路是尽可能简化模型来减少计算量和存储占用的一类方法称为模型压缩(Model compression)。基于尽可能简化模型这个假设,有很多处理方法,设计层数更少的网络、更少的卷积和、每个参数占更少的字节等等。
  • 模型压缩(Model compression)基于一个假设,或者说目前的共识,就是DNN的过参数化(Over-parameterization)。
  • 深度神经网络与其它很多机器学习模型一样,可分为训练和推理两个阶段。训练阶段是根据数据学习模型中的参数(对神经网络来说主要是网络中的权重);推理阶段中将新数据喂进模型,经过计算得出结果。
  • Neural Networks的过参数化是指训练阶段我们需要大量的参数来捕捉数据中的微小信息,而一旦训练完成到了推理阶段,我们并不需要这么多的参数。这样的假设就支持我们可以在部署前对模型进行简化。
  • 模型压缩中的pruning和quantization两类方法正是基于这样的前提。模型简化后有很多好处,包括但不限于:
    1. 最直接的好处就是计算量的减小,从而使计算时间更少,功耗更小。
    2. Memory footprint变小,可以放到更低端的设备上跑。还有个额外的性能好处是本来需要既慢又耗电的DRAM参与,现在有可能放在SRAM就搞定。
    3. Size更小的包有利于应用发布和更新。如一些手机市场会对应用的大小有限制,另外也有利于车OTA升级。

二、模型压缩方法

1、Network Pruning(剪枝)

  • 不能拿了模型瞎剪,因为这样精度可以会下降得很厉害以至无法接受。
  • 有些情况会在pruning后精度提高的,这说明原模型过似合(overfit)了,pruning起到了regularization的作用。
  • 就一般情况下讲,核心问题是成如何有效地裁剪模型且最小化精度的损失。
  • 模型压缩其实不是一个新话题,对于神经网络的pruning在上世纪80年代末,90年代初左右就有研究了。但因为当时的大环境下,神经网络(那时没有deep neural network,只有neural network,或为区分称为shadow neural network)并不是机器学习的一个特别主流的分支,因此之后的很长一段时间也没有大量开枝散叶,但他们对问题的梳理定义和解决问题思路对二十多年后的很多工作产生了深远的影响。
  • 到了2012年,我们都知道深度学习一战成名,大放异彩。之后刷榜之风兴起且愈演愈烈,大家的注意力就是提高精度。于是大趋势就是不断地加深加重网络以提高精度,ImageNet准确率每年都创新高。
  • 2015-16年期间,Hang Song等人发表了一系列对深度神经网络进行模型压缩的工作。如《Learning both weights and connections for efficient neural networks》,《EIE: Efficient inference engine on compressed deep neural network》。其中《Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding》获得了ICLR 2016的best paper。其中对当时经典网络AlexNet和VGG进行了压缩。结合pruning,quantization和huffman encoding等多种方法,将网络size压缩了几十倍,性能获得成倍的提升。其中对于pruning带来的精度损失,使用了iterative pruning方法进行补偿,可以让精度几乎没有损失。这让大家意识到DNN参数冗余程度如此之大,可榨油水如此之多。
  • 之后这几年,模型压缩领域变得越丰富,越来越多的相关工作衍生出各种玩法。
    人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第1张图片

1.1 Weight pruning

  • 按参数(或特征输出)绝对值大小来评估重要性,然后用贪心法将那部分干掉,这类称为magnitude-based weight pruning
  • Weight pruning 的问题:裁剪后的各个Neuron的Weight参数不对称,无法使用矩阵运算来加速。

人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第2张图片

1.2 Neuron pruning

人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第3张图片

2、Knowledge Distillation(知识蒸馏)

  • Hinton的文章"Distilling the Knowledge in a Neural Network"首次提出了知识蒸馏(暗知识提取)的概念,
  • 通过引入与教师网络(teacher network:复杂、但推理性能优越)相关的软目标(soft-target)作为total loss的一部分,以诱导学生网络(student network:精简、低复杂度)的训练,实现知识迁移(knowledge transfer)。
    人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第4张图片
  • 如上图所示,教师网络(左侧)的预测输出除以温度参数(Temperature)之后、再做softmax变换,可以获得软化的概率分布(软目标),数值介于0~1之间,取值分布较为缓和。Temperature数值越大,分布越缓和;而Temperature数值减小,容易放大错误分类的概率,引入不必要的噪声。针对较困难的分类或检测任务,Temperature通常取1,确保教师网络中正确预测的贡献。
  • 硬目标则是样本的真实标注,可以用one-hot矢量表示。total loss设计为软目标与硬目标所对应的交叉熵的加权平均(表示为KD loss与CE loss),其中软目标交叉熵的加权系数越大,表明迁移诱导越依赖教师网络的贡献,这对训练初期阶段是很有必要的,有助于让学生网络更轻松的鉴别简单样本,但训练后期需要适当减小软目标的比重,让真实标注帮助鉴别困难样本。
  • 另外,教师网络的推理性能通常要优于学生网络,而模型容量则无具体限制,且教师网络推理精度越高,越有利于学生网络的学习。
  • 教师网络与学生网络也可以联合训练,此时教师网络的暗知识及学习方式都会影响学生网络的学习,
    L ( x ; W T , W A ) = α H ( y , p T ) + β H ( y , p A ) + γ H ( z T , p A ) L(x;W_T,W_A)=αH(y,p^T)+βH(y,p^A)+γH(z^T,p^A) L(x;WT,WA)=αH(y,pT)+βH(y,pA)+γH(zT,pA)
    式中三项分别为:
    1. 师网络softmax输出的交叉熵loss
    2. 学生网络softmax输出的交叉熵loss
    3. 教师网络数值输出与学生网络softmax输出的交叉熵loss
      人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第5张图片
      人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第6张图片

3、Parameter Quantization(量化)

parameter quantization是一种减少神经网络需要的储存空间的技术
人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第7张图片

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

4、Architecture Design

  • 调整神经网络的架构设计,减少所需要的参数数量
  • 在实战中最有效的做法
    人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第8张图片
  • 现在采用这种技术的网络主要有:
    1. depth separable convolution
    2. squeezeNet
    3. mobileNet
    4. shuffleNet
    5. Xception
      人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第9张图片
      人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第10张图片

5、Dynamic Computation

  • 动态计算追寻的是一种“先求有,再求好”理念

  • 首先训练一个多重分类器,然后在选择其中某一层的输出作为最终的分类器。
    人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第11张图片

  • 训练完一整个分类器后,可以将layer1或者layer2的输出作为压缩的分类器使用。

  • 将中间Layer抽取出来做分类器使用会影响整个神经网络原有的布局,
    人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第12张图片

  • Multi-Scale Dense Networks可以解决将中间Layer抽取出来做分类器使用会影响整个神经网络原有的布局的问题。
    人工智能-深度学习:神经网络模型压缩技术(Network Compression)_第13张图片




参考资料:
深度网络模型压缩 - CNN Compression
闲话模型压缩之网络剪枝(Network Pruning)篇
知识蒸馏(Knowledge Distillation)
Apprentice: Using Knowledge Distillation Techniques To Improve Low-Precision Network Accuracy

你可能感兴趣的:(#,深度学习/DL,人工智能,深度学习)