【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

GST

2020-NIPS-The Generalization-Stability Tradeoff In Neural Network Pruning

来源:ChenBong 博客园


Introduction

剪枝算法 Generalization 与 Stability 的关系

Generalization:泛化性、泛化能力,在 unseen 的 data 上的性能,可以简单理解为测试集准确率,泛化能力好,测试集准确率高,Generalization gap(training acc - test acc) 小,过拟合程度低。

instability:不稳定性,剪枝算法执行前后,网络的性能下降比例,\(instability_{i}=\frac{t_{\mathrm{pre}, i}-t_{\mathrm{post}, i}}{t_{\mathrm{pre}, i}}\)

Stability:稳定性,1-instability

【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

Motivation

  • 大量剪枝算法在减少了参数量的情况下提高了模型的 test acc(提高了泛化能力),一种解释是剪枝算法通过去除模型中的参数冗余,减少对 training set 中噪声的过拟合,从而提高 泛化能力
  • 但也有工作认为,通过增加模型的参数量(even when the DNN already has enough parameters to fit large datasets of randomized data),可以提高模型的泛化能力(test acc提高)
  • 这里就产生了一个矛盾,如果增加参数量会提高模型的泛化能力,那么减少模型的参数量为什么也能提高模型的泛化能力?提高泛化能力的根本原因是什么?

Contribution

  • 实验证明了基于幅值的剪枝的效果相当于在训练过程中增加噪声(drop out),从而提高了模型的泛化能力, \(prune > baseline\)
  • 在剪枝的基础上,允许被剪掉的filter重新回到网络中,可以进一步提高 test acc,说明可以在不减少参数的情况下,进一步提高 test acc,即 \(prune_{resume} > prune > baseline\) ,说明减少参数并不是提高模型泛化能力的根本原因,泛化能力提高的根本原因是剪枝的过程中加入了噪声

Method

剪枝流程:迭代剪枝

【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

  • 总epoch数:325
  • 剪枝目标:VGG11/ResNet18 的最后4个卷积层
  • 剪枝算法 score:VGG11,filter的 \(l_2-norm\) ;ResNet18,feature map 的 \(l_2-norm\)
  • 总剪枝比例:VGG11,{30%, 30%, 30%, 90%};ResNet18,{25%, 40%, 25%, 95%}
  • 剪枝算法执行的阶段:start=7 epoch, end=247 epoch
  • 剪枝间隔:
    • r=40,每隔 40 个 epoch 执行一次剪枝算法,一共执行 240/40=6+1=7 次剪枝
    • r=3,每隔 3 个 epcoh 执行换一次剪枝算法,一共执行 240/3=80+1=81 次剪枝
  • 每次剪枝比例:总剪枝比例 / r

在图例中,

  • Prune_R 表示随机剪
  • Prune_L 表示每次剪掉 Largest score 的filter
  • Prune_S 表示每次剪掉 Smallest score 的filter
    • Prune_S 13% 表示 r=40,执行7次剪枝,每次剪掉 90%/7≈13% 的 Smallest score 的 filter
    • Prune_S 1% 表示 r=3,执行81次剪枝,每次剪掉 90%/81≈1% 的 Smallest score filter

剪枝间隔 r 与 Stability:剪枝间隔越小,每次剪掉的比例越低,Stability 稳定性越高

每次剪枝比例 与 Stability:每次剪枝比例越小,Stability 稳定性越高

剪掉 Smallest/Largest score 与 Stability:每次剪掉 Smallest score filter,Stability 稳定性越高

Experiments

稳定性 与 泛化能力(test acc)

4种配置:

  • No Pruning
  • Prune_S 1%
  • Prune_S 13%
  • Prune_L 13%

稳定性:No Pruning > Prune_S 1% > Prune_S 13% > Prune_L 13%

【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

左图:

  • test acc(泛化能力):No Pruning < Prune_S 1% < Prune_S 13% < Prune_L 13%

右图:

  • 平均稳定性 与 test acc(泛化能力)呈负相关,即方法越不稳定,test acc越高

那么能否通过(调节某个超参,如增大剪枝间隔r 来)不断减小剪枝算法的稳定性,来提高test acc呢?

以 剪枝间隔 r 这个超参为代表,研究超参与稳定性/泛化能力的关系

剪枝间隔 r (超参) 与 稳定性 vs 泛化能力/负相关系数

图例:【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

剪枝间隔 r 与 稳定性

【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

x:剪枝间隔r;y:平均稳定性

(90% 的剪枝率, 分 r 次剪)剪枝间隔越大,(每次剪的就越多),稳定性越差

剪枝间隔 r 与 test acc(泛化能力)

【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

x:剪枝间隔 r;y:test acc(泛化能力)

对于每次剪掉 Smallest 来说,在一定范围内,剪枝间隔越大,test acc 越高

剪枝间隔 r 与 (泛化能力 与 稳定性的负相关系数)

【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

x:剪枝间隔;y:负相关系数

剪枝间隔 r 越大,负相关性越弱

说明剪枝间隔 r(超参)在一定范围内,泛化能力与稳定性都是负相关的,即可以通过增大剪枝间隔r,进而降低方法的稳定性,进而提高泛化能力(test acc),但当 剪枝间隔 r(超参)超出一定的范围,不再具有负相关性,再提高剪枝间隔r,也无法提高最终的性能(泛化能力)

剪枝 与 noise injection 的等价性

剪枝 与 权重置零 与 权重加噪声:

【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network

在没有减少参数量的情况下,使网络的性能提高到比 剪枝方法 还要高

说明剪枝为什么能够提高网络性能的 “减少参数量,减少网络对噪声的过拟合,从而提高泛化能力(test acc)” 的说法是不够准确的,因为大网络在不减少参数量的情况下,一样可以有很好的 泛化能力,剪枝能提高网络性能的根本原因是在训练过程中引入了训练噪声,从而提高了泛化能力

Conclusion

Summary

  • 将 Dropout,剪枝与 增加训练噪声 统一起来,为网络泛化能力的提高提供了 一种统一的解释——即引入了训练噪声

To Read

Reference

Understanding deep learning requires rethinking generalization

https://www.zhihu.com/question/56151007

上一篇:[Linux] 磁盘空间不足问题排查


下一篇:CUDA Fortran和CUDA C有什么区别呢,看这张表你就知道啦