查看原文
其他

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

张琨 PaperWeekly 2019-12-18


作者丨张琨 

学校丨中国科学技术大学博士生

研究方向丨自然语言处理




论文动机


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




点击以下标题查看更多往期内容: 




#投 稿 通 道#

 让你的论文被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。


📝 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向) 

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志


📬 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site 

• 所有文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通




🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧



关于PaperWeekly


PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。


▽ 点击 | 阅读原文 | 下载论文

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存