终身学习将一个网络在不同的任务上依次训练,而多任务将一个任务同时训练,可以避免遗忘,达到更好的效果。由于这一效果是终身学习无法达到的,通常被认为是终身学习的性能上界。
那么终身学习的价值在哪里呢?实际上,多任务学习在训练任务过多时存在很多问题。例如当我们学习过很多科目,想要学习一门新的科目,多任务学习强迫我们一直携带着之前的课本(存储问题),强迫我们把之前的课本和新课本再阅读一遍(计算问题)。这些问题在训练任务过多的时候将导致无法部署。
终身学习和迁移学习的一个很重要的区别在于,迁移学习的目的是利用之前的任务来学习新的任务,因此在学习新任务的时候,我们不在乎模型再在旧任务上的效果;而对于迁移学习来说,我们希望我们的模型在旧任务上面仍然具有好的效果。
想要实现终生学习,有一个非常重要的任务是知识保留。因为通常来说,机器学习了一个新的,就会忘记旧的,这一过程被称为Catastrophic Forgetting(灾难性遗忘)。
灾难性遗忘为什么会产生呢?举一个例子,在下图所示的误差空间中,蓝色越深代表误差越小。
可以看出, θ ∗ \theta^* θ∗对于任务2来说是误差最小的位置,但是对于任务1来说,效果却很差,可以理解为任务1被遗忘了。
Selective Synaptic Plasticity是一种非常常用的方法。它的核心思想是,由于有些参数对过去的模型很重要,通过添加一个额外的损失,使得模型倾向于不改变这些重要的参数,而只改变不重要的参数。
例如,在上图中,由于 θ 2 \theta^2 θ2对于任务1比较重要,而对任务2没有那么重要(只要在椭圆形范围内就可以了)。因此倾向于不改变 θ 2 \theta^2 θ2,使任务2在 θ 1 \theta^1 θ1方向优化。
(1)SSP损失
SSP的损失定义为: L ′ ( θ ) = L ( θ ) + λ ∑ i b i ( θ i − θ i b ) 2 L'(\theta) = L(\theta) + \lambda \sum_ib_i(\theta_i-\theta_i^b)^2 L′(θ)=L(θ)+λi∑bi(θi−θib)2其中 θ i \theta_i θi是当前模型的参数, θ i b \theta_i^b θib是之前任务的模型的参数, b i b_i bi是形容参数 θ i b \theta_i^b θib的重要程度的系数。
L ′ ( θ ) L'(\theta) L′(θ)的含义为:在当前任务的损失 L ( θ ) L(\theta) L(θ)上,添加一个类似惯性的损失 ∑ i b i ( θ i − θ i b ) 2 \sum_ib_i(\theta_i-\theta_i^b)^2 ∑ibi(θi−θib)2,用来迫使重要的 θ i \theta_i θi( b i b_i bi较大)靠近 θ i b \theta_i^b θib。
(2) b i b_i bi的选择
显然 b i b_i bi的设定对于SSP的结果是至关重要的,那么如何选择 b i b_i bi呢?
首先, b i b_i bi是不可通过上述损失函数直接进行梯度下降求解的,因为机器学习的结果会使得 b i = 0 b_i=0 bi=0,此时损失函数的值最小,但这并不是我们需要的结果。
通常来说, b i b_i bi的值是人为给定的,选取的方式也是很多论文中重点讨论的内容。一个简单的方法如下:试图改变 θ i b \theta_i^b θib的值,观察对于结果的影响,如果变化明显,则说明 θ i b \theta_i^b θib是重要的,需要给定一个较大的 b i b_i bi值;反之则不重要, b i b_i bi较小。
在之前的例子中,改变 θ 2 \theta^2 θ2,会发现损失函数的变化曲线(绿色)梯度较大,因此 θ 2 \theta^2 θ2对于任务1的影响比较大,需要给定一个较大的 b i b_i bi值;而 θ 1 \theta^1 θ1的曲线(蓝色)梯度较小, b i b_i bi较小。
几种Selective Synaptic Plasticity选取 b i b_i bi方法的论文有:(时间顺序)
Gradient Episodic Memory (GEM)
一种类似的方法是Gradient Episodic Memory,但是它不是通过参数,而是通过梯度下降方向的修改来达到减少遗忘的目的。用 g g g表示当前任务的梯度下降方向, g b g^b gb表示之前任务的梯度下降方向,则希望采取一个新的方向 g ′ g' g′,使得 g ′ ⋅ g ≥ 0 g'\cdot g\ge0 g′⋅g≥0(夹角为锐角)。
但是,需要注意的是,由于计算 g b g^b gb需要之前任务的数据来计算下降方向,因此和终身学习的初衷相悖。但是如果采取的数据量较小(例如所占用的空间小于SSP中存储之前模型所需参数量的空间),仍在可接受的范围。
接下来介绍的几种方法,通过额外的神经网络来解决灾难性遗忘问题。
Progressive Neural Networks每次学习一个新任务的时候,保存先前的模型的参数,增加额外的神经网络到模型中,训练的时候只改变新加入的层,通过这样的方式解决灾难性遗忘问题。
但是,这一方法的问题在于,每次新加入任务都会导致更大的模型,在任务数量较大的时候会和多任务模型一样遇到计算量和存储量的问题。
PackNet和PNN正好相反,首先分配一个较大的网络,在每一个任务中只使用其中部分的参数进行更新,在新的任务中改变其他的参数,这样每一个模型的任务都不会遗忘。但是这样同样会导致较大的参数存储量,只是这些参数在一开始就被分配而已。
CPG是一种结合PackNet和PNN的方法,即神经网络既可以通过分配来分离不同模型的参数,也可以新加入额外的网络。
Memory Reply的一个例子是Generating Data在训练新任务的时候,同时训练一个数据生成器,用来生成当前(和之前)任务的数据,用于未来的任务。通过数据生成器来取代先前的数据。这一方法通常是有效的,但是会占用额外的空间来储存数据生成器。
在之前的例子中,我们都是假设每一个task都是相同的神经网络架构,但是在实际问题中,很可能不同任务的神经网络架构是不相同的,这两篇paper用来解决这种问题:
当我们在衡量一个终身学习的能力时,我们通常会画出一个矩阵。矩阵的第 ( i , j ) (i,j) (i,j)项 R i , j R_{i,j} Ri,j表示的意义就是在训练完第 i i i个task时候,模型在第 j j j个任务的表现如何。
下面我们介绍衡量终身学习的一些参数:
Accuracy(ACC):表示在模型学习完所有的任务以后,对每一个任务的表现的均值。
A C C = 1 T ∑ i = 1 T R T , i ACC = \frac{1}{T}\sum_{i=1}^TR_{T,i} ACC=T1i=1∑TRT,i
Backward Transfer(BWT):使用模型在学习最后一个(第 T T T个)任务以后对之前第 i i i个任务的表现减刚刚学完第 i i i个时候的表现的差值(通常为负数)。反映的是模型的记忆能力:
B W T = 1 T ∑ i = 1 T − 1 R T , i − R i , i BWT = \frac{1}{T}\sum_{i=1}^{T-1}R_{T,i}-R_{i,i} BWT=T1i=1∑T−1RT,i−Ri,i
Forward Transfer(FWT):我们以最后一个任务(第 T T T个)为例,这个参数反应的是机器还没有学习 T T T,只是学习了 T T T之前的任务时候,对任务 T T T的效果。我们用机器学习之前 T − 1 T-1 T−1个任务时候对任务任务 T T T的表现减去初始化参数时候对任务 T T T的表现。反应的是迁移能力。
F W T = 1 T − 1 ∑ i = 2 T R i − 1 , i − R 0 , i FWT = \frac{1}{T-1}\sum_{i=2}^TR_{i-1,i}-R_{0,i} FWT=T−11i=2∑TRi−1,i−R0,i
参考文献