论文阅读:《Deep Compositional Question Answering with Neural Module Networks》

标题:神经模块网络
来源:CVPR 2016 https://openaccess.thecvf.com/content_cvpr_2016/html/Andreas_Neural_Module_Networks_CVPR_2016_paper.html
代码:https://github.com/jacobandreas/nmn2

一、问题提出

增强了网络的可解释性

VQA模型的分类:

(1)巨型网络 (monolithic network):传统的神经网络,以CNN、RNN等为基础,设计一个固定的网络架构处理 VQA 任务,比如CNN+LSTM 再连一个全连接分类器;

(2)神经模块网络(Neural modular network ,NMN),该类方法认为问题是一系列基础模块的组合(如find, relate, count等),这些基础模块的功能可以用子网络来拟合,回答不同的问题需要选择不同模块网络来组合成一个大网络,因此网络结构是视问题而定的、动态的。相比于巨型网络,这种动态组合的网络更加直观、可解释,中间过程也更加透明。

本文首次提出了Neural Module Networks神经模块网络(NMN),不是像传统的神经网络模型一样是一个整体,它是由多个模块化网络组合而成。根据VQA数据集中每个questions定制一个网络模型。也就是说NMN模型的网络是根据question的语言结构动态生成的。

二、主要思想

image-20220409104204737

2.1 主要步骤:
Step1:使用语义分析器parser分析每个问题,并结合分析获取模块布局layout(包括回答问题所需要的基本计算模块和之间的关系)。
Setp2:组合生成针对特定任务的模块,回答问题。模块内部需要人工设计,模块之间传递的信息可能是原始图像特征、注意力或分类决策。NMN中的所有模块都是独立的和可组合的,这使得计算对于每个问题实例是不同的,并且在训练期间可能不会被观察到。
该图中首先生成一个关注狗的注意力(attend模块),它将其输出传递给一个位置分类器(classify模块)。
Step3:最终答案使用了一个循环网络(LSTM)来读取问题输入,并结合NMN的输出综合得到分类结果。

2.2 问题定义:

三元组(w, x, y)
w:自然语言问题
x:图片
y:答案

模型由模块m的集合完全确定,每个模块都具有相关参数\(\theta_m\)和一个从字符串映射到网络的网络布局layout的预测器P。给定\(\left(w,x\right)\),模型基于P(w)实例化一个网络,传递x (也可能是w)作为输入,并在标签上获得一个分布(对于VQA任务,要求输出模块是一个分类器)。因此,模型最终编码一个预测分布\(p(y|w,x;\theta)\)

2.3 具体实现:

Part1:模块定义
模块操作三种基本数据类型:图像、未归一化的注意力和标签。
形式:

TYPE [INSTANCE] (ARG1,...)

TYPE:高级模块类型(比如注意、分类等)。
INSTANCE:考虑的模型的特定实例—例如,attend[red]定位红色的东西,而attend[dog]定位狗。权重可以在类型级别和实例级别上共享。

模块类型包括:

image-20220409104541957

注意模块attend[c]:将输入图像中的每个位置与权重向量(每个c不同)卷积,以产生一个热力图或未归一化的注意。

image-20220409104558759

再注意力模块re-attend[c]:带校正非线性(ReLUs)的多层感知器,执行一个从一个注意到另一个注意的全连接映射。例如,re-attend[above]应该将注意力转移到最活跃的区域,而re-attend[no]应该将注意力从活跃区域移开。

image-20220409104611903

组合模块combine[c]:将两个注意力合并成一个注意力。例如,combine[and]应该只在两个输入都激活的区域激活,而combine[except]应该在第一个输入激活而第二个输入不激活的区域激活。

image-20220409104639220

测量模块measure[c]:单独关注并通过标签将其映射到一个分布。由于模块之间传递的注意是未归一化的,所以measure适用于评估被检测对象是否存在,或者计算对象的集合。

image-20220409104624924

分类模块classify[c]:需要注意输入图像,并将它们映射到标签上的分布。

Part2:从字符串到模块架构
Parsing:
用Stanford Parser解析每个问题,抽取句子中对象之间的语法关系,并生成抽象的句子表示;此外还执行基本的语义化,例如把kites变成kite、were变成be,减少了模块实例的稀疏性。
例如:what color is the trunk 转化为 color(truck)
Layout:
基于特定的任务,将符号表示转化为模块网络结构。
映射:
叶子节点 对应 attend模块(使用注意力)
内部节点 对应 (根据它们的度)re-attend模块或combine模块
根节点 对应 回答是/否问题的measure模块或者classify模块
具体每个模块的实例化不相同:
例如:attend[cat]和attend[trunck]参数不一样

神经模块网络结构统计:

image-20220409104823800

NMN模块可视化实例:

image-20220409104840385

image-20220409104847013

NMN模块泛化

除了提供句子,通过parser和layout得到模块网络,还可以直接提供类似于sql的查询语句,精确地指定需求:

image-20220409104933425

Part3:
预测:包括LSTM网络和NMN模块网络两部分
LSTM网络允许我们在数据中建模潜在的语法规则。其次,它允许我们捕捉语义规律。
例如:what is flying和what are flying两个问题,is和are都会被转化为be,所以最终转化为:what(fly);但它们的答案应该分别是kite和kites。

LSTM模块和NMN模块都输出预测答案集上的分布。模型的最终预测结果是这两种概率分布的几何平均值。

最后,LSTM模块和NMN模块是联合进行训练的。

三、实验

数据集:VQA数据集 SHAPE数据集

结果:

image-20220409105036413

image-20220409105045797

可视化:

正确案例:

image-20220409105100083

错误案例:

image-20220409105102969

四、总结

主要贡献:

1、提出了神经模块网络NMN,为学习神经模块集合提供了一个通用的框架,这些神经模块集合可以动态地组合成任意深度网络。

2、NMN在回答对象或者属性问题上表现出色。

3、提出了SHAPE数据集。

posted @ 2022-04-09 10:57  jiojio-star  阅读(365)  评论(0)    收藏  举报