NTU ML2023Spring Part2.14 终身学习

根据使用者的 feedback 更新我们的模型.有一个问题是学完不同 domain 的数据(多个任务)之后会忘了之前学过的内容,但如果把数据混在一起学却能同时学会.这种状况是 catastrophic forgetting,用 catastrophic(灾难性的)来形容足见遗忘的夸张程度.

那把之前的数据全记下来,有新的资料就混合进去学一遍不行吗?理论上是可行的,实践上会带来存储和计算的问题.

为什么不对每个任务单独学一个模型呢?可以,但一方面这些模型的存储是个问题,另一方面它们不能共享知识.人类能做到学会多个任务,那机器为什么不行呢?这就是 life long learning 想解决的问题.

要评价一个 life long learning 系统的好坏,设你有 \(T\) 个任务(这些任务通常都比较相近,是同一个任务在不同的 domain 里),记 \(R_{i,j}\) 为学完前 \(i\) 个任务之后在任务 \(j\) 上的表现.则有不同的几种方式评价:

  • accuracy = \(\dfrac{1}{T} \sum_{i=1}^{T} R_{T, i}\),即全部学完后的平均正确率.
  • backward transfer = \(\dfrac{1}{T-1} \sum_{i=1}^{T-1} (R_{T, i} - R{i, i})\),即平均遗忘程度.这个值一般是负的,如果是正的说明学了新的任务后反而对旧的任务有所启发.
  • forward transfer,不常见.

现在有三种常见的方法做 life long learning:

  • selective synaptic plasticity

    降低网络的「突触可塑性」,让一些神经元不再改变.

    又叫 regularization-based approach.

  • additional neural resource allocation

  • memory reply

selective synaptic plasticity

为什么会有 catastrophic forgetting?因为每个任务的 error surface 是不一样的.我们希望某些对之前任务比较重要的参数尽量不要变.

假设之前学完任务之后得到参数 \(\theta^b\),我们给每个参数一个值 \(b_i\),衡量这个参数是否重要.原来的 loss 为 \(L(\theta)\),则新的 loss 设为 \(L'(\theta) = L(\theta) + \lambda \sum_i b_i (\theta_i - \theta^b_i)^2\).即我们希望 \(\theta_i\)\(\theta^b_i\) 越接近越好,但加权.这个就是 selective synaptic plasticity 的做法.

如何确定 \(b_i\)?我们怎么知道某个参数对之前的任务是否重要?有很多种不同的方法.

还有一种早期的方法 gradient episodic memory (GEM),是在 update 的方向上做限制.具体地说就是记下之前任务的 gradient,然后当前任务 gradient 如果与之方向不一致(内积为负)就修改到方向一致,且修改程度尽量小.这种方法有个缺点,它需要过去任务的资料(虽然只需少量资料).

additional neural resource allocation

一个最早的做法是 progressive neural networks.它的想法是每学一个新的任务都扩充一部分网络大小,然后只改动新的参数.

它反过来的想法是 packnet,我们先开一个大的 network,但对每个任务我们只使用它的一部分.

上面两个缝合起来就是 compacting, picking, and growing (CPG).

memory replay

虽然我们不能使用过去的资料,但可以用过去的资料训练一个 generator,用 generator 产生过去的资料,然后混在新的任务资料里一起训练.

甚至可以做到分类时做新的任务可以添加新的种类.

上面所有内容只是 life long learning 的冰山一角.更多可以看 https://arxiv.org/abs/1904.07734

如果我们调换学习不同任务的顺序,会产生不同的结果.相应的研究是 curriculum learning.

posted @ 2025-05-02 16:30  383494  阅读(23)  评论(0)    收藏  举报