(原标题:伯克利 AI 实验室博客发布首篇文章:让神经网络自行选择模块,实现动态推理 )
深度神经网络虽然在图像,语音,机器人等方面取得了巨大的成功,但是这些成功通常局限在识别任务或者生成任务中,对于推理任务,常规的神经网络通常是无能为力的。伯克利AI实验室近期开通了博客,该博客的第一篇文章针对推理任务,提出了神经模块网络,通过训练多个神经网络模块完成推理任务,每个神经网络模块负责一个推理步骤,对于不同的推理任务,动态的组合这些模块,以生成针对不同问题的新网络结构。
该文章的作者为 Jacob Andreas , 雷锋网了解到,他是伯克利 NLP 四年级博士生,也是 BAIR 实验室成员。他的个人主页上的介绍写着,“我希望能教计算机阅读”,研究方向包括机器学习模型与结构化神经网络方法。同时,他也是一个论文高产者,仅在今年就有多篇论文入选 ICML、ACL、CVPR 等主流国际顶级学术会议。雷锋网对他发表的第一篇论文做了翻译,全文如下:
问题的引入
假设我们正在构建一个家用机器人,并且希望它能够回答有关周围环境的问题。我们可能会问他这些问题:
如何确保机器人可以正确地回答这些问题?深度学习的标准方法是收集大量的问题,图像和答案作为数据集,训练一个单一的神经网络,直接从问题和图像映射到答案。如果大多数问题看起来像左边的问题,目前我们已经有相似的图像识别问题的解决方案,这些单一的方法是非常有效的:
但是对于右面的问题,这种单一的神经网络就很难工作了:
在这里训练好的单一网络已经放弃了,猜测给出了该图像中最普遍的颜色。是什么使得这个问题相比于上一个问题更难?即使图像更清晰简洁,该问题仍需要许多推理步骤:模型必须要首先找到蓝色的圆柱体,找到具有相同大小的另一对象,然后确定其颜色,而不是简单的识别图像中的主要对象。这是一个复杂的计算,同时计算的复杂性与所提出的问题密切相关。不同的问题需要不同的步骤来解决。
深度学习中的主流范式是“一刀切”的方法:对于任何需要解决的问题,设计一个固定的模型架构,希望能够捕获关于输入和输出之间的一切关系,并通过标定好的训练数据学习该模型的各种参数。
但现实世界的推理并不能以这种方式发挥作用:它涉及到各种不同的能力,不同的能力以新的方式结合以解决我们在现实世界中遇到的每一个新挑战。我们需要的是一个模型,它可以动态地确定如何对摆在它面前的问题进行推理——一个可以选择自己的结构的网络。伯克利AI实验室的研究者针对这一问题,提出了一类称为神经模块网络(Neural Module Network, NMN)的模型,它将这种更加灵活的解决方案融入到问题解决过程中,同时也保留了深度学习有效的特性。
如何解决
上面提到的推理问题涉及到三个不同的步骤:找到一个蓝色圆柱找到其他与之相同尺寸的物体,确定其颜色。根据推理过程可以绘制下图:
一个不同的问题可能涉及到不同的步骤,如果问题是“有多少东西与球有相同的大小?”可以会得到下面的推理步骤:
一些基础的操作,例如“比较大小”,在不同的问题中是共享的,但是它们可能会通过不同的方式使用。MNM的关键思路是明确这种共享:使用两个不同的网络结构来回答上面的两个问题,但是在涉及到相同基本操作的网络之间实现共享权重。
对于这样的新型网络结构,如何进行学习?实际上研究者同时训练了大量的不同的网络,在适当的时候将参数绑在一起,而不是通过许多输入/输出对训练单一的大型网络。
上图为几种常见的深度学习网络结构,包括DyNet 和TensorFlow Fold,通过动态地将它们结合在一起,即可以完成不同的推理任务。
在训练过程结束时所获得的并不是一个单一的深度网络,而是一个神经“模块”的集合,每个模块都实现了一个推理的步骤。当希望在一个新的问题实例上使用训练好的模型时,研究人员可以动态的组合这些模块,以生成针对该问题的新网络结构。
关于这个过程一个值得注意的事情是,训练过程中不需要为单个模块提供任何低级别的监督:模型从来没有看到蓝色对象或者“左侧”关系的孤立示例,模块只能在较大的组合结构中学习,只有(问题,答案)对作为监督,但训练程序能够自动推断结构部件与其负责的计算之间的正确关系:
同样的过程也能回答关于现实图片的问题,甚至能够回答其他知识源的问题,例如数据库: