多任务学习的未来之路
我们所熟知的各类机器学习和深度学习任务, 大部分围绕单个任务的学习, 比如人脸图像识别, 语音识别, 或者图像生成。 每到一个新的任务, 我们就换一个网络。 但是自然界中, 我们的大脑不停的处理多个任务而非一个任务, 而这千差万别的任务全靠一套神经系统。与深度学习系统另外一个深刻的不同是, 我们的大脑可以急速的学习一个新的任务, 而不需要去从海量数据中重新学习。
大脑神奇的多任务学习能力的硬件基础是什么? 这一点又和它惊人的泛化学习能力有什么联系? 我们可否制造一个类似大脑的系统? 这些问题可以说是人工智能和计算神经科学的最前沿问题,也是未来走向通用人工智能的最重要问题。 目前来看, 有一些工作可以给我们一些启发。
一个非常有意思的问题来自2012的一篇Science(Eliasmith, Chris, et al. “A large-scale model of the functioning brain.“science338.6111 (2012): 1202-1205.) , 这个工作试图构建一个全脑网络, 来完成多任务学习。 这台机器被称为semantic pointer unified network , 先不管这一堆很难理解的词汇, 我们就把它看成一个比较原始的人造大脑。 应该说用计算机模拟全脑的工作这绝对不是第一个, 在此前有欧洲的蓝脑计划等。 而这个框架与之前的区别在于, 它是学习导向的, 我们不去试图模仿生物大脑的细节, 而是把几个和任务学习有关的认知功能模块组合起来, 包含感官信息输入, 信息编码,信息整合, 奖励系统,记忆,信息解码, 运动信息输出这一系列模块。 我们简单的看, 它就是一个从感官到动作以得到奖励的机器。
最终我们通过监督学习或强化学习来让这个系统掌握8种截然不同的任务, 包括: 1, 抄写数字 2, 图像识别 3, 奖励学习, 4, 多个数字的工作记忆 5, 数数 6, 回答问题 7 简单的数学推理。
图A为模拟的大脑区域, 图B为spuan网络的组成部分, 包含信息编码(把具体的图像转化成抽象的神经表示),计算转化(对不同输入之间的关系进行抽取), 奖励衡量(衡量不同输入对应的奖励), 信息解码(从记忆里抽取神经表示为动作单元使用),以及动作控制Eliasmith, Chris, et al
这台机器的每个部分都是一个人工神经网络, 且可以与真实的脑区对应上, 比如视觉输入对应V1-V4 视皮层,它把真实的视觉信息压缩成一种低维度的编码(每个图像称为这一空间的一个点, 被称为pointer)。 这种低维的信息表示形式很容易放入到工作记忆模块里(working memory), 最终由解码网络转换(decoding), 被动作输出网络执行(motor)。 神经网络整体状态的调控由模拟basal ganglia的网络完成(Action Selection),它可以根据当下的任务整体调节信息的流动(如同一个综控系统, 调节每个网络之前的输入阀门), 从而让大脑在不同的工作状态间灵活转换。 这也体现了功能大脑的概念, 我们不必拘泥于某个脑区的名称, 而是记住每个脑区对应信息处理的功能。
我们可以把spaun理解为一个真实大脑的最小功能模型, 这个模型与目前的深度学习网络最大的区别就在于, 它是用来学习多个任务, 而非单一任务的, 你可以理解为它是一个“万金油”型的网络, 而非专精于某个领域的书呆子。
spaun 完成数字抄写任务 Eliasmith, Chris, et al.
上图描述了spaun这个网络执行图像抄写任务的例子。 你给它看一个手写数字, 然后让你根据输入的数字(风格)再写一个, 类似于临摹。 这个任务的完成事实上需要涵盖人类认知的基本模块。首先, 你需要看到一个数字2, 把它压缩成神经编码, 放到大脑的工作记忆里面, 然后过一会, 根据一个召唤信号, 工作记忆里的神经编码要被提取出来, 解压缩, 然后动作执行模块开始响应, 做出一个类似的数字2来。 这个过程, 包含了基本的感知, 认知, 记忆, 和动作执行 , 而每个部分,都由相应的模块来完成。
应该说这个网络本身在图像识别或者生成上一定比不过当下主流的深度学习模型, 但是它的有点在于具备了一种生物多任务学习的灵活性, 而可以不拘泥于特别特定的任务结构。这种模块化的结构与多任务学习的内在联系是什么?我们可以把复杂的任务拆解成基本的认知模块, 就像刚刚说的感知压缩, 认知, 工作记忆, 动作决策, 如此,一个全新的任务, 就可以在之前的分解模块训练完好的情况下, 很快的学习得到。
当然, 这个系统还是有一些比较大的缺点, 在我看来, 比较主要的一点在于, 它太像搭建一台计算机的过程了, 需要把每个主要的功能模块一一设计出来。 我们直到大脑是一个复杂系统,它是演化的而非设计的, 可是你指望一个演化的系统来完成这个复杂的任务模块设定可能在我们能够忍耐的时间里是有点难度的。
好在,一些新的工作指出这也不是完全不可能, 就在今年的Nature neuroscience上Wang XiaoJing的组做了一个用单个RNN网络进行多任务学习的尝试(Yang, Guangyu Robert, et al. “Task representations in neural networks trained to perform many cognitive tasks.“Nature neuroscience(2019))。
一个单独RNN, 被用来学习包括20个常见的认知任务(非常基础的动物学实验任务), 惊人的现象是, 这个本来没有任何模块化的RNN, 产生了类似于刚刚说的模块化现象, 某种程度让人想到spaun里面的分解模块。这本质上正契合了演化论, 由于我们的任务之间有着共性和差异性, 在完成这样的多任务学习时候, 本来一个单个的RNN自然需要进化出多个不同的功能模块, 那些基本的功能模块正是很多任务的共同基础, 比如工作记忆这样的功能。
“任务”的神经表示, 如果两种任务可以分解为相关的子任务, 那么它们的表示也是有类似的组合特性(出现相互重合部分), 如果两个任务非常独立, 则可能它们的表示是完全分开的。
当然, 这里训练的20个任务都是一些非常基本的认知任务, 而不是机器学习的同学所熟知的那类, 比如让一个猴子看到一个方向移动的点, 然后让它根据这个视觉信号在一段时间后做出一个判断。
由于我们一次训练网络完成多个任务, 根据这些任务之间的关系, 网络会分化出来完全不同的结构。 比如当这些任务之间存在较强的联系的时候, 我们就会得到所谓的不同任务的神经表示, 它们依然类似于高维空间种的点, 只是点和点的距离表示了任务之间的差异, 你可以联想一下Word2vec的编码, 不同单词的语义关联被抽象成了空间里不同点的距离关联, 如此得到的结果, 我们就可以取得不同任务之间的学习迁移能力, 类似于踢足球的技能可以由于和打篮球的相似性而别转化为打篮球的技能。 你也可以把这个学习到的不同任务之间的联系看成一种先验, 由了正确的先验, 就可以大大的简化后面的任务的学习。
“任务”和“任务”之间的代数运算, 当任意两对任务之间的差距是一样的, 比如都是需要加入工作记忆,那么这两对任务之间的向量就是一样的。
这篇文章的惊人之处在于它通过学习沟通了几个神经科学的核心问题。 一个普通的循环神经网络RNN, 在多任务学习的基础上, 涌现出模块化的结构, 和模块之间的关联又恰恰体现任务之间的联系, 那些共同使用的模块,代表了任务之间所共享的部分, 比如工作记忆。 联系之前那篇spaun文章所说的多脑区模型, 我们恍然大悟为什么大脑会演化出这样的多区结构, 它体现了我们所执行的多姿多彩的认知任务, 是互相紧密联系的, 而共同依赖于一些基础模块, 无论是工作记忆, 还是对感知信息的编码和解码。 如果我们能够构建类似的多模块结构, 或者把它通过大量的基础认知任务给学习出来, 就可以做到, 在新任务的学习里, 迅速通过之前任务学到的结构加速学习。 这无疑指出一个救治机器学习的泛化能力缺失问题的可行之道。
更多阅读
王一书(Sciker)2019-01-26 00:45:39
突然想到,世事无常,也会把芸芸众生训练成不同模式思考和不同办事风格的人间百态。个体与社会的全息关联,貌似这种多任务学习的演化,随着时间形成聚类,类似不同的村落,而后贸易往来,促进经济繁荣,催生城市,而更近一级,便是智慧城市等等,也类似纳米领域的层展效应。 启发于文中单个RNN网络的模块化