What is Model Compression

course link: http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML20.html

PPT link: https://slides.com/arvinliu/model-compression/fullscreen

1. Knowledge Distillation

KD的主要问题:Distill what?

  • logits (输出值)
    • 直接匹配 logits
    • 学习一个batch里面的 logits distribution
  • Feature (中间值)
    • 直接匹配中间的 Feature
    • 学习 Feature 中间如何转换

1.1. Logits Distillation

1.1.1. Background

假设给定一张图片,对图片中的物体/事物做识别,通常情况下只是使用简单的0/1标签来进行标注,即图中最显著的物体/事物在所属标签下标注为1,其余参数设置为0,以下图为例。在识别过程中,下图的标签为猫。然而,这样的标注忽略了:球,靠垫,猫下方的牛仔裤。

上述的标注方法就造成了标签不完整问题,但是,如果将图片中的某一块单独分割出来做识别,以球所在块为例,那就会造成识别结果与原来标注的情况不一致的问题。

解决办法: Label Refinery

即: 用自身Distill自身,过程如下:

1.1.2. Deep Mutual Learning

同时训练两个网络,互相学习对方的logits.

Step 1: 让$y_{2,t}$$y_{1,t}$做diverse,然后与CE的值进行相加得到用于更新Network 1参数的新的$loss$

Step 2: 使用和Step 1中一模一样的方法来更新Network 2。

使用这种方法来训练的 Network 1 和Network 2,效果都要比原先单独训练的 Network 1 和 Network 2要好。

1.1.3. Born Again Neural Networks

这种方法与Label Refinery很相似,如下图所示:

该方法与Label Refinery的差别在于:

  • 初始的Model是通过KD得到的.
  • 迭代使用CE.
  • 需要Ensemble所有的Student Model.

1.1.4. Pure Logits KD中的问题

小模型无法学习大模型的knowledge。

解决办法:使用一个参数量介于Teach&Student的TA做中间人来帮助Student学习,以此避免model差距过大学不好。

1.2. Feature Distillation

1.2.1 Background

Feature的核心思路即让Student Net去“看到”Teach Net所捕获的特征,以此来学习生成Teacher Net中的Feature进而得到正确的结果,这个过程的示意图如下。

1.2.2 FitNet

具体流程:先让Student Net学习如何产生Teacher Net的中间Feature,之后再使用Baseline KD.

Step 1: Fit feature 如下图所示,Teacher Net包含7层,Student Net包含4层,当前的目标是要让Student Net的前3层网络生成与Teacher Net中前4层网络相同的特征矩阵。因此,对Student Net第三层网络的输出加上一个权重矩阵$W_r$使其能够生成和Teacher Net第4层输出特征达到一定程度的相似。

Step 2: Fit logits 直接让Student Net的输出$y_s$去学习Teacher Net的输出$y_t$,如下图所示。

注: 模型架构越相近,效果越好。

1.2.3. FitNet中存在的问题&解决

Student Net不能很好的理解Teacher Net学到的Features.

造成问题的原因:

  • 模型容量上的区别.
  • Teacher Net上有大量冗余.

解决思路:通过Knowledge Compression减少模型冗余. 如下图所示.

解决方法:Attention.

Teacher Net每经过3层网络(1个group)就生成一个Attention,Student Net分3次去学习Teacher Net生成的Attention. 如下图所示.

Attention Map的生成过程:$(W,H,C)$$weight$各自平方后加成$(W,H)$的矩阵$T$$Attention Map=T/norm(M)$.

1.3. Relation Distillation

1.3.1. Background

Individual KD: 以每个sample为单位做知识蒸馏.

Relational KD: 以每个sample之间的关系做知识蒸馏.

Relational KD表示Student Net学习Teacher Net之间的关系模式.

结构性质的Relational KD示意图如下所示:

在Angle-wise KD上,只要在cosine上相似即可。

1.3.2. Distill Relational Information between Feature

以下图为例,需要识别的图片包括:0,9,1.三张图片经过一个小型网络之后生成了两类特征:circle和vertical line.0,9,1三个数字在这两个特征的维度分别是:[1,0],[1,1],[0,1],通过cosine相似度可以计算出这三个特征之间的关系。cosine相似度计算公式如下:

1
cos=\frac{\sum(x_i \times y_i)}{\sqrt(\sum(x_i^2)) \times \sqrt(\sum(y_i^2))}

基于上述计算公式,可以得到三张图片之间的cosine相似度。

基于这种方法Student Net就需要去学习Teacher Net生成features的方法,即,去学习cosine之间的similarity.

完整流程图如下图所示,从Teacher Net和Student Net中分别抽取出一个以batch为单位的Activations(压缩为1d数据),乘以权重除以Norm得到Pairwise Similarities,再让两个Pairwise Similarities产生loss,Student Net就可以学到Teacher Net的knowledge.

2. Network Pruning

2.1. Background

Neuron Pruning 流程图如下所示,假如要去掉中间某个层的神经元,只需要改变计算矩阵的维度即可。

Neuron Pruning在CNN上的应用与上图同理,区别在于CNN的应用上多了一个维度:channels。示意图如下。

2.2. Evaluate by Weight

2.2.1. sum of L1-norm

使用L1-norm的方式计算权重来决定Prune哪些权重,流程图如下.同理,也可以使用L2-norm的方式来进行计算。




L_n-norm的计算公式如下:

1
||x||_p=(\sum_{i=1}^n(|x_i|^p))^{\frac{1}{p}}

2.2.2. Filter Pruning via Geometric Media - FPGA

不同的norm会有不同的filters情况,在norm参数上设定一个阈值T,Prune掉小于阈值T上的全部norm所对应的neuron即可。

存在的问题:

  • Value of norm的值域范围小,难以找到合适的阈值;
  • Vlaue of norm不接近0,所有的feature map都对结果有贡献,也就不能进行Prune.




解决办法: 使用几何中心的方法进行Prune. 思路:其中多个filters或许具有相同的作用,因此,即使Prune掉其中的一个或几个filters并不会对最终的结果产生影响。




找到几何中心,保留,删除其余的neuron.

2.2.3. Network Slimming

使用对BN进行调整的$\gamma$参数来评估参数重要性.




然而,如果对$\gamma$不加以限制,$\gamma$的分布会导致网络难以Prune,因为很多$\gamma$是non-trivial(对网络均有贡献). 在对$\gamma$做限制之后,其值大量集中在0附近,有利于做Prune,直接Prune掉某个比0大一点的阈值即可.

2.2.4. Average Percentage of Zeros

在网络的前向传播过程中,经过Conv和ReLU计算之后,会有一些Feature变成0,将所有的非0值加起来做Average.

References

  • Knowledge Distillation

    • Distilling the Knowledge in a Neural Network (NIPS 2014)
    • Deep Mutual Learning (CVPR 2018)
    • Born Again Neural Networks (ICML 2018)
    • Label Refinery: Improving ImageNet Classification through Label Progression
    • Improved Knowledge Distillation via Teacher Assistant (AAAI 2020)
    • FitNets : Hints for Thin Deep Nets (ICLR2015)
    • Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer (ICLR 2017)
    • Relational Knowledge Distillation (CVPR 2019)
    • Similarity-Preserving Knowledge Distillation (ICCV 2019)
  • Network Pruning

    • Pruning Filters for Efficient ConvNets (ICLR 2017)
    • Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017)
    • Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration (CVPR 2019)
    • Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures
    • The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks (ICLR 2019)
    • Rethinking the value of network pruning (ICLR 2019)
    • Deconstructing Lottery Tickets: Zeros, Signs, and the Supermask (ICML 2019)