张琨 作者中国科学技术大学博士生学校自然语言处理研究方向

微软论文解读:用于视觉对话的多步双重注意力模型

论文动机

当前 Visual dialog 模型尽管已经取得了令人印象深刻的表现,但当问题涉及到图像的特定区域或者比较细节的对话片段时,模型就很难给出准确的答案。究其原因,单步的分析需要同时关于太多的信息,当需要特定的位置或者说需要对问题和图像,对话历史进行反复理解时,单步理解就收到了很大的限制。

因此多步推理,从粗粒度到细粒度就显得十分必要的,这样模型才能关注到具体的细节,从而给出准确的答案,例如下图:

单步分析时,需要知道 He 指代的是历史对话中的 young boy,还需要在图像信息中关注到young boy,然后才能具体知道他是否穿了短裤,但如果使用多步的话,第一步会从历史对话和图像中选出来和问题有关的部分,舍弃到并没有太大关联的地方,第二步就可以在这些相关的地方进行精细化的分析,从而准确得到答案。基于这样的一个想法,本文提出了一种多步的双重注意力模型,用于 visual dialog。

模型

还是先上整个模型框架图:

模型框架图加个外框感觉就好看很多,可以学习学习。从框架中可以看出模型主要包含三个模块:1)memory generation:生成一套文本和图像的 memory,用于下一步的 reasoning;2)Multi-step Reasoning:使用循环双重注意力去联合编码问题,图像和对话历史,用于接下来的解码;3)Answer Decoding:使用上一步得到的联合编码向量去推断答案。

Memory Generation Module

首先是对数据的处理,对图像,使用Faster-RCNN抽取图像特征:

I 表示的图像信息,这样就得到了图像中的 object 的向量表示,在这里 n_f = 36, M=2048,也就是抽取了 36 个图像特征,同时使用一个非线性变换得到将这些特征映射到和问题相同的特征空间去

对于文本的话,本文是直接将图像描述和历史对话完全拼接起来,这样就得到了一个长句子表示第 i 个词,L 表示最大的句子长度,然后使用预训练的 embedding 进行编码,双向 LSTM 进行处理,最终就得到了文本的特征表示,具体实现如下:

Multi-step Reasoning Module

该模块的整体框架是一个 RNN,每一步的隐状态表示的问题的当前表示,并会作为 query 去检索文本和图像信息,具体流程可以表示为,这个可以看作 one-step reasoning,通过这样的一个循环方式,从而实现对细节的把握,从而最终给出正确的答案。 

首先还是会利用一个双向 LSTM 对问题进行编码,得到问题的隐状态表示,接下来是首先利用 self-attention 对问题进行处理,从而得到问题的语义表示,而这些权重表明了问题中哪些词是非常重要的,并且过滤了那些不重要的词。

同时该状态会作为 multi-step reasoning rnn 的隐层初始状态(因为 RNN 的隐层状态都是对问题的语义表示),接下来就是不断使用注意力机制关注图像和历史对话中的重要信息,并用这些重要信息更新对问题的表示,从而一步步推进,最终得到正确的答案。

1.


该步骤利用问题的隐状态表示和上一步的历史信息表示,得到图像上那些地方需要被关注,从而更新图像的需要关注表示,这里的公式应该是写错了,第一个公式的应该是的。

2.

相同的操作,利用一直的信息更新历史对话中需要被关注的地方,得到历史对话的新的表示。

3.

到这一步,已经得到了更新之后的图像特征表示和历史对话特征表示,一般情况下可以简单使用相同的注意力计算方法直接得到问题的更新表示,但这一步的意图和之前的是不同的。

在之前的两步,是为了获取更多的有用的信息,因此使用注意力机制不断更新需要关注的地方,而这一步应该是将这些选择出来的信息进行融合,为回答问题提供辅助,也即这一步需要的是通过融合,得到送给 RNN 的输入,通过 RNN 的隐层状态更新,从而得到问题的新的表示。因此这里使用了 MFB 的方式来进行更新。

Zt 表示的是 t 时刻 RNN 的输入,得到输入之后,利用 RNN 进行更新,这里使用的是 GRU,即:

经过 T 轮之后,就得到了一系列的,本文对这些内容再次进行融合,从而得到最后的语义表示向量。

Answer Decoding Module

本文首先还是利用双向 LSTM 和 self-attention 对问题进行编码,得到每个问题的表示,然后在问题和语义表示向量之间做点乘,得到一个相似度矩阵 S,。 

在此基础上,需要使用不同的策略获取最后的答案,在这里作者使用了三种不同的策略:1)直接使用最后一个表示进行预测,; 2)使用所有步的平均表示;3)使用随机 dropout:在训练的时候以一定概率随机丢弃某些步的结果,用剩下的结果的平均进行组后预测,在测试的时候使用所有步的平均进行预测(这个不能算是单独的一个步骤吧,感觉就是训练时加了 dropout)。 

在训练时,本文考虑了两种损失函数交叉熵和 n-pair 损失,交叉熵好理解,将 o 送个一个分类层,n-pair 损失的计算方式如下:假设第 g 个是正确答案,则损失定义为:

以上就是整个模型的技术细节。

实验结果

本文使用的数据集是 visual dialog V1.0 (https://visualdialog.org/),评价指标是NDGC (Normalized Discounted Cumulative Gain),相关实验结果如下:

可以看出模型的实验结果是明显好于 baseline 的,而且随着 reasoning 的步数增加,模型的效果是在不断变好的,但这部分感觉可以测试更多的步骤,看看是否效果有明显的提升。

接下来是一些 case study:

可以看出来模型是逐步从粗粒度到细粒度,慢慢关注到具体的细节,从而最终给出正确的答案,这部分感觉还是十分有意思的,而且在问题的生成模型中,可以看出模型不仅可以给出正确的答案,同时给出具体的细节内容,使回答更丰富,更具有说服力,如下图:

总结

本文针对当前模型无法回答细节问题,设计了一个 multi-step reasoning 的方法,从粗粒度到细粒度不断去更新需要关注的信息,从而使得模型能够根据已掌握的信息不断更新需要关注的内容,从而最终取得了正确的答案。这个思路感觉和人的一些习惯非常类似,我们并不是一步就得出了答案,而是根据已有知识不断更新自己的关注点以及对问题的理解,从而最终得到正确的答案,罗马不是一天建成的,这个思路非常值得关注。

推荐、解读、讨论和报道人工智能前沿论文成果的学术平台。

理论注意力模型视觉推理自然语言推理
1
相关数据
权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

交叉熵技术

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

推荐文章
暂无评论
暂无评论~