终身学习也称为持续学习(continous learning)、无止尽学习(never-ending learn ing)、增量学习(incremental learning)。
终身学习本质上基于人类对于人工智能的想象,期待人工智能可以像人类一样能够持续 不断地学习。如图1所示,我们先训练机器做任务一语音识别,再教它做任务二图像识别,接着再 教它做第三个任务翻译,这样一来它就一起学会了这三个任务。我们不断去教会机器学习新 的技能,等它学会成百上千个技能之后,它就会变得越来越厉害,以至于人类无法企及,这就 是我们所说的终身学习(LifeLong Learning,LLL)。
图1 自监督学习框架
读者可能会疑惑,这个终身学习的目标过于远大,并且难以实现,其意义又在哪里呢?其 实在真实的应用场景中,终身学习也是派得上用场的。举例来说,如图2所示,假设我们 首先通过收集一些数据然后训练得到模型,模型上线之后它会收到来自使用者的反馈并且得 到新的训练数据。这个时候我们希望能够形成一个循环,即模型上线之后我们得到新的数据, 然后讲新的数据用于更新我们的模型,模型更新之后又可以收到新的反馈和数据,对应地再 次更新我们的模型,如此循环往复下去,最终我们的模型会越来越厉害。我们可以把过去的任 务看成是旧的数据,把新的数据即来自于反馈的数据,这种情景也可以看作是终身学习的问 题。
图2 自监督学习框架
终身学习有什么样的难点呢?看上去不断更新它的数据和对应网络的参数就能实现终身学习,但实际上没有那么容易。我们来看一个例子,如图3所示,假设我们现在有两个任 务,第一个任务是手写数字识别,给一张包含噪声的图片,机器要识别出该图片中的数字“0”, 第二个任务也是手写数字识别,只是给的图片噪声比较少,相对来说更容易。当然有读者可能 会认为这不算两个任务,最多算同一个任务的不同域,这样说也没错。可能读者想象中的终身 学习应该是先学语音识别然后图像识别之类的,但其实现在的终身学习都还没有做到那种程 度。目前关于终身学习的论文中所说的不同任务大概指的就是本示例中同一个任务的不同域 这种级别,只是我们把它们当作不同的任务来对待。但即使是非常类似的任务,在做终身学习 的过程中也会遇到一些问题,具体哪些问题我们接下来一一说明。
图3 自监督学习框架
我们先训一个比较简单的网络来做第一个手写数字识别任务,然后再做任务二,任务一 上的准确率是90%,此时就算没有训过任务二,在任务二上也已经有了96%的准确率,可以 说迁移得非常好,说明能够解决任务一,相应地也能解决任务二。那么接下来我们用同一个的 模型,即在任务一中训练好的模型再去训练任务二,结果我们发现在任务二上的准确率变得 更好了(97%)。但是比较糟糕的事情是此时机器已经忘了怎么去做任务一了,即在任务一上 的准确率从90%降到了80%。有读者可能会想是不是网络设置的太过简单然后导致出现这样 的现象,但实际上我们把任务一和任务二的数据放在一起让这个网络同时去学的时候,会发 现机器是能够同时学好这两个任务的,如图4所示。
图4
接下来举一个自然语言处理方面的例子,即QA的任务,QA指的是给一篇文档,模型 训练之后能够基于这个文档回答一些问题。当然为了简化,我们会将一个更简单的实例,即 “bAbi”,它是一类非常早期和基础的研究任务,总共有二十个子任务。
如图5 所示,其中第五个任务是给了三个句子,即Mary把蛋糕给了Fred,Fred把蛋 糕给了Bill,Bill 给了牛奶给 Jeff,最后问“谁给了蛋糕给 Fred ?”类似于这种简单问题,其他 任务包括第十五个任务也同理。我们的目标是让AI依次去学这二十个任务,要么让一个模型同时学这二十个任务,要么用二十个模型,每个模型分别学一个任务,这里我们主要讲的是前 者。最后我们实验的结果如图6所示。
图5 bAbi 任务示例
图6 任务5的准确率(依次学习20个任务)
可以看到,一开始我们没有学过任务五,所以准确率是零。当开始学第五个任务之后,准 确率达到百分百,然而开始学下一个任务的时候,准确率就开始暴跌,即学习新的任务之后一 下子就完全忘了前面的任务。读者可能以为模型本身就没有学习那么多任务的能力,但其实 不是的。如图7所示,当模型同时学二十个任务的时候,我们会发现机器是有潜力能够学 习多个任务的,当然这里第十九个任务可能有点难,模型的准确率非常低。
图7 所有任务的准确率(同时学习20个任务)
当模型依次学习多个任务的时候,它好像一个上下两端都接有水龙头的池子,新的任务 从上面水龙头进来,旧的东西就从下面水龙头那里冲掉了,永远学不会多个技能,这种情况 称为灾难性遗忘(catastrophic forgetting)。我们知道即使是人类也可能会有遗忘的时候, 而这里在遗忘前面我们加上了灾难性这个形容词,意在强调模型的这个遗忘不是一般的遗忘, 而是特别严重程度的遗忘。
讲到这里我们接下来就需要知道怎么去解决这个灾难性遗忘的问题了。在我们讨论具体的技术之前,也许读者会有这样一个问题。刚才我们的例子有提到模型是能够同时学多个人 任务的,这种学习方式称为多任务学习(multitask learning),既然有这个多任务学习的例 子,那为什么还要去做终身学习的事情呢?但其实这种多任务学习会有这样一个问题,加上我 们需要学习的任务不再是简简单单的二十个,而是一千个,那么我们在学第一千个任务的时 候,按照这个逻辑还得把前面九百九十九个任务的数据放在一起训练,这样需要的时间是比 较久的。
就好比假设一个人要学一门新的课程,那他就必须要把这辈子上过的所有课程都学过一 遍才有办法学习新的任务,这样其实是比较低效的。而且随着要学习的任务越来越多,所需要 的训练时间也会越来越长。但如果我们能够解决终身学习的技术,那么其实就能够高效地学 习多种新任务了。当然这种多任务学习也并非没有意义,我们通常把多任务学习的效果当成 终身学习的上界,即我们在做终身学习的时候往往会先跑一个多任务学习的结果,来帮助我 们参考终身学习的上限在哪里。
这里可能读者又会有一个问题,即为什么我们不能每个任务都分别用一个模型呢?其实 这样做会有一些问题,首先这样做可能会产生很多个模型,这样对机器存储也是一个挑战。另 外不同任务之间可能是有共通的,从任务A学到的数据也可能在学习任务B的时候有所参 考。类似的还有一个迁移学习的概念,虽然终身学习和迁移学习都是让模型同时学习多个任 务,但它们的关注点是不一样的。在迁移学习中,我们在意的是模型在前一个任务学习到的东 西能不能对第二个任务有所帮助,只在乎新的任务做得如何。而终身学习更注重的是在解决 完第二个任务之后能不能再回头解决第一个任务。