zoukankan      html  css  js  c++  java
  • 【Generalization-Stability Tradeoff】2020-NIPS-The Generalization-Stability Tradeoff In Neural Network Pruning-论文阅读

    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

    image-20201027184420188

    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

    剪枝流程:迭代剪枝

    image-20201027184420188

    • 总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%

    image-20201027191923070

    左图:

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

    右图:

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

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

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

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

    图例:image-20201027194950416

    剪枝间隔 r 与 稳定性

    image-20201027194252924

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

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

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

    image-20201027194550909

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

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

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

    image-20201027195312365

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

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

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

    剪枝 与 noise injection 的等价性

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

    image-20201027200938842 image-20201027200723932

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

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

    Conclusion

    Summary

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

    To Read

    Reference

    Understanding deep learning requires rethinking generalization

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

  • 相关阅读:
    骨灰级程序员20条编程经验
    js常用正则表达式
    css样式大全(整理版)
    ASP.NET中常用的26个优化性能方法
    C# 中的委托和事件
    Page的ResolveClientUrl与ResolveUrl读取路径
    层设定固定高度,内容超过高度,自动延伸
    Catalan数(卡塔兰数)
    称球问题
    zabbix分布式监控系统安装配置
  • 原文地址:https://www.cnblogs.com/chenbong/p/13901944.html
Copyright © 2011-2022 走看看