迭代剪枝单网络多任务:PackNet: Adding Multiple Tasks to a Single Network by Iterative Pruning

在这里插入图片描述

在这里插入图片描述

Abstract

本文提出了一种在单个深度神经网络中增加多个任务的方法,同时避免了灾难性遗忘。

1. Introduction

终身或持续学习[1,14,22]是一般人工智能助理的关键要求。在这种情况下,代理需要获得新任务的专业知识,同时保持其在以前学习的任务上的性能,理想情况下不需要为每个单独的任务存储大型的特殊模型。
然而,由于与新任务相关的特征是通过修改网络权值来学习的,对先前任务很重要的权值可能会改变,从而导致性能下降,即所谓的“灾难性遗忘”。
目前克服灾难性遗忘的方法,如无遗忘学习(LwF)[18]和弹性重量巩固(EWC)[14],试图通过使用proxy losses来保留对先前任务很重要的知识。
我们提出了一种使用基于权重的剪枝技术[7,8]的方法,在深度网络经过一项任务训练后,在精确度损失最小的情况下,释放跨所有层的冗余参数。通过使用剪枝生成的特定于任务的参数掩码,我们的模型即使在添加了多个任务之后也能够保持相同的精度,并且每个新任务都会产生非常低的存储开销。
我们的实验证明了我们的方法在一些高级特征传输效果不佳的任务上的有效性,这表明需要修改所有层的网络参数。
以前的一些研究及其变体,如无遗忘学习法(LwF)[18,22,27]和弹性加权巩固(EWC)[14,16],都是为了训练一个模型处理一序列多个任务。
当添加一个新任务时,LwF使用蒸馏损失[10]来保留网络对旧任务的响应,其中响应目标是使用当前任务的数据计算的。因此,LwF不需要存储旧的训练数据,但是,如果新任务的数据属于不同于先前任务的分布,这种策略可能会导致问题。随着更多不同的任务被添加到网络中,先前任务的性能会迅速下降[18]。
EWC试图通过使用一个二次(quadratic)约束来最小化对上一个任务很重要的权重的变化,以确保它们不会偏离初始值太远。
与LwF和EWC类似,我们不需要存储较旧的数据。与EWC一样,我们希望避免改变对先前任务很重要的权重。但是,不要使用软约束,而是使用网络剪枝技术来确定最重要的参数,就像稍后介绍的那样。与之前的工作相比,使用我们的方法添加一个非常不相关的新任务不会改变旧任务的性能。
随着神经网络变得越来越深和更大,大量的工作已经出现,目的是通过降低存储网络权值所需的数值精度[5,6,12,23],或是通过删减不重要的网络权值[7,8,17,19,20],来减小训练模型的规模以及参考所需的计算量。
如果允许网络随着新任务的增加而增长,则可以限制旧任务的性能损失。一种称为渐进式神经网络的方法[26],为每个新的数据集复制网络结构,每个新层通过横向连接到相应的层进行扩展。新层的权重得到优化,而旧层的权重保持不变。因此,最初的网络是不变的,而新的层能够重用来自旧任务的表示。这种方法不可避免的缺点是,整个网络的大小随着增加的任务数量不断增加。为我们的方法添加的每个数据集的开销低于[26],因为我们只存储一个二进制参数选择任务,可以进一步跨任务组合,下一节将对此进行解释。
另一个最近的想法,叫做pathnet[3],使用进化策略来选择穿过网络的路径。他们也冻结了旧的神经通路,允许新引入的任务重复使用旧的神经元。high hevel上,我们的方法旨在实现类似的行为,但不依赖于计算密集的搜索架构或路径。

3. Approach

我们的方法的基本思想是使用网络剪枝技术来创建自由的参数,然后可以在不增加额外的网络容量的情况下,为学习新任务而进行优化。
在这里插入图片描述
我们发现没有必要学习与EWC相似的任务特定的biass[14],并且在第一次修剪和重新训练网络之后保持所有层的偏差不变。类似地,在使用批处理归一化的网络中,在第一轮修剪和再训练之后,我们不更新参数(增益、偏差)或运行平均值(均值、方差)。这样的选择有助于减少额外的每项任务开销。添加多个任务的唯一开销是稀疏掩码的存储,该掩码指示对特定任务哪些参数是活动的。
在这里插入图片描述
值得注意的是,我们的基于剪枝的方法无法对所有任务执行同步推理,因为滤波器的响应随其稀疏程度的变化而变化,并且在通过像ReLU这样的非线性函数后不再是可分离的。
形成过滤器级剪枝,即打开/关闭整个过滤器,而不是单个参数,可以同时进行推理。然而,我们在第5.5节中指出,这些方法目前的修剪能力有限,不能在性能没有显著损失的情况下适应多个任务。

4. Experiments and Results

从一个最初被更高比率修剪的网络开始,可以在细粒度任务上获得更好的性能。

相比之下,联合训练( jointly trained)的基线获得的性能要比单独的ImageNet网络差得多,这突出了与联合训练相关的一个常见问题,即需要平衡多个数据集之间的混合比,这些数据集可能不是互补的,并适应它们可能不同的超参数要求。且分开训练可能更快。(外,我们在Places365上只对pruned network进行了10个epoch的训练,而对joint和individual network进行了60-90个epoch的训练)

虽然我们尝试学习每个任务单独的batchnorm参数,这进一步提高了性能,但我们选择冻结batchnorm参数,因为它更简单,并且避免了存储这些独立参数(每个batchnorm层4个向量)的开销。

除了在一系列网络中获得良好的性能外,我们基于剪枝的方法的另一个好处是,对于给定的任务,网络可以进行少量的迭代修剪,以便在当前任务精度损失和为后续任务提供自由参数之间实现理想的折衷。注意,参数越少,方法的掩码存储开销就越低。

5. Detailed Analysis

5.1. Effect of training order

这些发现表明,如果可以预先决定任务的顺序,那么应该首先添加最具挑战性或不相关的任务
在这里插入图片描述

5.2. Effect of pruning ratios

在这里插入图片描述

5.3. Effect of training separate biases

如表5所示,通过学习每层任务特定的偏差,我们没有观察到任何显著的性能改进。共享偏差减少了我们提出的方法的存储开销,因为每个卷积、完全连接或批处理规范化层都可以包含一个相关联的偏差项。因此,我们在报告的结果中选择不学习任务特定的偏差。
在这里插入图片描述

5.4. Is training of all layers required?

在这里插入图片描述

5.5. Comparison with filter-based pruning

为了完整性,我们报告了基于滤波器的实验[20],它消除了整个滤波器,而不是稀疏化它们。
或者经过一轮修剪的筛选器,所有未通过修剪的筛选器(因此可用于后续任务)的传入权重设置为0。因此,当为新任务学习新滤波器时,以前任务的滤波器不会使用这些输出。则上一个任务的筛选器输出将始终保持不变,而不管为以后添加的任务学习的筛选器如何。
在这里插入图片描述
基于过滤器的剪枝方法的最后一个缺点是,它们更复杂,需要在剩余网络和跳过连接的情况下仔细实现,正如Liet al所指出的。

brief summary

  1. 越难的任务越靠前(这点有争议,具体还是综合考虑吧)
  2. 压缩率可以达到50%~70%(还是看任务,甚至有可以压缩到95%的)
  3. 共享偏差可以节省参数
  4. 能全训练就全训练

6. Conclusion

猜你喜欢

转载自blog.csdn.net/g534441921/article/details/107512612
今日推荐