前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >持续学习笔记

持续学习笔记

作者头像
Sarlren
发布2023-01-31 11:04:39
7530
发布2023-01-31 11:04:39
举报
文章被收录于专栏:Sarlren的笔记

task incremental setting下的持续学习

在一系列的任务下,不同时刻到达的数据来自不同的任务,每个时刻拿到的数据是这个任务的全部数据,后续不会再拿到之前拿到过的数据。优化的目标是:

也就是在tao时刻的任务完成后,回头看所有任务上的loss之和都要最小。

持续学习的方法论

脉络:

具体分为三种方法(也有部分相互重叠):

  • replay
  • regularization-based
  • parameter isolationreplay
  • rehearsal:在训练的时候把存起来的一个子集一起拿来训练。
  • constrained optimization:不那么容易过拟合在选出来的那些之前的子集。限制新的任务不要在旧的任务上跑inference,通过把之前的任务梯度投影到可观测范围。
  • pseudo rehearsal:给之前的模型喂随机数据。是一些早期的工作。

regularization-based

  • data-focused:对之前任务的模型做知识蒸馏,作用在当前新数据下的模型。
  • prior-focused:估计模型参数的分布作为先验。如果后续任务改变了重要参数会被惩罚。

parameter-isolation

把各种任务的参数都分离开。

怎么平衡stability和flexibility?

  • 最大化flexibility的搜索:把在原来任务上的参数复制一份到新任务上,通过粗的grid search去搜学习率,挑出在新的这个复制参数上得到的最好性能(在新任务的验证集上),这个性能acc称为A*,学习率叫η*,也就是这个时候暂时不考虑过去任务的表现
  • stability decay:用这个η*训练原来的参数,要把相关的超参调到最高来达到最小遗忘。定义一个阈值p在A*上,来保证不会比A*小得太多,如果真的小的太多了,那么定义一个超参衰减因子α,把原来的超参衰减直到满足这个阈值。

这个过程写成代码:

这里好像没有体现出复制参数这回事。

各种方法的大概模型

replay

  • iCaRL: class-incremental,存下了之前任务里面每个类最靠近这个类内平均特征的样本。使用蒸馏。
  • GEM: 把当前任务梯度投影到可观测范围,和之前任务的梯度作比较。

把这些样本存起来会导致需要更多的资源和内存。

regularization-based

  • Learning without Forgetting(LwF): 在新任务训练之前,先记录对新任务数据的输出,然后用来蒸馏之前的知识。但这个方法对新任务和旧任务之间的联系有依赖关系,如果一直给差的很远的任务,错误会不断累积。
  • Encoder Based Lifelong Learning(EBLL):扩展了LwF,对不同的任务把原来低维的特征过一层自编码器。
  • Elastic Weight Consolidation (EWC): 在训练之后决定当前这个新任务的重要性。不知道细节在干嘛。

  • Synaptic Intelligence (SI): 在训练的时候就给出这个重要性。不知道细节在干嘛。

  • Memory Aware Synapses (MAS):

  • Incremental Moment Matching (IMM): 对过去的模型参数去加权平均。提出三种方法:
    • 用之前任务的参数初始化当前任务的参数
    • 把之前的任务参数通过一层特殊的dropout
    • 用l2正则处理之前的任务参数

parameter-isolation

  • PackNet: 先不修改之前的参数,但是会去掉一些不重要的参数(通过一定的计算方法),然后剩下的参数被拿到训练里。
  • HAT: 略。

综述里还有对各个方法的一个总结性表格。

iCaRL

class-incremental manner:

  • 每次到达的数据都是不同类的
  • 需要对已经观测到的多个类的分类。
  • 计算开销有限,或者缓慢增加。

iCaRL的三个内容:

  • nearest-mean-of-exemplars rule的分类
  • prioritized exemplar selection
  • 知识蒸馏、样本回顾的表示学习

nearest-mean-of-exemplar

分类的算法:

表示学习

也就是,给一堆新类和旧类的采样样本混起来,把当前模型先跑在旧类的采样样本上得到一些当前的分类,然后再用下面的loss训练。这个loss兼顾了新类的分类精确度,也有蒸馏部分,减少灾难性遗忘。这里的g_y只是声明类别,并不是过去时刻的模型。旧类采样样本存的是原图像而不是而不是特征向量,特征向量会因为随着时间变化而固定住,最后变得outdated。但是把他固定住有什么不好?感觉可以放松要求,不一定总是那几个值。

exemplar management

终于到了怎么选取采样样本的方法了,之前一直避而不谈。 在给定希望对新类建立m个采样样本的时候,用下面的方法构建采样样本集合。先算出整个类内的平均特征,然后逐个地找到离这个特征最近的那些样本,下面的argmin是在给定第k个采样样本之前的那些样本和当前正要加进来的第k个样本做平均,希望这个均值离全局均值最低。 P集合的顺序是有意义的,越靠前的样本越靠近均值。这样设计是因为前面看过的类是不可以再看到了,所以只能存下来。这样保证了就算采样样本变少了,也能看见平均的特征均值。

