zl程序教程

您现在的位置是:首页 >  其他

当前栏目

《RETHINKING THE VALUE OF NETWORK PRUNING》论文笔记

论文笔记 The of value Network
2023-09-11 14:22:29 时间

参考代码:rethinking-network-pruning

1. 概述

导读:在模型进行部署的时候一般会希望模型的尽可能小,减少infer时候资源的消耗,其中比较常用的方式就是模型剪枝,其中一般常用的方式是结构化剪枝,这样会硬件也比较友好,非结构化剪枝也是可以的。其采取的步骤是首先训练一个较大的模型,之后使用剪枝算法检出那些不重要的参数,之后再在重要参数的基础上进行finetune,以期望恢复网络性能。这篇文章对剪枝的后半段进行思考, 是否真的需要在重要权重的基础上进行finetune?剪枝之后的网络使用随机初始化对于结构化与非结构化都有效?剪枝之后初始化方式与学习率的影响? 文章中一个重要的发现是直接从剪枝之后的结构使用随机初始化(而非在重要权重上finetune)能得到持平甚至更好的网络性能。这样的结论是基于文章的如下观察得到的:
1)剪裁之后得到的重要权重对于剪裁之后的网络结构来说并不是那么重要,从其随机初始化上重新训练得到的结果在性能上持平甚至更好(finetune的模型可能会陷入局部最小值从而影响性能);
2)网络的剪枝其意义并不在于去寻找原有网络中的重要权重,而是去寻找最为适合的网络结构本身;
3)网络的剪枝可以看作是今后设计网络时候的指导思想,从而设计更加高效的网络;

传统上对于网络的剪枝压缩主要分为3个过程,见下图1所示:
在这里插入图片描述

  • 1)Training:训练一个保证网络性能的大模型;
  • 2)Pruning:在训练好的大模型的基础上进行网络剪枝压缩,以达到期望的网络计算复杂度;
  • 3)Finetuning:在剪枝之后保留的重要权重的基础上进行finetune以期望恢复网络性能;

2. “重要”权重使用与否分析

在原始的剪枝过程中是使用原网络中重要的权重作为初始化,之后进行finetune以期望恢复网络的精度,这篇文章中将这样的方法称之为Scratch-E。剪枝之后的网络直接使用随机初始化进行训练,文章中将这样的方法称之为Scratch-B(网络缩小了多少倍,那么在训练的时候网络的epoch和lr_scheduler也需要对应成比例的放大)。对此文章得到的实验结果为(结构化剪枝的结果,非结构化剪枝得到的结果也是类似的):
在这里插入图片描述

3. Uniform Pruning与否对性能的影响

Uniform Pruning与否含义就是是否将网络压缩作为统一的比例缩放,下图2就是两者之间最为显著的区别,左边的是使用统一的剪裁比例进行剪枝,右边就是使用适应的方式进行剪枝。这里能给后续设计网络结构提供指引,而不是盲目加大网络。
在这里插入图片描述
那么这两种剪枝方式对于最后性能的影响,其自然也是自适应的方式效果更加(大锅饭不好吃嘛):
在这里插入图片描述

4. 初始化方式与学习率的影响

在文章中分析了使用Winning Ticket与Random初始化对网络性能带来的影响,并且比较了不同学习率对于网络性能的影响,其结果见下图所示:
在这里插入图片描述
从上图中可以得到:

  • 1)两种网络初始化的方式其实差别并不是很明显;
  • 2)使用较大的学习率能拥有更好的性能表现,在小学习率的时候Winning Ticket拥有更好的性能表现;