当前位置:   article > 正文

机器学习-27-Network Compression( 网络压缩)

network compression

Network Pruning(修剪)

INTRODUCTION

神经网络的参数很多,但其中有些参数对最终的输出结果贡献不大而显得冗余,将这些冗余的参数剪掉的技术称为剪枝。剪枝可以减小模型大小、提升运行速度,同时还可以防止过拟合。

剪枝分为one-shot和iteration剪枝:

  1. one-shot剪枝过程:训练模型–> 评估神经元(或者kernel、layer)的重要性–>去掉最不重要的神经元–> fine-tuning–>停止剪枝。

  2. iteration剪枝过程:训练模型–> 评估神经元(或者kernel、layer)的重要性–>去掉最不重要的神经元–> fine-tuning–>判断是不是要继续剪枝,如果是回到第二步(评估神经元的重要性),否则停止剪枝。

剪枝还分为结构化剪枝和非结构化剪枝:

  1. 结构化剪枝:直接去掉整个kernel的结构化信息;
  2. 非结构化剪枝:考虑每个kernel的每个元素,删除kernel中不重要的参数;也称为稀疏剪枝。

重要性判断:

那么怎么判断哪些参数是冗余或者不重要的呢?

  • 对权重(weight)而言,我们可以通过计算它的l1,l2值来判断重要程度
  • 对neuron而言,我们可以给出一定的数据集,然后查看在计算这些数据集的过程中neuron参数为0的次数,如果次数过多,则说明该neuron对数据的预测结果并没有起到什么作用,因此可以去除。

Why Pruning

那我们不禁要问,既然最后要得到一个小的network,那为什么不直接在数据集上训练小的模型,而是先训练大模型?

  • 解释一

    一个比较普遍接受的解释是因为模型越大,越容易在数据集上找到一个局部最优解,而小模型比较难训练,有时甚至无法收敛。

  • 解释二

    2018年的一个发表在ICLR的大乐透假设(Lottery Ticket Hypothesis)观察到下面的现象


Lottery Ticket Hypothesis(大乐透假说)

我们先对一个network进行初始化(红色的weight),再得到训练好的network(紫色的weight),再进行pruned,得到一个pruned network

  • 如果我们使用pruned network的结构,再进行随机初始化random init(绿色的weight),会发现这个network不能train下去
  • 如果我们使用pruned network的结构,再使用原始随机初始化original random init(红色的weight),会发现network可以得到很好的结果

作者由此提出:可能神经元会不会被训练起来,与初始值有很大关系,是一种大乐透现象。

关于大乐透假说,更多的可以参考:

  • 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/554989
推荐阅读
相关标签