这只是对新类增加采样样本,然而在固定存储K个样本的时候,旧类需要减少已经存了的样本,也就是把原来存的一堆样本只取前m个。这里的m是K/t得出来的,t是已经观测的类数。

整个算法如下:

看起来iCaRL确实是共用了最后的分类头。

Learning without Forgetting

可以看作是蒸馏和finetune的结合。 在多任务尺度下的各种方法:

但是按照这种方法,好像后面的任务只能是前面任务的子集。 用了各种提点的小技巧,比如正则化,warm-up,temperature之类的技巧。

Gradient Episodic Memory for Continual Learning

这个ACC指的是在把所有任务都学完之后逐个任务跑test求avg。其中 \bar{b_i} 是随机初始化下对第i个任务的acc。当ACC相同时,更大的BWT或FWT是更优的。

GEM的核心是:

其中的M_k是前面任务的采样样本。这样可以让BWT不至于变得太不好。当找不到这样的g,那就退而求其次找一个\tilde{g},使得

不过事实上这里也不用存下来这个M_k,只需要把前面任务的梯度存下来就好了。也就像投影,不过这个投影是在垂直方向上的。至于这个投影的具体实施办法,还是参照原文吧,数学推导有点看不懂。GEM的算法(这里的g是上面那个g):

End-to-End Incremental Learning

两个成分:representative memory和deep network。

  • representative memory:和iCaRL类似的保存一些采样样本。甚至保存样本的手段都是一样的,取均值最近的那些样本。
  • deep network:一样的特征提取和分类头。但这里强调允许特征提取部分的fine-tune(虽然没人不允许特征提取部分是固定的)。这里的loss和iCaRL稍微不一样,表现在loss是整体都用的交叉熵。

这里的pdist和qdist是加了temperature的。

整体来看,pipeline有四步,这也是和iCaRL不一样的地方:

  1. 构建训练集,在这里加上data-augmentation。原文用了亮度、对比度、随机裁剪和镜像翻转。
  2. 训练。训练会把网络所有部分放开,包括特征提取部分。
  3. 挑训练集上的一个小部分出来fine-tune。为了平衡新类数目会远远多于采样样本数目,在训练之后加一个fine-tune环节,把新类的数目削减到和其他的一样多,跑在一个小学习率上。
  4. 修改representative memory。和iCaRL策略是一样的。

Faster ILOD: Incremental Learning for Object Detectors based on Faster RCNN

目标检测比分类更加困难,因为不止有灾难性遗忘的问题,还有在新任务的数据里是没有旧类标签的。 是class incremental的。 这里不避开新任务里含有旧物体的样本,不过没有了旧物体的label。

这里的设计基于Faster RCNN。在原来的基础上引入蒸馏以及各部分的loss。模式为:

在原有的loss上加上FE、RPN和RCN的loss。

  • FE的loss为:
  • RPN的loss为:

这里的q是分类输出,r是锚框输出,\tau是一个阈值。

  • RCN的loss为:

其中K是所有的RoI数,C_o是旧类且包含背景的总数,\tilde{p}是零均值下的分类结果,t是锚框输出。

  • 最终的loss:L_{total} = L_{RCNN} + \lambda_1 L_{F_{Dist}} + \lambda_2 L_{RPN_Dist} + \lambda_3 L_{RCN_Dist}

Overcoming Catastrophic Forgetting in Incremental Object Detection via Elastic Response Distillation

同样是蒸馏下的目标检测,不过这里不细分RPN和RCN,因为这里也没有说是RCNN的任务。一样的蒸馏,不一样的loss而已。对分类,loss从

变成了

这个motivation是KL下如果weight不恰当的话,背景类会远远多于非背景类,损害旧知识的保留。新loss的C_T^i是教师模型在m种选择的类别中的预测概率。

对于锚框的回归,先建模

,表示锚框的矩阵,以及

来标识T的锚框和S的锚框的差距,最后累加起来

这里的J是由algorithm 1选出来的。

algorithm 1是本文的novelty所在。之前的阈值或者topK的选取锚框都很粗糙,导致如果阈值太小就会忽略旧的物体,而阈值太大就会带来负的response。algorithm 1:

分类的时候取\tau_{C^{‘}}作为阈值,而回归(锚框)的话先把最高的置信度的锚框挑出来,然后去选阈值,最后一并nms。这样干的motivation:平衡不同response,在正态分布上取阈值是合适的response数目;在IOD任务上背景类远远多于物体类,一个较大的均值μ代表着更好的候选物体质量,可以挑选足够多的正类response。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • task incremental setting下的持续学习
  • 持续学习的方法论
    • regularization-based
      • parameter-isolation
      • 怎么平衡stability和flexibility?
      • 各种方法的大概模型
        • replay
          • regularization-based
            • parameter-isolation
            • iCaRL
              • nearest-mean-of-exemplar
                • 表示学习
                  • exemplar management
                  • Learning without Forgetting
                  • Gradient Episodic Memory for Continual Learning
                  • End-to-End Incremental Learning
                  • Faster ILOD: Incremental Learning for Object Detectors based on Faster RCNN
                  • Overcoming Catastrophic Forgetting in Incremental Object Detection via Elastic Response Distillation
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档