kobe91187 发表于 2023-1-4 00:56:19

如何用神经模块网络(NMN)模型来完成推理任务

@王小新

编译自 BAIR博客

量子位 出品 | 公众号 QbitAI

最近,加州大学伯克利分校人工智能研究所(BAIR)的博士生Jacob Andreas在博客上发文,介绍了如何用神经模块网络(NMN)模型来完成推理任务。

bair.berkeley.edu/blog/

这个博客是BAIR刚刚建立的,他们打算分享、讨论计算机视觉、深度学习、机器人、NLP等领域的研究成果。

这篇关于神经模块网络研究的梳理,是BAIR技术博客的第二篇文章(第一篇是博客的介绍),量子位翻译出来,和大家分享:

假设我们想要开发出一种家用机器人,能够回答关于周围环境的一些问题。

我们可能会向机器人提出这样的问题:

△ 这是什么?和蓝色圆柱一样大小的物体是什么颜色的?

我们该怎样训练机器人来正确回答这些问题?

在深度学习领域,一种经典方法是通过收集大量问题、图像和对应的答案,构成数据集,来训练一个能直接从问题和图像映射到答案的神经网络。

对于“这是什么”一类的问题,其实我们需要解决的是一个经典的图像识别任务,这类整体方法非常有效:

△ 问:这是什么?答:猫。

但对于图1右侧的问题,这种方法效果不佳。

http://www.qianxianly.com/data/attachment/forum/20230104/1672764979849_0.png

△ 问:和蓝色圆柱一样大小的物体是什么颜色的?答:蓝色。

这回,我们训练的神经网络似乎没理解这个问题,直接用这张图中出现最多的颜色猜了个答案。

这个问题难在哪?

即使是一张更简洁的图片,回答这样的问题仍需要多步推理。模型不能简单地识别图像中的主要物体,而是先要找到蓝色圆柱体,然后找到具有相同大小的另一个物体,再确定其颜色。

这是一个复杂的分析过程,需要对具体问题进行具体计算,不同的问题还可能有不同的解决步骤。

深度学习中大多使用了“一刀切”的方法:对于要解决的任何问题,通过设计一个固定的模型结构,希望能够从已标记的训练数据中学习到相关模型参数,捕获关于输入和输出间的一切关系。

但在现实世界中,并不能以这种方法来实现推理。我们遇到的每个新问题都涉及多种可能性,以不同的方式结合在一起。

解决这类问题所需要的模型,要能根据面对的问题来决定推理方式,建立一个能灵活地自行选择内部结构的神经网络。

在这篇文章中,我们要讨论一种名叫神经模块网络(neural module networks,NMNs)的模型。这种方法保留了深度学习有效的表现力,也为解决问题提供了更灵活的方法。

回到上文说的那个问题:

和蓝色圆柱一样大小的物体是什么颜色的?

要回答这个问题,分三步:1. 找到一个蓝色圆柱,2. 找到和它尺寸相同的另一个物体,3. 确定其颜色。

流程如下图所示:

换个问题,步骤也会不一样。当问题为“有多少与球尺寸相同的物体?”,流程图会变成这样:

http://www.qianxianly.com/data/attachment/forum/20230104/1672764979849_1.png

像“比较尺寸”这种基本运算,在很多问题上都能共用,不过是用在不一样的地方。

NMN的核心思想是让这种“共用”更加明确:回答上面两个问题,我们用了不同结构的网络,但是在设计相同的基本运算时,两个网络相关部分共用了同样的权重。

△ “比较尺寸”部分是共用的

该如何学习得到这样的模型?

我们不是训练一个神经网络,让它能完成多对输入输出,而是同时训练大量不同的网络,然后在合适的地方将它们的参数匹配起来。

△ 网络部分节点共享示意图

一些新的深度学习框架,例如DyNet和TensorFlow Fold等,在设计的时候就考虑到了这种动态计算。

训练完成后,我们得到的也不是一个单独的深度网络,而是一组神经模块,每个模块包含推理之中的一个环节。当我们想用训练好的模型来处理一类新问题时,可以动态组合这些模块,以生成针对该问题的新网络结构。

这种方法有一个显著的优点,就是单个模块不需要低级别的监督学习:

我们不会用“蓝色对象”或者“在左边”这种关系来逐个训练神经模块,而是让它们在组合结构中,通过问题-答案这种成对数据来进行有监督学习。但是,这个神经网络能够在训练中自动推断出各个模块负责的运算,以及模块间的关系。如下图所示:

△ 神经网络在处理“蓝色圆柱和红色金属物体右侧的大积木材料一样吗?”这个问题时,自动推断出各个模块负责的运算。

在根据更真实的图片、甚至数据库等信息来源回答问题时,这个模型也同样可行:

这整个过程的关键在与一组像上面那样的高级别“推理蓝图”,根据这些蓝图,我们可以确定每个问题的分析网络应如何布局,以及如何将不同的问题联系起来。

http://www.qianxianly.com/data/attachment/forum/20230104/1672764979849_2.png

我们应该怎么构建这些蓝图?

在对这类模型的早期研究中(相关文献1、2),我们发现,设计特定问题的神经网络与分析语法结构这两者之间,具有极大的相似性。长期以来,语言学家认为,问题的语法与回答时需要的计算过程顺序密切相关。根据自然语言处理方面的最新进展,我们可以使用现成的语法分析工具来自动提取出这些蓝图的近似版本。

但是,构建从语言结构到网络结构的准确映射,仍是一个具有挑战性的问题,转换过程中容易出错。

在后来的工作中,我们不再依靠这种语言分析方法,改用由人类专家直接标注了理想化推理蓝图的一系列问题(相关文献3)。模型通过学习模仿这些专家,大大提高了预测质量。最令人惊讶的是,当允许这些模仿训练好的模型来修改专家的预测数据时,这些模型能找到比专家更好的解决方案。

尽管近年来深度学习方法取得了显著成果,但是许多问题,如小样本学习和复杂推理等方面,仍然存在一定的挑战。不过,语义解析和程序归纳等结构化的传统方法正适合解决这类问题。

利用好神经模块网络的离散组合灵活性和数据效率,再结合深层网络的理解能力,这种方法为解决上述问题提供了一个很好的思路。NMN在很多视觉和文本推理任务中已经取得很好的效果,我们还会继续研究用NMN来解决其他人工智能问题。

相关文献

1. Neural Module Networks.

Jacob Andreas, Marcus Rohrbach, Trevor Darrell and Dan Klein. CVPR 2016.

Neural Module Networks

2. Learning to Compose Neural Networks for Question Answering.

Jacob Andreas, Marcus Rohrbach, Trevor Darrell and Dan Klein. NAACL 2016.

Learning to Compose Neural Networks for Question Answering

3. Modeling Relationships in Referential Expressions with Compositional Modular Networks. Ronghang Hu, Marcus Rohrbach, Jacob Andreas, Trevor Darrell and Kate Saenko. CVPR 2017.

arxiv.org/abs/1611.09978

【完】

一则通知

量子位正在组建自动驾驶技术群,面向研究自动驾驶相关领域的在校学生或一线工程师。李开复、王咏刚、王乃岩、王弢等大牛都在群里。欢迎大家加量子位微信(qbitbot),备注“自动驾驶”申请加入哈~
页: [1]
查看完整版本: 如何用神经模块网络(NMN)模型来完成推理任务